cuilei
2 天以前 7fbb8dedb1112e1d87b8ccfb8d9df9bb763ec024
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamWeekMaintenanceOrderServiceImpl.java
@@ -30,19 +30,29 @@
import org.jeecg.modules.eam.request.EamWeekMaintenanceQuery;
import org.jeecg.modules.eam.request.EamWeekMaintenanceRequest;
import org.jeecg.modules.eam.service.*;
import org.jeecg.modules.eam.vo.EquipmentInspectionStatistics;
import org.jeecg.modules.eam.vo.EquipmentMaintenanceStatistics;
import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness;
import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService;
import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI;
import org.jeecg.modules.flowable.apithird.service.FlowCommonService;
import org.jeecg.modules.flowable.domain.vo.WorkTaskDataVo;
import org.jeecg.modules.flowable.service.IFlowDefinitionService;
import org.jeecg.modules.flowable.service.IFlowTaskService;
import org.jeecg.modules.qywx.message.vo.TemplateCard;
import org.jeecg.modules.qywx.message.vo.TemplateCardEntity;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.service.IMdcProductionService;
import org.jeecg.modules.system.service.ISysUserService;
import org.jeecg.modules.system.service.impl.ThirdAppWechatEnterpriseServiceImpl;
import org.jeecg.modules.system.vo.UserSelector;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
@@ -80,6 +90,13 @@
    private IEamReportRepairService eamReportRepairService;
    @Autowired
    private IEamEquipmentExtendService eamEquipmentExtendService;
    @Autowired
    private IMdcProductionService mdcProductionService;
    @Autowired
    private ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService;
    @Value("${wechatEnterprise.cardActionUrl}")
    private String cardActionUrl;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -112,7 +129,7 @@
        //判断是否存在保养人 如果存在则启动流程
        if (StringUtils.isNotBlank(order.getOperator())) {
            //启动流程
            flowCommonService.initActBusiness("工单号:" + order.getOrderNum() + ";设备编号: " + equipment.getEquipmentCode() + ";进行设备周保",
            flowCommonService.initActBusiness("工单号: " + order.getOrderNum() + ";设备编号: " + equipment.getEquipmentCode() + ";安装位置: " + equipment.getInstallationPosition(),
                    order.getId(), "IEamWeekMaintenanceOrderService", "week_maintenance_process", null);
            Map<String, Object> variables = new HashMap<>();
            variables.put("dataId", order.getId());
@@ -133,10 +150,12 @@
                order.setMaintenanceStatus(WeekMaintenanceStatusEnum.UNDER_MAINTENANCE.name());
                order.setActualStartTime(new Date());
                eamWeekMaintenanceOrderMapper.updateById(order);
                //更新设备保养状态
                eamEquipmentExtendService.updateEquipmentMaintenanceStatus(order.getEquipmentId(), EquipmentMaintenanceStatus.UNDER_MAINTENANCE.name());
                //推送企业微信消息
                sendQywxTemplateCardMessage(order, null);
                return result.isSuccess();
            }
            //更新设备保养状态
            eamEquipmentExtendService.updateEquipmentMaintenanceStatus(order.getEquipmentId(), EquipmentMaintenanceStatus.UNDER_MAINTENANCE.name());
        }
        return true;
