Merge remote-tracking branch 'origin/main'
This commit is contained in:
		
						commit
						0a7b8779d1
					
				|  | @ -49,8 +49,10 @@ public class SyncDeleteQcQmsRule implements IRule<ReportVO> { | |||
|                 throw new BusinessException("箱变的QMS接口缺少配置"); | ||||
|             } | ||||
|             Set<String> firstIds = new HashSet<>(); | ||||
|             List<String> cfirstbids =new ArrayList<>(); | ||||
|             // 查询上游到货单的数据 | ||||
|             List<String> cfirstbids = new ArrayList<>(); | ||||
|             // 收集被删除的质检报告明细(关键优化:直接从删除的VO中获取,避免查库丢失) | ||||
|             List<ReportItemVO> deletedItems = new ArrayList<>(); | ||||
| 
 | ||||
|             for (ReportVO vo : reportVOS) { | ||||
|                 ReportItemVO[] bvo = vo.getBVO(); | ||||
|                 if (bvo == null) { | ||||
|  | @ -59,13 +61,15 @@ public class SyncDeleteQcQmsRule implements IRule<ReportVO> { | |||
|                 for (ReportItemVO itemVO : bvo) { | ||||
|                     firstIds.add(itemVO.getCfirstid()); | ||||
|                     cfirstbids.add(itemVO.getCfirstbid()); | ||||
|                     deletedItems.add(itemVO); // 保存被删除的明细 | ||||
|                 } | ||||
|             } | ||||
|             if (!firstIds.isEmpty()) { | ||||
|                 // 上游到货单 | ||||
|                 // 查询上游到货单 | ||||
|                 BillQuery<ArriveVO> billquery = new BillQuery(ArriveVO.class); | ||||
|                 ArriveVO[] arriveVOS = billquery.query(firstIds.toArray(new String[0])); | ||||
|                 buildSyncData(arriveVOS,cfirstbids); | ||||
|                 // 传递删除的明细到构建方法 | ||||
|                 buildSyncData(arriveVOS, cfirstbids, deletedItems); | ||||
|             } | ||||
|         } catch (Exception e) { | ||||
|             logger.error("SyncQcQmsRule-exp:" + e.getMessage(), e); | ||||
|  | @ -74,21 +78,21 @@ public class SyncDeleteQcQmsRule implements IRule<ReportVO> { | |||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 构建同步数据 | ||||
|      * | ||||
|      * @param arriveVOS 到货单VO | ||||
|      * 构建同步数据(新增deletedItems参数,接收被删除的明细) | ||||
|      */ | ||||
|     private void buildSyncData(ArriveVO[] arriveVOS,List<String> cfirstbids) throws BusinessException { | ||||
|     private void buildSyncData(ArriveVO[] arriveVOS, List<String> cfirstbids, List<ReportItemVO> deletedItems) throws BusinessException { | ||||
|         for (ArriveVO arriveVO : arriveVOS) { | ||||
|             ArriveHeaderVO hvo = arriveVO.getHVO(); | ||||
|             ArriveItemVO[] bvo = arriveVO.getBVO(); | ||||
|             String pk_arriveorder = hvo.getPk_arriveorder(); | ||||
|             String pkOrg = hvo.getPk_org(); | ||||
|             // 判断物料的业务单元是否是箱变公司,不是则跳过 | ||||
| 
 | ||||
|             // 判断业务单元是否为箱变公司,不是则跳过 | ||||
|             String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg); | ||||
|             if (checkIfOrg(orgCode, configParams)) { | ||||
|                 continue; | ||||
|             } | ||||
| 
 | ||||
|             // 查询供应商信息 | ||||
|             String pk_supplier_v = hvo.getPk_supplier_v(); | ||||
|             SupplierVersionVO supplierVersionVO = new SupplierVersionVO(); | ||||
|  | @ -96,49 +100,76 @@ public class SyncDeleteQcQmsRule implements IRule<ReportVO> { | |||
|                 ISupplierBaseInfoQryService baseQryService = NCLocator.getInstance().lookup(ISupplierBaseInfoQryService.class); | ||||
|                 supplierVersionVO = baseQryService.querySupplierVersionByVID(pk_supplier_v); | ||||
|             } | ||||
| 
 | ||||
|             // 制单人名称 | ||||
|             String creatorName = MyHelper.getStrValByCondition("sm_user", UserVO.USER_NAME, | ||||
|                     UserVO.CUSERID + " = '" + hvo.getBillmaker() + "'"); | ||||
|             JSONObject singleObj = new JSONObject(); | ||||
|             // 采购合同号 | ||||
|             String cghth = getCghthVal(hvo, bvo); | ||||
|             // 启源送检单主表 | ||||
| 
 | ||||
|             // 组装主表数据 | ||||
|             long cts = System.currentTimeMillis(); | ||||
|             singleObj.put("batchid", cts); | ||||
|             singleObj.put("csdh", hvo.getVbillcode());// 送检单号,BIP到货单号 | ||||
|             singleObj.put("sjrq", hvo.getDmakedate().toString());// 送检日期,格式建议为 yyyy-MM-dd | ||||
|             singleObj.put("csdh", hvo.getVbillcode());// 送检单号(到货单号) | ||||
|             singleObj.put("sjrq", hvo.getDmakedate().toString());// 送检日期 | ||||
|             singleObj.put("wlgysid", supplierVersionVO.getCode());// 供应商编码 | ||||
|             singleObj.put("wlgysmc", supplierVersionVO.getName());// 供应商名称 | ||||
|             singleObj.put("sjr", creatorName);// 送检人,BIP制单人 | ||||
|             singleObj.put("cghth", cghth);// 采购合同号,关联对应的采购合同 | ||||
|             singleObj.put("bz", hvo.getVmemo());// 摘要备注,用于填写送检单的补充说明信息 | ||||
|             // 查询关联的质检报告-传入启源送检单的明细 | ||||
|             singleObj.put("sjr", creatorName);// 送检人(制单人) | ||||
|             singleObj.put("cghth", cghth);// 采购合同号 | ||||
|             singleObj.put("bz", hvo.getVmemo());// 备注 | ||||
| 
 | ||||
|             // 合并:数据库现存明细 + 被删除的明细(关键优化:确保删除的记录被包含) | ||||
|             HYPubBO hybo = new HYPubBO(); | ||||
|             ReportItemVO[] reportItemVOS = (ReportItemVO[]) hybo.queryByCondition(ReportItemVO.class, " cfirstid = '" + pk_arriveorder + "'"); | ||||
|             // 查询数据库中现存的明细 | ||||
|             ReportItemVO[] dbItems = (ReportItemVO[]) hybo.queryByCondition(ReportItemVO.class, " cfirstid = '" + pk_arriveorder + "'"); | ||||
|             // 筛选被删除的明细中属于当前到货单的记录 | ||||
|             List<ReportItemVO> currentDeletedItems = new ArrayList<>(); | ||||
|             for (ReportItemVO delItem : deletedItems) { | ||||
|                 if (pk_arriveorder.equals(delItem.getCfirstid())) { | ||||
|                     currentDeletedItems.add(delItem); | ||||
|                 } | ||||
|             } | ||||
|             // 合并为总明细列表 | ||||
|             List<ReportItemVO> allItems = new ArrayList<>(); | ||||
|             if (dbItems != null) { | ||||
|                 allItems.addAll(Arrays.asList(dbItems)); | ||||
|             } | ||||
|             allItems.addAll(currentDeletedItems); | ||||
| 
 | ||||
|             // 处理明细数据 | ||||
|             JSONArray contentArray = new JSONArray(); | ||||
|             for (ReportItemVO reportItemVO : reportItemVOS) { | ||||
|             for (ReportItemVO reportItemVO : allItems) { | ||||
|                 String pkReportbill = reportItemVO.getPk_reportbill(); | ||||
|                 ReportHeaderVO reportHeaderVO = (ReportHeaderVO) hybo.queryByPrimaryKey(ReportHeaderVO.class, pkReportbill); | ||||
|                 // 若质检单已删除,可能查不到header,做非空保护 | ||||
|                 if (reportHeaderVO == null) { | ||||
|                     reportHeaderVO = new ReportHeaderVO(); | ||||
|                 } | ||||
| 
 | ||||
|                 String pkMaterial = reportHeaderVO.getPk_material(); | ||||
|                 Map<String, Object> materialMap = MyHelper.getMapValByCondition(MaterialVO.getDefaultTableName(), "code,name,materialspec,materialtype", | ||||
|                         "pk_material = '" + pkMaterial + "'"); | ||||
|                 String cunitid = reportHeaderVO.getCunitid();// 主单位 | ||||
|                 String cunitname = MyHelper.getStrValByCondition(MeasdocVO.getDefaultTableName(), MeasdocVO.NAME, | ||||
|                         MeasdocVO.PK_MEASDOC + " = '" + cunitid + "'"); | ||||
| 
 | ||||
|                 JSONObject itemObj = new JSONObject(); | ||||
|                 itemObj.put("wlbh", materialMap.getOrDefault("code", "")); // 物料编码 | ||||
|                 itemObj.put("wlmc", materialMap.getOrDefault("name", "")); // 物料名称 | ||||
|                 String materialtype = skipNull(materialMap.get("materialtype")); | ||||
|                 String materialspec = skipNull(materialMap.get("materialspec")); | ||||
|                 itemObj.put("wlxhgg", materialtype + materialspec); // 物料型号规格 | ||||
|                 if(cfirstbids.contains(reportItemVO.getCfirstbid())){ | ||||
|                     itemObj.put("sjsl", "0"); // 送检数量(设计单位),按设计计量单位统计的送检数量 | ||||
|                 }else{ | ||||
|                     itemObj.put("sjsl", reportHeaderVO.getNapplynum().toString()); // 送检数量(设计单位),按设计计量单位统计的送检数量 | ||||
| 
 | ||||
|                 // 被删除的明细标记为0(关键逻辑) | ||||
|                 if (cfirstbids.contains(reportItemVO.getCfirstbid())) { | ||||
|                     itemObj.put("sjsl", "0"); // 删除的记录数量设为0 | ||||
|                 } else { | ||||
|                     itemObj.put("sjsl", reportHeaderVO.getNapplynum() != null ? reportHeaderVO.getNapplynum().toString() : "0"); | ||||
|                 } | ||||
| 
 | ||||
|                 itemObj.put("jldw", cunitname); // 计量单位 | ||||
|                 itemObj.put("bz", reportItemVO.getVbdef1()); // 明细备注,用于填写该送检物料的补充说明 | ||||
|                 itemObj.put("bz", reportItemVO.getVbdef1()); // 明细备注 | ||||
|                 itemObj.put("bipzyid", pkReportbill); // 质检报告ID | ||||
|                 itemObj.put("bipqdid", reportItemVO.getPk_reportbill_b()); // 质检报告明细ID | ||||
|                 contentArray.add(itemObj); | ||||
|  | @ -148,10 +179,10 @@ public class SyncDeleteQcQmsRule implements IRule<ReportVO> { | |||
|         } | ||||
|     } | ||||
| 
 | ||||
|     // 以下方法与原逻辑一致,未做修改 | ||||
|     private String getCghthVal(ArriveHeaderVO hvo, ArriveItemVO[] bvo) throws BusinessException { | ||||
|         String cghth = ""; | ||||
|         String pkPupsndoc = hvo.getPk_pupsndoc(); | ||||
|         // 查询采购员名称 | ||||
|         String name = ""; | ||||
|         if (pkPupsndoc != null && !pkPupsndoc.isEmpty() && !"~".equals(pkPupsndoc)) { | ||||
|             name = MyHelper.getStrValByCondition(PsndocVO.getDefaultTableName(), PsndocVO.NAME, | ||||
|  | @ -177,94 +208,7 @@ public class SyncDeleteQcQmsRule implements IRule<ReportVO> { | |||
|         return cghth; | ||||
|     } | ||||
| 
 | ||||
|     private void buildSyncData1(ReportVO[] useVOs) throws BusinessException { | ||||
|         for (ReportVO vo : useVOs) { | ||||
|             ReportHeaderVO hvo = vo.getHVO(); | ||||
|             ReportItemVO[] bvo = vo.getBVO(); | ||||
|             // 判断物料的业务单元是否是箱变公司,不是则跳过 | ||||
|             String pkOrg = hvo.getPk_org(); | ||||
|             String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg); | ||||
|             if (checkIfOrg(orgCode, configParams)) { | ||||
|                 continue; | ||||
|             } | ||||
|             // 查询供应商信息 | ||||
|             String pk_supplier_v = hvo.getPk_supplier_v(); | ||||
|             SupplierVersionVO supplierVersionVO = new SupplierVersionVO(); | ||||
|             if (pk_supplier_v != null && !pk_supplier_v.isEmpty() && !"~".equals(pk_supplier_v)) { | ||||
|                 ISupplierBaseInfoQryService baseQryService = NCLocator.getInstance().lookup(ISupplierBaseInfoQryService.class); | ||||
|                 supplierVersionVO = baseQryService.querySupplierVersionByVID(pk_supplier_v); | ||||
|             } | ||||
|             // 查询人员信息 | ||||
|             String pkApplyer = hvo.getPk_applyer(); | ||||
|             String applyerName = MyHelper.getStrValByCondition(PsndocVO.getDefaultTableName(), PsndocVO.NAME, | ||||
|                     PsndocVO.PK_PSNDOC + " = '" + pkApplyer + "'"); | ||||
|             String bz = "", cghth = ""; | ||||
|             if (bvo != null && bvo.length > 0) { | ||||
|                 bz = bvo[0].getVbdef1(); // BOM备注 | ||||
|                 cghth = bvo[0].getVbdef2(); // 采购单号 | ||||
|             } | ||||
|             // 组装数据 | ||||
|             JSONObject singleObj = new JSONObject(); | ||||
|             long cts = System.currentTimeMillis(); | ||||
|             singleObj.put("batchid", cts); | ||||
|             singleObj.put("csdh", hvo.getVapplybillcode());// 送检单号,采购送检单的唯一标识编号 | ||||
|             singleObj.put("sjrq", hvo.getDapplydate().toString());// 送检日期,格式建议为 yyyy-MM-dd | ||||
|             singleObj.put("wlgysid", supplierVersionVO.getCode());// 供应商编码 | ||||
|             singleObj.put("wlgysmc", supplierVersionVO.getName());// 供应商名称 | ||||
|             singleObj.put("sjr", applyerName);// 送检人,负责提交送检单的人员姓名 | ||||
|             singleObj.put("cghth", cghth);// 采购合同号,关联对应的采购合同 | ||||
|             singleObj.put("bz", hvo.getVmemo());// 摘要备注,用于填写送检单的补充说明信息 | ||||
| 
 | ||||
|             String pkMaterial = hvo.getPk_material(); | ||||
|             Map<String, Object> materialMap = MyHelper.getMapValByCondition(MaterialVO.getDefaultTableName(), "code,name,materialspec,materialtype", | ||||
|                     "pk_material = '" + pkMaterial + "'"); | ||||
|             String cunitid = hvo.getCunitid();// 主单位 | ||||
|             String cunitname = MyHelper.getStrValByCondition(MeasdocVO.getDefaultTableName(), MeasdocVO.NAME, | ||||
|                     MeasdocVO.PK_MEASDOC + " = '" + cunitid + "'"); | ||||
|             // 处理Content数组 | ||||
|             JSONArray contentArray = new JSONArray(); | ||||
|             JSONObject itemObj = new JSONObject(); | ||||
|             itemObj.put("wlbh", materialMap.getOrDefault("code", "")); // 物料编码 | ||||
|             itemObj.put("wlmc", materialMap.getOrDefault("name", "")); // 物料名称 | ||||
|             String materialtype = skipNull(materialMap.get("materialtype")); | ||||
|             String materialspec = skipNull(materialMap.get("materialspec")); | ||||
|             itemObj.put("wlxhgg", materialtype + materialspec); // 物料型号规格 | ||||
|             itemObj.put("sjsl", "0"); // 送检数量(设计单位),按设计计量单位统计的送检数量 | ||||
|             itemObj.put("jldw", cunitname); // 计量单位 | ||||
|             itemObj.put("bz", bz); // 明细备注,用于填写该送检物料的补充说明 | ||||
|             contentArray.add(itemObj); | ||||
| 
 | ||||
|             singleObj.put("Content", contentArray); | ||||
| /*            { | ||||
|                 "batchid": "10002", | ||||
|                 "csdh": "SJ202405001", | ||||
|                 "sjrq": "2024-05-20", | ||||
|                 "wlgysid": "GY001", | ||||
|                 "wlgysmc": "XX 金属材料有限公司", | ||||
|                 "sjr": "张三", | ||||
|                 "cghth": "HT202405003", | ||||
|                 "bz": "紧急送检,需优先检测", | ||||
|                 "Content": [ | ||||
|                     { | ||||
|                         "wlbh": "ACC26711", | ||||
|                             "wlmc": "铜排", | ||||
|                             "wlxhgg": "15558190831", | ||||
|                             "jldw": "米", | ||||
|                             "sjsl": "50", | ||||
|                             "bz": "无特殊要求" | ||||
|                     } | ||||
|                 ] | ||||
|                }*/ | ||||
|             pushData(singleObj); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 推送同步数据 | ||||
|      */ | ||||
|     private void pushData(JSONObject param) throws BusinessException { | ||||
|         // String jsonString = param.toJSONString(); | ||||
|         // 转json字符串的时候保留null值 | ||||
|         String jsonStr = JSON.toJSONString(param, | ||||
|                 SerializerFeature.WriteMapNullValue, | ||||
|                 SerializerFeature.WriteNullStringAsEmpty | ||||
|  | @ -306,4 +250,4 @@ public class SyncDeleteQcQmsRule implements IRule<ReportVO> { | |||
|         return value.toString().trim(); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue