java110
2022-06-09 22d7512ecb341426ecaa5ac8d48d7aa2b37c1059
service-job/src/main/java/com/java110/job/task/repair/ReturnVisitRepairTemplate.java
old mode 100644 new mode 100755
@@ -1,19 +1,29 @@
package com.java110.job.task.repair;
import com.java110.core.factory.GenerateCodeFactory;
import com.java110.dto.community.CommunityDto;
import com.java110.dto.repair.RepairDto;
import com.java110.dto.repair.RepairSettingDto;
import com.java110.dto.repair.RepairUserDto;
import com.java110.dto.task.TaskDto;
import com.java110.intf.community.IRepairInnerServiceSMO;
import com.java110.intf.community.IRepairTypeUserInnerServiceSMO;
import com.java110.intf.community.IRepairSettingInnerServiceSMO;
import com.java110.intf.community.IRepairUserInnerServiceSMO;
import com.java110.job.quartz.TaskSystemQuartz;
import com.java110.po.owner.RepairPoolPo;
import com.java110.utils.constant.StateConstant;
import com.java110.po.owner.RepairUserPo;
import com.java110.utils.cache.MappingCache;
import com.java110.utils.constant.StatusConstant;
import com.java110.utils.util.Assert;
import com.java110.utils.util.DateUtil;
import com.java110.utils.util.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.java110.core.log.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
@@ -33,7 +43,10 @@
    private IRepairInnerServiceSMO repairInnerServiceSMOImpl;
    @Autowired
    private IRepairTypeUserInnerServiceSMO repairTypeUserInnerServiceSMOImpl;
    private IRepairUserInnerServiceSMO repairUserInnerServiceSMO;
    @Autowired
    private IRepairSettingInnerServiceSMO repairSettingInnerServiceSMO;
    @Override
    protected void process(TaskDto taskDto) {
@@ -56,6 +69,17 @@
     * @param communityDto
     */
    private void returnVisitRepair(TaskDto taskDto, CommunityDto communityDto) {
        RepairDto repair = new RepairDto();
        repair.setCommunityId(communityDto.getCommunityId());
        repair.setState(RepairDto.STATE_APPRAISE);
        repair.setReturnVisitFlag("001,003");
        repair.setPage(1);
        repair.setRow(100);
        //查询都回访待评价状态数据
        List<RepairDto> repairs = repairInnerServiceSMOImpl.queryRepairs(repair);
        for (RepairDto repairDto : repairs) {
            doFinishRepairAppraise(repairDto);
        }
        RepairDto repairDto = new RepairDto();
        repairDto.setCommunityId(communityDto.getCommunityId());
        repairDto.setStatess(new String[]{RepairDto.STATE_RETURN_VISIT, RepairDto.STATE_APPRAISE});
@@ -75,21 +99,232 @@
     * @param tmpRepairDto
     */
    private void doReturnVisitRepair(RepairDto tmpRepairDto) {
        if ("001".equals(tmpRepairDto.getReturnVisitFlag())) {
        if ("001".equals(tmpRepairDto.getReturnVisitFlag()) && RepairDto.STATE_RETURN_VISIT.equals(tmpRepairDto.getState())) {
            RepairPoolPo repairPoolPo = new RepairPoolPo();
            repairPoolPo.setRepairId(tmpRepairDto.getRepairId());
            repairPoolPo.setState(RepairDto.STATE_COMPLATE);
            repairPoolPo.setStatusCd(StatusConstant.STATUS_CD_VALID);
            repairInnerServiceSMOImpl.updateRepair(repairPoolPo);
            RepairDto repairDto = new RepairDto();
            repairDto.setRepairId(tmpRepairDto.getRepairId());
            //查询报修信息
            List<RepairDto> repairDtos = repairInnerServiceSMOImpl.queryRepairs(repairDto);
            Assert.listOnlyOne(repairDtos, "报修信息错误");
            //查询报修工单信息
            RepairSettingDto repairSettingDto = new RepairSettingDto();
            repairSettingDto.setSettingId(repairDtos.get(0).getRepairType());
            List<RepairSettingDto> repairSettingDtos = repairSettingInnerServiceSMO.queryRepairSettings(repairSettingDto);
            Assert.listOnlyOne(repairDtos, "报修工单信息错误");
            //获取报修区域
            String publicArea = repairSettingDtos.get(0).getPublicArea();
            //获取报修渠道
            String repairChannel = repairDtos.get(0).getRepairChannel();
            //获取维修类型
            String maintenanceType = repairDtos.get(0).getMaintenanceType();
            if (publicArea.equals("T") && !repairChannel.equals("Z")) {  //如果是公共区域,且不是业主报修
                RepairUserDto repairUserDto = new RepairUserDto();
                repairUserDto.setRepairId(tmpRepairDto.getRepairId());
                repairUserDto.setState(RepairUserDto.STATE_CLOSE);
                List<RepairUserDto> repairUserDtoList = repairUserInnerServiceSMO.queryRepairUsers(repairUserDto);
                Assert.listOnlyOne(repairUserDtoList, "信息错误");
                saveRepairUser(repairUserDtoList, tmpRepairDto);
            } else if (publicArea.equals("F") && maintenanceType.equals("1002") && !repairChannel.equals("Z")) {  //如果不是公共区域,且是无偿的,并且不是业主报修
                RepairUserDto repairUserDto = new RepairUserDto();
                repairUserDto.setRepairId(tmpRepairDto.getRepairId());
                repairUserDto.setState(RepairUserDto.STATE_CLOSE);
                List<RepairUserDto> repairUserDtoList = repairUserInnerServiceSMO.queryRepairUsers(repairUserDto);
                Assert.listOnlyOne(repairUserDtoList, "信息错误");
                saveRepairUser(repairUserDtoList, tmpRepairDto);
            } else if (publicArea.equals("F") && maintenanceType.equals("1001") && !repairChannel.equals("Z")) {  //如果不是公共区域,且是有偿的,并且不是业主报修
                RepairUserDto repairUserDto = new RepairUserDto();
                repairUserDto.setRepairId(tmpRepairDto.getRepairId());
                repairUserDto.setState(RepairUserDto.STATE_FINISH_PAY_FEE);
                List<RepairUserDto> repairUserDtoList = repairUserInnerServiceSMO.queryRepairUsers(repairUserDto);
                Assert.listOnlyOne(repairUserDtoList, "信息错误");
                saveRepairUser(repairUserDtoList, tmpRepairDto);
            } else { //如果是业主报修
                RepairUserDto repairUserDto = new RepairUserDto();
                repairUserDto.setRepairId(tmpRepairDto.getRepairId());
                repairUserDto.setState(RepairUserDto.STATE_FINISH);
                List<RepairUserDto> repairUserDtoList = repairUserInnerServiceSMO.queryRepairUsers(repairUserDto);
                Assert.listOnlyOne(repairUserDtoList, "信息错误");
                saveRepairUser(repairUserDtoList, tmpRepairDto);
            }
            return;
        }
        if ("002".equals(tmpRepairDto.getReturnVisitFlag()) && RepairDto.STATE_APPRAISE.equals(tmpRepairDto.getState())) {
            RepairPoolPo repairPoolPo = new RepairPoolPo();
            repairPoolPo.setRepairId(tmpRepairDto.getRepairId());
            repairPoolPo.setState(RepairDto.STATE_COMPLATE);
            repairPoolPo.setStatusCd(StatusConstant.STATUS_CD_VALID);
            repairInnerServiceSMOImpl.updateRepair(repairPoolPo);
        if ("002".equals(tmpRepairDto.getReturnVisitFlag())) {
            RepairDto repairDto = new RepairDto();
            repairDto.setRepairId(tmpRepairDto.getRepairId());
            //查询报修信息
            List<RepairDto> repairDtos = repairInnerServiceSMOImpl.queryRepairs(repairDto);
            Assert.listOnlyOne(repairDtos, "报修信息错误");
            //查询报修工单信息
            RepairSettingDto repairSettingDto = new RepairSettingDto();
            repairSettingDto.setSettingId(repairDtos.get(0).getRepairType());
            List<RepairSettingDto> repairSettingDtos = repairSettingInnerServiceSMO.queryRepairSettings(repairSettingDto);
            Assert.listOnlyOne(repairDtos, "报修工单信息错误");
            //获取报修区域
            String publicArea = repairSettingDtos.get(0).getPublicArea();
            //获取报修渠道0
            String repairChannel = repairDtos.get(0).getRepairChannel();
            //获取维修类型
            String maintenanceType = repairDtos.get(0).getMaintenanceType();
            if (publicArea.equals("T") && !repairChannel.equals("Z")) {  //如果是公共区域,且不是业主报修
                RepairUserDto repairUserDto = new RepairUserDto();
                repairUserDto.setRepairId(tmpRepairDto.getRepairId());
                repairUserDto.setState(RepairUserDto.STATE_CLOSE);
                List<RepairUserDto> repairUserDtoList = repairUserInnerServiceSMO.queryRepairUsers(repairUserDto);
                Assert.listOnlyOne(repairUserDtoList, "信息错误");
                saveRepairUser(repairUserDtoList, tmpRepairDto);
                //改变repair_pool状态
                RepairPoolPo repairPoolPo = new RepairPoolPo();
                repairPoolPo.setRepairId(tmpRepairDto.getRepairId());
                repairPoolPo.setState(RepairDto.STATE_COMPLATE);
                repairPoolPo.setStatusCd(StatusConstant.STATUS_CD_VALID);
                repairInnerServiceSMOImpl.updateRepair(repairPoolPo);
            } else if (publicArea.equals("F") && maintenanceType.equals("1002") && !repairChannel.equals("Z")) {  //如果不是公共区域,且是无偿的,并且不是业主报修
                RepairUserDto repairUserDto = new RepairUserDto();
                repairUserDto.setRepairId(tmpRepairDto.getRepairId());
                repairUserDto.setState(RepairUserDto.STATE_CLOSE);
                List<RepairUserDto> repairUserDtoList = repairUserInnerServiceSMO.queryRepairUsers(repairUserDto);
                Assert.listOnlyOne(repairUserDtoList, "信息错误");
                saveRepairUser(repairUserDtoList, tmpRepairDto);
                //改变repair_pool
                RepairPoolPo repairPoolPo = new RepairPoolPo();
                repairPoolPo.setRepairId(tmpRepairDto.getRepairId());
                repairPoolPo.setState(RepairDto.STATE_COMPLATE);
                repairPoolPo.setStatusCd(StatusConstant.STATUS_CD_VALID);
                repairInnerServiceSMOImpl.updateRepair(repairPoolPo);
            } else if (publicArea.equals("F") && maintenanceType.equals("1001") && !repairChannel.equals("Z")) {  //如果不是公共区域,且是有偿的,并且不是业主报修
                RepairUserDto repairUserDto = new RepairUserDto();
                repairUserDto.setRepairId(tmpRepairDto.getRepairId());
                repairUserDto.setState(RepairUserDto.STATE_FINISH_PAY_FEE);
                List<RepairUserDto> repairUserDtoList = repairUserInnerServiceSMO.queryRepairUsers(repairUserDto);
                Assert.listOnlyOne(repairUserDtoList, "信息错误");
                saveRepairUser(repairUserDtoList, tmpRepairDto);
                //改变repair_pool状态
                RepairPoolPo repairPoolPo = new RepairPoolPo();
                repairPoolPo.setRepairId(tmpRepairDto.getRepairId());
                repairPoolPo.setState(RepairDto.STATE_COMPLATE);
                repairPoolPo.setStatusCd(StatusConstant.STATUS_CD_VALID);
                repairInnerServiceSMOImpl.updateRepair(repairPoolPo);
            } else { //如果是业主报修
                if (RepairDto.STATE_APPRAISE.equals(tmpRepairDto.getState())) { //业主未评价
                    RepairUserDto repairUserDto = new RepairUserDto();
                    repairUserDto.setRepairId(tmpRepairDto.getRepairId());
                    repairUserDto.setState(RepairUserDto.STATE_EVALUATE);
                    List<RepairUserDto> repairUserDtoList = repairUserInnerServiceSMO.queryRepairUsers(repairUserDto);
                    Assert.listOnlyOne(repairUserDtoList, "业主没有待评价的记录");
                    saveRepairUserOfOwner(repairUserDtoList, tmpRepairDto);
                } else if (RepairDto.STATE_RETURN_VISIT.equals(tmpRepairDto.getState())) { //业主已评价
                    RepairUserDto repairUserDto = new RepairUserDto();
                    repairUserDto.setRepairId(tmpRepairDto.getRepairId());
                    repairUserDto.setState(RepairUserDto.STATE_FINISH);
                    List<RepairUserDto> repairUserDtoList = repairUserInnerServiceSMO.queryRepairUsers(repairUserDto);
                    Assert.listOnlyOne(repairUserDtoList, "业主没有已评价的记录");
                    saveRepairUser(repairUserDtoList, tmpRepairDto);
                }
                //改变repair_pool状态
                RepairPoolPo repairPoolPo = new RepairPoolPo();
                repairPoolPo.setRepairId(tmpRepairDto.getRepairId());
                repairPoolPo.setState(RepairDto.STATE_COMPLATE);
                repairPoolPo.setStatusCd(StatusConstant.STATUS_CD_VALID);
                repairInnerServiceSMOImpl.updateRepair(repairPoolPo);
            }
            return;
        }
    }
    /**
     * 待评价状态超过48小时跑成待回访状态
     *
     * @param tmpRepairDto
     */
    private void doFinishRepairAppraise(RepairDto tmpRepairDto) {
        //如果是待评价状态,判断是否已超过两天未评价
        if (RepairDto.STATE_APPRAISE.equals(tmpRepairDto.getState())) {
            RepairUserDto repairUserDto = new RepairUserDto();
            repairUserDto.setRepairId(tmpRepairDto.getRepairId());
            repairUserDto.setState(RepairUserDto.STATE_EVALUATE);
            List<RepairUserDto> repairUserDtoList = repairUserInnerServiceSMO.queryRepairUsers(repairUserDto);
            Assert.listOnlyOne(repairUserDtoList, "信息错误");
            //获取评价开始时间
            Date startTime = repairUserDtoList.get(0).getStartTime();
            //获取当前时间
            Date nowTime = new Date();
            //默认48小时
            Integer autoEvaluateHour = 48;
            if (StringUtil.isEmpty(MappingCache.getValue("autoEvaluateHour"))) {
                autoEvaluateHour = Integer.valueOf(MappingCache.getValue("autoEvaluateHour"));
            }
            if ((nowTime.getTime() - startTime.getTime()) > autoEvaluateHour * 1000 * 60 * 60) {
                //超过两天未评价,状态变为待回访状态
                RepairPoolPo repairPoolPo = new RepairPoolPo();
                repairPoolPo.setRepairId(tmpRepairDto.getRepairId());
                repairPoolPo.setState(RepairDto.STATE_RETURN_VISIT);
                repairPoolPo.setStatusCd(StatusConstant.STATUS_CD_VALID);
                repairInnerServiceSMOImpl.updateRepair(repairPoolPo);
                //r_repair_user状态变为已评价状态
                RepairUserPo repairUserPo = new RepairUserPo();
                repairUserPo.setRuId(repairUserDtoList.get(0).getRuId());
                repairUserPo.setState(RepairUserDto.STATE_FINISH);
                repairUserPo.setStaffName("定时任务处理");
                repairUserPo.setContext("已评价");
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                repairUserPo.setEndTime(format.format(nowTime));
                repairUserInnerServiceSMO.updateRepairUser(repairUserPo);
            }
        }
    }
    //定时任务跑完新增维修派单状态
    public void saveRepairUser(List<RepairUserDto> repairUserDtoList, RepairDto tmpRepairDto) {
        RepairUserPo repairUserPo = new RepairUserPo();
        repairUserPo.setRuId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_ruId));
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        repairUserPo.setStartTime(format.format(repairUserDtoList.get(0).getEndTime()));
        repairUserPo.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
        repairUserPo.setState(RepairUserDto.STATE_FINISH_VISIT);
        repairUserPo.setContext("已回访");
        repairUserPo.setCommunityId(tmpRepairDto.getCommunityId());
        repairUserPo.setCreateTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
        repairUserPo.setRepairId(tmpRepairDto.getRepairId());
        repairUserPo.setStaffId("-1");
        repairUserPo.setbId("-1");
        repairUserPo.setStaffName("定时任务处理");
        repairUserPo.setPreStaffId(repairUserDtoList.get(0).getStaffId());
        repairUserPo.setPreStaffName(repairUserDtoList.get(0).getStaffName());
        repairUserPo.setPreRuId(repairUserDtoList.get(0).getRuId());
        repairUserPo.setRepairEvent("auditUser");
        repairUserInnerServiceSMO.saveRepairUser(repairUserPo);
    }
    //业主端已评价不回访时修改并新增维修派单状态
    public void saveRepairUserOfOwner(List<RepairUserDto> repairUserDtoList, RepairDto tmpRepairDto) {
        RepairUserPo repairUserPo = new RepairUserPo();
        repairUserPo.setRuId(repairUserDtoList.get(0).getRuId());
        repairUserPo.setState(RepairUserDto.STATE_FINISH);
        repairUserPo.setStaffName("定时任务处理");
        repairUserPo.setContext("已评价");
        repairUserPo.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
        //修改报修派单待评价状态,变为评价完成
        repairUserInnerServiceSMO.updateRepairUser(repairUserPo);
        RepairUserPo repairUser = new RepairUserPo();
        repairUser.setRuId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_ruId));
        repairUser.setStartTime(repairUserPo.getEndTime());
        repairUser.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
        repairUser.setState(RepairUserDto.STATE_FINISH_VISIT);
        repairUser.setContext("已回访");
        repairUser.setCommunityId(tmpRepairDto.getCommunityId());
        repairUser.setCreateTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
        repairUser.setRepairId(tmpRepairDto.getRepairId());
        repairUser.setStaffId("-1");
        repairUser.setbId("-1");
        repairUser.setStaffName("定时任务处理");
        repairUser.setPreStaffId(repairUserDtoList.get(0).getStaffId());
        repairUser.setPreStaffName(repairUserDtoList.get(0).getStaffName());
        repairUser.setPreRuId(repairUserDtoList.get(0).getRuId());
        repairUser.setRepairEvent("auditUser");
        repairUserInnerServiceSMO.saveRepairUser(repairUser);
    }
}