jiangping
2025-06-06 a2299a6d4a6f99e9c11132138f5d3e9ec68f03ea
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java
@@ -1,5 +1,6 @@
package com.doumee.service.business.impl;
import com.alibaba.fastjson.JSONObject;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
@@ -8,12 +9,17 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.*;
import com.doumee.dao.business.dto.YwWorkorderDataDTO;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.vo.YwWorkorderDataVO;
import com.doumee.dao.system.MultifileMapper;
import com.doumee.dao.system.SystemUserMapper;
import com.doumee.dao.system.join.NoticesJoinMapper;
import com.doumee.dao.system.model.Multifile;
import com.doumee.dao.system.model.Notices;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.YwWorkorderService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -29,6 +35,7 @@
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.stream.Collectors;
/**
 * 运维工单信息表Service实现
@@ -56,6 +63,9 @@
    private YwBuildingMapper ywBuildingMapper;
    @Autowired
    private YwFloorMapper ywFloorMapper;
    @Autowired
    private NoticesJoinMapper noticesJoinMapper;
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
@@ -66,6 +76,7 @@
        model.setIsdeleted(Constants.ZERO);
        model.setCreateDate(new Date());
        model.setStatus(Constants.ZERO);
        model.setDealStatus(Constants.ZERO);
        model.setEditDate(model.getCreateDate());
        model.setEditor(model.getCreator());
        ywWorkorderMapper.insert(model);
@@ -78,11 +89,12 @@
                if(StringUtils.isBlank(multifile.getFileurl())){
                    continue;
                }
                multifile.setCreateDate(new Date());
                multifile.setCreateDate(model.getCreateDate());
                multifile.setEditDate(model.getCreateDate());
                multifile.setCreator(model.getEditor());
                multifile.setIsdeleted(Constants.ZERO);
                multifile.setObjId(model.getId());
                multifile.setCreator(model.getCreator());
                multifile.setEditor(model.getCreator());
                multifile.setObjType(Constants.MultiFile.YW_WORKORDER_PROBLEM.getKey());
                multifile.setSortnum(i+1);
                fileList.add(multifile);
@@ -168,7 +180,9 @@
        if(model ==null || Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,工单信息不存在!");
        }
        if(!Constants.equalsInteger(model.getDealStatus(),Constants.ZERO) && !Constants.equalsInteger(model.getDealStatus(),Constants.ONE)){
        if(!Constants.equalsInteger(model.getDealStatus(),Constants.ZERO)
//                && !Constants.equalsInteger(model.getDealStatus(),Constants.ONE)
        ){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,工单状态已流转,不支持当前操作!");
        }
@@ -184,8 +198,33 @@
        update.setDispatchUserId(update.getEditor());
        update.setDispatchDate(update.getEditDate());
        update.setDispatchInfo(ywWorkorder.getDispatchInfo());
        update.setDealUserId(ywWorkorder.getDealUserId());
        ywWorkorderMapper.updateById(update);
        dealLogBiz(model,Constants.YwLogType.WORKORDER_DISPATCH,model.getLoginUserInfo().getRealname(),user.getRealname());//记录新建日志
        //添加待办信息
        Notices notices = new Notices();
        notices.setCreateDate(new Date());
        notices.setCreator(update.getEditor());
        notices.setIsdeleted(Constants.ZERO);
        notices.setParam1(DateUtil.formatDate(model.getCreateDate(),"yyyy-MM-dd"));
        notices.setTitle("工单待办");
        notices.setObjId(update.getId());
        notices.setObjType(Constants.TWO);
        notices.setType(notices.getObjType());
        notices.setUserId(ywWorkorder.getDealUserId());
        notices.setStatus(Constants.ZERO);
        //整理json数据
        Map<String,Object> jsonMap = new HashMap<>();
        jsonMap.put("key1", model.getBuildingName()+"/"+model.getFloorName());
        jsonMap.put("key2", DateUtil.getFomartDate(model.getCreateDate(),"yyyy-MM-dd HH:mm:ss"));
        jsonMap.put("key3", Constants.equalsInteger(model.getAreaType(),Constants.ZERO)?"室内维修":"公共区域");
        jsonMap.put("key4", model.getCategoryParentName()+"/"+model.getCategoryName());
        notices.setParam2(JSONObject.toJSONString(jsonMap));
        notices.setParam3(Constants.ZERO+"");
        noticesJoinMapper.insert(notices);
        dealLogBiz(model,Constants.YwLogType.WORKORDER_DISPATCH,ywWorkorder.getLoginUserInfo().getRealname(),user.getRealname());//记录新建日志
    }
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
@@ -198,10 +237,10 @@
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,工单状态已流转,不支持当前操作!");
        }
        SystemUser user = systemUserMapper.selectById(ywWorkorder.getDealUserId());
        if(user ==null ||  (user.getDeleted()!=null&& user.getDeleted() )){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,员工信息不存在!");
        }
//        SystemUser user = systemUserMapper.selectById(ywWorkorder.getDealUserId());
//        if(user ==null ||  (user.getDeleted()!=null&& user.getDeleted() )){
//            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,员工信息不存在!");
//        }
        YwWorkorder update = new YwWorkorder();
        update.setId(model.getId());
        update.setEditDate(new Date());
@@ -209,9 +248,42 @@
        update.setDealStatus(Constants.TWO);
        update.setDealUserId(update.getEditor());
        update.setDealDate(update.getEditDate());
        update.setDealInfo(ywWorkorder.getDispatchInfo());
        update.setDealInfo(ywWorkorder.getDealInfo());
        ywWorkorderMapper.updateById(update);
        dealLogBiz(model,Constants.YwLogType.WORKORDER_DEAL,model.getLoginUserInfo().getRealname(),null);//记录新建日志
        //标记待办已处理
        noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
                .set(Notices::getStatus,Constants.ONE)
                .set(Notices::getParam3,Constants.TWO)
                .eq(Notices::getIsdeleted,Constants.ZERO)
                .eq(Notices::getObjType,Constants.TWO)
                .eq(Notices::getObjId,update.getId())
        );
        List<Multifile> fileList = new ArrayList<>();
        if(ywWorkorder.getDealFileList()!=null && ywWorkorder.getDealFileList().size()>0){
            for (int i = 0; i <  ywWorkorder.getDealFileList().size(); i++) {
                Multifile multifile =  ywWorkorder.getDealFileList().get(i);
                if(StringUtils.isBlank(multifile.getFileurl())){
                    continue;
                }
                multifile.setCreateDate(update.getEditDate());
                multifile.setCreator(update.getEditor());
                multifile.setEditDate(update.getEditDate());
                multifile.setIsdeleted(Constants.ZERO);
                multifile.setObjId(model.getId());
                multifile.setEditor(update.getEditor());
                multifile.setObjType(Constants.MultiFile.YW_WORKORDER_DEAL.getKey());
                multifile.setSortnum(i+1);
                fileList.add(multifile);
            }
        }
        if(fileList.size()>0){
            multifileMapper.insert(fileList);
        }
        dealLogBiz(model,Constants.YwLogType.WORKORDER_DEAL,ywWorkorder.getLoginUserInfo().getRealname(),null);//记录新建日志
    }
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
@@ -296,18 +368,28 @@
        MPJLambdaWrapper<YwWorkorder> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.selectAll(YwWorkorder.class )
                .selectAs(SystemUser::getRealname,YwWorkorder::getDealUserName)
                .selectAs(Company::getName,YwWorkorder::getDealUserCompany)
                .select("t3.realname",YwWorkorder::getCreatorName)
                .selectAs(Category::getName,YwWorkorder::getCategoryName)
                .select("t3.mobile",YwWorkorder::getCreatorMobile)
                .select("c.name",YwWorkorder::getCreatorCompany)
                .select("ct.name",YwWorkorder::getCategoryName)
                .select("ct1.name",YwWorkorder::getCategoryParentName)
                .selectAs(YwRoom::getName,YwWorkorder::getRoomName)
                .selectAs(YwRoom::getRoomNum,YwWorkorder::getRoomNum)
                .selectAs(YwFloor::getName,YwWorkorder::getFloorName)
                .selectAs(YwBuilding::getName,YwWorkorder::getBuildingName)
                .selectAs(YwProject::getName,YwWorkorder::getProjectName)
                .leftJoin(SystemUser.class,SystemUser::getId,YwWorkorder::getDealUserId)
                .leftJoin(Category.class,Category::getId,YwWorkorder::getCateId)
                .leftJoin(SystemUser.class,SystemUser::getId,YwWorkorder::getCreator)
                .leftJoin(Company.class,Company::getId,SystemUser::getCompanyId)
                .leftJoin(YwRoom.class,YwRoom::getId,YwWorkorder::getRoomId)
                .leftJoin(YwFloor.class,YwFloor::getId,YwWorkorder::getFloorId)
                .leftJoin(YwBuilding.class,YwBuilding::getId,YwWorkorder::getBuildingId)
                .leftJoin(YwProject.class,YwProject::getId,YwWorkorder::getProjectId)
                .leftJoin(" company c on c.id = t1.company_id  ")
                .leftJoin(" category ct on ct.id = t.cate_id  ")
                .leftJoin(" category ct1 on ct1.id = ct.PARENT_ID  ")
                .eq(YwWorkorder::getId,id);
        YwWorkorder model = ywWorkorderMapper.selectJoinOne(YwWorkorder.class,queryWrapper);
        initFiles(model);//读取附件信息
@@ -348,19 +430,35 @@
                .selectAs(YwRoom::getRoomNum,YwWorkorder::getRoomNum)
                .selectAs(YwFloor::getName,YwWorkorder::getFloorName)
                .selectAs(YwBuilding::getName,YwWorkorder::getBuildingName)
                .selectAs(YwProject::getName,YwWorkorder::getProjectName)
                .selectAs(YwProblem::getId,YwWorkorder::getProblemId)
                .leftJoin(SystemUser.class,SystemUser::getId,YwWorkorder::getDealUserId)
                .leftJoin(Category.class,Category::getId,YwWorkorder::getCateId)
                .leftJoin(SystemUser.class,SystemUser::getId,YwWorkorder::getCreator)
                .leftJoin(YwRoom.class,YwRoom::getId,YwWorkorder::getRoomId)
                .leftJoin(YwFloor.class,YwFloor::getId,YwWorkorder::getFloorId)
                .leftJoin(YwBuilding.class,YwBuilding::getId,YwWorkorder::getBuildingId);
                .leftJoin(YwBuilding.class,YwBuilding::getId,YwWorkorder::getBuildingId)
                .leftJoin(YwProject.class,YwProject::getId,YwBuilding::getProjectId)
                .leftJoin(YwProblem.class,YwProblem::getWorkorderId,YwWorkorder::getId)
                .apply(StringUtils.isNotBlank(pageWrap.getModel().getQueryStatus())," find_in_set(t.DEAL_STATUS ,'"+pageWrap.getModel().getQueryStatus()+"') ");
        pageWrap.getModel().setIsdeleted(Constants.ZERO);
        Utils.MP.blankToNull(pageWrap.getModel());
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.eq(YwWorkorder::getId, pageWrap.getModel().getId());
        }
        if (pageWrap.getModel().getDispatchUserId() != null) {
            queryWrapper.eq(YwWorkorder::getDispatchUserId, pageWrap.getModel().getDispatchUserId());
        }
        if(Objects.nonNull(pageWrap.getModel().getRoomName())){
            queryWrapper.and(i->i.like(YwFloor::getName,pageWrap.getModel().getRoomName()).or()
                    .like(YwRoom::getRoomNum,pageWrap.getModel().getRoomName())
            );
        }
        if (pageWrap.getModel().getCreator() != null) {
            queryWrapper.eq(YwWorkorder::getCreator, pageWrap.getModel().getCreator());
        }
        if (pageWrap.getModel().getOrigin() != null) {
            queryWrapper.eq(YwWorkorder::getOrigin, pageWrap.getModel().getOrigin());
        }
        if (pageWrap.getModel().getCreateDate() != null) {
            queryWrapper.ge(YwWorkorder::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
@@ -383,7 +481,8 @@
            queryWrapper.eq(YwWorkorder::getRemark, pageWrap.getModel().getRemark());
        }
        if (pageWrap.getModel().getStatus() != null) {
            queryWrapper.eq(YwWorkorder::getStatus, pageWrap.getModel().getStatus());
            queryWrapper.eq(!Constants.equalsInteger(pageWrap.getModel().getStatus(),-1),YwWorkorder::getStatus, pageWrap.getModel().getStatus());
            queryWrapper.in(Constants.equalsInteger(pageWrap.getModel().getStatus(),-1),YwWorkorder::getStatus, Constants.ZERO,Constants.ONE);
        }
        if (pageWrap.getModel().getSortnum() != null) {
            queryWrapper.eq(YwWorkorder::getSortnum, pageWrap.getModel().getSortnum());
@@ -403,6 +502,9 @@
        }
        if (pageWrap.getModel().getRoomId() != null) {
            queryWrapper.eq(YwWorkorder::getRoomId, pageWrap.getModel().getRoomId());
        }
        if (pageWrap.getModel().getFloorId() != null) {
            queryWrapper.eq(YwWorkorder::getFloorId, pageWrap.getModel().getFloorId());
        }
        if (pageWrap.getModel().getUserId() != null) {
            queryWrapper.eq(YwWorkorder::getUserId, pageWrap.getModel().getUserId());
@@ -425,9 +527,6 @@
        }
        if (pageWrap.getModel().getDealStatus() != null) {
            queryWrapper.eq(YwWorkorder::getDealStatus, pageWrap.getModel().getDealStatus());
        }
        if (pageWrap.getModel().getDispatchUserId() != null) {
            queryWrapper.eq(YwWorkorder::getDispatchUserId, pageWrap.getModel().getDispatchUserId());
        }
        if (pageWrap.getModel().getDispatchDate() != null) {
            queryWrapper.ge(YwWorkorder::getDispatchDate, Utils.Date.getStart(pageWrap.getModel().getDispatchDate()));
@@ -456,10 +555,28 @@
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        if(StringUtils.isNotBlank(pageWrap.getModel().getBuildingName())){
            queryWrapper.and(rw ->{
                rw.like(YwBuilding::getName,pageWrap.getModel().getBuildingName()).or()
                        .like(YwRoom::getName,pageWrap.getModel().getBuildingName());
            });
        }
        queryWrapper.ge(Objects.nonNull(pageWrap.getModel().getQueryStartTime()), YwWorkorder::getCreateDate, pageWrap.getModel().getQueryStartTime())
                .le(Objects.nonNull(pageWrap.getModel().getQueryEndTime()), YwWorkorder::getCreateDate, pageWrap.getModel().getQueryEndTime());
        queryWrapper.orderByDesc(YwContract::getCreateDate );
        return PageData.from(ywWorkorderMapper.selectPage(page, queryWrapper));
        PageData<YwWorkorder> result =   PageData.from(ywWorkorderMapper.selectPage(page, queryWrapper));
        if(result!=null && result.getRecords()!=null){
            for(YwWorkorder m : result.getRecords()){
                if(Constants.equalsInteger(m.getAreaType(),Constants.ZERO)){
                        //0室内维修
                    m.setAreaNameInfo(StringUtils.defaultString(m.getBuildingName(),"")+"/"+StringUtils.defaultString(m.getRoomNum(),""));
                }else{
                    m.setAreaNameInfo(StringUtils.defaultString(m.getBuildingName(),"")+"/"+StringUtils.defaultString(m.getFloorName(),""));
                }
            }
        }
        return result;
    }
    @Override
@@ -467,4 +584,27 @@
        QueryWrapper<YwWorkorder> wrapper = new QueryWrapper<>(ywWorkorder);
        return ywWorkorderMapper.selectCount(wrapper);
    }
    @Override
    public YwWorkorderDataVO getDataVO(YwWorkorderDataDTO dto){
        YwWorkorderDataVO ywWorkorderDataVO = new YwWorkorderDataVO();
        List<YwWorkorder> list = ywWorkorderMapper.selectList(new QueryWrapper<YwWorkorder>().lambda()
                .eq(YwWorkorder::getIsdeleted,Constants.ZERO)
                .eq(Constants.equalsInteger(dto.getQueryType(),Constants.ONE),YwWorkorder::getProjectId,dto.getQueryId())
                .eq(Constants.equalsInteger(dto.getQueryType(),Constants.TWO),YwWorkorder::getFloorId,dto.getQueryId())
                .eq(Constants.equalsInteger(dto.getQueryType(),Constants.THREE),YwWorkorder::getRoomId,dto.getQueryId()));
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(list)){
            ywWorkorderDataVO.setAmount(list.size());
            ywWorkorderDataVO.setMonthAmount(list.stream().filter(i-> DateUtil.formatDate(i.getCreateDate(),"yyyy-MM").equals(DateUtil.formatDate(new Date(),"yyyy-MM"))).collect(Collectors.toList()).size());
            ywWorkorderDataVO.setWaitDealAmount(list.stream().filter(i-> Constants.equalsInteger(i.getDealStatus(),Constants.ONE)).collect(Collectors.toList()).size());
            ywWorkorderDataVO.setWaitAssignAmount(list.stream().filter(i-> Constants.equalsInteger(i.getDealStatus(),Constants.ZERO)).collect(Collectors.toList()).size());
        }
        return ywWorkorderDataVO;
    }
}