McConstructionServiceImpl.java 13.7 KB
package com.chinagas.modules.schsf.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson2.JSON;
import com.chinagas.common.core.exceptions.ServiceException;
import com.chinagas.common.core.utils.DateUtils;
import com.chinagas.common.core.utils.StringUtils;
import com.chinagas.common.datascope.annotation.DataScope;
import com.chinagas.common.security.utils.SecurityUtils;
import com.chinagas.modules.schsf.domain.McBasicCmty;
import com.chinagas.modules.schsf.domain.McConstruction;
import com.chinagas.modules.schsf.domain.McVisit;
import com.chinagas.modules.schsf.domain.dto.NodeUsersDto;
import com.chinagas.modules.schsf.domain.notice.McConstructionTemplate;
import com.chinagas.modules.schsf.domain.notice.McIgnitionTemplate;
import com.chinagas.modules.schsf.enums.ConstructionStatusEnums;
import com.chinagas.modules.schsf.enums.IgnitionStatusEnums;
import com.chinagas.modules.schsf.mapper.McConstructionMapper;
import com.chinagas.modules.schsf.service.DingtalkService;
import com.chinagas.modules.schsf.service.IMcConstructionService;
import com.chinagas.modules.schsf.service.IMcOperationLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 施工维护Service业务层处理
 *
 * @author cw
 * @date 2024-05-30
 */
@Transactional
@Service
public class McConstructionServiceImpl implements IMcConstructionService {
    @Autowired
    private McConstructionMapper mcConstructionMapper;
    @Autowired
    private IMcOperationLogService iMcOperationLogService;
    @Autowired
    private DingtalkService dingtalkService;

    /**
     * 查询施工维护
     *
     * @param id 施工维护主键
     * @return 施工维护
     */
    @Override
    public McConstruction selectMcConstructionById(Long id) {
        return mcConstructionMapper.selectMcConstructionById(id);
    }

    /**
     * 查询施工维护列表
     *
     * @param mcConstruction 施工维护
     * @return 施工维护
     */
    @DataScope(deptAlias = "d", userAlias = "u")
    @Override
    public List<McConstruction> selectMcConstructionList(McConstruction mcConstruction) {
        return mcConstructionMapper.selectMcConstructionList(mcConstruction);
    }

    /**
     * 新增施工维护
     *
     * @param mcConstruction 施工维护
     * @return 结果
     */
    @Override
    public int insertMcConstruction(McConstruction mcConstruction) {
        mcConstruction.setCreateTime(DateUtils.getNowLocal());
        return mcConstructionMapper.insertMcConstruction(mcConstruction);
    }

    /**
     * 修改施工维护
     *
     * @param mcConstruction 施工维护
     * @return 结果
     */
    @Override
    public int updateMcConstruction(McConstruction mcConstruction) {
        mcConstruction.setUpdateTime(DateUtils.getNowLocal());
        return mcConstructionMapper.updateMcConstruction(mcConstruction);
    }

    /**
     * 批量删除施工维护
     *
     * @param ids 需要删除的施工维护主键
     * @return 结果
     */
    @Override
    public int deleteMcConstructionByIds(Long[] ids) {
        return mcConstructionMapper.deleteMcConstructionByIds(ids);
    }

    /**
     * 删除施工维护信息
     *
     * @param id 施工维护主键
     * @return 结果
     */
    @Override
    public int deleteMcConstructionById(Long id) {
        return mcConstructionMapper.deleteMcConstructionById(id);
    }

