feat(pmo):优化箱变同步启源流程生产订单逻辑-增加物料序列号启用状态检查
This commit is contained in:
		
							parent
							
								
									7b550e51cc
								
							
						
					
					
						commit
						1dea780a50
					
				|  | @ -5,7 +5,6 @@ import com.alibaba.fastjson.JSONArray; | ||||||
| import com.alibaba.fastjson.JSONObject; | import com.alibaba.fastjson.JSONObject; | ||||||
| import com.alibaba.fastjson.serializer.SerializerFeature; | import com.alibaba.fastjson.serializer.SerializerFeature; | ||||||
| import nc.bs.dao.BaseDAO; | import nc.bs.dao.BaseDAO; | ||||||
| import nc.bs.framework.common.NCLocator; |  | ||||||
| import nc.bs.logging.Log; | import nc.bs.logging.Log; | ||||||
| import nc.bs.uapbd.util.MyHelper; | import nc.bs.uapbd.util.MyHelper; | ||||||
| import nc.bs.uapbd.util.ThirdPartyPostRequestUtil; | import nc.bs.uapbd.util.ThirdPartyPostRequestUtil; | ||||||
|  | @ -21,6 +20,7 @@ import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO; | ||||||
| import nc.vo.org.OrgVO; | import nc.vo.org.OrgVO; | ||||||
| import nc.vo.pmpub.project.ProjectHeadVO; | import nc.vo.pmpub.project.ProjectHeadVO; | ||||||
| import nc.vo.pub.BusinessException; | import nc.vo.pub.BusinessException; | ||||||
|  | import nc.vo.pub.lang.UFBoolean; | ||||||
| import nc.vo.pub.lang.UFDateTime; | import nc.vo.pub.lang.UFDateTime; | ||||||
| import nccloud.api.rest.utils.ResultMessageUtil; | import nccloud.api.rest.utils.ResultMessageUtil; | ||||||
| import nccloud.framework.service.ServiceLocator; | import nccloud.framework.service.ServiceLocator; | ||||||
|  | @ -50,7 +50,7 @@ public class PmoToQmsAction implements ICommonAction { | ||||||
|     @Override |     @Override | ||||||
|     public Object doAction(IRequest iRequest) { |     public Object doAction(IRequest iRequest) { | ||||||
|         String json = iRequest.read(); |         String json = iRequest.read(); | ||||||
|         logger.error("PmoToQmsAction-Param:" + json); |         // logger.error("PmoToQmsAction-Param:" + json); | ||||||
|         Map<String, Object> paraMap = (Map) JsonFactory.create().fromJson(json, Map.class); |         Map<String, Object> paraMap = (Map) JsonFactory.create().fromJson(json, Map.class); | ||||||
|         try { |         try { | ||||||
|             // 获取主键 |             // 获取主键 | ||||||
|  | @ -75,7 +75,7 @@ public class PmoToQmsAction implements ICommonAction { | ||||||
|      * 构建同步数据 |      * 构建同步数据 | ||||||
|      */ |      */ | ||||||
|     private void buildSyncData(PMOAggVO[] useVOs) throws BusinessException { |     private void buildSyncData(PMOAggVO[] useVOs) throws BusinessException { | ||||||
|         IPMOQueryService pmoQuery = NCLocator.getInstance().lookup(IPMOQueryService.class); |         IPMOQueryService pmoQuery = ServiceLocator.find(IPMOQueryService.class); | ||||||
|         Set<String> vbatchcodeSet = new HashSet<>(); |         Set<String> vbatchcodeSet = new HashSet<>(); | ||||||
|         PMOAggVO aggVO = useVOs[0]; |         PMOAggVO aggVO = useVOs[0]; | ||||||
|         PMOHeadVO headVO = aggVO.getParentVO(); |         PMOHeadVO headVO = aggVO.getParentVO(); | ||||||
|  | @ -139,13 +139,18 @@ public class PmoToQmsAction implements ICommonAction { | ||||||
|                     Map<String, Object> mrlmap = (Map<String, Object>) dao.executeQuery(whereSql, new MapProcessor()); |                     Map<String, Object> mrlmap = (Map<String, Object>) dao.executeQuery(whereSql, new MapProcessor()); | ||||||
| 
 | 
 | ||||||
|                     String cprojectid = item.getCprojectid();// 项目id |                     String cprojectid = item.getCprojectid();// 项目id | ||||||
|                     String projectCode = MyHelper.getStrValByCondition(nc.vo.pmpub.project.ProjectHeadVO.getDefaultTableName(), nc.vo.pmpub.project.ProjectHeadVO.PROJECT_CODE, |                     String projectCode = MyHelper.getStrValByCondition(ProjectHeadVO.getDefaultTableName(), ProjectHeadVO.PROJECT_CODE, | ||||||
|                             ProjectHeadVO.PK_PROJECT + " = '" + cprojectid + "'"); |                             ProjectHeadVO.PK_PROJECT + " = '" + cprojectid + "'"); | ||||||
|                     // 序列号 |                     // 序列号 | ||||||
|                     String vsnCodeSql = " select vsncode from mm_pmo_serialno where cmoid = '" + cmoid + "' and dr = 0 "; |                     String vsnCodeSql = " select vsncode from mm_pmo_serialno where cmoid = '" + cmoid + "' and dr = 0 "; | ||||||
|                     List<Map<String, String>> vsnCodeList = (List<Map<String, String>>) dao.executeQuery(vsnCodeSql, new MapListProcessor()); |                     List<Map<String, String>> vsnCodeList = (List<Map<String, String>>) dao.executeQuery(vsnCodeSql, new MapListProcessor()); | ||||||
|                     if (vsnCodeList == null || vsnCodeList.isEmpty()) { |                     // 检查物料是否开启序列号,开启查不到序列号则提示异常,未开启直接跳过 | ||||||
|                         throw new BusinessException("箱变同步启源流程生产订单失败,请检查是否存在序列号"); |                     if (checkMaterialSn(cmaterialvid, item.getPk_org())) { | ||||||
|  |                         if (MMValueCheck.isEmpty(vsnCodeList)) { | ||||||
|  |                             throw new BusinessException("箱变同步启源流程生产订单失败,请检查是否存在序列号"); | ||||||
|  |                         } | ||||||
|  |                     } else { | ||||||
|  |                         throw new BusinessException("箱变推启源流程生产订单,物料的序列号未启用"); | ||||||
|                     } |                     } | ||||||
|                     for (Map<String, String> vsnMap : vsnCodeList) { |                     for (Map<String, String> vsnMap : vsnCodeList) { | ||||||
|                         JSONObject itemObj = new JSONObject(); |                         JSONObject itemObj = new JSONObject(); | ||||||
|  | @ -211,8 +216,12 @@ public class PmoToQmsAction implements ICommonAction { | ||||||
|             singleObj.put("jhy", billmakerName); |             singleObj.put("jhy", billmakerName); | ||||||
|             singleObj.put("bz", headVO.getVnote()); |             singleObj.put("bz", headVO.getVnote()); | ||||||
|             singleObj.put("Content", contentArray); |             singleObj.put("Content", contentArray); | ||||||
|             pushData(singleObj); |             if (MMValueCheck.isNotEmpty(contentArray)) { | ||||||
|             updatePmo(hidSet); |                 pushData(singleObj); | ||||||
|  |                 updatePmo(hidSet); | ||||||
|  |             } else { | ||||||
|  |                 logger.error("QMS-PMO-XB-无同步数据:" + singleObj.toJSONString()); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -274,4 +283,19 @@ public class PmoToQmsAction implements ICommonAction { | ||||||
|         } |         } | ||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 检查物料是否开启序列号 | ||||||
|  |      */ | ||||||
|  |     private boolean checkMaterialSn(String pk_material, String pk_org) throws BusinessException { | ||||||
|  |         String sql = "SELECT DISTINCT bd_materialstock.serialmanaflag" + | ||||||
|  |                 " FROM bd_materialstock" + | ||||||
|  |                 " WHERE bd_materialstock.pk_material = '[pk_material]' AND bd_materialstock.pk_org = '[pk_org]'"; | ||||||
|  |         sql = sql.replace("[pk_material]", pk_material); | ||||||
|  |         sql = sql.replace("[pk_org]", pk_org); | ||||||
|  |         String flag = (String) dao.executeQuery(sql, new ColumnProcessor()); | ||||||
|  |         UFBoolean serialmanaflag = UFBoolean.valueOf(flag); | ||||||
|  |         return serialmanaflag.booleanValue(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -23,6 +23,7 @@ import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO; | ||||||
| import nc.vo.org.OrgVO; | import nc.vo.org.OrgVO; | ||||||
| import nc.vo.pmpub.project.ProjectHeadVO; | import nc.vo.pmpub.project.ProjectHeadVO; | ||||||
| import nc.vo.pub.BusinessException; | import nc.vo.pub.BusinessException; | ||||||
|  | import nc.vo.pub.lang.UFBoolean; | ||||||
| import nc.vo.pub.lang.UFDateTime; | import nc.vo.pub.lang.UFDateTime; | ||||||
| 
 | 
 | ||||||
| import java.util.HashSet; | import java.util.HashSet; | ||||||
|  | @ -82,7 +83,7 @@ public class AfterApproveSyncQMSRule implements IRule<PMOAggVO> { | ||||||
|         } |         } | ||||||
|         for (PMOItemVO itemVO : nowItemVOS) { |         for (PMOItemVO itemVO : nowItemVOS) { | ||||||
|             String vbatchcode = itemVO.getVbatchcode(); |             String vbatchcode = itemVO.getVbatchcode(); | ||||||
|             if(null == vbatchcode){ |             if (null == vbatchcode) { | ||||||
|                 continue; |                 continue; | ||||||
|             } |             } | ||||||
|             vbatchcodeSet.add(vbatchcode); |             vbatchcodeSet.add(vbatchcode); | ||||||
|  | @ -128,14 +129,23 @@ public class AfterApproveSyncQMSRule implements IRule<PMOAggVO> { | ||||||
|                     Map<String, Object> mrlmap = (Map<String, Object>) dao.executeQuery(whereSql, new MapProcessor()); |                     Map<String, Object> mrlmap = (Map<String, Object>) dao.executeQuery(whereSql, new MapProcessor()); | ||||||
| 
 | 
 | ||||||
|                     String cprojectid = item.getCprojectid();// 项目id |                     String cprojectid = item.getCprojectid();// 项目id | ||||||
|                     String projectCode = MyHelper.getStrValByCondition(ProjectHeadVO.getDefaultTableName(), ProjectHeadVO.PROJECT_CODE, |                     String projectCode = MyHelper.getStrValByCondition(ProjectHeadVO.getDefaultTableName(), ProjectHeadVO.PROJECT_CODE, ProjectHeadVO.PK_PROJECT + " = '" + cprojectid + "'"); | ||||||
|                             ProjectHeadVO.PK_PROJECT + " = '" + cprojectid + "'"); |  | ||||||
|                     // 序列号 |                     // 序列号 | ||||||
|                     String vsnCodeSql = " select vsncode from mm_pmo_serialno where cmoid = '" + cmoid + "' and dr = 0 "; |                     String vsnCodeSql = " select vsncode from mm_pmo_serialno where cmoid = '" + cmoid + "' and dr = 0 "; | ||||||
|                     List<Map<String, String>> vsnCodeList = (List<Map<String, String>>) dao.executeQuery(vsnCodeSql, new MapListProcessor()); |                     List<Map<String, String>> vsnCodeList = (List<Map<String, String>>) dao.executeQuery(vsnCodeSql, new MapListProcessor()); | ||||||
|                     if (vsnCodeList == null || vsnCodeList.isEmpty()) { |                     // 检查物料是否开启序列号,开启查不到序列号则提示异常,未开启直接跳过 | ||||||
|                         throw new BusinessException("箱变同步启源流程生产订单失败,请检查是否存在序列号"); |                     if (checkMaterialSn(cmaterialvid, item.getPk_org())) { | ||||||
|  |                         if (MMValueCheck.isEmpty(vsnCodeList)) { | ||||||
|  |                             throw new BusinessException("箱变同步启源流程生产订单失败,请检查是否存在序列号"); | ||||||
|  |                         } | ||||||
|  |                     } else { | ||||||
|  |                         logger.error(String.format( | ||||||
|  |                                 "箱变推启源流程生产订单,物料的序列号未启用,物料id = [%S], 单号 = [%S], 行号 = [%S]", | ||||||
|  |                                 cmaterialvid, vbillcode, item.getVrowno() | ||||||
|  |                         )); | ||||||
|  |                         continue; | ||||||
|                     } |                     } | ||||||
|  | 
 | ||||||
|                     for (Map<String, String> vsnMap : vsnCodeList) { |                     for (Map<String, String> vsnMap : vsnCodeList) { | ||||||
|                         JSONObject itemObj = new JSONObject(); |                         JSONObject itemObj = new JSONObject(); | ||||||
|                         itemObj.put("sgdh", vsnMap.get("vsncode"));// QMS施工单号-BIP的序列号 |                         itemObj.put("sgdh", vsnMap.get("vsncode"));// QMS施工单号-BIP的序列号 | ||||||
|  | @ -200,8 +210,12 @@ public class AfterApproveSyncQMSRule implements IRule<PMOAggVO> { | ||||||
|             singleObj.put("jhy", billmakerName); |             singleObj.put("jhy", billmakerName); | ||||||
|             singleObj.put("bz", headVO.getVnote()); |             singleObj.put("bz", headVO.getVnote()); | ||||||
|             singleObj.put("Content", contentArray); |             singleObj.put("Content", contentArray); | ||||||
|             pushData(singleObj); |             if (MMValueCheck.isNotEmpty(contentArray)) { | ||||||
|             updatePmo(hidSet); |                 pushData(singleObj); | ||||||
|  |                 updatePmo(hidSet); | ||||||
|  |             } else { | ||||||
|  |                 logger.error("QMS-PMO-XB-无同步数据:" + singleObj.toJSONString()); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|     } |     } | ||||||
|  | @ -218,10 +232,7 @@ public class AfterApproveSyncQMSRule implements IRule<PMOAggVO> { | ||||||
|     private void pushData(JSONObject param) throws BusinessException { |     private void pushData(JSONObject param) throws BusinessException { | ||||||
|         // String jsonString = param.toJSONString(); |         // String jsonString = param.toJSONString(); | ||||||
|         // 转json字符串的时候保留null值 |         // 转json字符串的时候保留null值 | ||||||
|         String jsonStr = JSON.toJSONString(param, |         String jsonStr = JSON.toJSONString(param, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty); | ||||||
|                 SerializerFeature.WriteMapNullValue, |  | ||||||
|                 SerializerFeature.WriteNullStringAsEmpty |  | ||||||
|         ); |  | ||||||
|         logger.error("QMS-PMO-XB-param = " + jsonStr); |         logger.error("QMS-PMO-XB-param = " + jsonStr); | ||||||
|         // NCCForUAPLogger.debug("QMS-PMO-XB-param = " + jsonStr); |         // NCCForUAPLogger.debug("QMS-PMO-XB-param = " + jsonStr); | ||||||
|         String baseUrl = configParams.get("qmsBaseUrl"); |         String baseUrl = configParams.get("qmsBaseUrl"); | ||||||
|  | @ -264,4 +275,19 @@ public class AfterApproveSyncQMSRule implements IRule<PMOAggVO> { | ||||||
|         } |         } | ||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 检查物料是否开启序列号 | ||||||
|  |      */ | ||||||
|  |     private boolean checkMaterialSn(String pk_material, String pk_org) throws BusinessException { | ||||||
|  |         String sql = "SELECT DISTINCT bd_materialstock.serialmanaflag" + | ||||||
|  |                 " FROM bd_materialstock" + | ||||||
|  |                 " WHERE bd_materialstock.pk_material = '[pk_material]' AND bd_materialstock.pk_org = '[pk_org]'"; | ||||||
|  |         sql = sql.replace("[pk_material]", pk_material); | ||||||
|  |         sql = sql.replace("[pk_org]", pk_org); | ||||||
|  |         String flag = (String) dao.executeQuery(sql, new ColumnProcessor()); | ||||||
|  |         UFBoolean serialmanaflag = UFBoolean.valueOf(flag); | ||||||
|  |         return serialmanaflag.booleanValue(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue