From f0d96b92c4d39a4aad74e0bda6079cc5f4c23b3c Mon Sep 17 00:00:00 2001 From: mzr Date: Sat, 20 Sep 2025 18:16:14 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B2=BE=E5=AF=86-=E5=90=AF=E6=BA=90-=E9=A2=86?= =?UTF-8?q?=E6=96=99=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ic/m4d/APIMaterialOutMaintainImpl.java | 119 +++++++++++++++++- .../api/ic/m4d/IAPIMaterialOutMaintain.java | 4 + .../openapi/ic/m4d/MaterialOutResource.java | 25 +++- 3 files changed, 141 insertions(+), 7 deletions(-) diff --git a/ic/src/private/nccloud/api/impl/ic/m4d/APIMaterialOutMaintainImpl.java b/ic/src/private/nccloud/api/impl/ic/m4d/APIMaterialOutMaintainImpl.java index 9efbc015..b81b6ea7 100644 --- a/ic/src/private/nccloud/api/impl/ic/m4d/APIMaterialOutMaintainImpl.java +++ b/ic/src/private/nccloud/api/impl/ic/m4d/APIMaterialOutMaintainImpl.java @@ -1,13 +1,21 @@ package nccloud.api.impl.ic.m4d; +import com.alibaba.fastjson.JSONObject; +import nc.bs.dao.BaseDAO; +import nc.bs.dao.DAOException; import nc.bs.framework.common.NCLocator; import nc.bs.logging.Log; import nc.bs.scmpub.query.SCMBillQuery; import nc.itf.ic.m4d.IMaterialOutMaintain; +import nc.itf.mmpac.pickm.IPickmQueryService; import nc.itf.scmpub.reference.uap.pf.PfServiceScmUtil; +import nc.itf.uap.pf.busiflow.PfButtonClickContext; +import nc.jdbc.framework.processor.ColumnListProcessor; import nc.pubimpl.ic.api.maintain.BillMaintainTool; import nc.pubitf.ic.m4d.api.IMaterialOutMaintainAPI; +import nc.util.mmf.busi.service.PFPubService; +import nc.util.mmf.framework.base.MMValueCheck; import nc.vo.ic.general.define.ICBillFlag; import nc.vo.ic.general.define.ICBillHeadVO; import nc.vo.ic.general.util.ICLocationUtil; @@ -16,8 +24,12 @@ import nc.vo.ic.m4d.entity.MaterialOutBodyVO; import nc.vo.ic.m4d.entity.MaterialOutHeadVO; import nc.vo.ic.m4d.entity.MaterialOutVO; import nc.vo.ic.pub.define.ICPubMetaNameConst; +import nc.vo.mmpac.pickm.entity.AggPickmVO; +import nc.vo.mmpac.pickm.entity.PickmItemVO; import nc.vo.pub.BusinessException; +import nc.vo.pub.ISuperVO; import nc.vo.pub.VOStatus; +import nc.vo.pub.lang.UFDouble; import nc.vo.scmpub.check.billvalidate.BillVOsCheckRule; import nc.vo.scmpub.res.billtype.ICBillType; import nc.vo.scmpub.util.ArrayUtil; @@ -27,6 +39,7 @@ import nccloud.api.impl.ic.m4d.fill.MaterialOutSaveFillValue; import nccloud.api.impl.ic.m4d.fill.MaterialOutUpdateFillValue; import nccloud.api.impl.ic.pub.check.CheckProhibitUpdateFields; import nccloud.api.uapbd.wms.utils.IWmsSyncUtils; +import nccloud.baseapp.core.log.NCCForUAPLogger; import nccloud.openapi.ic.util.ICAPILocationVOUtils; import nccloud.openapi.scmpub.pub.TransferCodeToPKTool; import nccloud.openapi.scmpub.pub.TransferMapToVOTool; @@ -43,8 +56,15 @@ import java.util.*; */ public class APIMaterialOutMaintainImpl implements IAPIMaterialOutMaintain { + private BaseDAO baseDAO = null; + + private BaseDAO getDao() { + if (this.baseDAO == null) { + this.baseDAO = new BaseDAO(); + } + return this.baseDAO; + } - // private static final BaseDAO DAO = new BaseDAO(); private static final Log log = Log.getInstance("wmslog"); // private static final IHttpPostOtherSys HTTP_POST_OTHER_SYS = NCLocator.getInstance().lookup(IHttpPostOtherSys.class); @@ -71,7 +91,7 @@ public class APIMaterialOutMaintainImpl implements IAPIMaterialOutMaintain { // if (isSpecialCase) { // processPickingPlanSpecialLogic(vos); // } - //其他数据填充 + // 其他数据填充 new MaterialOutSaveFillValue().setDefaultValue(vos); IMaterialOutMaintainAPI materialOut = NCLocator.getInstance().lookup(IMaterialOutMaintainAPI.class); @@ -103,7 +123,7 @@ public class APIMaterialOutMaintainImpl implements IAPIMaterialOutMaintain { // if (isSpecialCase) { // processPickingPlanSpecialLogic(vos); // } - //其他数据填充 + // 其他数据填充 new MaterialOutSaveFillValue().setDefaultValue(vos); IMaterialOutMaintainAPI materialOut = NCLocator.getInstance().lookup(IMaterialOutMaintainAPI.class); @@ -227,7 +247,7 @@ public class APIMaterialOutMaintainImpl implements IAPIMaterialOutMaintain { roigBvo.setAttributeValue(battr, newBvo.getAttributeValue(battr)); bfields.add(battr); } - //设置货位序列号孙表,把原来的孙表删除,修改的货位置为新增 + // 设置货位序列号孙表,把原来的孙表删除,修改的货位置为新增 if (null != newBvo.getLocationVOs()) { List allloc = new ArrayList(); if (null != deleteLoc && null != deleteLoc.get(roigBvo.getCgeneralbid())) { @@ -244,7 +264,7 @@ public class APIMaterialOutMaintainImpl implements IAPIMaterialOutMaintain { } // 翻译货位 ICAPILocationVOUtils.translate(materialOutVOs); - //其他数据填充 + // 其他数据填充 new MaterialOutUpdateFillValue().setDefaultValue(materialOutVOs, bfields); } } @@ -337,6 +357,95 @@ public class APIMaterialOutMaintainImpl implements IAPIMaterialOutMaintain { return materialOut.insertBills(vos); } + @Override + public JSONObject destIssue(Map paramMap) throws BusinessException { + // 启源领料 + /* + 1、传入数据基本非空校验 + 2、根据传入的生产订单主键获取流程备料计划 + 3、调用单据转换规则,备料计划VO转为材料出库VO + 4、处理材料出库VO部分字段的赋值(行数量 = 本次领料套数(启源传入)*单位主用量(备料计划)) + 5、调用材料出库的保存方法 + */ + List mids; + try { + String sql = "SELECT cpickmid from mm_pickm WHERE dr = 0 AND fbillstatus = 1 AND csourcebillid = '[csourcebillid]'"; + sql = sql.replace("[csourcebillid]", paramMap.get("cpmohid").toString()); + mids = (List) getDao().executeQuery(sql, new ColumnListProcessor()); + } catch (DAOException e) { + throw new BusinessException(e); + } + if (MMValueCheck.isEmpty(mids)) { + throw new BusinessException("没有关联审核通过的流程备料计划,无法领料!"); + } + String[] cpickmids = mids.toArray(new String[0]); + IPickmQueryService queryService = NCLocator.getInstance().lookup(IPickmQueryService.class); + AggPickmVO[] pickmVOS = queryService.queryBillsByPks(cpickmids); + if (MMValueCheck.isEmpty(pickmVOS)) { + throw new BusinessException("没有关联审核通过的流程备料计划,无法领料!"); + } + List newVos = new ArrayList<>(); + for (AggPickmVO vo : pickmVOS) { + if (vo.getChildrenVO() == null || vo.getChildrenVO().length == 0) { + continue; + } + newVos.add(vo); + } + if (MMValueCheck.isEmpty(newVos)) { + throw new BusinessException("关联的流程备料计划都没有明细行,无法领料!"); + } + Map pickmItemVOMap = new HashMap<>(); + for (AggPickmVO pickmVO : pickmVOS) { + PickmItemVO[] pickmItemVOS = (PickmItemVO[]) pickmVO.getChildren(PickmItemVO.class); + for (PickmItemVO pickmItemVO : pickmItemVOS) { + pickmItemVOMap.put(pickmItemVO.getCpickm_bid(), pickmItemVO); + } + } + // 调用单据转换规则转换出材料出库的VO + MaterialOutVO[] vos = (MaterialOutVO[]) PFPubService.runChangeData("55A3", ICBillType.MaterialOut.getCode(), + newVos.toArray(new AggPickmVO[0]), null, PfButtonClickContext.ClassifyByItfdef); + // 设置行号 + setMaterialOutRowNum(vos); + UFDouble num = new UFDouble(paramMap.get("num").toString()); + for (MaterialOutVO vo : vos) { + // 处理行数量,行数量 = 本次领料套数(启源传入)*单位主用量(备料计划) + MaterialOutBodyVO[] bodys = vo.getBodys(); + for (MaterialOutBodyVO body : bodys) { + UFDouble num1 = num; + // 查询上游备料计划的单位主用量 + String csourcebillbid = body.getCsourcebillbid(); + PickmItemVO pickmItemVO = pickmItemVOMap.get(csourcebillbid); + if (pickmItemVO != null) { + num1 = num.multiply(pickmItemVO.getNunitusenum()); + } + // nshouldnum 应发主数量 nshouldassistnum 应发数量 + // NCCForUAPLogger.debug("nshouldnum = " + body.getNshouldnum().toString()); + // NCCForUAPLogger.debug("nshouldassistnum = " + body.getNshouldassistnum().toString()); + body.setNshouldnum(num1); + body.setNshouldassistnum(num1); + } + } + IMaterialOutMaintainAPI materialOut = NCLocator.getInstance().lookup(IMaterialOutMaintainAPI.class); + MaterialOutVO[] outVOS = materialOut.insertBills(vos); + // 查询备料计划行上的成套套数 nbsetpartsnum + List numList = new ArrayList<>(); + AggPickmVO[] newPickmVOS = queryService.queryBillsByPks(cpickmids); + for (AggPickmVO newPickmVO : newPickmVOS) { + PickmItemVO[] pickmItemVOS = (PickmItemVO[]) newPickmVO.getChildren(PickmItemVO.class); + for (PickmItemVO pickmItemVO : pickmItemVOS) { + JSONObject numJson = new JSONObject(); + String nbsetpartsnum = pickmItemVO.getNbsetpartsnum().toString(); + numJson.put("nbsetpartsnum", nbsetpartsnum); + numJson.put("cbmaterialvid", pickmItemVO.getCbmaterialvid()); + numList.add(numJson); + } + } + JSONObject result = new JSONObject(); + result.put("outVOS", outVOS); + result.put("numList", numList); + return result; + } + /** * 检查是否满足特殊条件:需要同步的组织 diff --git a/ic/src/public/nccloud/api/ic/m4d/IAPIMaterialOutMaintain.java b/ic/src/public/nccloud/api/ic/m4d/IAPIMaterialOutMaintain.java index e340f164..9209e975 100644 --- a/ic/src/public/nccloud/api/ic/m4d/IAPIMaterialOutMaintain.java +++ b/ic/src/public/nccloud/api/ic/m4d/IAPIMaterialOutMaintain.java @@ -7,6 +7,8 @@ package nccloud.api.ic.m4d; import java.util.List; import java.util.Map; + +import com.alibaba.fastjson.JSONObject; import nc.vo.ic.m4d.entity.MaterialOutVO; import nc.vo.pub.BusinessException; @@ -24,4 +26,6 @@ public interface IAPIMaterialOutMaintain { MaterialOutVO[] saveByRef(List> var1) throws BusinessException; MaterialOutVO[] batchsave(List> var1) throws BusinessException; + + JSONObject destIssue(Map paramMap) throws BusinessException; } diff --git a/ic/src/public/nccloud/openapi/ic/m4d/MaterialOutResource.java b/ic/src/public/nccloud/openapi/ic/m4d/MaterialOutResource.java index ae5588fb..92f77b3f 100644 --- a/ic/src/public/nccloud/openapi/ic/m4d/MaterialOutResource.java +++ b/ic/src/public/nccloud/openapi/ic/m4d/MaterialOutResource.java @@ -1,5 +1,6 @@ package nccloud.openapi.ic.m4d; +import com.alibaba.fastjson.JSONObject; import nc.bs.framework.common.NCLocator; import nc.bs.logging.Log; import nc.bs.scmpub.query.SCMBillQuery; @@ -184,15 +185,16 @@ public class MaterialOutResource extends NCCPubRestResource { return ResultMessageUtil.exceptionToJSON(e); } } + @POST @Path("operation/delete") @Consumes({"application/json"}) @Produces({"application/json"}) public JSONString delete(Map param) { - Object[] paramArray = ((ArrayList)param.get("cgeneralhid")).toArray(); + Object[] paramArray = ((ArrayList) param.get("cgeneralhid")).toArray(); String[] paramStrings = new String[paramArray.length]; - for(int i = 0; i < paramArray.length; ++i) { + for (int i = 0; i < paramArray.length; ++i) { paramStrings[i] = paramArray[i].toString(); } @@ -342,6 +344,25 @@ public class MaterialOutResource extends NCCPubRestResource { } } + @POST + @Path("saveByQyMes") + @Consumes("application/json") + @Produces("application/json") + public JSONString saveByQyMes(Map paramMap) { + try { + if (!paramMap.containsKey("num") || !paramMap.containsKey("cpmohid")) { + return ResultMessageUtil.exceptionToJSON("传入数据异常,参数要包含流程生产订单信息和领料数量信息", APIErrCodeEnum.BUSINESSEXCCODE.getCode()); + } + IAPIMaterialOutMaintain materialOut = + NCLocator.getInstance().lookup(IAPIMaterialOutMaintain.class); + JSONObject result = materialOut.destIssue(paramMap); + return ResultMessageUtil.toJSON(result, nc.vo.ml.NCLangRes4VoTransl.getNCLangRes() + .getStrByID("4008027_0", "04008027-0472")/* @res "材料出库单保存成功" */); + } catch (Exception e) { + return ResultMessageUtil.exceptionToJSON(e); + } + } + @Override public String getModule() { // TODO Auto-generated method stub