    /**
     * 根据小区信息新增施工维护
     *
     * @param mcBasicCmty
     * @return
     */
    @Override
    public int insertMcConstructionByMcBasicCmty(McBasicCmty mcBasicCmty) {
        LocalDateTime time = DateUtils.getNowLocal();
        String userId = SecurityUtils.getUserId().toString();
        String userAccount = SecurityUtils.getUsername();
        String userName = SecurityUtils.getLoginUser().getSysUser().getNickName();

        McConstruction mcConstruction = new McConstruction();
        mcConstruction.setRegionName(mcBasicCmty.getRegionName());
        mcConstruction.setGroupName(mcBasicCmty.getGroupName());
        mcConstruction.setCompanyCode(mcBasicCmty.getCompanyCode());
        mcConstruction.setCompanyName(mcBasicCmty.getCompanyName());

        mcConstruction.setProvince(mcBasicCmty.getProvince()==null?"":mcBasicCmty.getProvince());
        mcConstruction.setCity(mcBasicCmty.getCity()==null?"":mcBasicCmty.getCity());
        mcConstruction.setDistrict(mcBasicCmty.getDistrict()==null?"":mcBasicCmty.getDistrict());
        mcConstruction.setStreet(mcBasicCmty.getStreet()==null?"":mcBasicCmty.getStreet());

        mcConstruction.setVlgOrCmty(mcBasicCmty.getVlgOrCmty());
        List<McConstruction> mcConstructions = mcConstructionMapper.selectMcConstructionByData(mcConstruction);
        if (mcConstructions != null && !mcConstructions.isEmpty()) {
            return 0;
        }
        mcConstruction.setUrbRurCls(mcBasicCmty.getUrbRurCls());
        mcConstruction.setProjectTypeName(mcBasicCmty.getProjectTypeName());
        mcConstruction.setProjectTypeCode(getProjectTypeCode(mcBasicCmty.getProjectTypeName()));
        mcConstruction.setIsCompleted("W");
        mcConstruction.setGasConnMtrRis("W");

        mcConstruction.setCreateTime(time);
        mcConstruction.setCreateBy(userId);
        mcConstruction.setUpdateTime(time);
        mcConstruction.setUpdateBy(userId);
        mcConstruction.setCmtyId(mcBasicCmty.getId());
        mcConstruction.setStatusCode(ConstructionStatusEnums.MAINTENANCE_SG.getCode());
        mcConstruction.setStatusName(ConstructionStatusEnums.MAINTENANCE_SG.getInfo());
        int i = mcConstructionMapper.insertMcConstruction(mcConstruction);
        //1:添加记录
        iMcOperationLogService.insertMcOperationLog("mc_construction", mcConstruction.getId(), "schsf:mcBasicCmty:importData",
                "发起", "1", "导入基础数据-户数", null, JSON.toJSONString(mcConstruction));
        return i;
    }

    private String getProjectTypeCode(String projectTypeName) {
        if (StringUtils.isEmpty(projectTypeName)) {
            return null;
        }
        if (projectTypeName.contains("已通气项目零散开发")){
            return "0";
        } else if (projectTypeName.contains("扫雷行动项目") && projectTypeName.contains("市政中压已覆盖")){
            return "1";
        } else if (projectTypeName.contains("扫雷行动项目") && projectTypeName.contains("市政中压未覆盖")){
            return "2";
        } else if (projectTypeName.contains("新增空白项目") && projectTypeName.contains("市政中压已覆盖")){
            return "3";
        } else if (projectTypeName.contains("新增空白项目") && projectTypeName.contains("市政中压未覆盖")){
            return "4";
        }
        return "0";
    }

    /**
     * 施工维护-工程
     *
     * @param mcConstruction_param
     * @return
     * @throws CloneNotSupportedException
     */
    @Override
    public int updateMcConstructionByEngineering(McConstruction mcConstruction_param) throws CloneNotSupportedException {
        LocalDateTime time = DateUtils.getNowLocal();
        Long userId = SecurityUtils.getUserId();
        String userAccount = SecurityUtils.getUsername();
        String userName = SecurityUtils.getLoginUser().getSysUser().getNickName();

        McConstruction mcConstruction_old = mcConstructionMapper.selectMcConstructionById(mcConstruction_param.getId());
        McConstruction mcConstruction_new = mcConstruction_old.clone();
        //是否已竣工
        mcConstruction_new.setIsCompleted(mcConstruction_param.getIsCompleted());
        //竣工时间
        mcConstruction_new.setCompletionTime(mcConstruction_param.getCompletionTime());
        //未竣工原因
        mcConstruction_new.setNonNcmpRsn(mcConstruction_param.getNonNcmpRsn());
        //市场派单时间
        mcConstruction_new.setAssignmentTime(mcConstruction_param.getAssignmentTime());

        mcConstruction_new.setProjectPersonId(userId);
        mcConstruction_new.setProjectPersonName(userName);
        mcConstruction_new.setProjectPersonAccount(userAccount);
        mcConstruction_new.setUpdateBy(userId.toString());
        mcConstruction_new.setUpdateTime(time);
        mcConstruction_new.setStatusCode(ConstructionStatusEnums.MAINTENANCE_YY.getCode());
        mcConstruction_new.setStatusName(ConstructionStatusEnums.MAINTENANCE_YY.getInfo());
        int i = mcConstructionMapper.updateMcConstruction(mcConstruction_new);

        iMcOperationLogService.insertMcOperationLog("mc_construction", mcConstruction_param.getId(), "schsf:mcConstruction:engineering",
                "工程维护", "1", null, JSON.toJSONString(mcConstruction_old), JSON.toJSONString(mcConstruction_new));
        if (i>0){
            this.sendNotification(mcConstruction_param.getId());
        }
        return i;
    }