@@ -171,6 +190,20 @@
            }
            if (query.getMaintenanceDateBegin() != null && query.getMaintenanceDateEnd() != null) {
                queryWrapper.between("wmo.maintenance_date", query.getMaintenanceDateBegin(), query.getMaintenanceDateEnd());
            }
            if(StringUtils.isNotBlank(query.getRandomInspectionFlag())) {
                if(CommonConstant.DEFAULT_1.equals(query.getRandomInspectionFlag())) {
                    queryWrapper.eq("wmo.random_inspection_flag", CommonConstant.DEFAULT_1);
                }else {
                    queryWrapper.and(q -> q.eq("wmo.random_inspection_flag", CommonConstant.DEFAULT_0).or().isNull("wmo.random_inspection_flag"));
                }
            }
            if(StringUtils.isNotBlank(query.getFinalRandomInspectionFlag())) {
                if(CommonConstant.DEFAULT_1.equals(query.getFinalRandomInspectionFlag())) {
                    queryWrapper.eq("wmo.final_random_inspection_flag", CommonConstant.DEFAULT_1);
                }else {
                    queryWrapper.and(q -> q.eq("wmo.final_random_inspection_flag", CommonConstant.DEFAULT_0).or().isNull("wmo.final_random_inspection_flag"));
                }
            }
            //排序
            if (StringUtils.isNotBlank(query.getColumn()) && StringUtils.isNotBlank(query.getOrder())) {
@@ -238,7 +271,7 @@
        //判断是否存在保养人 如果存在则启动流程
        if (StringUtils.isNotBlank(entity.getOperator())) {
            //启动流程
            flowCommonService.initActBusiness("工单号:" + entity.getOrderNum() + ";设备编号: " + equipment.getEquipmentCode() + ";进行设备周保",
            flowCommonService.initActBusiness("工单号: " + entity.getOrderNum() + ";设备编号: " + equipment.getEquipmentCode() + ";安装位置: " + equipment.getInstallationPosition(),
                    entity.getId(), "IEamWeekMaintenanceOrderService", "week_maintenance_process", null);
            Map<String, Object> variables = new HashMap<>();
            variables.put("dataId", entity.getId());
@@ -259,10 +292,11 @@
                entity.setMaintenanceStatus(WeekMaintenanceStatusEnum.UNDER_MAINTENANCE.name());
                entity.setActualStartTime(new Date());
                eamWeekMaintenanceOrderMapper.updateById(entity);
                //更新设备保养状态
                eamEquipmentExtendService.updateEquipmentMaintenanceStatus(entity.getEquipmentId(), EquipmentMaintenanceStatus.UNDER_MAINTENANCE.name());
                return result.isSuccess();
            }
            //更新设备保养状态
            eamEquipmentExtendService.updateEquipmentMaintenanceStatus(entity.getEquipmentId(), EquipmentMaintenanceStatus.UNDER_MAINTENANCE.name());
        }
        return true;
    }
