From 2cf06285f64311722cbf79fd5635b16718635e5e Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期五, 12 六月 2026 18:07:16 +0800
Subject: [PATCH] 不合格处理:支持多生产批次提交oa;oa流程查看调整

---
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsUnqualifiedHandlerServiceImpl.java |  154 ++++++++++++++++++++++++++++++---------------------
 1 files changed, 91 insertions(+), 63 deletions(-)

diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsUnqualifiedHandlerServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsUnqualifiedHandlerServiceImpl.java
index 79490a1..c2ad66c 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsUnqualifiedHandlerServiceImpl.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsUnqualifiedHandlerServiceImpl.java
@@ -15,22 +15,26 @@
 import com.ruoyi.common.core.domain.Result;
 import com.ruoyi.common.core.domain.entity.SysDictData;
 import com.ruoyi.common.enums.ContractType;
+import com.ruoyi.common.numgen.NumberGenerator;
 import com.ruoyi.common.oa.OAProcess;
 import com.ruoyi.common.oa.OAProperty;
 import com.ruoyi.common.oa.OAResult;
 import com.ruoyi.common.utils.QueryWrappers;
 import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.framework.exception.ErrorException;
 import com.ruoyi.inspect.dto.PushOADto;
 import com.ruoyi.inspect.dto.UnqualifiedHandlerDto;
 import com.ruoyi.inspect.excel.InsUnqualifiedHandlerExcelData;
 import com.ruoyi.inspect.mapper.InsOrderMapper;
+import com.ruoyi.inspect.mapper.InsSampleMapper;
 import com.ruoyi.inspect.mapper.InsUnqualifiedHandlerMapper;
 import com.ruoyi.inspect.pojo.CommonOa;
 import com.ruoyi.inspect.pojo.InsOrder;
 import com.ruoyi.inspect.pojo.InsUnqualifiedHandler;
 import com.ruoyi.inspect.pojo.InsUnqualifiedHandlerFile;
 import com.ruoyi.inspect.service.CommonOaService;
+import com.ruoyi.inspect.service.InsOrderService;
 import com.ruoyi.inspect.service.InsUnqualifiedHandlerFileService;
 import com.ruoyi.inspect.service.InsUnqualifiedHandlerService;
 import com.ruoyi.inspect.vo.UnqualifiedHandlerVO;
@@ -46,10 +50,7 @@
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -69,9 +70,11 @@
     @Resource
     private InsUnqualifiedHandlerFileService insUnqualifiedHandlerFileService;
     @Resource
-    private InsOrderMapper insOrderMapper;
+    private InsSampleMapper insSampleMapper;
     @Resource
     private ISysDictTypeService sysDictTypeService;
+    @Resource
+    private NumberGenerator<InsUnqualifiedHandler> insUnqualifiedHandlerNumberGenerator;
 
 
     @Override
@@ -122,25 +125,29 @@
     }
 
     @Override