    /**
     * 施工维护-运营
     *
     * @param mcConstruction_param
     * @return
     * @throws CloneNotSupportedException
     */
    @Override
    public int updateMcConstructionByOperations(McConstruction mcConstruction_param) throws CloneNotSupportedException {
        LocalDateTime time = DateUtils.getNowLocal();
        Long userId = SecurityUtils.getUserId();
        String userAccount = SecurityUtils.getUsername();
        String userName = SecurityUtils.getLoginUser().getSysUser().getNickName();

        McConstruction mcConstruction_old = mcConstructionMapper.selectMcConstructionById(mcConstruction_param.getId());
        McConstruction mcConstruction_new = mcConstruction_old.clone();
        //是否通气到表前
        mcConstruction_new.setGasConnMtrRis(mcConstruction_param.getGasConnMtrRis());
        //市场派单时间
        mcConstruction_new.setAssignmentTime(mcConstruction_param.getAssignmentTime());
        //通气到表前
        mcConstruction_new.setGctMtrrisTime(mcConstruction_param.getGctMtrrisTime());
        //未完成原因
        mcConstruction_new.setGctNcmpRsn(mcConstruction_param.getGctNcmpRsn());

        mcConstruction_new.setOperatePersonId(userId);
        mcConstruction_new.setOperatePersonName(userName);
        mcConstruction_new.setOperatePersonAccount(userAccount);
        mcConstruction_new.setUpdateBy(userId.toString());
        mcConstruction_new.setUpdateTime(time);
        mcConstruction_new.setStatusCode(ConstructionStatusEnums.MAINTENANCE_END.getCode());
        mcConstruction_new.setStatusName(ConstructionStatusEnums.MAINTENANCE_END.getInfo());
        int i = mcConstructionMapper.updateMcConstruction(mcConstruction_new);
        iMcOperationLogService.insertMcOperationLog("mc_construction", mcConstruction_param.getId(), "schsf:mcConstruction:operations",
                "运营维护", "1", null, JSON.toJSONString(mcConstruction_old), JSON.toJSONString(mcConstruction_new));
        return i;
    }

    /**
     * 发送施工维护通知
     * @param mcVisit
     */
    @Override
    public void sendMcConstructionNotification(McVisit mcVisit) {
        McConstruction mcConstruction = new McConstruction();
        mcConstruction.setRegionName(mcVisit.getRegionName());
        mcConstruction.setGroupName(mcVisit.getGroupName());
        mcConstruction.setCompanyCode(mcVisit.getCompanyCode());
        mcConstruction.setCompanyName(mcVisit.getCompanyName());
//        mcConstruction.setProvince(mcVisit.getProvince());
//        mcConstruction.setCity(mcVisit.getCity());
//        mcConstruction.setDistrict(mcVisit.getDistrict());
//        mcConstruction.setStreet(mcVisit.getStreet());
        mcConstruction.setVlgOrCmty(mcVisit.getVlgOrCmty());
        mcConstruction.setStatusCode(ConstructionStatusEnums.MAINTENANCE_SG.getCode());
        List<McConstruction> mcConstructions = mcConstructionMapper.selectMcConstructionByData(mcConstruction);
        for (McConstruction construction : mcConstructions) {
            this.sendNotification(construction.getId());
        }
    }

    private void sendNotification(Long id) {
        McConstruction construction = mcConstructionMapper.selectMcConstructionById(id);
        if (BeanUtil.isEmpty(construction)) {
            throw new ServiceException("未查询到记录");
        }
        List<NodeUsersDto> nodeUsersDtos = this.selectMcConstructionNodeUserList(construction.getId());
        if (nodeUsersDtos != null && nodeUsersDtos.size()>0) {
            List<String> userIds = nodeUsersDtos.stream().filter(mcVisitNodeUsersDto -> StringUtils.isNotEmpty(mcVisitNodeUsersDto.getDingTalkUserId())).map(NodeUsersDto::getDingTalkUserId).collect(Collectors.toList());
            dingtalkService.sendMarketFeeNotification(userIds, "市场化收费-施工维护", new McConstructionTemplate(construction).getNoticemarkdown());
        }
    }

    @Override
    public List<NodeUsersDto> selectMcConstructionNodeUserList(Long id) {
        McConstruction mcConstruction = mcConstructionMapper.selectMcConstructionById(id);
        if (BeanUtil.isEmpty(mcConstruction)) {
            throw new ServiceException("未查询到记录");
        }
        if (mcConstruction.getStatusCode().equals(ConstructionStatusEnums.MAINTENANCE_SG.getCode())) {
        //待工程维护 schsf:mcConstruction:engineering
            return mcConstructionMapper.selectMcConstructionNodeUserList(String.valueOf(id), "schsf:mcConstruction:engineering");
        }else if (mcConstruction.getStatusCode().equals(ConstructionStatusEnums.MAINTENANCE_YY.getCode())){
        //待运营维护 schsf:mcConstruction:operations
            return mcConstructionMapper.selectMcConstructionNodeUserList(String.valueOf(id), "schsf:mcConstruction:operations");
        }
        return Collections.emptyList();
    }
}