@@ -282,13 +316,16 @@
            throw new JeecgBootException("设备不存在,添加失败!");
        }
        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        if(sysUser == null || !BusinessCodeConst.PCR0001.equals(sysUser.getPost())) {
            throw new JeecgBootException("不是操作工,无法领取此工单!");
        }
        entity.setOperator(sysUser.getUsername());
        entity.setMaintenanceStatus(WeekMaintenanceStatusEnum.UNDER_MAINTENANCE.name());
        entity.setActualStartTime(new Date());
        eamWeekMaintenanceOrderMapper.updateById(entity);
        //启动流程
        flowCommonService.initActBusiness("工单号:" + entity.getOrderNum() + ";设备编号: " + equipment.getEquipmentCode() + ";进行设备周保",
        flowCommonService.initActBusiness("工单号: " + entity.getOrderNum() + ";设备编号: " + equipment.getEquipmentCode() + ";安装位置: " + equipment.getInstallationPosition(),
                entity.getId(), "IEamWeekMaintenanceOrderService", "week_maintenance_process", null);
        Map<String, Object> variables = new HashMap<>();
        variables.put("dataId", entity.getId());
@@ -307,9 +344,161 @@
        if (result != null) {
            //更新设备保养状态
            eamEquipmentExtendService.updateEquipmentMaintenanceStatus(entity.getEquipmentId(), EquipmentMaintenanceStatus.UNDER_MAINTENANCE.name());
            //推送企业微信消息
            sendQywxTemplateCardMessage(entity, null);
            return result.isSuccess();
        }
        return true;
    }
    private void sendQywxTemplateCardMessage(EamWeekMaintenanceOrder order, EamWeekMaintenanceRequest request) {
        TemplateCard templateCard = new TemplateCard();
        EamEquipment equipment = eamEquipmentService.getById(order.getEquipmentId());
        order.setEquipmentCode(equipment.getEquipmentCode());
        String maintenanceStatus = order.getMaintenanceStatus();
        if (WeekMaintenanceStatusEnum.UNDER_MAINTENANCE.name().equals(maintenanceStatus)) {
            //工单保养中,推送消息给保养人(新增工单时指定、保养人领取)
            String operator = order.getOperator();
            String touser = wechatEnterpriseService.getTouser(operator, false);
            templateCard.setTouser(touser);
        }
        if (WeekMaintenanceStatusEnum.WAIT_CONFIRM.name().equals(maintenanceStatus)
                || WeekMaintenanceStatusEnum.WAIT_INITIAL_ACCEPTANCE.name().equals(maintenanceStatus)
                || WeekMaintenanceStatusEnum.WAIT_FINAL_ACCEPTANCE.name().equals(maintenanceStatus)) {
            //工单已保养完成待确认,推送消息给班组长
            //班组长已确认,推送消息给设备管理员确认
            //设备管理员已确认,推送给设能部管理员确认
            List<String> nextAssignee = (List<String>) request.getValues().get("NextAssignee");
            String nextAssigneeStr = nextAssignee.stream()
                    .filter(Objects::nonNull) // 可选:过滤 null 值
                    .collect(Collectors.joining(","));
            String touser = wechatEnterpriseService.getTouser(nextAssigneeStr, false);
            templateCard.setTouser(touser);
        }
        TemplateCardEntity templateCardEntity = new TemplateCardEntity();
        templateCard.setTemplate_card(templateCardEntity);
        templateCardEntity.setTask_id(order.getId());
        TemplateCardEntity.MainTitle mainTitle = new TemplateCardEntity.MainTitle();
        mainTitle.setTitle("设备周保");
        templateCardEntity.setMain_title(mainTitle);
        if (WeekMaintenanceStatusEnum.UNDER_MAINTENANCE.name().equals(maintenanceStatus)) {
            if (Objects.nonNull(request) && StrUtil.isNotBlank(request.getConfirmDealType())) {
                templateCardEntity.setSub_title_text("工单: " + order.getOrderNum() + " 被驳回,请重新执行保养后提交");
            } else {
                templateCardEntity.setSub_title_text("已领取周保工单: " + order.getOrderNum() + ",开始进行保养");
            }
        }
        if (WeekMaintenanceStatusEnum.WAIT_CONFIRM.name().equals(maintenanceStatus)) {
            templateCardEntity.setSub_title_text("工单: " + order.getOrderNum() + " 已保养完成,请进入系统确认");
        }
        if (WeekMaintenanceStatusEnum.WAIT_INITIAL_ACCEPTANCE.name().equals(maintenanceStatus)) {
            templateCardEntity.setSub_title_text("工单: " + order.getOrderNum() + " 已保养完成,请进入系统进行初验收");
        }
        if (WeekMaintenanceStatusEnum.WAIT_FINAL_ACCEPTANCE.name().equals(maintenanceStatus)) {
            templateCardEntity.setSub_title_text("工单: " + order.getOrderNum() + " 已完成初验收,请进入系统进行终验收");
        }
        List<TemplateCardEntity.HorizontalContent> horizontalContentList = CollectionUtil.newArrayList();
        TemplateCardEntity.HorizontalContent content1 = new TemplateCardEntity.HorizontalContent();
        content1.setKeyname("工单号");
        content1.setValue(order.getOrderNum());
        horizontalContentList.add(content1);
        TemplateCardEntity.HorizontalContent content2 = new TemplateCardEntity.HorizontalContent();
        content2.setKeyname("设备编号");
        content2.setValue(order.getEquipmentCode());
        horizontalContentList.add(content2);
        //如果工单状态为待保养(没指定保养人的未领取状态),流程是没有启动的,无法获取节点信息
        if (!WeekMaintenanceStatusEnum.WAIT_MAINTENANCE.name().equals(maintenanceStatus)) {
            WorkTaskDataVo previousFlowInfo = flowTaskService.getPreviousFlowInfo(order.getId());
            TemplateCardEntity.HorizontalContent content3 = new TemplateCardEntity.HorizontalContent();
            content3.setKeyname("前驱节点");
            content3.setValue(previousFlowInfo.getPreNode());
            horizontalContentList.add(content3);
            TemplateCardEntity.HorizontalContent content4 = new TemplateCardEntity.HorizontalContent();
            content4.setKeyname("当前节点");
            if (WeekMaintenanceStatusEnum.COMPLETE.name().equals(maintenanceStatus)) {
                content4.setValue("已完成");
            } else {
                content4.setValue(previousFlowInfo.getName());
            }
            horizontalContentList.add(content4);
        }
        if (WeekMaintenanceStatusEnum.UNDER_MAINTENANCE.name().equals(maintenanceStatus)) {
            if (Objects.isNull(request)) {
                //新增的工单(指定了保养人)、新领取的工单
                TemplateCardEntity.HorizontalContent content = new TemplateCardEntity.HorizontalContent();
                content.setKeyname("发起人");
                SysUser sysUser = sysUserService.getUserByName(order.getCreateBy());
                content.setValue(sysUser.getRealname());
                horizontalContentList.add(content);
            } else {
                //被驳回的工单
                TemplateCardEntity.HorizontalContent content3 = new TemplateCardEntity.HorizontalContent();
                TemplateCardEntity.HorizontalContent content4 = new TemplateCardEntity.HorizontalContent();
                String confirmAssign = request.getAssignee();
                SysUser confirmUser = sysUserService.getUserByName(confirmAssign);
                content3.setKeyname("确认人");
                content3.setValue(confirmUser.getRealname());
                horizontalContentList.add(content3);
                content4.setKeyname("确认意见");
                content4.setValue("驳回");
                horizontalContentList.add(content4);
            }
        }
        if (WeekMaintenanceStatusEnum.WAIT_CONFIRM.name().equals(maintenanceStatus)) {
            TemplateCardEntity.HorizontalContent content = new TemplateCardEntity.HorizontalContent();
            content.setKeyname("保养人");
            SysUser sysUser = sysUserService.getUserByName(order.getOperator());
            content.setValue(sysUser.getRealname());
            horizontalContentList.add(content);
            //TemplateCardEntity.HorizontalContent content = new TemplateCardEntity.HorizontalContent();
            //List<String> nextAssignee = (List<String>) request.getValues().get("NextAssignee");
            //String realNameStr = sysUserService.getRealNameStrByUserNameList(nextAssignee);
            //content.setKeyname("确认人");
            //content.setValue(realNameStr);
            //horizontalContentList.add(content);
        }
        if (WeekMaintenanceStatusEnum.WAIT_INITIAL_ACCEPTANCE.name().equals(maintenanceStatus)) {
            TemplateCardEntity.HorizontalContent content3 = new TemplateCardEntity.HorizontalContent();
            //TemplateCardEntity.HorizontalContent content4 = new TemplateCardEntity.HorizontalContent();
            String confirmAssignee = request.getAssignee();
            SysUser confirmUser = sysUserService.getUserByName(confirmAssignee);
            content3.setKeyname("确认人");
            content3.setValue(confirmUser.getRealname());
            horizontalContentList.add(content3);
            //List<String> nextAssignee = (List<String>) request.getValues().get("NextAssignee");
            //String realNameStr = sysUserService.getRealNameStrByUserNameList(nextAssignee);
            //content4.setKeyname("初验人");
            //content4.setValue(realNameStr);
            //horizontalContentList.add(content4);
        }
        if (WeekMaintenanceStatusEnum.WAIT_FINAL_ACCEPTANCE.name().equals(maintenanceStatus)) {
            TemplateCardEntity.HorizontalContent content3 = new TemplateCardEntity.HorizontalContent();
            //TemplateCardEntity.HorizontalContent content4 = new TemplateCardEntity.HorizontalContent();
            String initialAssignee = request.getAssignee();
            SysUser initialUser = sysUserService.getUserByName(initialAssignee);
            content3.setKeyname("初验人");
            content3.setValue(initialUser.getRealname());
            horizontalContentList.add(content3);
            //List<String> nextAssignee = (List<String>) request.getValues().get("NextAssignee");
            //String realNameStr = sysUserService.getRealNameStrByUserNameList(nextAssignee);
            //content4.setKeyname("终验人");
            //content4.setValue(realNameStr);
            //horizontalContentList.add(content4);
        }
        templateCardEntity.setHorizontal_content_list(horizontalContentList);
        TemplateCardEntity.CardAction cardAction = new TemplateCardEntity.CardAction();
        cardAction.setType(1);
        cardAction.setUrl(cardActionUrl);
        templateCardEntity.setCard_action(cardAction);
        wechatEnterpriseService.sendTemplateCardMsg(templateCard, true);
    }
    @Override
