diff --git a/mmpac/src/client/nccloud/web/mmpac/pmo/action/PmoToQmsAction.java b/mmpac/src/client/nccloud/web/mmpac/pmo/action/PmoToQmsAction.java index 068e149a..35082f76 100644 --- a/mmpac/src/client/nccloud/web/mmpac/pmo/action/PmoToQmsAction.java +++ b/mmpac/src/client/nccloud/web/mmpac/pmo/action/PmoToQmsAction.java @@ -5,31 +5,34 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; import nc.bs.dao.BaseDAO; -import nc.bs.dao.DAOException; +import nc.bs.framework.common.NCLocator; import nc.bs.logging.Log; -import nc.bs.logging.Logger; 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.MapListProcessor; import nc.jdbc.framework.processor.MapProcessor; -import nc.vo.bc.pmpub.project.ProjectHeadVO; +import nc.util.mmf.framework.base.MMValueCheck; +import nc.vo.fi.pub.SqlUtils; 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.pmpub.project.ProjectHeadVO; import nc.vo.pub.BusinessException; import nc.vo.pub.lang.UFDateTime; -import nc.vo.sm.UserVO; +import nccloud.api.rest.utils.ResultMessageUtil; 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 java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; /** * 箱变-流程生产订单同步启源 @@ -38,37 +41,31 @@ import java.util.Map; * @date 2025/10/11 */ public class PmoToQmsAction implements ICommonAction { - + private static final BaseDAO dao = new BaseDAO(); 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=addscjh"; 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); + logger.error("PmoToQmsAction-Param:" + 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); + if (pmoAggVOS == null || pmoAggVOS.length == 0) { + throw new BusinessException("未查询到对应的流程生产订单"); + } configParams = MyHelper.getConfigParams("xb-config", null); if (configParams.isEmpty()) { throw new BusinessException("箱变的QMS接口缺少配置"); } - return buildSyncData(pmoAggVOS); - + buildSyncData(pmoAggVOS); + return ResultMessageUtil.toJSON(true, "推送成功"); } catch (Exception e) { return PfResumeExceptionNccUtils.handleResumeException(e); } @@ -77,104 +74,148 @@ public class PmoToQmsAction implements ICommonAction { /** * 构建同步数据 */ - 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)) { + private void buildSyncData(PMOAggVO[] useVOs) throws BusinessException { + IPMOQueryService pmoQuery = NCLocator.getInstance().lookup(IPMOQueryService.class); + Set vbatchcodeSet = new HashSet<>(); + PMOAggVO aggVO = useVOs[0]; + PMOHeadVO headVO = aggVO.getParentVO(); + PMOItemVO[] nowItemVOS = aggVO.getChildrenVO(); + String pkOrg = headVO.getPk_org(); + // 判断物料的业务单元是否是箱变公司,不是则跳过 + String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg); + if (checkIfOrg(orgCode, configParams)) { + throw new BusinessException("当前组织非箱变,无法推送"); + } + // 期初生产订单、半成品生产订单不推QMS,其余生产订单类型推QMS + String billType = headVO.getVtrantypecode(); + if (checkBillType(billType, configParams)) { + throw new BusinessException("当前单据类型非推送类型,无法推送"); + } + for (PMOItemVO itemVO : nowItemVOS) { + String vbatchcode = itemVO.getVbatchcode(); + vbatchcodeSet.add(vbatchcode); + } + // 判断是否存在批次号 + if (vbatchcodeSet.isEmpty()) { + throw new BusinessException("当前单据不存在批次号,无法推送"); + } + for (String vbatchcode : vbatchcodeSet) { + String pmoSql = " select distinct cpmohid from mm_mo where dr = 0 and vbatchcode = '[vbatchcode]' and pk_org = '[pk_org]' "; + pmoSql = pmoSql.replace("[vbatchcode]", vbatchcode); + pmoSql = pmoSql.replace("[pk_org]", pkOrg); + List> pmoIdList = (List>) dao.executeQuery(pmoSql, new MapListProcessor()); + Set hidSet1 = new HashSet<>(); + for (Map map : pmoIdList) { + hidSet1.add(map.get("cpmohid")); + } + PMOAggVO[] pmoAggVOS = pmoQuery.queryByPks(hidSet1.toArray(new String[0])); + if (pmoAggVOS == null || pmoAggVOS.length == 0) { continue; } - // 期初生产订单、半成品生产订单不推QMS,其余生产订单类型推QMS - String billType = vo.getParentVO().getVtrantypecode(); - if (checkBillType(billType, configParams)) { - throw new BusinessException("订单类型不符合条件"); + UFDateTime modifiedtime = headVO.getModifiedtime(); + // 获取制单人 + String sql = " select user_name from sm_user where dr = 0 and cuserid = '" + headVO.getBillmaker() + "' "; + String billmakerName = (String) dao.executeQuery(sql, new ColumnProcessor()); + // 获取修改人 + String updateName = ""; + if (MMValueCheck.isNotEmpty(headVO.getModifier())) { + sql = " select user_name from sm_user where dr = 0 and cuserid = '" + headVO.getModifier() + "' "; + updateName = (String) dao.executeQuery(sql, new ColumnProcessor()); } - if (vo.getChildrenVO().length >= 0) { - if (null != vo.getChildrenVO()[0].getAttributeValue("vdef32") && vo.getChildrenVO()[0].getAttributeValue("vdef32").equals("Y")) { - continue; + Set hidSet = new HashSet<>(); + JSONArray contentArray = new JSONArray(); + for (PMOAggVO pmoAggVO : pmoAggVOS) { + PMOHeadVO head = pmoAggVO.getParentVO(); + PMOItemVO[] pmoItemVOS = pmoAggVO.getChildrenVO(); + String cpmohid = head.getCpmohid(); + String vbillcode = head.getVbillcode(); + for (PMOItemVO item : pmoItemVOS) { + String cmoid = item.getCmoid(); + String cmaterialvid = item.getCmaterialvid(); + String whereSql = " select code,name,materialspec,materialtype from bd_material where pk_material = '" + cmaterialvid + "' "; + Map mrlmap = (Map) dao.executeQuery(whereSql, new MapProcessor()); + + String cprojectid = item.getCprojectid();// 项目id + String projectCode = MyHelper.getStrValByCondition(nc.vo.pmpub.project.ProjectHeadVO.getDefaultTableName(), nc.vo.pmpub.project.ProjectHeadVO.PROJECT_CODE, + ProjectHeadVO.PK_PROJECT + " = '" + cprojectid + "'"); + // 序列号 + String vsnCodeSql = " select vsncode from mm_pmo_serialno where cmoid = '" + cmoid + "' and dr = 0 "; + List> vsnCodeList = (List>) dao.executeQuery(vsnCodeSql, new MapListProcessor()); + if (vsnCodeList == null || vsnCodeList.isEmpty()) { + throw new BusinessException("箱变同步启源流程生产订单失败,请检查是否存在序列号"); + } + for (Map vsnMap : vsnCodeList) { + JSONObject itemObj = new JSONObject(); + itemObj.put("sgdh", vsnMap.get("vsncode"));// QMS施工单号-BIP的序列号 + itemObj.put("scdd", vbillcode);// QMS生产订单-BIP的流程生产订单号 + itemObj.put("xshth", projectCode); + itemObj.put("htqdxh", item.getVfirstrowno()); + 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", "1"); + UFDateTime tplanendtime = item.getTplanendtime(); + String tplanendtimeStr = ""; + if (tplanendtime != null) { + tplanendtimeStr = tplanendtime.toString(); + } + itemObj.put("jhrq", tplanendtimeStr); + itemObj.put("bz", item.getVnote()); + itemObj.put("flag_jqbz", 0); // 结清标志 1/0 + itemObj.put("jqr", ""); // 结清人 + itemObj.put("jqrq", ""); // 结清日期 + contentArray.add(itemObj); + } + // 查询删除的序列号 + vsnCodeSql = " select vsncode from mm_pmo_serialno where cmoid = '" + cmoid + "' and dr = 1 "; + List> delVsnCodeList = (List>) dao.executeQuery(vsnCodeSql, new MapListProcessor()); + if (delVsnCodeList != null && !delVsnCodeList.isEmpty()) { + for (Map vsnMap : delVsnCodeList) { + JSONObject itemObj = new JSONObject(); + itemObj.put("sgdh", vsnMap.get("vsncode"));// QMS施工单号-BIP的序列号 + itemObj.put("scdh", vbillcode);// QMS生产订单-BIP的流程生产订单号 + itemObj.put("xshth", projectCode); + itemObj.put("htqdxh", item.getVfirstrowno()); + 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", "1"); + UFDateTime tplanendtime = item.getTplanendtime(); + String tplanendtimeStr = ""; + if (tplanendtime != null) { + tplanendtimeStr = tplanendtime.toString(); + } + itemObj.put("jhrq", tplanendtimeStr); + itemObj.put("bz", item.getVnote()); + itemObj.put("flag_jqbz", 1); // 结清标志 1/0 + itemObj.put("jqr", updateName); // 结清人 + if (modifiedtime != null) { + itemObj.put("jqrq", modifiedtime.toString()); // 结清日期 + } + contentArray.add(itemObj); + } + } } + hidSet.add(cpmohid); } // 组装数据 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("scdh", vbatchcode);// QMS施工单号-BIP批次号 + singleObj.put("xdrq", headVO.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("bz", headVO.getVnote()); singleObj.put("Content", contentArray); pushData(singleObj); - updatePmo(vo.getParentVO().getCpmohid()); + updatePmo(hidSet); } - return requestList; } - private void updatePmo(String cpmohid) throws DAOException { - BaseDAO dao = new BaseDAO(); - String sql = "update mm_mo set vdef32='Y' where cpmohid='" - + cpmohid + "'"; + private void updatePmo(Set hidSet) throws BusinessException { + String inSql = SqlUtils.getInStr("cpmohid", hidSet.toArray(new String[0]), Boolean.TRUE); + String sql = "update mm_mo set vdef32='Y' where " + inSql; dao.executeUpdate(sql); } @@ -188,18 +229,18 @@ public class PmoToQmsAction implements ICommonAction { SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty ); - logger.error("QMS-PMO-JM-param = " + jsonStr); - // NCCForUAPLogger.debug("QMS-PMO-JM-param = " + jsonStr); + logger.error("QMS-PMO-XB-param = " + jsonStr); + // NCCForUAPLogger.debug("QMS-PMO-XB-param = " + jsonStr); String baseUrl = configParams.get("qmsBaseUrl"); String requestUrl = baseUrl + reqUrl; - logger.error("QMS-PMO-JM-url = " + requestUrl); + logger.error("QMS-PMO-XB-url = " + requestUrl); String result = ThirdPartyPostRequestUtil.sendPostRequest(requestUrl, jsonStr); JSONObject resultObj = JSONObject.parseObject(result); - logger.error("QMS-PMO-JM-res = " + result); + logger.error("QMS-PMO-XB-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")); + logger.error("QMS-PMO-XB-error,result[" + resultObj.toJSONString() + "]"); + throw new BusinessException("QMS-PMO-XB-error:" + resultObj.getString("message")); } } @@ -216,6 +257,7 @@ public class PmoToQmsAction implements ICommonAction { } return true; } + private boolean checkBillType(String code, Map configParams) throws BusinessException { String targetCode = configParams.get("pmoBillType"); if (targetCode == null || nc.vo.am.common.util.StringUtils.isEmpty(targetCode)) { diff --git a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterApproveSyncQMSRule.java b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterApproveSyncQMSRule.java index 264908cc..92a53098 100644 --- a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterApproveSyncQMSRule.java +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterApproveSyncQMSRule.java @@ -6,14 +6,17 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; import nc.bs.dao.BaseDAO; -import nc.bs.dao.DAOException; +import nc.bs.framework.common.NCLocator; 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.itf.mmpac.pmo.pac0002.IPMOQueryService; import nc.jdbc.framework.processor.ColumnProcessor; +import nc.jdbc.framework.processor.MapListProcessor; import nc.jdbc.framework.processor.MapProcessor; -import nc.vo.bd.bom.bom0202.entity.BomVO; +import nc.util.mmf.framework.base.MMValueCheck; +import nc.vo.fi.pub.SqlUtils; import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO; import nc.vo.mmpac.pmo.pac0002.entity.PMOHeadVO; import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO; @@ -22,7 +25,10 @@ import nc.vo.pmpub.project.ProjectHeadVO; import nc.vo.pub.BusinessException; import nc.vo.pub.lang.UFDateTime; +import java.util.HashSet; +import java.util.List; import java.util.Map; +import java.util.Set; /** * 箱变-流程生产订单审批后推送QMS @@ -31,7 +37,7 @@ import java.util.Map; * @date 2025/8/25 */ public class AfterApproveSyncQMSRule implements IRule { - + private static final BaseDAO dao = new BaseDAO(); 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=addscjh"; @@ -40,6 +46,9 @@ public class AfterApproveSyncQMSRule implements IRule { @Override public void process(PMOAggVO[] pmoAggVOS) { try { + if (pmoAggVOS == null || pmoAggVOS.length == 0) { + return; + } configParams = MyHelper.getConfigParams("xb-config", null); if (configParams.isEmpty()) { throw new BusinessException("箱变的QMS接口缺少配置"); @@ -55,73 +64,148 @@ public class AfterApproveSyncQMSRule implements IRule { * 构建同步数据 */ private void buildSyncData(PMOAggVO[] useVOs) throws BusinessException { - BaseDAO baseDAO = new BaseDAO(); - 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)) { + IPMOQueryService pmoQuery = NCLocator.getInstance().lookup(IPMOQueryService.class); + Set vbatchcodeSet = new HashSet<>(); + PMOAggVO aggVO = useVOs[0]; + PMOHeadVO headVO = aggVO.getParentVO(); + PMOItemVO[] nowItemVOS = aggVO.getChildrenVO(); + String pkOrg = headVO.getPk_org(); + // 判断物料的业务单元是否是箱变公司,不是则跳过 + String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg); + if (checkIfOrg(orgCode, configParams)) { + return; + } + // 期初生产订单、半成品生产订单不推QMS,其余生产订单类型推QMS + String billType = headVO.getVtrantypecode(); + if (checkBillType(billType, configParams)) { + return; + } + for (PMOItemVO itemVO : nowItemVOS) { + String vbatchcode = itemVO.getVbatchcode(); + vbatchcodeSet.add(vbatchcode); + } + // 判断是否存在批次号 + if (vbatchcodeSet.isEmpty()) { + return; + } + for (String vbatchcode : vbatchcodeSet) { + String pmoSql = " select distinct cpmohid from mm_mo where dr = 0 and vbatchcode = '[vbatchcode]' and pk_org = '[pk_org]' "; + pmoSql = pmoSql.replace("[vbatchcode]", vbatchcode); + pmoSql = pmoSql.replace("[pk_org]", pkOrg); + List> pmoIdList = (List>) dao.executeQuery(pmoSql, new MapListProcessor()); + Set hidSet1 = new HashSet<>(); + for (Map map : pmoIdList) { + hidSet1.add(map.get("cpmohid")); + } + PMOAggVO[] pmoAggVOS = pmoQuery.queryByPks(hidSet1.toArray(new String[0])); + if (pmoAggVOS == null || pmoAggVOS.length == 0) { continue; } - // 期初生产订单、半成品生产订单不推QMS,其余生产订单类型推QMS - String billType = vo.getParentVO().getVtrantypecode(); - if (checkBillType(billType, configParams)) { - continue; + UFDateTime modifiedtime = headVO.getModifiedtime(); + // 获取制单人 + String sql = " select user_name from sm_user where dr = 0 and cuserid = '" + headVO.getBillmaker() + "' "; + String billmakerName = (String) dao.executeQuery(sql, new ColumnProcessor()); + // 获取修改人 + String updateName = ""; + if (MMValueCheck.isNotEmpty(headVO.getModifier())) { + sql = " select user_name from sm_user where dr = 0 and cuserid = '" + headVO.getModifier() + "' "; + updateName = (String) dao.executeQuery(sql, new ColumnProcessor()); + } + Set hidSet = new HashSet<>(); + JSONArray contentArray = new JSONArray(); + for (PMOAggVO pmoAggVO : pmoAggVOS) { + PMOHeadVO head = pmoAggVO.getParentVO(); + PMOItemVO[] pmoItemVOS = pmoAggVO.getChildrenVO(); + String cpmohid = head.getCpmohid(); + String vbillcode = head.getVbillcode(); + for (PMOItemVO item : pmoItemVOS) { + String cmoid = item.getCmoid(); + String cmaterialvid = item.getCmaterialvid(); + String whereSql = " select code,name,materialspec,materialtype from bd_material where pk_material = '" + cmaterialvid + "' "; + Map mrlmap = (Map) dao.executeQuery(whereSql, new MapProcessor()); + + String cprojectid = item.getCprojectid();// 项目id + String projectCode = MyHelper.getStrValByCondition(ProjectHeadVO.getDefaultTableName(), ProjectHeadVO.PROJECT_CODE, + ProjectHeadVO.PK_PROJECT + " = '" + cprojectid + "'"); + // 序列号 + String vsnCodeSql = " select vsncode from mm_pmo_serialno where cmoid = '" + cmoid + "' and dr = 0 "; + List> vsnCodeList = (List>) dao.executeQuery(vsnCodeSql, new MapListProcessor()); + if (vsnCodeList == null || vsnCodeList.isEmpty()) { + throw new BusinessException("箱变同步启源流程生产订单失败,请检查是否存在序列号"); + } + for (Map vsnMap : vsnCodeList) { + JSONObject itemObj = new JSONObject(); + itemObj.put("sgdh", vsnMap.get("vsncode"));// QMS施工单号-BIP的序列号 + itemObj.put("scdd", vbillcode);// QMS生产订单-BIP的流程生产订单号 + itemObj.put("xshth", projectCode); + itemObj.put("htqdxh", item.getVfirstrowno()); + 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", "1"); + UFDateTime tplanendtime = item.getTplanendtime(); + String tplanendtimeStr = ""; + if (tplanendtime != null) { + tplanendtimeStr = tplanendtime.toString(); + } + itemObj.put("jhrq", tplanendtimeStr); + itemObj.put("bz", item.getVnote()); + itemObj.put("flag_jqbz", 0); // 结清标志 1/0 + itemObj.put("jqr", ""); // 结清人 + itemObj.put("jqrq", ""); // 结清日期 + contentArray.add(itemObj); + } + // 查询删除的序列号 + vsnCodeSql = " select vsncode from mm_pmo_serialno where cmoid = '" + cmoid + "' and dr = 1 "; + List> delVsnCodeList = (List>) dao.executeQuery(vsnCodeSql, new MapListProcessor()); + if (delVsnCodeList != null && !delVsnCodeList.isEmpty()) { + for (Map vsnMap : delVsnCodeList) { + JSONObject itemObj = new JSONObject(); + itemObj.put("sgdh", vsnMap.get("vsncode"));// QMS施工单号-BIP的序列号 + itemObj.put("scdh", vbillcode);// QMS生产订单-BIP的流程生产订单号 + itemObj.put("xshth", projectCode); + itemObj.put("htqdxh", item.getVfirstrowno()); + 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", "1"); + UFDateTime tplanendtime = item.getTplanendtime(); + String tplanendtimeStr = ""; + if (tplanendtime != null) { + tplanendtimeStr = tplanendtime.toString(); + } + itemObj.put("jhrq", tplanendtimeStr); + itemObj.put("bz", item.getVnote()); + itemObj.put("flag_jqbz", 1); // 结清标志 1/0 + itemObj.put("jqr", updateName); // 结清人 + if (modifiedtime != null) { + itemObj.put("jqrq", modifiedtime.toString()); // 结清日期 + } + contentArray.add(itemObj); + } + } + } + hidSet.add(cpmohid); } // 组装数据 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("scdh", pmoHeadVO.getVbillcode()); - singleObj.put("xdrq", pmoHeadVO.getDbilldate().toString()); + singleObj.put("scdh", vbatchcode);// QMS施工单号-BIP批次号 + singleObj.put("xdrq", headVO.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 cprojectid = item.getCprojectid();// 项目id - String projectCode = MyHelper.getStrValByCondition(ProjectHeadVO.getDefaultTableName(), ProjectHeadVO.PROJECT_CODE, - ProjectHeadVO.PK_PROJECT + " = '" + cprojectid + "'"); - // 生产BOM版本 - String cbomversionid = item.getCbomversionid(); - String hversion = MyHelper.getStrValByCondition(BomVO.TABLE_NAME, BomVO.HVERSION, - BomVO.CBOMID + " = '" + cbomversionid + "'"); - - JSONObject itemObj = new JSONObject(); - itemObj.put("sgdh", hversion);// QMS施工单号-BIP的生产BOM版本号 - itemObj.put("xshth", projectCode); - itemObj.put("htqdxh", item.getVfirstrowno()); - 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); - itemObj.put("bz", item.getVnote()); - contentArray.add(itemObj); - } + singleObj.put("bz", headVO.getVnote()); singleObj.put("Content", contentArray); pushData(singleObj); - updatePmo(vo.getParentVO().getCpmohid()); + updatePmo(hidSet); } + } - private void updatePmo(String cpmohid) throws DAOException { - BaseDAO dao = new BaseDAO(); - String sql = "update mm_mo set vdef32='Y' where cpmohid='" - + cpmohid + "'"; + + private void updatePmo(Set hidSet) throws BusinessException { + String inSql = SqlUtils.getInStr("cpmohid", hidSet.toArray(new String[0]), Boolean.TRUE); + String sql = "update mm_mo set vdef32='Y' where " + inSql; dao.executeUpdate(sql); }