From 4545af9041b432cbe79214d52be599e4ce8659aa Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期四, 14 八月 2025 15:55:39 +0800
Subject: [PATCH] 二保结构树代码 维修工单添加 领取按钮 领取后 生成维修开始时间  提交后 生成维修结束时间 计算 维修时长  故障时长  添加导出

---
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java |  518 +++++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 369 insertions(+), 149 deletions(-)

diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java
index a9242cb..2b9c57c 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamSecondMaintenanceOrderServiceImpl.java
@@ -3,17 +3,17 @@
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import liquibase.pro.packaged.Q;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
 import org.flowable.engine.TaskService;
 import org.flowable.task.api.Task;
-import org.jeecg.common.api.vo.FileUploadResult;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.constant.DataBaseConstant;
@@ -23,24 +23,35 @@
 import org.jeecg.modules.eam.aspect.annotation.EquipmentHistoryLog;
 import org.jeecg.modules.eam.constant.*;
 import org.jeecg.modules.eam.entity.*;
+import org.jeecg.modules.eam.mapper.EamEquipmentMapper;
+import org.jeecg.modules.eam.mapper.EamMaintenanceStandardMapper;
 import org.jeecg.modules.eam.mapper.EamSecondMaintenanceOrderMapper;
 import org.jeecg.modules.eam.request.EamSecondMaintenanceQuery;
 import org.jeecg.modules.eam.request.EamSecondMaintenanceRequest;
 import org.jeecg.modules.eam.service.*;
+import org.jeecg.modules.eam.tree.FindsEquipmentEamCenterUtil;
+import org.jeecg.modules.eam.vo.EamEquipmentTree;
 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.service.IFlowDefinitionService;
 import org.jeecg.modules.flowable.service.IFlowTaskService;
+import org.jeecg.modules.system.entity.BaseFactory;
+import org.jeecg.modules.system.entity.BaseFactoryUser;
+import org.jeecg.modules.system.mapper.BaseFactoryMapper;
+import org.jeecg.modules.system.service.IBaseFactoryService;
+import org.jeecg.modules.system.service.IBaseFactoryUserService;
 import org.jeecg.modules.system.service.ISysUserService;
 import org.jeecg.modules.system.vo.UserSelector;
+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.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -66,34 +77,55 @@
     private TaskService taskService;
     @Autowired
     private IFlowTaskService flowTaskService;
-
+    @Autowired
+    private IBaseFactoryUserService baseFactoryUserService;
+    @Autowired
+    private IBaseFactoryService baseFactoryService;
     @Autowired
     private ISysUserService sysUserService;
     @Autowired
     private IEamEquipmentService eamEquipmentService;
     @Autowired
-    private IEamReportRepairService eamReportRepairService;
-    @Autowired
     private IEamEquipmentExtendService eamEquipmentExtendService;