@@ -392,7 +581,7 @@
                }
                //班组长确认
                userApprovalList = new ArrayList<>();
                userApprovalList.add(equipment.getEquipmentManager());
                userApprovalList.add(equipment.getEquipmentManager().substring(2));//设备台账表维护的设备管理员工号是带 WK前缀的
                values.put("dataId", entity.getId());
                values.put("organization", request.getConfirmComment());
                values.put("comment", request.getConfirmComment());
@@ -434,6 +623,7 @@
                entity.setInitialAcceptanceUser(user.getUsername());
                entity.setInitialAcceptanceComment(request.getInitialAcceptanceComment());
                entity.setInitialAcceptanceTime(new Date());
                entity.setRandomInspectionFlag(request.getRandomInspectionFlag());
                //处理附件
                if (CollectionUtil.isNotEmpty(request.getInitialAcceptanceFilesResult())) {
                    List<FileUploadResult> fileUploadResultList = request.getInitialAcceptanceFilesResult();
@@ -448,14 +638,15 @@
                break;
            case WAIT_FINAL_ACCEPTANCE:
                values.put("dataId", entity.getId());
                values.put("organization", request.getInitialAcceptanceComment());
                values.put("comment", request.getInitialAcceptanceComment());
                request.setComment(request.getInitialAcceptanceComment());
                values.put("organization", request.getFinalAcceptanceComment());
                values.put("comment", request.getFinalAcceptanceComment());
                request.setComment(request.getFinalAcceptanceComment());
                //设置entity
                entity.setMaintenanceStatus(WeekMaintenanceStatusEnum.COMPLETE.name());
                entity.setFinalAcceptanceUser(user.getUsername());
                entity.setFinalAcceptanceComment(request.getFinalAcceptanceComment());
                entity.setFinalAcceptanceTime(new Date());
                entity.setFinalRandomInspectionFlag(request.getFinalRandomInspectionFlag());
                //处理附件
                if (CollectionUtil.isNotEmpty(request.getFinalAcceptanceFilesResult())) {
                    List<FileUploadResult> fileUploadResultList = request.getFinalAcceptanceFilesResult();
@@ -480,6 +671,10 @@
        }
        //保存工单
        eamWeekMaintenanceOrderMapper.updateById(entity);
        //推送企业微信消息,工单完结不发送
        if (!WeekMaintenanceStatusEnum.COMPLETE.name().equals(entity.getMaintenanceStatus())) {
            sendQywxTemplateCardMessage(entity, request);
        }
        return entity;
    }
