From 74e986bbf2985f335d27c804483b1af9ab9dd732 Mon Sep 17 00:00:00 2001 From: lihao Date: Fri, 10 Oct 2025 09:21:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A8=E9=80=81=E7=94=9F=E4=BA=A7=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E5=88=B0=E5=90=AF=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/mmpac/pmo/action/PmoToQmsAction.java | 229 ++++++++++++++++++ .../config/authorize/mmpac_authorize.xml | 2 + .../mmpac/pmo/config/action/action.xml | 6 + 3 files changed, 237 insertions(+) create mode 100644 mmpac/src/client/nccloud/web/mmpac/pmo/action/PmoToQmsAction.java diff --git a/mmpac/src/client/nccloud/web/mmpac/pmo/action/PmoToQmsAction.java b/mmpac/src/client/nccloud/web/mmpac/pmo/action/PmoToQmsAction.java new file mode 100644 index 00000000..0b254df7 --- /dev/null +++ b/mmpac/src/client/nccloud/web/mmpac/pmo/action/PmoToQmsAction.java @@ -0,0 +1,229 @@ +package nccloud.web.mmpac.pmo.action; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.gson.Gson; +import nc.bs.dao.BaseDAO; +import nc.bs.dao.DAOException; +import nc.bs.logging.Log; +import nc.bs.logging.Logger; +import nc.bs.trade.business.HYPubBO; +import nc.bs.trade.business.HYSuperDMO; +import nc.bs.uapbd.util.MyHelper; +import nc.bs.uapbd.util.ThirdPartyPostRequestUtil; +import nc.itf.mmpac.pmo.pac0002.IPMOQueryService; +import nc.jdbc.framework.processor.ColumnProcessor; +import nc.jdbc.framework.processor.MapProcessor; +import nc.vo.bc.pmpub.project.ProjectHeadVO; +import nc.vo.bd.defdoc.DefdocVO; +import nc.vo.cmp.util.StringUtils; +import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO; +import nc.vo.mmpac.pmo.pac0002.entity.PMOHeadVO; +import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO; +import nc.vo.org.OrgVO; +import nc.vo.pub.BusinessException; +import nc.vo.pub.lang.UFDateTime; +import nc.vo.sm.UserVO; +import nc.vo.util.CloneUtil; +import nccloud.framework.service.ServiceLocator; +import nccloud.framework.web.action.itf.ICommonAction; +import nccloud.framework.web.container.IRequest; +import nccloud.framework.web.json.JsonFactory; +import nccloud.web.mmpub.pub.resexp.PfResumeExceptionNccUtils; +import org.apache.http.client.config.CookieSpecs; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.apache.http.util.EntityUtils; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 内配订单手动推PLM + */ +public class PmoToQmsAction implements ICommonAction { + + 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; + + public BaseDAO dao; + + public BaseDAO getDao() { + if (dao == null) { + dao = new BaseDAO(); + } + return dao; + } + + @Override + public Object doAction(IRequest iRequest) { + String json = iRequest.read(); + Logger.error("busiParam:" + json); + Map paraMap = (Map) JsonFactory.create().fromJson(json, Map.class); + try { + // 获取主键 + List pkList = (List) paraMap.get("pks"); + String[] pks = pkList.toArray(new String[0]); + PMOAggVO[] pmoAggVOS = ServiceLocator.find(IPMOQueryService.class).queryByPks(pks); + configParams = MyHelper.getConfigParams("xb-config", null); + if (configParams.isEmpty()) { + throw new BusinessException("箱变的QMS接口缺少配置"); + } + return buildSyncData(pmoAggVOS); + + } catch (Exception e) { + return PfResumeExceptionNccUtils.handleResumeException(e); + } + } + + /** + * 构建同步数据 + */ + private Object buildSyncData(PMOAggVO[] useVOs) throws BusinessException { + BaseDAO baseDAO = new BaseDAO(); + List> requestList = new ArrayList<>(); + for (PMOAggVO vo : useVOs) { + // 判断物料的业务单元是否是配置的公司,不是则跳过 + String pkOrg = vo.getParentVO().getPk_org(); + String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg); + if (checkIfOrg(orgCode, configParams)) { + continue; + } + if(vo.getChildrenVO().length >=0 ){ + if(vo.getChildrenVO()[0].getAttributeValue("vdef32").equals("Y")){ + continue; + } + } + // 组装数据 + JSONObject singleObj = new JSONObject(); + PMOHeadVO pmoHeadVO = vo.getParentVO(); + PMOItemVO[] itemVOS = vo.getChildrenVO(); + String sql = " select user_name from sm_user where dr = 0 and cuserid = '" + pmoHeadVO.getBillmaker() + "' "; + String billmakerName = (String) baseDAO.executeQuery(sql, new ColumnProcessor()); + + singleObj.put("batchid", System.currentTimeMillis()); + singleObj.put("bipzyid", pmoHeadVO.getCpmohid());// BIP订单主键 + singleObj.put("scdh", pmoHeadVO.getVbillcode()); + singleObj.put("xdrq", pmoHeadVO.getDbilldate().toString()); + singleObj.put("jhy", billmakerName); + singleObj.put("bz", pmoHeadVO.getVnote()); + // 处理Content数组 + JSONArray contentArray = new JSONArray(); + for (PMOItemVO item : itemVOS) { + String cmaterialvid = item.getCmaterialvid(); + String whereSql = " select code,name,materialspec,materialtype from bd_material where pk_material = '" + cmaterialvid + "' "; + Map mrlmap = (Map) baseDAO.executeQuery(whereSql, new MapProcessor()); + String mocloser = item.getMocloser();// BIP关闭人 + String mocloserName = MyHelper.getStrValByCondition("sm_user", UserVO.USER_NAME, + UserVO.CUSERID + " = '" + mocloser + "'"); + String cprojectid = item.getCprojectid();// 项目id + String projectCode = MyHelper.getStrValByCondition(ProjectHeadVO.getDefaultTableName(), ProjectHeadVO.PROJECT_CODE, + ProjectHeadVO.PK_PROJECT + " = '" + cprojectid + "'"); + + // 行状态 0=自由;4=审批通过;1=投放;2=完工;3=关闭; + Integer fitemstatus = item.getFitemstatus(); + + JSONObject itemObj = new JSONObject(); + itemObj.put("bipqdid", item.getCmoid());// BIP行id + itemObj.put("sgdh", item.getCmoid());// 施工单号-BIP行id + itemObj.put("xshth", item.getVfirstcode());// 销售合同号-BIP源头单据号 + itemObj.put("htqdxh", item.getVfirstrowno());// 合同清单序号-BIP源头单据行号 + itemObj.put("wlbh", mrlmap.get("code"));// 产品编号 + itemObj.put("wlmc", mrlmap.get("name"));// 产品名称 + String wlxhgg = MyHelper.skipNull(mrlmap.get("materialspec")) + MyHelper.skipNull(mrlmap.get("materialtype")); + itemObj.put("wlxhgg", wlxhgg);// 产品型号规格 + itemObj.put("jhsl", item.getNastnum().toString());// 计划数量,该产品的生产计划数量 + UFDateTime tplanendtime = item.getTplanendtime(); + String tplanendtimeStr = ""; + if (tplanendtime != null) { + tplanendtimeStr = tplanendtime.toString(); + } + itemObj.put("jhrq", tplanendtimeStr);// 计划数量,该产品的生产计划数量 + int flag_wg = 0; + int flag_jqbz = 0; + if (fitemstatus == 2) { + flag_wg = 1; + } + if (fitemstatus == 3) { + flag_wg = 1; + flag_jqbz = 1; + } + itemObj.put("flag_wg", flag_wg);// 完工标志 1/0 1.完工 + itemObj.put("flag_jqbz", flag_jqbz);// 结清标志 1 代表结清 0 或者空代表非结清 + itemObj.put("jqr", mocloserName);// 结清人-BIP关闭人 + UFDateTime tmoclosedtime = item.getTmoclosedtime(); + String tmoclosedtimeStr = ""; + if (tmoclosedtime != null) { + tmoclosedtimeStr = tmoclosedtime.toString(); + } + itemObj.put("jqrq", tmoclosedtimeStr);// 结清日期-BIP关闭日期 + itemObj.put("bz", item.getVnote());// 清单备注 + contentArray.add(itemObj); + } + + singleObj.put("Content", contentArray); + pushData(singleObj); + updatePmo(vo.getParentVO().getCpmohid()); + } + return requestList; + } + + private void updatePmo(String cpmohid) throws DAOException { + BaseDAO dao = new BaseDAO(); + String sql = "update mm_mo set vdef32='Y' where cpmohid='" + + cpmohid + "'"; + dao.executeUpdate(sql); + } + + /** + * 推送同步数据 + */ + 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-PMO-JM-param = " + jsonStr); + // NCCForUAPLogger.debug("QMS-PMO-JM-param = " + jsonStr); + String baseUrl = configParams.get("qmsBaseUrl"); + String requestUrl = baseUrl + reqUrl; + logger.error("QMS-PMO-JM-url = " + requestUrl); +// String result = ThirdPartyPostRequestUtil.sendPostRequest(requestUrl, jsonStr); +// JSONObject resultObj = JSONObject.parseObject(result); +// logger.error("QMS-PMO-JM-res = " + result); +// +// if (!"true".equals(resultObj.getString("success"))) { +// logger.error("QMS-PMO-JM-error,result[" + resultObj.toJSONString() + "]"); +// throw new BusinessException("QMS-PMO-JM-error:" + resultObj.getString("message")); +// } + } + + 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; + } +} diff --git a/mmpac/src/client/yyconfig/modules/mmpac/config/authorize/mmpac_authorize.xml b/mmpac/src/client/yyconfig/modules/mmpac/config/authorize/mmpac_authorize.xml index 32204d96..58ab6c00 100644 --- a/mmpac/src/client/yyconfig/modules/mmpac/config/authorize/mmpac_authorize.xml +++ b/mmpac/src/client/yyconfig/modules/mmpac/config/authorize/mmpac_authorize.xml @@ -110,6 +110,8 @@ mmpac.pmo.queryByCond mmpac.pmo.createDCX55A3 mmpac.pmo.PmoToPlm + + mmpac.pmo.PmoToQms mmpac.pmo.PmoToMes diff --git a/mmpac/src/client/yyconfig/modules/mmpac/pmo/config/action/action.xml b/mmpac/src/client/yyconfig/modules/mmpac/pmo/config/action/action.xml index e88420e3..5413d29b 100644 --- a/mmpac/src/client/yyconfig/modules/mmpac/pmo/config/action/action.xml +++ b/mmpac/src/client/yyconfig/modules/mmpac/pmo/config/action/action.xml @@ -434,6 +434,12 @@ nccloud.web.mmpac.pmo.action.PmoToPlmAction + + mmpac.pmo.PmoToQms + + nccloud.web.mmpac.pmo.action.PmoToQmsAction + + mmpac.pmo.PmoToMes