+    @Autowired
+    private IEamBaseHFCodeService hfCodeService;
+    @Autowired
+    private IEamMaintenanceStandardDetailService eamMaintenanceStandardDetailService;
+    @Autowired
+    private EamMaintenanceStandardMapper eamMaintenanceStandardMapper;
+    @Resource
+    private BaseFactoryMapper baseFactoryMapper;
 
     @Override
     public IPage<EamSecondMaintenanceOrder> queryPageList(Page<EamSecondMaintenanceOrder> page, EamSecondMaintenanceQuery query) {
         QueryWrapper<EamSecondMaintenanceOrder> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("wmo.del_flag",CommonConstant.DEL_FLAG_0.toString());
         //鐢ㄦ埛鏁版嵁鏉冮檺
         LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         if (sysUser == null) {
             return page;
         }
-        if (StringUtils.isNotBlank(sysUser.getEquipmentIds())) {
+        if (StringUtils.isNotBlank(sysUser.getEamEquipmentIds())) {
             //閫夋嫨浜嗚澶囷紝鏍规嵁璁惧id杩囨护璁惧
-            List<String> equipArr = Arrays.asList(sysUser.getEquipmentIds().split(","));
+            List<String> equipArr = Arrays.asList(sysUser.getEamEquipmentIds().split(","));
             queryWrapper.in("e.equipment_code", equipArr);
         } else {
-            //娌℃湁閫夋嫨璁惧锛屾牴鎹溅闂磋繃婊よ澶�
-            queryWrapper.exists("select 1 from mdc_user_production t where t.user_id={0} and t.pro_id=e.org_id ", sysUser.getId());
+            //娌℃湁閫夋嫨璁惧锛屾牴鎹腑蹇冭繃婊よ澶�
+            List<BaseFactoryUser> baseFactoryUserList=baseFactoryUserService.
+                    list(new LambdaQueryWrapper<BaseFactoryUser>().eq(BaseFactoryUser::getUserId,sysUser.getId()));
+            if(!CollectionUtils.isEmpty(baseFactoryUserList)){
+                Set<String> factoryIds = baseFactoryUserList.stream().map(BaseFactoryUser::getFactoryId).collect(Collectors.toSet());
+                Set<String> factoryCode= baseFactoryService.listByIds(factoryIds).stream().map(BaseFactory::getOrgCode).collect(Collectors.toSet());
+                queryWrapper.in("e.factory_org_code", factoryCode);
+            } else {
+                return page;
+            }
         }
         //鏌ヨ鏉′欢杩囨护
         if (query != null) {
+            if (StringUtils.isNotBlank(query.getId())){
+                queryWrapper.eq("wmo.id", query.getId());
+            }
             if (StringUtils.isNotBlank(query.getEquipmentId())) {
                 queryWrapper.eq("wmo.equipment_id", query.getEquipmentId());
             }
@@ -127,6 +159,146 @@
         return eamSecondMaintenanceOrderMapper.queryPageList(page, queryWrapper);
     }
 
+    /**
+     * 鎵归噺鏂板鏍戠粨鏋�
+     */
+    @Override
+    public List<EamEquipmentTree> getTree(){
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if (sysUser == null) return Collections.emptyList();
+
+        // 鏋勫缓閫氱敤鏌ヨ鏉′欢
+        QueryWrapper<EamMaintenanceStandard> baseQuery = new QueryWrapper<EamMaintenanceStandard>()
+                .eq("ems.maintenance_category", "SECOND_MAINTENANCE")
+                .eq("ems.standard_status", MaintenanceStandardStatusEnum.START.name())
+                .eq("ems.del_flag", CommonConstant.DEL_FLAG_0.toString());
+
+        // 搴旂敤鏁版嵁鏉冮檺杩囨护
+        applyDataPermissionFilter(sysUser, baseQuery);
+
+        // 鍗曟鏌ヨ璁惧鍒楄〃
+        List<EamEquipment> equipmentList = eamMaintenanceStandardMapper.queryList(baseQuery);
+        if (CollectionUtils.isEmpty(equipmentList)) {
+            return Collections.emptyList();
+        }
+
+        // 鑾峰彇鍏宠仈鐨勫伐鍘備唬鐮�
+        Set<String> factoryOrgCodes = equipmentList.stream()
+                .map(EamEquipment::getFactoryOrgCode)
+                .collect(Collectors.toSet());
+
+        // 鍗曟鏌ヨ鎵�鏈夊伐鍘傛暟鎹紙鍖呭惈瀹屾暣鏍戠粨鏋勶級
+        List<BaseFactory> allFactories = baseFactoryService.list(
+                new LambdaQueryWrapper<BaseFactory>()
+                        .eq(BaseFactory::getDelFlag, CommonConstant.DEL_FLAG_0.toString())
+                        .orderByAsc(BaseFactory::getSorter));
+
+        // 鎻愬彇鏉冮檺鍏宠仈鐨勫伐鍘傝妭鐐笽D锛堝寘鍚墍鏈夌埗鑺傜偣锛�
+        Set<String> authorizedFactoryIds = extractAuthorizedFactoryIds(
+                allFactories, factoryOrgCodes);
+
+        // 杩囨护鍑烘湁鏁堝伐鍘傜粨鏋�
+        List<BaseFactory> validFactories = allFactories.stream()
+                .filter(f -> authorizedFactoryIds.contains(f.getId()))
+                .collect(Collectors.toList());
+
+        // ===鏋勫缓璁惧鏍� ===
+        Map<String, List<EamEquipment>> equipmentMap = equipmentList.stream()
+                .collect(Collectors.groupingBy(EamEquipment::getFactoryOrgCode));
+
+        // 鏋勫缓鍩虹鏍�
+        List<EamEquipmentTree> treeList = FindsEquipmentEamCenterUtil.wrapEquipmentBaseFactoryTreeList(validFactories);
+
+        // 濉厖璁惧鏁版嵁
+        populateEquipmentNodes(treeList, equipmentMap);
+        return treeList;
+    }
+
+    // 搴旂敤鏁版嵁鏉冮檺鏉′欢锛堝叡鐢ㄦ柟娉曪級
+    private void applyDataPermissionFilter(LoginUser user, QueryWrapper<EamMaintenanceStandard> query) {
+        if (StringUtils.isNotBlank(user.getEamEquipmentIds())) {
+            List<String> equipmentIds = Arrays.asList(user.getEamEquipmentIds().split(","));
+            query.in("e.equipment_code", equipmentIds);
+        } else {
+            List<BaseFactoryUser> factoryUsers = baseFactoryUserService.list(
+                    new LambdaQueryWrapper<BaseFactoryUser>()
+                            .eq(BaseFactoryUser::getUserId, user.getId()));
+
+            if (CollectionUtils.isNotEmpty(factoryUsers)) {
+                Set<String> factoryIds = factoryUsers.stream()
+                        .map(BaseFactoryUser::getFactoryId)
+                        .collect(Collectors.toSet());
+
+                Set<String> factoryCodes = baseFactoryService.listByIds(factoryIds).stream()
+                        .map(BaseFactory::getOrgCode)
+                        .collect(Collectors.toSet());
+
+                query.in("e.factory_org_code", factoryCodes);
+            }
+        }
+    }
+
+    // 鎻愬彇鎺堟潈宸ュ巶ID
+    private Set<String> extractAuthorizedFactoryIds(List<BaseFactory> allFactories, Set<String> authOrgCodes) {
+        Set<String> result = new HashSet<>();
+        // 鏋勫缓ID->宸ュ巶鐨勬槧灏�
+        Map<String, BaseFactory> factoryMap = allFactories.stream()
+                .collect(Collectors.toMap(BaseFactory::getId, Function.identity()));
+
+        // 閫嗗悜鏌ユ壘鐖惰妭鐐归摼
+        for (BaseFactory factory : allFactories) {
+            if (authOrgCodes.contains(factory.getOrgCode())) {
+                collectParentIds(factoryMap, factory.getId(), result);
+            }
+        }
+        return result;
+    }
+
+    // 閫掑綊鏀堕泦鐖惰妭鐐笽D
+    private void collectParentIds(Map<String, BaseFactory> factoryMap, String currentId, Set<String> idSet) {
+        if (StringUtils.isEmpty(currentId) || idSet.contains(currentId)) return;
+
+        idSet.add(currentId);
+        BaseFactory factory = factoryMap.get(currentId);
+        if (factory != null && StringUtils.isNotBlank(factory.getParentId())) {
+            collectParentIds(factoryMap, factory.getParentId(), idSet);
+        }
+    }
+
+    // 濉厖璁惧鑺傜偣锛堥潪閫掑綊锛�
+    private void populateEquipmentNodes(List<EamEquipmentTree> treeList,
+                                        Map<String, List<EamEquipment>> equipmentMap) {
+        for (EamEquipmentTree node : treeList) {
+
+            String orgCode = resolveOrgCodeFromTree(node); // 闇�瀹炵幇璇ラ�昏緫
+
+            // 鍏宠仈璁惧鏁版嵁
+            List<EamEquipment> devices = equipmentMap.getOrDefault(orgCode, Collections.emptyList());
+            if (!CollectionUtils.isEmpty(devices)) {
+                for (EamEquipment device : devices) {
+                    EamEquipmentTree deviceNode = new EamEquipmentTree().convert(device);
+                    deviceNode.setParentId(node.getKey());
+                    deviceNode.setType(2);
+                    deviceNode.setLeaf(true);  // 鏄庣‘鏍囪涓哄彾瀛愯妭鐐�
+                    node.getChildren().add(deviceNode);
+                }
+                // 鍙湁褰撳瓨鍦ㄨ澶囨椂鎵嶆爣璁颁负闈炲彾瀛�
+                node.setLeaf(false);
+            }
+
+            // 缁х画澶勭悊瀛愯妭鐐癸紙宸ュ巶灞傜骇锛�
+            if (!CollectionUtils.isEmpty(node.getChildren())) {
+                populateEquipmentNodes(node.getChildren(), equipmentMap);
+            }
+        }
+    }
+
+    // 瑙f瀽鏂规硶
+    private String resolveOrgCodeFromTree(EamEquipmentTree node) {
+        BaseFactory factory =baseFactoryMapper.selectById(node.getKey());
+        return factory != null ? factory.getOrgCode() : null;
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean addMaintenance(EamSecondMaintenanceRequest request) {
@@ -140,6 +312,12 @@
         order.setStandardId(request.getStandardId());
         order.setMaintenanceDate(request.getMaintenanceDate());
         order.setOperator(request.getOperator());
+        //鎶�鏈姸鎬侀壌瀹氳〃
+        EamBaseHFCode eamBaseHFCode = hfCodeService.selectByCategory(HfTemplateCategoryEnum.SECOND_MAINTENANCE.name());
+        if(eamBaseHFCode == null) {
+            throw new JeecgBootException("鏈厤缃妧鏈姸鎬侀壌瀹氳〃鐨凥F缂栫爜锛屾坊鍔犲け璐ワ紒");
+        }
+        order.setHfCode(eamBaseHFCode.getHfCode());
         order.setRemark(request.getRemark());
         //鐘舵�佸垵濮嬪寲
         order.setMaintenanceStatus(SecondMaintenanceStatusEnum.WAIT_MAINTENANCE.name());
@@ -148,43 +326,18 @@
         order.setDelFlag(CommonConstant.DEL_FLAG_0);
         eamSecondMaintenanceOrderMapper.insert(order);
         //澶勭悊鏄庣粏鏁版嵁
-        if (CollectionUtil.isNotEmpty(request.getTableDetailList())) {
-            request.getTableDetailList().forEach(tableDetail -> {
-                tableDetail.setId(null);
-                tableDetail.setOrderId(order.getId());
+        List<EamMaintenanceStandardDetail> eamMaintenanceStandardDetailList= eamMaintenanceStandardDetailService.selectByStandardId(order.getStandardId());
+        List<EamSecondMaintenanceOrderDetail> requestTableDetailList = new ArrayList<>();
+        if (CollectionUtil.isNotEmpty(eamMaintenanceStandardDetailList)) {
+            eamMaintenanceStandardDetailList.forEach(item -> {
+                EamSecondMaintenanceOrderDetail detail = new EamSecondMaintenanceOrderDetail();
+                BeanUtils.copyProperties(item, detail);
+                detail.setId(null);
+                detail.setOrderId(order.getId());
+                requestTableDetailList.add(detail);
             });
-            secondMaintenanceOrderDetailService.saveBatch(request.getTableDetailList());
+            secondMaintenanceOrderDetailService.saveBatch(requestTableDetailList);
         }
-        //鍒ゆ柇鏄惁瀛樺湪淇濆吇浜� 濡傛灉瀛樺湪鍒欏惎鍔ㄦ祦绋�
-        if (StringUtils.isNotBlank(order.getOperator())) {
-            //鍚姩娴佺▼
-            flowCommonService.initActBusiness("宸ュ崟鍙�: " + order.getOrderNum() + ";璁惧缂栧彿: " + equipment.getEquipmentCode() + ";瀹夎浣嶇疆" + equipment.getInstallationPosition(),
-                    order.getId(), "IEamSecondMaintenanceOrderService", "second_maintenance_process", null);
-            Map<String, Object> variables = new HashMap<>();
-            variables.put("dataId", order.getId());
-            if (StrUtil.isEmpty(order.getRemark())) {
-                variables.put("organization", "鏂板浜屼繚宸ュ崟榛樿鍚姩娴佺▼");
-                variables.put("comment", "鏂板浜屼繚宸ュ崟榛樿鍚姩娴佺▼");
-            } else {
-                variables.put("organization", order.getRemark());
-                variables.put("comment", order.getRemark());
-            }
-            variables.put("proofreading", true);
-            List<String> usernames = new ArrayList<>();
-            usernames.add(order.getOperator());
-            variables.put("NextAssignee", usernames);
-            Result result = flowDefinitionService.startProcessInstanceByKey("second_maintenance_process", variables);
-            if (result != null) {
-                //鏇存柊鍛ㄤ繚鐘舵��
-                order.setMaintenanceStatus(SecondMaintenanceStatusEnum.UNDER_MAINTENANCE.name());
-                order.setActualStartTime(new Date());
-                eamSecondMaintenanceOrderMapper.updateById(order);
-                //鏇存柊璁惧淇濆吇鐘舵��
-                eamEquipmentExtendService.updateEquipmentMaintenanceStatus(order.getEquipmentId(), EquipmentMaintenanceStatus.UNDER_SECOND_MAINTENANCE.name());
-                return result.isSuccess();
-            }
-        }
-
         return true;
     }
 
@@ -203,33 +356,9 @@
             throw new JeecgBootException("鍙湁寰呬繚鍏荤姸鎬佺殑鏁版嵁鎵嶅彲缂栬緫锛�");
         }
         entity.setMaintenanceDate(request.getMaintenanceDate());
-        entity.setOperator(request.getOperator());
         entity.setRemark(request.getRemark());
 
         eamSecondMaintenanceOrderMapper.updateById(entity);
-        //澶勭悊璇︽儏
-        if (CollectionUtil.isNotEmpty(request.getTableDetailList())) {
-            List<EamSecondMaintenanceOrderDetail> addList = new ArrayList<>();
-            List<EamSecondMaintenanceOrderDetail> updateList = new ArrayList<>();
-            request.getTableDetailList().forEach(tableDetail -> {
-                tableDetail.setOrderId(entity.getId());
-                if (tableDetail.getId() == null) {
-                    addList.add(tableDetail);
-                } else {
-                    updateList.add(tableDetail);
-                }
-            });
-            if (CollectionUtil.isNotEmpty(addList)) {
-                secondMaintenanceOrderDetailService.saveBatch(addList);
-            }
-            if (CollectionUtil.isNotEmpty(updateList)) {
-                secondMaintenanceOrderDetailService.updateBatchById(updateList);
-            }
-        }
-        if (CollectionUtil.isNotEmpty(request.getRemoveDetailList())) {
-            List<String> ids = request.getRemoveDetailList().stream().map(EamSecondMaintenanceOrderDetail::getId).collect(Collectors.toList());
-            secondMaintenanceOrderDetailService.removeBatchByIds(ids);
-        }
         //鍒ゆ柇鏄惁瀛樺湪淇濆吇浜� 濡傛灉瀛樺湪鍒欏惎鍔ㄦ祦绋�
         if (StringUtils.isNotBlank(entity.getOperator())) {
             //鍚姩娴佺▼
@@ -278,17 +407,28 @@
             throw new JeecgBootException("璁惧涓嶅瓨鍦紝娣诲姞澶辫触锛�");
         }
         LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        if(sysUser == null || !BusinessCodeConst.PCR0001.equals(sysUser.getPost())) {
-            throw new JeecgBootException("涓嶆槸鎿嶄綔宸ワ紝鏃犳硶棰嗗彇姝ゅ伐鍗曪紒");
+        if(sysUser != null) {
+            if (!BusinessCodeConst.PCR0001.equals(sysUser.getPost()) && !BusinessCodeConst.PCR0002.equals(sysUser.getPost())){
+                throw new JeecgBootException("涓嶆槸鎿嶄綔宸ワ紝鏃犳硶棰嗗彇姝ゅ伐鍗曪紒");
+            }
         }
-        entity.setOperator(sysUser.getUsername());
+        List<String> usernames = new ArrayList<>();
+        if (sysUser != null) {
+            if (BusinessCodeConst.PCR0001.equals(sysUser.getPost())) {
+                entity.setOperator(sysUser.getUsername());
+                usernames.add(entity.getOperator());
+            }
+            if (BusinessCodeConst.PCR0002.equals(sysUser.getPost())) {
+                entity.setRepairman(sysUser.getUsername());
+                usernames.add(entity.getRepairman());
+            }
+        }
         entity.setMaintenanceStatus(SecondMaintenanceStatusEnum.UNDER_MAINTENANCE.name());
         entity.setActualStartTime(new Date());
         eamSecondMaintenanceOrderMapper.updateById(entity);
-
         //鍚姩娴佺▼
-        flowCommonService.initActBusiness("宸ュ崟鍙�: " + entity.getOrderNum() + ";璁惧缂栧彿: " + equipment.getEquipmentCode() + ";瀹夎浣嶇疆" + equipment.getInstallationPosition(),
-                entity.getId(), "IEamSecondMaintenanceOrderService", "second_maintenance_process", null);
+        flowCommonService.initActBusiness("宸ュ崟鍙�: " + entity.getOrderNum() + ";璁惧缂栧彿: " + equipment.getEquipmentCode() + "杩涜璁惧浜岀骇淇濆吇",
+                entity.getId(), "IEamSecondMaintenanceOrderService", "SecondMaintenance_Process", null);
         Map<String, Object> variables = new HashMap<>();
         variables.put("dataId", entity.getId());
         if (StrUtil.isEmpty(entity.getRemark())) {
@@ -299,10 +439,24 @@
             variables.put("comment", entity.getRemark());
         }
         variables.put("proofreading", true);
-        List<String> usernames = new ArrayList<>();
-        usernames.add(entity.getOperator());
-        variables.put("NextAssignee", usernames);
-        Result result = flowDefinitionService.startProcessInstanceByKey("second_maintenance_process", variables);
+        if (sysUser != null) {
+            if (BusinessCodeConst.PCR0001.equals(sysUser.getPost())) {
+                variables.put("operator_task", usernames);
+                List<UserSelector> userSelectorList = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0002);
+                if (!CollectionUtils.isEmpty(userSelectorList)) {
+                    List<String> usernameList = userSelectorList.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                    variables.put("maintenance_task",usernameList);
+                }
+            }else if (BusinessCodeConst.PCR0002.equals(sysUser.getPost())) {
+                variables.put("maintenance_task", usernames);
+                List<UserSelector> userSelectorList = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0001);
+                if (!CollectionUtils.isEmpty(userSelectorList)) {
+                    List<String> usernameList = userSelectorList.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                    variables.put("operator_task",usernameList);
+                }
+            }
+        }
+        Result result = flowDefinitionService.startProcessInstanceByKey("SecondMaintenance_Process", variables);
         if (result != null) {
             //鏇存柊璁惧淇濆吇鐘舵��
             eamEquipmentExtendService.updateEquipmentMaintenanceStatus(entity.getEquipmentId(), EquipmentMaintenanceStatus.UNDER_SECOND_MAINTENANCE.name());
@@ -326,7 +480,7 @@
         }
         request.setAssignee(user.getUsername());
         // 鑾峰彇娴佺▼涓氬姟璁板綍
-        FlowMyBusiness flowMyBusiness = flowMyBusinessService.getFlowMyBusiness(request.getInstanceId());
+        FlowMyBusiness flowMyBusiness = flowMyBusinessService.getFlowMyBusiness(request.getInstanceId(), request.getTaskId());
         if (flowMyBusiness == null) {
             throw new JeecgBootException("娴佺▼瀹炰緥涓嶅瓨鍦紝璇峰埛鏂板悗閲嶈瘯锛�");
         }
@@ -355,92 +509,158 @@
         List<UserSelector> userSelectors;
         switch (status) {
             case UNDER_MAINTENANCE:
+                //淇濆吇涓�
+                boolean parallelCompletion = flowTaskService.checkParallelCompletion(flowMyBusiness.getTaskId());
                 //鎵ц瀹屾垚
-                //璁惧绠$悊鍛樼‘璁�
-                String equipmentManager = equipment.getEquipmentManager();
-                if(StringUtils.isBlank(equipmentManager)) {
-                    throw new JeecgBootException("璁惧鏈垎閰嶈澶囩鐞嗗憳锛屾棤娉曡繘鍏ヤ笅绾у鎵癸紒");
-                }
-                userApprovalList = Collections.singletonList(equipmentManager);
-                values.put("dataId", entity.getId());
-                values.put("organization", "浜屼繚鎵ц缁撴潫");
-                values.put("comment", "浜屼繚鎵ц缁撴潫");
-                values.put("NextAssignee", userApprovalList);
-                request.setComment("浜屼繚鎵ц缁撴潫");
-                //璁剧疆entity
-                entity.setMaintenanceStatus(SecondMaintenanceStatusEnum.WAIT_CONFIRM.name());
-                entity.setActualEndTime(new Date());
-                //澶勭悊闄勪欢
-                if (CollectionUtil.isNotEmpty(request.getImageFilesResult())) {
-                    List<FileUploadResult> fileUploadResultList = request.getImageFilesResult();
-                    ObjectMapper mapper = new ObjectMapper();
-                    try {
-                        String referenceFile = mapper.writeValueAsString(fileUploadResultList);
-                        entity.setImageFiles(referenceFile);
-                    } catch (JsonProcessingException e) {
-                        log.error("JSON杞崲澶辫触锛�" + e.getMessage(), e);
+                 userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0004);
+                if (CollectionUtil.isEmpty(userSelectors)) {
+                    throw new JeecgBootException("璁惧鏈瓨鍦ㄧ鐞嗗憳锛屾棤娉曡繘鍏ヤ笅绾у鎵癸紒");
+                }else{
+                    userApprovalList = userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                    if (parallelCompletion) {
+                        values.put("NextAssignee", userApprovalList);
+                        entity.setMaintenanceStatus(SecondMaintenanceStatusEnum.WAIT_ADMIN_CONFIRM.name());
+                        entity.setActualEndTime(new Date());
                     }
                 }
-                //澶勭悊璇︽儏
-                if (CollectionUtil.isNotEmpty(request.getTableDetailList())) {
-                    secondMaintenanceOrderDetailService.updateBatchById(request.getTableDetailList());
+                if (BusinessCodeConst.PCR0001.equals(user.getPost())) {
+                    entity.setOperator(user.getUsername());
+                    values.put("organization", "浜屼繚鎿嶄綔宸ユ墽琛岀粨鏉�");
+                    values.put("comment", "浜屼繚鎿嶄綔宸ユ墽琛岀粨鏉�");
+                    request.setComment("浜屼繚鎿嶄綔宸ユ墽琛岀粨鏉�");
+                    //澶勭悊瀵瑰簲璇︽儏
+                    if (CollectionUtils.isNotEmpty(request.getTableDetailList())){
+                        //鍒犻櫎鍘熸湁鏁版嵁
+                        List<EamSecondMaintenanceOrderDetail> addList = new ArrayList<>();
+                        //鍏堝垹闄ゅ師鏈�
+                        LambdaQueryWrapper<EamSecondMaintenanceOrderDetail> queryWrapper = new LambdaQueryWrapper<>();
+                        queryWrapper.eq(EamSecondMaintenanceOrderDetail::getOrderId, entity.getId());
+                        queryWrapper.eq(EamSecondMaintenanceOrderDetail::getItemCategory,EamMaintenanceStandardDetailCategory.OPERATOR_MAINTENANCE.name());
+                        secondMaintenanceOrderDetailService.remove(queryWrapper);
+                        request.getTableDetailList().forEach(tableDetail -> {
+                            EamSecondMaintenanceOrderDetail eamMaintenanceStandardDetail=new EamSecondMaintenanceOrderDetail();
+                            BeanUtils.copyProperties(tableDetail, eamMaintenanceStandardDetail);
+                            eamMaintenanceStandardDetail.setOrderId(entity.getId());
+                            eamMaintenanceStandardDetail.setCreateBy(user.getUsername());
+                            addList.add(eamMaintenanceStandardDetail);
+                        });
+                        secondMaintenanceOrderDetailService.saveBatch(addList);
+                    }
+                }else if (BusinessCodeConst.PCR0002.equals(user.getPost())) {
+                    entity.setRepairman(user.getUsername());
+                    values.put("organization", "浜屼繚缁翠慨宸ユ墽琛岀粨鏉�");
+                    values.put("comment", "浜屼繚缁翠慨宸ユ墽琛岀粨鏉�");
+                    request.setComment("浜屼繚缁翠慨宸ユ墽琛岀粨鏉�");
+                    //澶勭悊瀵瑰簲璇︽儏
+                    if (CollectionUtils.isNotEmpty(request.getTableDetailList())){
+                        //鍒犻櫎鍘熸湁鏁版嵁
+                        List<EamSecondMaintenanceOrderDetail> addList = new ArrayList<>();
+                        //鍏堝垹闄ゅ師鏈�
+                        LambdaQueryWrapper<EamSecondMaintenanceOrderDetail> queryWrapper = new LambdaQueryWrapper<>();
+                        queryWrapper.eq(EamSecondMaintenanceOrderDetail::getOrderId, entity.getId());
+                        queryWrapper.eq(EamSecondMaintenanceOrderDetail::getItemCategory,EamMaintenanceStandardDetailCategory.REPAIRER_MAINTENANCE.name());
+                        secondMaintenanceOrderDetailService.remove(queryWrapper);
+                        request.getTableDetailList().forEach(tableDetail -> {
+                            EamSecondMaintenanceOrderDetail eamMaintenanceStandardDetail=new EamSecondMaintenanceOrderDetail();
+                            BeanUtils.copyProperties(tableDetail, eamMaintenanceStandardDetail);
+                            eamMaintenanceStandardDetail.setOrderId(entity.getId());
+                            eamMaintenanceStandardDetail.setCreateBy(user.getUsername());
+                            addList.add(eamMaintenanceStandardDetail);
+                        });
+                        secondMaintenanceOrderDetailService.saveBatch(addList);
+                    }
                 }
-                //鏇存柊璁惧淇濆吇鐘舵��
-                eamEquipmentExtendService.updateEquipmentMaintenanceStatus(entity.getEquipmentId(), EquipmentMaintenanceStatus.SECOND_MAINTENANCE_WAIT_CONFIRM.name());
+                values.put("dataId", entity.getId());
                 break;
-            case WAIT_CONFIRM:
-                userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getOrgId(), BusinessCodeConst.PCR0003);
+            case WAIT_ADMIN_CONFIRM:
+                //绠$悊鍛樼‘璁�
+                userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0006);
                 if (CollectionUtil.isEmpty(userSelectors)) {
-                    throw new JeecgBootException("璁惧鏈垎閰嶇粰杞﹂棿鐝粍闀匡紝鏃犳硶杩涘叆涓嬬骇瀹℃壒锛�");
-                }
-                //鐝粍闀跨‘璁�
-                userApprovalList = userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
-                values.put("dataId", entity.getId());
-                values.put("organization", request.getConfirmComment());
-                values.put("comment", request.getConfirmComment());
-                values.put("NextAssignee", userApprovalList);
-                values.put("confirmation", request.getConfirmDealType());
-                request.setComment(request.getConfirmComment());
-                //璁剧疆entity
-                entity.setMaintenanceStatus(SecondMaintenanceStatusEnum.WAIT_LEADER_CONFIRM.name());
-                entity.setConfirmUser(user.getUsername());
-                entity.setConfirmComment(request.getConfirmComment());
-                entity.setConfirmTime(new Date());
-                entity.setConfirmDealType(request.getConfirmDealType());
-                if (CommonConstant.HAS_CANCLE.equals(request.getConfirmDealType())) {
-                    //椹冲洖
-                    userApprovalList = new ArrayList<>();
-                    userApprovalList.add(entity.getOperator());
-                    values.put("NextAssignee", userApprovalList);
-                    entity.setMaintenanceStatus(WeekMaintenanceStatusEnum.UNDER_MAINTENANCE.name());
-                }
-                //澶勭悊鎶ヤ慨
-                List<EamSecondMaintenanceOrderDetail> collect = request.getTableDetailList().stream().filter((detail) -> CommonConstant.DEFAULT_1.equals(detail.getReportFlag())).collect(Collectors.toList());
-                if (CollectionUtil.isNotEmpty(collect)) {
-                    eamReportRepairService.reportRepairFromSecondMaintenance(equipment.getId(), entity.getOperator(), collect);
+                    throw new JeecgBootException("璁惧鏈瓨鍦ㄦ鏌ヤ汉锛屾棤娉曡繘鍏ヤ笅绾у鎵癸紒");
+                }else{
+                    userApprovalList= userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                    values.put("dataId", entity.getId());
+                    if (StrUtil.isEmpty(request.getDealDescription())){
+                        request.setDealDescription("");
+                    }
+                    values.put("organization",request.getDealDescription());
+                    values.put("comment", request.getDealDescription());
+                    values.put("manageUserResult",request.getManageUserResult());
+                    request.setComment(request.getDealDescription());
+                    if (request.getManageUserResult().equals("2")){
+                        entity.setMaintenanceStatus(SecondMaintenanceStatusEnum.UNDER_MAINTENANCE.name());
+                    }else {
+                        values.put("NextAssignee", userApprovalList);
+                        entity.setMaintenanceStatus(SecondMaintenanceStatusEnum.WAIT_INSPECTOR_CONFIRM.name());
+                        entity.setConfirmTime(new Date());
+                        entity.setManageUser(user.getUsername());
+                        entity.setProblemDescription(request.getProblemDescription());
+                        entity.setManageUserResult(request.getManageUserResult());
+                        entity.setDealDescription(request.getDealDescription());
+                    }
                 }
                 break;
-            case WAIT_LEADER_CONFIRM:
+            case WAIT_INSPECTOR_CONFIRM:
+                //妫�鏌ヤ汉纭
+                if (StrUtil.isEmpty(request.getInspectConfirmComment())){
+                    request.setInspectConfirmComment("");
+                }
                 values.put("dataId", entity.getId());
-                values.put("organization", request.getLeaderConfirmComment());
-                values.put("comment", request.getLeaderConfirmComment());
-                request.setComment(request.getLeaderConfirmComment());
-                //璁剧疆entity
-                entity.setMaintenanceStatus(SecondMaintenanceStatusEnum.COMPLETE.name());
-                entity.setConfirmLeader(user.getUsername());
-                entity.setLeaderConfirmComment(request.getLeaderConfirmComment());
-                entity.setLeaderConfirmTime(new Date());
-                //鏇存柊璁惧淇濆吇鐘舵��
-                eamEquipmentExtendService.updateEquipmentMaintenanceStatus(entity.getEquipmentId(), EquipmentMaintenanceStatus.NORMAL.name());
+                values.put("organization",request.getInspectConfirmComment());
+                values.put("comment", request.getInspectConfirmComment());
+                values.put("inspectorResult",request.getInspectorResult());
+                request.setComment(request.getInspectConfirmComment());
+                if (request.getInspectorResult().equals("2")){
+                    entity.setMaintenanceStatus(SecondMaintenanceStatusEnum.WAIT_ADMIN_CONFIRM.name());
+                    userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0004);
+                    if (CollectionUtil.isEmpty(userSelectors)) {
+                        throw new JeecgBootException("璁惧鏈瓨鍦ㄨ溅闂磋澶囩鐞嗗憳锛屾棤娉曡繘鍏ラ┏鍥炲鎵癸紒");
+                    }else{
+                        userApprovalList = userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                        values.put("NextAssignee", userApprovalList);
+                    }
+                }else {
+                    entity.setMaintenanceStatus(SecondMaintenanceStatusEnum.COMPLETE.name());
+                    entity.setInspector(user.getUsername());
+                    entity.setInspectorResult(request.getInspectorResult());
+                    entity.setInspectConfirmComment(request.getInspectConfirmComment());
+                    entity.setInspectConfirmTime(new Date());
+                }
                 break;
+            default:
+                throw  new JeecgBootException("瀹℃壒澶辫触");
         }
         request.setValues(values);
-
         // 瀹屾垚娴佺▼浠诲姟
         Result result = flowTaskService.complete(request);
         if (!result.isSuccess()) {
             throw new JeecgBootException("瀹℃壒澶辫触锛岃鍒锋柊鏌ョ湅锛�");
         }
+        if (user.getPost().equals(BusinessCodeConst.PCR0004)&&request.getManageUserResult().equals("2")){
+            //绠$悊鍛樻嫆缁濓紝浼氱鑺傜偣淇敼瀵瑰簲鍏崇郴
+            List<FlowMyBusiness> list = flowMyBusinessService.list(new LambdaQueryWrapper<FlowMyBusiness>().eq(FlowMyBusiness::getProcessInstanceId, request.getInstanceId()));
+            if (CollectionUtils.isNotEmpty(list)) {
+                list.forEach(item -> {
+                    if (item.getTaskNameId().equals("maintenance_task")) {
+                        //鑾峰彇缁翠慨宸ュ矖浣嶇敤鎴�
+                        List<UserSelector> userSelectorList = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0002);
+                        if (!CollectionUtils.isEmpty(userSelectorList)) {
+                            List<String> usernameList = userSelectorList.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                            item.setTodoUsers(JSON.toJSONString(usernameList));
+                        }
+                    }
+                    if (item.getTaskNameId().equals("operator_task")) {
+                        //鑾峰彇鎿嶄綔浜哄矖浣嶇敤鎴�
+                        List<UserSelector> userSelectorList = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0001);
+                        if (!CollectionUtils.isEmpty(userSelectorList)) {
+                            List<String> usernameList = userSelectorList.stream().map(UserSelector::getUsername).collect(Collectors.toList());
+                            item.setTodoUsers(JSON.toJSONString(usernameList));
+                        }
+                    }
+                });
+                flowMyBusinessService.updateBatchById(list);
+            }
+        }
         //淇濆瓨宸ュ崟
         eamSecondMaintenanceOrderMapper.updateById(entity);
         return entity;

--
Gitblit v1.9.3