@@ -495,6 +690,32 @@
        return eamWeekMaintenanceOrderMapper.selectList(queryWrapper);
    }
    @Override
    public List<EquipmentMaintenanceStatistics> equipmentMaintenanceStatistics(String productionId, LocalDate firstOfMonth, LocalDate today) {
        if (StringUtils.isNotBlank(productionId)) {
            //车间编码不为空
            List<String> productIds = mdcProductionService.recursionChildren(productionId);
            if (CollectionUtil.isEmpty(productIds)) {
                return Collections.emptyList();
            }
            List<EquipmentMaintenanceStatistics> list = this.baseMapper.equipmentMaintenanceStatistics(productIds, firstOfMonth.toString(), today.plusDays(1).toString());
            if (CollectionUtil.isEmpty(list)) {
                return Collections.emptyList();
            }
            return list;
        }
        List<EquipmentMaintenanceStatistics> list = this.baseMapper.equipmentMaintenanceStatistics(null, firstOfMonth.toString(), today.plusDays(1).toString());
        if (CollectionUtil.isEmpty(list)) {
            return Collections.emptyList();
        }
        return list;
    }
    @Override
    public List<EamWeekMaintenanceOrder> selectUnReceivedMaintenanceOrder() {
        return this.baseMapper.selectUnReceivedMaintenanceOrder();
    }
    private boolean isUserAuthorized(FlowMyBusiness flowMyBusiness, LoginUser user) {
        List<String> todoUsers = JSON.parseArray(flowMyBusiness.getTodoUsers(), String.class);
        return todoUsers != null && todoUsers.contains(user.getUsername());