瀏覽代碼

资产中间表下推校验修改

wanwei 6 月之前
父節點
當前提交
6258eae689
共有 1 個文件被更改,包括 71 次插入45 次删除
  1. 71 45
      src/main/java/fi/fa/opplugin/utils/ChangeDataUtils.java

+ 71 - 45
src/main/java/fi/fa/opplugin/utils/ChangeDataUtils.java

@@ -135,6 +135,7 @@ public class ChangeDataUtils {
         String dispatchType = info.getString("nckd_dispatch_type");//调拨类型
         String nckd_card_real_code = info.getString("nckd_card_number");
         String nckd_storeplace = info.getString("nckd_storeplace");
+        String user = info.getString("nckd_used_user");
         String[] asset = nckd_card_real_code.split(",");
         if (nckd_card_real_code.isEmpty()) {
             return "单据" + billno + "未绑定资产信息,生成调拨单失败";
@@ -151,60 +152,75 @@ public class ChangeDataUtils {
 
         //组织相同则处理
         if (isSame) {
+            //经费系统实物卡片编码
+            List<String> cardNumberList = new ArrayList<>();
+            //经费系统实物卡片关联的e管家实物卡片编码
+            List<String> eCardNumberList = new ArrayList<>();
+            //numberList 中有而 eCardNumberList 中没有的元素
+            List<String> missingInECard = new ArrayList<>();
             String e_orgId = Arrays.stream(asset).map(item -> item.split(":")[1]).collect(Collectors.toList()).get(0);
             //查询e管家实物卡片清单
             QFilter filter = new QFilter("number", QCP.in,numberList);
-            DynamicObject[] dynamicObjects = BusinessDataServiceHelper.load("nckd_fa_card_real_list","id",new QFilter[] {filter});
-            if (dynamicObjects.length == 0 || dynamicObjects.length != numberList.size()) {
+            DynamicObject[] dynamicObjects = BusinessDataServiceHelper.load("nckd_fa_card_real_list","id,nckd_card_real_code",new QFilter[] {filter});
+            //查询e管家实物卡片关联的经费系统实物卡片
+            for (DynamicObject eCard : dynamicObjects) {
+                String cardNumber = eCard.getString("nckd_card_real_code");
+                cardNumberList.add(cardNumber);
+            }
+            //再查经费系统实物卡片关联的e管家实物卡片
+            QFilter filter1 = new QFilter("nckd_card_real_code", QCP.in,cardNumberList);
+            DynamicObject[] edynamicObjects = BusinessDataServiceHelper.load("nckd_fa_card_real_list","id",new QFilter[] {filter1});
+            //获取e管家实物卡片编码
+            for (DynamicObject eCard : edynamicObjects) {
+                String number = eCard.getString("number");
+                eCardNumberList.add(number);
+            }
+            //对比中间表关联的e管家实物卡片和查询到的e管家实物卡片
+            if (eCardNumberList.size() > numberList.size()) {
                 return "单据"+billno+"绑定的资产有未同步至星瀚的数据,生成调拨单失败";
+            } else if (eCardNumberList.size() == numberList.size()) {
+                boolean areEqual = areListsEqual(numberList, eCardNumberList);
+                if (!areEqual) {
+                    return "单据"+billno+"绑定的资产与经费系统实物卡片绑定的资产不一致,生成调拨单失败";
+                }
             }else {
-                DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(dynamicObjects[0].getPkValue(), dynamicObjects[0].getDynamicObjectType().getName());
-                //获取星瀚资产编码,查询关联的e管家实物卡片清单数量
-                String code  = cardInfo.getString("nckd_card_real_code");
-                if (StringUtils.isEmpty(code)) {
-                    //星瀚未生成实物卡片,更新实物卡片清单数据-查询组织对照表
-                    Long orgId = getOrg(e_orgId);
-                    if (ObjectUtils.isNotEmpty(orgId) && ("0".equals(dispatchType))) {
-                        //更新归属机构,归属部门,使用人
-                        for (int a = 0; a < dynamicObjects.length ; a++) {
-                            DynamicObject ecardInfoList = BusinessDataServiceHelper.loadSingle(dynamicObjects[a].getPkValue(), dynamicObjects[a].getDynamicObjectType().getName());
-                            Long deptId = getOrg(info.getString("nckd_dept_in"));
-                            ecardInfoList.set("nckd_orgfield", getRelation(deptId));
-                            ecardInfoList.set("nckd_dept", deptId);
-                            ecardInfoList.set("nckd_local", nckd_storeplace);
-                            ecardInfoList.set("nckd_use_name", info.getString("user"));
-                            SaveServiceHelper.save(new DynamicObject[]{ecardInfoList});
-                        }
-                    }else if (ObjectUtils.isNotEmpty(orgId) && "1".equals(dispatchType)) {
-                        //更新是否报废为是
-                        for (int a = 0; a < dynamicObjects.length ; a++) {
-                            DynamicObject ecardInfoList = BusinessDataServiceHelper.loadSingle(dynamicObjects[a].getPkValue(), dynamicObjects[a].getDynamicObjectType().getName());
-                            ecardInfoList.set("nckd_dept", getOrg(info.getString("nckd_dept_in")));
-                            ecardInfoList.set("nckd_local", nckd_storeplace);
-                            ecardInfoList.set("nckd_use_name", info.getString("user"));
-                            SaveServiceHelper.save(new DynamicObject[]{ecardInfoList});
-                        }
+                // 检查 eCardNumberList 是否有 numberList 没有的元素
+                for (String eCard : eCardNumberList) {
+                    if (!numberList.contains(eCard)) {
+                        return "单据"+billno+"绑定的资产与经费系统实物卡片绑定的资产不一致,生成调拨单失败";
                     }
-                    else if (ObjectUtils.isNotEmpty(orgId) && "2".equals(dispatchType)) {
-                        //更新是否报废为是
-                        for (int a = 0; a < dynamicObjects.length ; a++) {
-                            DynamicObject ecardInfoList = BusinessDataServiceHelper.loadSingle(dynamicObjects[a].getPkValue(), dynamicObjects[a].getDynamicObjectType().getName());
-                            ecardInfoList.set("nckd_discard",1);
-                            SaveServiceHelper.save(new DynamicObject[]{ecardInfoList});
-                        }
-                    } else {
-                        return "资产信息的组织在组织对照表中未查询到数据,生成调拨单失败";
+                }
+
+                for (String number : numberList) {
+                    if (!eCardNumberList.contains(number)) {
+                        missingInECard.add(number);
                     }
-                    return "星瀚系统未生成实物卡片,已更新e管家实物卡片清单";
+                }
+            }
+            //查询未匹配到的e管家实物卡片做更新
+            QFilter filter2 = new QFilter("number", QCP.in,missingInECard);
+            DynamicObject[] missingObject = BusinessDataServiceHelper.load("nckd_fa_card_real_list","id",new QFilter[] {filter2});
+            Long deptId = getOrg(info.getString("nckd_dept_in"));
+            Long orgId = getRelation(deptId);
+            for (DynamicObject object : missingObject) {
+                DynamicObject eCardInfo = BusinessDataServiceHelper.loadSingle(object.getPkValue(), object.getDynamicObjectType().getName());
+                if ("0".equals(dispatchType)) {
+                    //调出单更新组织部门人员存放地点
+                    eCardInfo.set("nckd_orgfield", orgId);
+                    eCardInfo.set("nckd_dept", deptId);
+                    eCardInfo.set("nckd_local", nckd_storeplace);
+                    eCardInfo.set("nckd_use_name", user);
+
+                } else if ("1".equals(dispatchType)) {
+                    //变更单更新部门人员存放地点
+                    eCardInfo.set("nckd_dept", deptId);
+                    eCardInfo.set("nckd_local", nckd_storeplace);
+                    eCardInfo.set("nckd_use_name", user);
                 }else {
-                    //查询e管家实物卡片清单
-                    QFilter qfilter = new QFilter("nckd_card_real_code", QCP.equals,code);
-                    DynamicObject[] cardObject = BusinessDataServiceHelper.load("nckd_fa_card_real_list","id",new QFilter[] {qfilter});
-                    //e管家推送的清单和星瀚系统保存的清单数量不一致,返回错误信息并且不能生成调拨单
-                    if (cardObject.length > 0 && asset.length != cardObject.length) {
-                        return "单据"+billno+"绑定的资产信息与星瀚实物卡片数量不一致,生成调拨单失败";
-                    }
+                    //更新是否报废为是
+                    eCardInfo.set("nckd_discard", 1);
                 }
+                SaveServiceHelper.save(new DynamicObject[]{eCardInfo});
             }
         }else {
             //资产信息组织不同
@@ -227,4 +243,14 @@ public class ChangeDataUtils {
         }
         return codeList;
     }
+
+    public static boolean areListsEqual(List<String> list1, List<String> list2) {
+        for (int i = 0; i < list1.size(); i++) {
+            if (!list1.get(i).equals(list2.get(i))) {
+                return false; // 发现元素不相同
+            }
+        }
+        return true; // 所有元素相同
+    }
+
 }