From 343d967e15cf960eb52bfaa9fa28a04fb4a1415e Mon Sep 17 00:00:00 2001 From: lihao Date: Wed, 23 Jul 2025 11:04:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=81=E7=A8=8B=E5=A4=87=E6=96=99=E8=AE=A1?= =?UTF-8?q?=E5=88=92=E7=94=9F=E6=88=90=E6=B5=81=E7=A8=8B=E7=94=9F=E4=BA=A7?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=92=8C=E8=AF=B7=E8=B4=AD=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pickm/action/PickmToBuyingreqAction.java | 129 ++++++++++++++++++ .../web/mmpac/pickm/action/PickmToPmo.java | 129 ++++++++++++++++++ .../config/authorize/mmpac_authorize.xml | 3 + .../pickm/config/action/pickm_action.xml | 12 ++ .../bs/mmpac/pickm/rule/ToBuyingreqRule.java | 74 ++++++++++ .../nc/bs/mmpac/pickm/rule/ToPmoRule.java | 81 +++++++++++ 6 files changed, 428 insertions(+) create mode 100644 mmpac/src/client/nccloud/web/mmpac/pickm/action/PickmToBuyingreqAction.java create mode 100644 mmpac/src/client/nccloud/web/mmpac/pickm/action/PickmToPmo.java create mode 100644 mmpac/src/private/nc/bs/mmpac/pickm/rule/ToBuyingreqRule.java create mode 100644 mmpac/src/private/nc/bs/mmpac/pickm/rule/ToPmoRule.java diff --git a/mmpac/src/client/nccloud/web/mmpac/pickm/action/PickmToBuyingreqAction.java b/mmpac/src/client/nccloud/web/mmpac/pickm/action/PickmToBuyingreqAction.java new file mode 100644 index 0000000..9ce83e2 --- /dev/null +++ b/mmpac/src/client/nccloud/web/mmpac/pickm/action/PickmToBuyingreqAction.java @@ -0,0 +1,129 @@ +package nccloud.web.mmpac.pickm.action; + +import nc.itf.ic.m4a.IGeneralInMaintain; +import nc.itf.mmpac.pickm.IPickmQueryService; +import nc.itf.pu.m20.IPraybillMaintain; +import nc.itf.uap.pf.busiflow.PfButtonClickContext; +import nc.util.mmf.busi.service.PFPubService; +import nc.util.mmf.framework.base.MMValueCheck; +import nc.vo.ic.m4a.entity.GeneralInVO; +import nc.vo.mmpac.pickm.entity.AggPickmVO; +import nc.vo.mmpac.pickm.entity.PickmItemVO; +import nc.vo.pu.m20.entity.PraybillHeaderVO; +import nc.vo.pu.m20.entity.PraybillVO; +import nc.vo.pub.AggregatedValueObject; +import nc.vo.pub.BusinessException; +import nc.vo.pub.CircularlyAccessibleValueObject; +import nc.vo.pub.ISuperVO; +import nc.vo.pub.compiler.PfParameterVO; +import nccloud.dto.mmpac.pickm.pub.entity.PickmQueryInfoDTO; +import nccloud.framework.core.exception.ExceptionUtils; +import nccloud.framework.core.json.IJson; +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 java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 备料计划转请购单 + */ +public class PickmToBuyingreqAction implements ICommonAction { + @Override + public Object doAction(IRequest iRequest) { + String read = iRequest.read(); + IJson json = JsonFactory.create(); + try { + // 获取请求查询信息 + PickmQueryInfoDTO paramDTO = json.fromJson(read, PickmQueryInfoDTO.class); + // 获取主键 + String[] cpickmids = paramDTO.getCpickmids(); +// String[] cpickmbids = paramDTO.getCpickmbids(); +// if (MMValueCheck.isEmpty(cpickmids) && (null == cpickmbids || cpickmbids.length == 0)) { +// return null; +// } + AggPickmVO[] aggVOs = null; + IPickmQueryService service = ServiceLocator.find(IPickmQueryService.class); + if (MMValueCheck.isNotEmpty(cpickmids)) { + aggVOs = service.queryBillsByPks(cpickmids); + } + if (MMValueCheck.isEmpty(aggVOs)) { + /*@res "单据已被修改或删除,请刷新界面重新操作!"*/ + ExceptionUtils.wrapBusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("5008100_0", "05008100-0009")); + } +// AggPickmVO[] aggPickmVOS=processAggVOs(aggVOs); + // 转换数据 + PraybillVO[] prayVOs = convertToGeneralInVO(processAggVOs(aggVOs), null); + IPraybillMaintain maintain= ServiceLocator.find(IPraybillMaintain.class); + PraybillVO[] insertVos = maintain.insert(prayVOs); + Map returnMap = new HashMap<>(); + returnMap.put("data", insertVos); + returnMap.put("success", true); + return returnMap; + } catch (Exception e) { + ExceptionUtils.wrapException(e); + } + return null; + } + private PraybillVO[] convertToGeneralInVO(AggregatedValueObject[] sourceBillVOs, PfParameterVO srcParaVo) + throws BusinessException { + // 来源交易类型或单据类型,需要在单据类型中注册 + String srcBillOrTranstype = "55A3"; + // 目标交易类型或单据类型,需要在单据类型中注册 + String destBillOrTranstype = "20"; + // classifyMode int型参数,调用模式,参照PfButtonClickContext中定义,代码中调用为接口方式 ClassifyByItfdef + int classifyMode = PfButtonClickContext.ClassifyByItfdef; + PraybillVO[] inVOS = (PraybillVO[]) PFPubService.runChangeData(srcBillOrTranstype, destBillOrTranstype, sourceBillVOs, srcParaVo, classifyMode); + if (MMValueCheck.isEmpty(inVOS)) { + ExceptionUtils.wrapBusinessException("备料计划转换请购单失败"); + } + for (PraybillVO inVO : inVOS) { + // 其它入库单的仓库、交易类型取自【业务参数设置】的默认值 + PraybillHeaderVO head = inVO.getHVO(); + head.setCtrantypeid("0001A110000000001S1E"); + // head.setCwarehouseid(""); + } + return inVOS; + } + + public AggPickmVO[] processAggVOs(AggPickmVO[] aggVOs) { + Map> groupMap = new HashMap<>(); + + for (AggPickmVO vo : aggVOs) { + Object pk_org = vo.getParentVO().getPk_org(); + groupMap.computeIfAbsent(pk_org, k -> new ArrayList<>()).add(vo); + } + + List resultList = new ArrayList<>(); + + for (Map.Entry> entry : groupMap.entrySet()) { + List group = entry.getValue(); + + // 修改1:使用ISuperVO列表收集子对象 + List mergedChildren = new ArrayList(); + for (AggPickmVO vo : group) { + PickmItemVO[] items = (PickmItemVO[]) vo.getChildren(PickmItemVO.class); + if (items != null) { + for (PickmItemVO child : items) { + // CircularlyAccessibleValueObject 实现了 ISuperVO + mergedChildren.add(child); + } + } + } + + AggPickmVO newVO = new AggPickmVO(); + newVO.setParent(group.get(0).getParentVO()); + // 修改2:转换为ISuperVO数组 + newVO.setChildren(PickmItemVO.class, mergedChildren.toArray(new PickmItemVO[0])); + + resultList.add(newVO); + } + + return resultList.toArray(new AggPickmVO[0]); + } + +} diff --git a/mmpac/src/client/nccloud/web/mmpac/pickm/action/PickmToPmo.java b/mmpac/src/client/nccloud/web/mmpac/pickm/action/PickmToPmo.java new file mode 100644 index 0000000..f6fb2f9 --- /dev/null +++ b/mmpac/src/client/nccloud/web/mmpac/pickm/action/PickmToPmo.java @@ -0,0 +1,129 @@ +package nccloud.web.mmpac.pickm.action; + +import nc.itf.mmpac.pickm.IPickmQueryService; +import nc.itf.mmpac.pmo.pac0002.IPMOMaintainService; +import nc.itf.pu.m20.IPraybillMaintain; +import nc.itf.uap.pf.busiflow.PfButtonClickContext; +import nc.util.mmf.busi.service.PFPubService; +import nc.util.mmf.framework.base.MMValueCheck; +import nc.vo.mmpac.pickm.entity.AggPickmVO; +import nc.vo.mmpac.pickm.entity.PickmItemVO; +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.pu.m20.entity.PraybillHeaderVO; +import nc.vo.pu.m20.entity.PraybillVO; +import nc.vo.pub.AggregatedValueObject; +import nc.vo.pub.BusinessException; +import nc.vo.pub.compiler.PfParameterVO; +import nccloud.dto.mmpac.pickm.pub.entity.PickmQueryInfoDTO; +import nccloud.framework.core.exception.ExceptionUtils; +import nccloud.framework.core.json.IJson; +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 java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class PickmToPmo implements ICommonAction { + @Override + public Object doAction(IRequest iRequest) { + String read = iRequest.read(); + IJson json = JsonFactory.create(); + try { + // 获取请求查询信息 + PickmQueryInfoDTO paramDTO = json.fromJson(read, PickmQueryInfoDTO.class); + // 获取主键 + String[] cpickmids = paramDTO.getCpickmids(); +// String[] cpickmbids = paramDTO.getCpickmbids(); +// if (MMValueCheck.isEmpty(cpickmids) && (null == cpickmbids || cpickmbids.length == 0)) { +// return null; +// } + AggPickmVO[] aggVOs = null; + IPickmQueryService service = ServiceLocator.find(IPickmQueryService.class); + if (MMValueCheck.isNotEmpty(cpickmids)) { + aggVOs = service.queryBillsByPks(cpickmids); + } + if (MMValueCheck.isEmpty(aggVOs)) { + /*@res "单据已被修改或删除,请刷新界面重新操作!"*/ + ExceptionUtils.wrapBusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("5008100_0", "05008100-0009")); + } + + + PMOAggVO[] prayVOs = convertToGeneralInVO(processAggVOs(aggVOs), null); + IPMOMaintainService maintain= ServiceLocator.find(IPMOMaintainService.class); + PMOAggVO[] insertVos = maintain.insert(prayVOs); + Map returnMap = new HashMap<>(); + returnMap.put("data", insertVos); + returnMap.put("success", true); + return returnMap; + } catch (Exception e) { + ExceptionUtils.wrapException(e); + } + return null; + } + private PMOAggVO[] convertToGeneralInVO(AggregatedValueObject[] sourceBillVOs, PfParameterVO srcParaVo) + throws BusinessException { + // 来源交易类型或单据类型,需要在单据类型中注册 + String srcBillOrTranstype = "55A3"; + // 目标交易类型或单据类型,需要在单据类型中注册 + String destBillOrTranstype = "55A2"; + // classifyMode int型参数,调用模式,参照PfButtonClickContext中定义,代码中调用为接口方式 ClassifyByItfdef + int classifyMode = PfButtonClickContext.ClassifyByItfdef; + PMOAggVO[] inVOS = (PMOAggVO[]) PFPubService.runChangeData(srcBillOrTranstype, destBillOrTranstype, sourceBillVOs, srcParaVo, classifyMode); + if (MMValueCheck.isEmpty(inVOS)) { + ExceptionUtils.wrapBusinessException("备料计划转换流程生产订单失败"); + } + for (PMOAggVO inVO : inVOS) { + // 其它入库单的仓库、交易类型取自【业务参数设置】的默认值 + PMOHeadVO head = inVO.getParentVO(); + head.setCtrantypeid("0001A110000000001S1E"); + + for (PMOItemVO itemVO: inVO.getChildrenVO()){ + + } + // head.setCwarehouseid(""); + } + return inVOS; + } + + public AggPickmVO[] processAggVOs(AggPickmVO[] aggVOs) { + Map> groupMap = new HashMap<>(); + + for (AggPickmVO vo : aggVOs) { + Object pk_org = vo.getParentVO().getPk_org(); + groupMap.computeIfAbsent(pk_org, k -> new ArrayList<>()).add(vo); + } + + List resultList = new ArrayList<>(); + + for (Map.Entry> entry : groupMap.entrySet()) { + List group = entry.getValue(); + + // 修改1:使用ISuperVO列表收集子对象 + List mergedChildren = new ArrayList(); + for (AggPickmVO vo : group) { + PickmItemVO[] items = (PickmItemVO[]) vo.getChildren(PickmItemVO.class); + if (items != null) { + for (PickmItemVO child : items) { + // CircularlyAccessibleValueObject 实现了 ISuperVO + mergedChildren.add(child); + } + } + } + + AggPickmVO newVO = new AggPickmVO(); + newVO.setParent(group.get(0).getParentVO()); + // 修改2:转换为ISuperVO数组 + newVO.setChildren(PickmItemVO.class, mergedChildren.toArray(new PickmItemVO[0])); + + resultList.add(newVO); + } + + return resultList.toArray(new AggPickmVO[0]); + } +} 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 da1457f..79208a0 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 @@ -257,6 +257,9 @@ mmpac.pickm.replaceAutoMatch mmpac.pickm.queryByCond mmpac.pickm.convertOtherIn + + mmpac.pickm.buyingreq + mmpac.pickm.pom mmpac.pickm.pickmItemsQuery diff --git a/mmpac/src/client/yyconfig/modules/mmpac/pickm/config/action/pickm_action.xml b/mmpac/src/client/yyconfig/modules/mmpac/pickm/config/action/pickm_action.xml index 48ed412..3162bcf 100644 --- a/mmpac/src/client/yyconfig/modules/mmpac/pickm/config/action/pickm_action.xml +++ b/mmpac/src/client/yyconfig/modules/mmpac/pickm/config/action/pickm_action.xml @@ -161,4 +161,16 @@ nccloud.web.mmpac.pickm.action.PickmToGeneralInAction + + mmpac.pickm.buyingreq + + nccloud.web.mmpac.pickm.action.PickmToBuyingreqAction + + + + mmpac.pickm.pom + + nccloud.web.mmpac.pickm.action.PickmToPmo + + \ No newline at end of file diff --git a/mmpac/src/private/nc/bs/mmpac/pickm/rule/ToBuyingreqRule.java b/mmpac/src/private/nc/bs/mmpac/pickm/rule/ToBuyingreqRule.java new file mode 100644 index 0000000..27e823f --- /dev/null +++ b/mmpac/src/private/nc/bs/mmpac/pickm/rule/ToBuyingreqRule.java @@ -0,0 +1,74 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package nc.bs.mmpac.pickm.rule; + + +import nc.impl.pubapp.pattern.rule.IRule; +import nc.itf.ic.m4a.IGeneralInMaintain; +import nc.itf.pu.m20.IPraybillMaintain; +import nc.itf.uap.pf.busiflow.PfButtonClickContext; +import nc.util.mmf.busi.service.PFPubService; +import nc.util.mmf.framework.base.MMValueCheck; +import nc.vo.mmpac.pickm.entity.AggPickmVO; +import nc.vo.pu.m20.entity.PraybillHeaderVO; +import nc.vo.pub.AggregatedValueObject; +import nc.vo.pub.BusinessException; +import nc.vo.pub.compiler.PfParameterVO; +import nc.vo.pu.m20.entity.PraybillVO; +import nccloud.framework.core.exception.ExceptionUtils; +import nccloud.framework.service.ServiceLocator; + +import java.util.HashMap; +import java.util.Map; + +public class ToBuyingreqRule implements IRule { + public ToBuyingreqRule() { + } + + public void process(AggPickmVO[] aggVOs) { + if (!MMValueCheck.isEmpty(aggVOs)) { + try { + PraybillVO[] prayVOs = convertToGeneralInVO(aggVOs, null); + IPraybillMaintain maintain= ServiceLocator.find(IPraybillMaintain.class); + PraybillVO[] insertVos = maintain.insert(prayVOs); + Map returnMap = new HashMap<>(); + returnMap.put("data", insertVos); + returnMap.put("success", true); + } catch (BusinessException e) { + throw new RuntimeException(e); + } + + } + } + /** + * 方法功能描述:批量执行VO转换,若来源及目标单据类型没有注册或传入来源单据不能转换,则抛出业务异常 + * + * @param sourceBillVOs AggregatedValueObject[]型参数,来源单据VO数组 + * @param srcParaVo PfParameterVO型参数,平台的运行参数类,一般为NULL即可 + * @return AggregatedValueObject[]型VO转换后的目标单据数组 + * @throws BusinessException 若VO转换失败,则抛出业务异常 + */ + private PraybillVO[] convertToGeneralInVO(AggregatedValueObject[] sourceBillVOs, PfParameterVO srcParaVo) + throws BusinessException { + // 来源交易类型或单据类型,需要在单据类型中注册 + String srcBillOrTranstype = "55A3"; + // 目标交易类型或单据类型,需要在单据类型中注册 + String destBillOrTranstype = "20"; + // classifyMode int型参数,调用模式,参照PfButtonClickContext中定义,代码中调用为接口方式 ClassifyByItfdef + int classifyMode = PfButtonClickContext.ClassifyByItfdef; + PraybillVO[] inVOS = (PraybillVO[]) PFPubService.runChangeData(srcBillOrTranstype, destBillOrTranstype, sourceBillVOs, srcParaVo, classifyMode); + if (MMValueCheck.isEmpty(inVOS)) { + ExceptionUtils.wrapBusinessException("备料计划转换请购单失败"); + } + for (PraybillVO inVO : inVOS) { + // 其它入库单的仓库、交易类型取自【业务参数设置】的默认值 + PraybillHeaderVO head = inVO.getHVO(); + head.setCtrantypeid("0001A110000000001S1E"); + // head.setCwarehouseid(""); + } + return inVOS; + } +} diff --git a/mmpac/src/private/nc/bs/mmpac/pickm/rule/ToPmoRule.java b/mmpac/src/private/nc/bs/mmpac/pickm/rule/ToPmoRule.java new file mode 100644 index 0000000..84a8982 --- /dev/null +++ b/mmpac/src/private/nc/bs/mmpac/pickm/rule/ToPmoRule.java @@ -0,0 +1,81 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package nc.bs.mmpac.pickm.rule; + + +import nc.impl.pubapp.pattern.rule.IRule; +import nc.itf.mmpac.pmo.pac0002.IPMOMaintainService; +import nc.itf.pu.m20.IPraybillMaintain; +import nc.itf.uap.pf.busiflow.PfButtonClickContext; +import nc.util.mmf.busi.service.PFPubService; +import nc.util.mmf.framework.base.MMValueCheck; +import nc.vo.mmpac.pickm.entity.AggPickmVO; +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.pu.m20.entity.PraybillHeaderVO; +import nc.vo.pu.m20.entity.PraybillVO; +import nc.vo.pub.AggregatedValueObject; +import nc.vo.pub.BusinessException; +import nc.vo.pub.compiler.PfParameterVO; +import nccloud.framework.core.exception.ExceptionUtils; +import nccloud.framework.service.ServiceLocator; + +import java.util.HashMap; +import java.util.Map; + +public class ToPmoRule implements IRule { + public ToPmoRule() { + } + + public void process(AggPickmVO[] aggVOs) { + if (!MMValueCheck.isEmpty(aggVOs)) { + try { + PMOAggVO[] prayVOs = convertToGeneralInVO(aggVOs, null); + IPMOMaintainService maintain= ServiceLocator.find(IPMOMaintainService.class); + PMOAggVO[] insertVos = maintain.insert(prayVOs); + Map returnMap = new HashMap<>(); + returnMap.put("data", insertVos); + returnMap.put("success", true); + } catch (BusinessException e) { + throw new RuntimeException(e); + } + + } + } + /** + * 方法功能描述:批量执行VO转换,若来源及目标单据类型没有注册或传入来源单据不能转换,则抛出业务异常 + * + * @param sourceBillVOs AggregatedValueObject[]型参数,来源单据VO数组 + * @param srcParaVo PfParameterVO型参数,平台的运行参数类,一般为NULL即可 + * @return AggregatedValueObject[]型VO转换后的目标单据数组 + * @throws BusinessException 若VO转换失败,则抛出业务异常 + */ + private PMOAggVO[] convertToGeneralInVO(AggregatedValueObject[] sourceBillVOs, PfParameterVO srcParaVo) + throws BusinessException { + // 来源交易类型或单据类型,需要在单据类型中注册 + String srcBillOrTranstype = "55A3"; + // 目标交易类型或单据类型,需要在单据类型中注册 + String destBillOrTranstype = "55A2"; + // classifyMode int型参数,调用模式,参照PfButtonClickContext中定义,代码中调用为接口方式 ClassifyByItfdef + int classifyMode = PfButtonClickContext.ClassifyByItfdef; + PMOAggVO[] inVOS = (PMOAggVO[]) PFPubService.runChangeData(srcBillOrTranstype, destBillOrTranstype, sourceBillVOs, srcParaVo, classifyMode); + if (MMValueCheck.isEmpty(inVOS)) { + ExceptionUtils.wrapBusinessException("备料计划转换流程生产订单失败"); + } + for (PMOAggVO inVO : inVOS) { + // 其它入库单的仓库、交易类型取自【业务参数设置】的默认值 + PMOHeadVO head = inVO.getParentVO(); + head.setCtrantypeid("0001A110000000001S1E"); + + for (PMOItemVO itemVO: inVO.getChildrenVO()){ + + } + // head.setCwarehouseid(""); + } + return inVOS; + } +}