+    public List<Integer> getList() {
+        return baseMapper.selectList(null).stream().map(InsUnqualifiedHandler::getInsOrderId).collect(Collectors.toList());
+    }
+
+    @Override
     public Result pushOA(PushOADto pushOADto) {
         //鑾峰彇涓嶅悎鏍煎鐞嗚褰�
-        UnqualifiedHandlerVO vo = baseMapper.findById(pushOADto.getHandlerId());
+        UnqualifiedHandlerVO vo = baseMapper.findByGroupId(pushOADto.getGroupId(),pushOADto.getHandlerId());
 
         //鎻愪氦oa鐩稿叧瀛楁璧嬪��
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         Map<String, String> mainFields = new HashMap<>();
-        mainFields.put("bh", vo.getNo());//缂栧彿
-        mainFields.put("gysmc", vo.getSupplierName());//渚涘簲鍟嗗悕绉�
-        mainFields.put("wlmc", vo.getMaterialName());//鐗╂枡鍚嶇О
-        mainFields.put("scpc", vo.getProductionBatch());//鐢熶骇鎵规
-        mainFields.put("dhsl", vo.getCargoQuantity());//鍒拌揣鏁伴噺
-        mainFields.put("ggxh", vo.getSpecsModels());//瑙勬牸鍨嬪彿
-        mainFields.put("bjrq", vo.getInspectTime().format(formatter));//鎶ユ鏃ユ湡
-        mainFields.put("fkr", SecurityUtils.getUsername());//鍙嶉浜�
-        mainFields.put("fkrq", vo.getFeedbackTime().format(formatter));//鍙嶉鏃ユ湡
-        mainFields.put("fl", vo.getClassification());//鍒嗙被
-        mainFields.put("bhggs", vo.getOffGradeAscription());//涓嶅悎鏍煎綊灞�
-        mainFields.put("bhgqkms", vo.getUnqualifiedDesc());//涓嶅悎鏍兼儏鍐垫弿杩�
+        mainFields.put("gysmcsuppliername", vo.getSupplierName());//渚涘簲鍟嗗悕绉�
+        mainFields.put("wlmcmaterialname", vo.getMaterialName());//鐗╂枡鍚嶇О
+        mainFields.put("scpcproductionbatch", vo.getProductionBatch());//鐢熶骇鎵规
+        mainFields.put("dhslcargoquantity", vo.getCargoQuantity() + vo.getBuyUnitMeas());//鍒拌揣鏁伴噺
+        mainFields.put("ggxhspecificationsmodels", vo.getSpecsModels());//瑙勬牸鍨嬪彿
+        mainFields.put("bjrqdeclarationinspectdate", vo.getInspectTime().format(formatter));//鎶ユ鏃ユ湡
+        mainFields.put("fkrprovideroffeedback", SecurityUtils.getUsername());//鍙嶉浜�
+        mainFields.put("fkrqfeedbacktime", vo.getFeedbackTime().format(formatter));//鍙嶉鏃ユ湡
+        mainFields.put("flclassification", vo.getClassification());//鍒嗙被
+        mainFields.put("bhggsoffgradeascription", vo.getOffGradeAscription());//涓嶅悎鏍煎綊灞�
+        mainFields.put("bhgqkmsunqualifieddescription", vo.getUnqualifiedDesc());//涓嶅悎鏍兼儏鍐垫弿杩�
 
         //鏌ヨ闄勪欢
         List<InsUnqualifiedHandlerFile> handlerFiles = insUnqualifiedHandlerFileService.list(Wrappers.<InsUnqualifiedHandlerFile>lambdaQuery()
@@ -148,7 +155,7 @@
         if (CollectionUtils.isNotEmpty(handlerFiles)) {
             StringBuilder fileUrl = new StringBuilder();
             for (int i = 0; i < handlerFiles.size(); i++) {
-                String path = handlerFiles.get(i).getType().equals(1) ? "/lims/img/" : "/lims/word/";
+                String path = handlerFiles.get(i).getType().equals(1) ? "/img/" : "/word/";
                 if (i == handlerFiles.size() - 1) {
                     fileUrl.append("<a href='" + oaProperty.getProdIp()).append(path + handlerFiles.get(i).getFileUrl()
                             + "'target='_blank'>" + handlerFiles.get(i).getFileName() + "</a>");
@@ -157,7 +164,7 @@
                             + "'target='_blank'>" + handlerFiles.get(i).getFileName() + "</a>").append("<br/>");
                 }
             }
-            mainFields.put("xlimsfj", fileUrl.toString());
+            mainFields.put("fjlj", fileUrl.toString());
         }
         //娴佺▼鏍囬
         String requestName = vo.getHeadline();
@@ -165,20 +172,16 @@
         boolean oa = false;
         try {
             log.info("鍙戣捣涓嶅悎鏍煎鐞哋A瀹℃牳娴佺▼");
-            //鏍规嵁IFS鍩熻幏鍙栧搴旂殑娴佺▼id
-            if(StringUtils.isBlank(pushOADto.getContract())){
-                throw new RuntimeException("IFS鍩熴��"+pushOADto.getContract()+"銆戜笉瀛樺湪锛孫A娴佺▼鎻愪氦澶辫触");
-            }
-            String unqualifiedProcessId = StringUtils.equals(ContractType.ZTNS.getValue(),pushOADto.getContract())?oaProperty.getUnqualifiedProcessId():oaProperty.getUnqualifiedProcessIdByKJNS();
+            String unqualifiedProcessId = oaProperty.getUnqualifiedProcessId();
             OAResult oaResult = OAProcess.start(mainFields, requestName, unqualifiedProcessId,SecurityUtils.getUsername());
-            log.info("{}涓嶅悎鏍煎鐞哋A瀹℃牳娴佺▼缁撴潫锛岃繑鍥炵粨鏋�->{}",unqualifiedProcessId,oaResult);
+            log.info("涓嶅悎鏍兼祦绋婭D:{},涓嶅悎鏍煎鐞哋A瀹℃牳娴佺▼鍙戣捣鎴愬姛->{}",unqualifiedProcessId,oaResult);
             oa = oaResult.success();
             if (oa) {
                 String addWorkflowResult = oaResult.getAddWorkflowResult();
                 baseMapper.update(null, new LambdaUpdateWrapper<InsUnqualifiedHandler>()
                         .set(InsUnqualifiedHandler::getRequestId, addWorkflowResult)
                         .set(InsUnqualifiedHandler::getOaState, 2)
-                        .eq(InsUnqualifiedHandler::getId, pushOADto.getHandlerId()));
+                        .eq(InsUnqualifiedHandler::getGroupId, pushOADto.getGroupId()));
             } else {
                 return Result.fail("鎻愪氦oa澶辫触: " + oaResult.getErrorMsg());
             }
@@ -190,47 +193,67 @@
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void unqualifiedHandlerOACallback(Long oaWorkId, String checkResult, JSONArray objects) {
+    public void unqualifiedHandlerOACallback(Long oaWorkId, String checkResult, JSONObject response) {
         // 娌℃湁杩欎釜灏辩粨鏉�
         Long count1 = baseMapper.selectCount(Wrappers.<InsUnqualifiedHandler>lambdaQuery()
                 .eq(InsUnqualifiedHandler::getRequestId, Integer.valueOf(String.valueOf(oaWorkId))));
         if (count1 == 0) {
             return;
         }
-
+        //澶勭悊鎺柦map
+        Map<String, String> clcsMap = new HashMap<>();
+        clcsMap.put("0","璁╂鏀捐");
+        clcsMap.put("1","閫�璐�");
+        clcsMap.put("2","閮ㄥ垎閫�璐�");
+        clcsMap.put("3","闄嶇骇浣跨敤");
         //oa鐘舵�侊細3閫氳繃 4椹冲洖
         Integer oaState = "1".equals(checkResult) ? 3 : 4;
         baseMapper.update(null, new LambdaUpdateWrapper<InsUnqualifiedHandler>()
                 .set(InsUnqualifiedHandler::getOaState, oaState)
-                .ge(InsUnqualifiedHandler::getRequestId, Integer.valueOf(String.valueOf(oaWorkId))));
+                .set(InsUnqualifiedHandler::getClassification,response.getString("flclassification"))
+                .eq(InsUnqualifiedHandler::getRequestId, Integer.valueOf(String.valueOf(oaWorkId))));
         //淇濆瓨oa瀹℃壒娴佺▼璁板綍
         List<CommonOa> commonOaList = new ArrayList<>();
-        objects.forEach(l -> {
-            JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(l));
+        JSONArray workflowRequestLogs = JSONArray.parseArray(JSONObject.toJSONString(response.get("workflowRequestLogs")));
+        for (Object workflowRequestLog : workflowRequestLogs) {
+            JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(workflowRequestLog));
             CommonOa oa = new CommonOa();
             oa.setApprover(jsonObject.getString("operatorName"));
+            oa.setOperateId(jsonObject.getLong("operateId"));
             oa.setWorkflowId(oaWorkId);
             oa.setOperation(jsonObject.getString("operateType"));
             oa.setApprovalDate(jsonObject.getString("operateDate"));
-            oa.setApprovalOpinion(jsonObject.getString("remark"));
             oa.setNodeName(jsonObject.getString("nodeName"));
             oa.setApprovalTime(jsonObject.getString("operateTime"));
+            //璁剧疆鍚勮妭鐐圭殑澶勭悊鎰忚
+            if(StringUtils.isNotBlank(oa.getNodeName())){
+                if(oa.getNodeName().contains("璐ㄩ噺")){
+                    oa.setOperation(clcsMap.get(response.getString("clcs1")));
+                    oa.setApprovalOpinion(response.getString("dbhgcpdclyqdealwiththenonconfo"));//1.瀵逛笉鍚堟牸浜у搧鐨勫鐞嗚姹�
+                }else if(oa.getNodeName().contains("宸ヨ壓")){
+                    oa.setApprovalOpinion(response.getString("gjyqimprovementrequirements"));//2.鏀硅繘瑕佹眰
+                }else if(oa.getNodeName().contains("鎶�鏈�")){
+                    oa.setOperation(clcsMap.get(response.getString("clcs2")));
+                    oa.setApprovalOpinion(response.getString("csyqactionrequirement"));//3.鎺柦瑕佹眰
+                }else if(oa.getNodeName().contains("鎬荤粡鐞�")){
+                    oa.setOperation(clcsMap.get(response.getString("clcs3")));
+                    oa.setApprovalOpinion(response.getString("zzclyqfinaltreatmentrequiremen"));//4.鏈�缁堝鐞嗚姹�
+                }else if(oa.getNodeName().contains("鏍哥畻")){
+                    oa.setApprovalOpinion(response.getString("spyqcompensationrequirement"));//5.绱㈣禂瑕佹眰
+                }else{
+                    oa.setApprovalOpinion(jsonObject.getString("remark"));
+                }
+            }
 
             //鏌ヨ鍒ゆ柇涔嬪墠鏄惁娣诲姞杩�
             long count = commonOaService.count(Wrappers.<CommonOa>lambdaQuery()
-                    .eq(CommonOa::getApprover, oa.getApprover())
-                    .eq(CommonOa::getWorkflowId, oa.getWorkflowId())
-                    .eq(CommonOa::getOperation, oa.getOperation())
-                    .eq(CommonOa::getApprovalDate, oa.getApprovalDate())
-                    .eq(CommonOa::getApprovalOpinion, oa.getApprovalOpinion())
-                    .eq(CommonOa::getNodeName, oa.getNodeName())
-                    .eq(CommonOa::getApprovalTime, oa.getApprovalTime())
-            );
+                    .eq(CommonOa::getWorkflowId, oaWorkId)
+                    .eq(CommonOa::getOperateId, oa.getOperateId()));
             // 娌℃湁閲嶅娣诲姞
             if (count == 0) {
                 commonOaList.add(oa);
             }
-        });
+        }
         commonOaService.saveBatch(commonOaList);
 
     }
@@ -253,28 +276,34 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean addUnqualifiedHandler(UnqualifiedHandlerDto unqualifiedHandlerDto) {
-        if (unqualifiedHandlerDto.getInventoryQuantityId() == null) {
-            throw new ErrorException("缂哄皯鍘熸潗鏂檌d");
-        }
         long count = this.count(Wrappers.<InsUnqualifiedHandler>lambdaQuery()
-                .eq(InsUnqualifiedHandler::getInsOrderId, unqualifiedHandlerDto.getInsOrderId()));
+                .in(InsUnqualifiedHandler::getInsOrderId, unqualifiedHandlerDto.getSelectOrderIds()));
         if (count > 0) {
-            throw new ErrorException("褰撳墠妫�楠屽崟宸叉彁浜よ繃涓嶅悎鏍�");
+            throw new ErrorException("瀛樺湪宸叉彁浜よ繃涓嶅悎鏍煎鐞嗙殑璁㈠崟");
         }
+        //鐢熸垚鍒嗙粍id
+        String groupId = insUnqualifiedHandlerNumberGenerator.generateNumberWithPrefix(6, "GROUP", InsUnqualifiedHandler::getGroupId);
         // 鍘熸潗鏂欑紪鍙峰垏鍓�
-        InsOrder order = insOrderMapper.selectOne(Wrappers.<InsOrder>lambdaQuery()
-                .eq(InsOrder::getId, unqualifiedHandlerDto.getInsOrderId())
-                .select(InsOrder::getEntrustCode));
-        unqualifiedHandlerDto.setNo(order.getEntrustCode());
+        for (Integer selectOrderId : unqualifiedHandlerDto.getSelectOrderIds()) {
+            InsUnqualifiedHandler insUnqualifiedHandler = new InsUnqualifiedHandler();
+            BeanUtils.copyProperties(unqualifiedHandlerDto, insUnqualifiedHandler);
+            Map<String, Object> orderMap = insSampleMapper.selectInsOrder(selectOrderId);
+            insUnqualifiedHandler.setNo(orderMap.get("entrustCode").toString());
+            insUnqualifiedHandler.setInventoryQuantityId(Integer.valueOf(orderMap.get("inventoryQuantityId").toString()));
+            insUnqualifiedHandler.setInsOrderId(selectOrderId);
+            insUnqualifiedHandler.setGroupId(groupId);
+            insUnqualifiedHandler.setProductionBatch(orderMap.get("updateBatchNo").toString());
+            insUnqualifiedHandler.setCargoQuantity(Double.parseDouble(orderMap.get("qtyArrived").toString()));
+            insUnqualifiedHandler.setBuyUnitMeas(orderMap.get("buyUnitMeas").toString());
 
-        this.save(unqualifiedHandlerDto);
-        if (CollectionUtils.isNotEmpty(unqualifiedHandlerDto.getUnqualifiedHandlerFiles())) {
-            for (InsUnqualifiedHandlerFile unqualifiedHandlerFile : unqualifiedHandlerDto.getUnqualifiedHandlerFiles()) {
-                unqualifiedHandlerFile.setUnqualifiedId(unqualifiedHandlerDto.getId());
+            this.save(insUnqualifiedHandler);
+            if (CollectionUtils.isNotEmpty(unqualifiedHandlerDto.getUnqualifiedHandlerFiles())) {
+                for (InsUnqualifiedHandlerFile unqualifiedHandlerFile : unqualifiedHandlerDto.getUnqualifiedHandlerFiles()) {
+                    unqualifiedHandlerFile.setGroupId(insUnqualifiedHandler.getGroupId());
+                }
+                insUnqualifiedHandlerFileService.updateBatchById(unqualifiedHandlerDto.getUnqualifiedHandlerFiles());
             }
-            insUnqualifiedHandlerFileService.updateBatchById(unqualifiedHandlerDto.getUnqualifiedHandlerFiles());
         }
-
         return true;
     }
 
@@ -318,22 +347,21 @@
         BeanUtil.copyProperties(insUnqualifiedHandler, unqualifiedHandlerDto);
         // 鏌ョ湅闄勪欢
         List<InsUnqualifiedHandlerFile> list = insUnqualifiedHandlerFileService.list(Wrappers.<InsUnqualifiedHandlerFile>lambdaQuery()
-                .eq(InsUnqualifiedHandlerFile::getUnqualifiedId, unqualifiedHandlerDto.getId()));
+                .eq(InsUnqualifiedHandlerFile::getGroupId, unqualifiedHandlerDto.getGroupId()));
         unqualifiedHandlerDto.setUnqualifiedHandlerFiles(list);
         return unqualifiedHandlerDto;
     }
 
     /**
      * 鍒犻櫎涓嶅悎鏍�
-     * @param id
+     * @param groupId
      * @return
      */
     @Override
-    public boolean deleteUnqualifiedHandler(Integer id) {
+    public boolean deleteUnqualifiedHandler(String groupId) {
         insUnqualifiedHandlerFileService.remove(Wrappers.<InsUnqualifiedHandlerFile>lambdaQuery()
-                .eq(InsUnqualifiedHandlerFile::getUnqualifiedId, id));
-        this.removeById(id);
-        return true;
+                .eq(InsUnqualifiedHandlerFile::getGroupId, groupId));
+        return this.remove(Wrappers.<InsUnqualifiedHandler>lambdaQuery().eq(InsUnqualifiedHandler::getGroupId, groupId));
     }
 }
 

--
Gitblit v1.9.3