From bcd0662b19472ddcc00530477a369a4c1cdb511e Mon Sep 17 00:00:00 2001 From: mzr Date: Fri, 29 Aug 2025 17:00:41 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AE=B1=E5=8F=98-=E8=B4=A8=E6=A3=80=E6=8A=A5?= =?UTF-8?q?=E5=91=8A=E6=8E=A8=E5=90=AF=E6=BA=90MES?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../approve/action/rule/SyncQcQmsRule.java | 160 ++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 qc/src/private/nc/impl/qc/c003/approve/action/rule/SyncQcQmsRule.java diff --git a/qc/src/private/nc/impl/qc/c003/approve/action/rule/SyncQcQmsRule.java b/qc/src/private/nc/impl/qc/c003/approve/action/rule/SyncQcQmsRule.java new file mode 100644 index 0000000..b50a9c7 --- /dev/null +++ b/qc/src/private/nc/impl/qc/c003/approve/action/rule/SyncQcQmsRule.java @@ -0,0 +1,160 @@ +package nc.impl.qc.c003.approve.action.rule; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.serializer.SerializerFeature; +import nc.bs.dao.BaseDAO; +import nc.bs.logging.Log; +import nc.bs.uapbd.util.MyHelper; +import nc.bs.uapbd.util.ThirdPartyPostRequestUtil; +import nc.impl.pubapp.pattern.rule.IRule; +import nc.vo.bd.material.MaterialVO; +import nc.vo.org.OrgVO; +import nc.vo.pub.BusinessException; +import nc.vo.pubapp.pattern.exception.ExceptionUtils; +import nc.vo.qc.c003.entity.ReportHeaderVO; +import nc.vo.qc.c003.entity.ReportItemVO; +import nc.vo.qc.c003.entity.ReportVO; +import nccloud.baseapp.core.log.NCCForUAPLogger; + +import java.util.Map; + +/** + * 箱变-质检报告推启源MES + * + * @author mzr + * @date 2025/8/26 + */ +public class SyncQcQmsRule implements IRule { + + private static final String LOG_INFO_NAME = "qyMesLog"; + private static final Log logger = Log.getInstance(LOG_INFO_NAME); + private static final String reqUrl = "/IF_QyErpApi.ashx?action=addsjd"; + private Map configParams; + + @Override + public void process(ReportVO[] reportVOS) { + try { + if (reportVOS == null || reportVOS.length == 0) { + return; + } + configParams = MyHelper.getConfigParams("xb-config", null); + if (configParams.isEmpty()) { + throw new BusinessException("箱变的QMS接口缺少配置"); + } + buildSyncData(reportVOS); + } catch (Exception e) { + ExceptionUtils.wrappException(e); + } + } + + /** + * 构建同步数据 + */ + private void buildSyncData(ReportVO[] useVOs) throws BusinessException { + BaseDAO baseDAO = new BaseDAO(); + 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; + } + // 组装数据 + 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", "");// 供应商编码 + singleObj.put("wlgysmc", "");// 供应商名称 + singleObj.put("sjr", hvo.getPk_applyer());// 送检人,负责提交送检单的人员姓名 + singleObj.put("cghth", "");// 采购合同号,关联对应的采购合同 + singleObj.put("bz", "");// 摘要备注,用于填写送检单的补充说明信息 + + String pkMaterial = hvo.getPk_material(); + Map materialMap = MyHelper.getMapValByCondition(MaterialVO.getDefaultTableName(), "code,name,materialspec,materialtype", + "pk_material = '" + pkMaterial + "'"); + // 处理Content数组 + JSONArray contentArray = new JSONArray(); + for (ReportItemVO item : bvo) { + JSONObject itemObj = new JSONObject(); + itemObj.put("wlbh", materialMap.getOrDefault("code", "")); // 物料编码 + itemObj.put("wlmc", materialMap.getOrDefault("name", "")); // 物料名称 + String materialtype = materialMap.getOrDefault("materialtype", "") + ""; + String materialspec = materialMap.getOrDefault("materialspec", "") + ""; + itemObj.put("wlxhgg", materialtype + materialspec); // 物料型号规格 + itemObj.put("sjsl", ""); // 送检数量(设计单位),按设计计量单位统计的送检数量 + itemObj.put("jldw", ""); // 计量单位 + itemObj.put("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 + ); + logger.error("QMS-QC-param = " + jsonStr); + NCCForUAPLogger.debug("QMS-QC-param = " + jsonStr); + String baseUrl = configParams.get("qmsBaseUrl"); + String requestUrl = baseUrl + reqUrl; + logger.error("QMS-QC-url = " + requestUrl); + String result = ThirdPartyPostRequestUtil.sendPostRequest(requestUrl, jsonStr); + JSONObject resultObj = JSONObject.parseObject(result); + logger.error("QMS-QC-res = " + result); + + if (!"success".equals(resultObj.getString("success"))) { + // throw new BusinessException("QMS-QC-error:" + resultObj.getString("msg")); + logger.error("QMS-QC-error,result[" + resultObj.toJSONString() + "]"); + } + } + + private boolean checkIfOrg(String code, Map configParams) throws BusinessException { + String targetCode = configParams.get("xbOrg"); + if (targetCode == null || nc.vo.am.common.util.StringUtils.isEmpty(targetCode)) { + throw new BusinessException("未配置组织参数"); + } + String[] orgItem = targetCode.split(","); + for (String orgCode : orgItem) { + if (!orgCode.isEmpty() && orgCode.equals(code)) { + return false; + } + } + return true; + } + +}