Houjie
2025-07-09 c0948102eda828d4eae62d18392adaca56e345e0
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamInspectionOrderServiceImpl.java
@@ -12,8 +12,12 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.flowable.engine.HistoryService;
import org.flowable.engine.TaskService;
import org.flowable.engine.impl.el.DateUtil;
import org.flowable.task.api.Task;
import org.flowable.task.api.history.HistoricTaskInstance;
import org.flowable.variable.api.persistence.entity.VariableInstance;
import org.jeecg.common.api.vo.FileUploadResult;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.constant.CommonConstant;
@@ -33,20 +37,30 @@
import org.jeecg.modules.eam.request.EamInspectionOrderQuery;
import org.jeecg.modules.eam.request.EamInspectionOrderRequest;
import org.jeecg.modules.eam.service.*;
import org.jeecg.modules.eam.vo.EquipmentInspectionStatistics;
import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness;
import org.jeecg.modules.flowable.apithird.business.service.impl.FlowMyBusinessServiceImpl;
import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI;
import org.jeecg.modules.flowable.apithird.service.FlowCommonService;
import org.jeecg.modules.flowable.domain.vo.FlowTaskVo;
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.IMdcUserProductionService;
import org.jeecg.modules.system.service.ISysUserService;
import org.jeecg.modules.system.service.IThirdAppService;
import org.jeecg.modules.system.service.impl.ThirdAppWechatEnterpriseServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
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;
@@ -83,6 +97,14 @@
    private IEamReportRepairService eamReportRepairService;
    @Autowired
    private IEamEquipmentExtendService eamEquipmentExtendService;
    @Autowired
    private IMdcProductionService mdcProductionService;
    @Autowired
    private ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService;
    @Autowired
    private ISysUserService sysUserService;
    @Autowired
    private HistoryService historyService;
    @Override
    public IPage<EamInspectionOrder> queryPageList(Page<EamInspectionOrder> page, EamInspectionOrderQuery query) {
@@ -148,6 +170,27 @@
    }
    @Override
    public List<EquipmentInspectionStatistics> equipmentInspectionStatistics(String productionId, LocalDate firstOfMonth, LocalDate today) {
        if (StringUtils.isNotBlank(productionId)) {
            //车间编码不为空
            List<String> productIds = mdcProductionService.recursionChildren(productionId);
            if (CollectionUtil.isEmpty(productIds)) {
                return Collections.emptyList();
            }
            List<EquipmentInspectionStatistics> list = this.baseMapper.equipmentInspectionStatistics(productIds, firstOfMonth.toString(), today.plusDays(1).toString());
            if (CollectionUtil.isEmpty(list)) {
                return Collections.emptyList();
            }
            return list;
        }
        List<EquipmentInspectionStatistics> list = this.baseMapper.equipmentInspectionStatistics(null, firstOfMonth.toString(), today.plusDays(1).toString());
        if (CollectionUtil.isEmpty(list)) {
            return Collections.emptyList();
        }
        return list;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean addInspectionOrder(EamInspectionOrderRequest eamInspectionOrderRequest) {
        EamInspectionOrder eamInspectionOrder = new EamInspectionOrder();
@@ -183,7 +226,154 @@
            //更新设备保养状态
            eamEquipmentExtendService.updateEquipmentInspectionStatus(eamInspectionOrder.getEquipmentId(), EquipmentMaintenanceStatus.UNDER_INSPECTION.name());
        }
        //推送企业微信消息
        sendQywxTemplateCardMessage(eamInspectionOrder, null);
        return true;
    }
    private void sendQywxTemplateCardMessage(EamInspectionOrder eamInspectionOrder, EamInspectionOrderRequest request) {
        TemplateCard templateCard = new TemplateCard();
        String inspectionStatus = eamInspectionOrder.getInspectionStatus();
        EamEquipment equipment = eamEquipmentService.getById(eamInspectionOrder.getEquipmentId());
        eamInspectionOrder.setEquipmentCode(equipment.getEquipmentCode());
        if (InspectionStatus.WAIT_INSPECTION.name().equals(inspectionStatus)) {
            //工单待领取,推送消息给所有操作工
            String orgId = Optional.ofNullable(eamEquipmentService.getById(eamInspectionOrder.getEquipmentId()))
                    .map(EamEquipment::getOrgId)
                    .orElse(null);
            if (orgId == null) {
                throw new IllegalArgumentException("未找到设备的组织 ID");
            }
            //查询该设备所属产线的所有操作工
            List<SysUser> sysUserList = mdcUserProductionService.queryByPostAndProId("PCR0001", orgId);
            List<String> usernameList = sysUserList.stream().map(SysUser::getUsername).collect(Collectors.toList());
            if (usernameList.isEmpty()) {
                throw new IllegalArgumentException("未找到该设备所属产线的操作工,请联系管理员处理");
            }
            String nextAssigneeStr = usernameList.stream()
                    .filter(Objects::nonNull) // 可选:过滤 null 值
                    .collect(Collectors.joining(","));
            String touser = wechatEnterpriseService.getTouser(nextAssigneeStr, false);
            templateCard.setTouser(touser);
        }
        if (InspectionStatus.UNDER_INSPECTION.name().equals(inspectionStatus)) {
            //工单已开始点检,推送消息给具体操作工(新增工单时指定、领取工单的操作工)
            String operator = eamInspectionOrder.getOperator();
            if (StrUtil.isNotBlank(operator)) {
                //新增工单时、工单领取时已指定点检人
                String touser = wechatEnterpriseService.getTouser(operator, false);
                templateCard.setTouser(touser);
            }
        }
        if (InspectionStatus.WAIT_CONFIRM.name().equals(inspectionStatus)) {
            //工单已点检完成,推送消息给班组长确认
            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);
        }
        if (InspectionStatus.COMPLETE.name().equals(inspectionStatus)) {
            //工单已确认完成,推送消息给点检人
            String touser = wechatEnterpriseService.getTouser(eamInspectionOrder.getOperator(), false);
            templateCard.setTouser(touser);
        }
        TemplateCardEntity templateCardEntity = new TemplateCardEntity();
        templateCard.setTemplate_card(templateCardEntity);
        templateCardEntity.setTask_id(eamInspectionOrder.getId());
        TemplateCardEntity.MainTitle mainTitle = new TemplateCardEntity.MainTitle();
        mainTitle.setTitle("设备点检");
        templateCardEntity.setMain_title(mainTitle);
        if (InspectionStatus.WAIT_INSPECTION.name().equals(inspectionStatus)) {
            templateCardEntity.setSub_title_text("新增设备点检工单: " + eamInspectionOrder.getOrderNum() + " ,请进入系统领取");
        }
        if (InspectionStatus.UNDER_INSPECTION.name().equals(inspectionStatus)) {
            if (Objects.nonNull(request) && StrUtil.isNotBlank(request.getConfirmDealType())) {
                //是驳回的单子
                templateCardEntity.setSub_title_text("工单: " + eamInspectionOrder.getOrderNum() + " 被驳回,请重新进行设备点检");
            } else {
                templateCardEntity.setSub_title_text("工单: " + eamInspectionOrder.getOrderNum() + " 已被领取,开始进行设备点检");
            }
        }
        if (InspectionStatus.WAIT_CONFIRM.name().equals(inspectionStatus)) {
            templateCardEntity.setSub_title_text("工单: " + eamInspectionOrder.getOrderNum() + " 已完成设备点检,请进入系统确认");
        }
        if (InspectionStatus.COMPLETE.name().equals(inspectionStatus)) {
            templateCardEntity.setSub_title_text("工单: " + eamInspectionOrder.getOrderNum() + " 已完成点检后确认");
        }
        List<TemplateCardEntity.HorizontalContent> horizontalContentList = CollectionUtil.newArrayList();
        TemplateCardEntity.HorizontalContent content1 = new TemplateCardEntity.HorizontalContent();
        content1.setKeyname("工单号");
        content1.setValue(eamInspectionOrder.getOrderNum());
        horizontalContentList.add(content1);
        TemplateCardEntity.HorizontalContent content2 = new TemplateCardEntity.HorizontalContent();
        content2.setKeyname("设备编号");
        content2.setValue(eamInspectionOrder.getEquipmentCode());
        horizontalContentList.add(content2);
        //如果工单状态为待点检(没指定点检人的未领取状态),流程是没有启动的,无法获取节点信息
        if (!InspectionStatus.WAIT_INSPECTION.name().equals(inspectionStatus)) {
            WorkTaskDataVo previousFlowInfo = flowTaskService.getPreviousFlowInfo(eamInspectionOrder.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 (InspectionStatus.COMPLETE.name().equals(inspectionStatus)) {
                content4.setValue("已完成");
            } else {
                content4.setValue(previousFlowInfo.getName());
            }
            horizontalContentList.add(content4);
        }
        TemplateCardEntity.HorizontalContent content5 = new TemplateCardEntity.HorizontalContent();
        TemplateCardEntity.HorizontalContent content6 = new TemplateCardEntity.HorizontalContent();
        TemplateCardEntity.HorizontalContent content7 = new TemplateCardEntity.HorizontalContent();
        if (InspectionStatus.WAIT_INSPECTION.name().equals(inspectionStatus)) {
            content5.setKeyname("发起人");
            SysUser sysUser = sysUserService.getUserByName(eamInspectionOrder.getCreateBy());
            content5.setValue(sysUser.getRealname());
            horizontalContentList.add(content5);
        }
        if (InspectionStatus.UNDER_INSPECTION.name().equals(inspectionStatus) && (Objects.isNull(request) || StrUtil.isBlank(request.getConfirmDealType()))) {
            content6.setKeyname("领取人");
            SysUser sysUser = sysUserService.getUserByName(eamInspectionOrder.getOperator());
            content6.setValue(sysUser.getRealname());
            horizontalContentList.add(content6);
        }
        if (InspectionStatus.WAIT_CONFIRM.name().equals(inspectionStatus)) {
            content5.setKeyname("点检人");
            SysUser sysUser = sysUserService.getUserByName(eamInspectionOrder.getOperator());
            content5.setValue(sysUser.getRealname());
            horizontalContentList.add(content5);
        }
        if ((InspectionStatus.COMPLETE.name().equals(inspectionStatus) || InspectionStatus.UNDER_INSPECTION.name().equals(inspectionStatus)) && (Objects.nonNull(request) && StrUtil.isNotBlank(request.getConfirmDealType()))) {
            content5.setKeyname("确认人");
            SysUser sysUser = sysUserService.getUserByName(eamInspectionOrder.getCreateBy());
            content5.setValue(sysUser.getRealname());
            horizontalContentList.add(content5);
        }
        if ((InspectionStatus.COMPLETE.name().equals(inspectionStatus) || InspectionStatus.UNDER_INSPECTION.name().equals(inspectionStatus)) && (Objects.nonNull(request) && StrUtil.isNotBlank(request.getConfirmDealType()))) {
            content7.setKeyname("确认意见");
            content7.setValue("1".equals(request.getConfirmDealType()) ? "通过" : "驳回");
            horizontalContentList.add(content7);
        }
        templateCardEntity.setHorizontal_content_list(horizontalContentList);
        TemplateCardEntity.CardAction cardAction = new TemplateCardEntity.CardAction();
        cardAction.setType(1);
        cardAction.setUrl("http://houjie.xalxzn.com:8866/h5");
        templateCardEntity.setCard_action(cardAction);
        wechatEnterpriseService.sendTemplateCardMsg(templateCard, true);
    }
    /**
@@ -200,7 +390,7 @@
            eamInspectionOrder.setEquipmentCode(equipment.getEquipmentCode());
        }
        System.out.println("设备点检:" + eamInspectionOrder.getId());
        flowCommonService.initActBusiness("工单号:" + eamInspectionOrder.getOrderNum() + "设备编号" + eamInspectionOrder.getEquipmentCode() + "进行设备点检",
        flowCommonService.initActBusiness("工单号: " + eamInspectionOrder.getOrderNum() + ";设备编号: " + eamInspectionOrder.getEquipmentCode() + ";安装位置: " + equipment.getInstallationPosition(),
                eamInspectionOrder.getId(), "IEamInspectionOrderService", "eam_inspection", null);
        Map<String, Object> variables = new HashMap<>();
        variables.put("dataId", eamInspectionOrder.getId());
@@ -269,6 +459,8 @@
            this.updateById(eamInspectionOrder);
            //更新设备保养状态
            eamEquipmentExtendService.updateEquipmentInspectionStatus(eamInspectionOrder.getEquipmentId(), EquipmentMaintenanceStatus.UNDER_INSPECTION.name());
            //推送企业微信消息
            sendQywxTemplateCardMessage(eamInspectionOrder, null);
            return true;
        }
    }
@@ -347,6 +539,9 @@
            // 更新工单信息
            updateEamInspectionOrder(eamInspectionOrder);
            //微信消息推送
            sendQywxTemplateCardMessage(eamInspectionOrder, eamInspectionOrderRequest);
            //查询数据,进行设备维修处理
            if (eamInspectionOrder.getInspectionStatus().equals(InspectionStatus.WAIT_CONFIRM.name())) {
                updateEamInspectionOrderDetail(eamInspectionOrder);