From bbb77e7695477903e9ad205bd826115e0543711e Mon Sep 17 00:00:00 2001 From: mzr Date: Mon, 8 Dec 2025 16:26:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ic/m4d/APIMaterialOutMaintainImpl.java | 51 ++++++++----------- .../task/ims/ErpIaI2billFromGyImsPlugin.java | 8 ++- .../mes/epic/MaterialToEpicMesPlugin.java | 2 +- 3 files changed, 30 insertions(+), 31 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 0271441b..f94c1450 100644 --- a/ic/src/private/nccloud/api/impl/ic/m4d/APIMaterialOutMaintainImpl.java +++ b/ic/src/private/nccloud/api/impl/ic/m4d/APIMaterialOutMaintainImpl.java @@ -24,12 +24,13 @@ 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.ml.NCLangRes4VoTransl; import nc.vo.mmpac.pickm.entity.AggPickmVO; import nc.vo.mmpac.pickm.entity.PickmItemVO; import nc.vo.pub.BusinessException; import nc.vo.pub.VOStatus; -import nc.vo.pub.lang.UFDate; import nc.vo.pub.lang.UFDouble; +import nc.vo.pubapp.pattern.pub.MathTool; import nc.vo.scmpub.check.billvalidate.BillVOsCheckRule; import nc.vo.scmpub.res.billtype.ICBillType; import nc.vo.scmpub.util.ArrayUtil; @@ -180,7 +181,7 @@ public class APIMaterialOutMaintainImpl implements IAPIMaterialOutMaintain { MaterialOutHeadVO newVO = vos[0].getHead(); String cgeneralhid = newVO.getCgeneralhid(); if (StringUtils.isEmpty(cgeneralhid)) { - throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0391")/*@res "修改材料出库单请指定表头主键cgeneralhid值。"*/); + throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0391")/*@res "修改材料出库单请指定表头主键cgeneralhid值。"*/); } SCMBillQuery queryTool = new SCMBillQuery(MaterialOutVO.class); @@ -193,7 +194,7 @@ public class APIMaterialOutMaintainImpl implements IAPIMaterialOutMaintain { }); ICLocationUtil.loadLocationVOs(originBills); if (ArrayUtils.isEmpty(materialOutVOs)) { - throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0360")/*@res "没找到要修改的出库单信息,请检查数据的表头主键cgeneralhid。"*/); + throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0360")/*@res "没找到要修改的出库单信息,请检查数据的表头主键cgeneralhid。"*/); } else { List headProFields = CheckProhibitUpdateFields.getHeadProhibitFields("4D"); List bodyProFields = CheckProhibitUpdateFields.getBodyProhibitFields("4D"); @@ -201,7 +202,7 @@ public class APIMaterialOutMaintainImpl implements IAPIMaterialOutMaintain { if (origVO.getFbillflag() == null || 0 != ((Integer) ICBillFlag.FREE.value()) .compareTo((Integer) origVO.getFbillflag())) { - throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0361")/*@res "当前出库单编号:"*/ + origVO.getVbillcode() + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0362")/*@res "不是自由状态,不能修改"*/); + throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0361")/*@res "当前出库单编号:"*/ + origVO.getVbillcode() + NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0362")/*@res "不是自由状态,不能修改"*/); } origVO.setStatus(VOStatus.UPDATED); for (String attr : newVO.getAttributeNames()) { @@ -210,7 +211,7 @@ public class APIMaterialOutMaintainImpl implements IAPIMaterialOutMaintain { } if (headProFields.contains(attr) && !newVO.getAttributeValue(attr).equals(origVO.getAttributeValue(attr))) { - throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0363")/*@res "表头字段:"*/ + attr + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0364")/*@res "不允许修改。"*/); + throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0363")/*@res "表头字段:"*/ + attr + NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0364")/*@res "不允许修改。"*/); } origVO.setAttributeValue(attr, newVO.getAttributeValue(attr)); } @@ -232,7 +233,7 @@ public class APIMaterialOutMaintainImpl implements IAPIMaterialOutMaintain { for (MaterialOutBodyVO newBvo : vos[0].getBodys()) { MaterialOutBodyVO roigBvo = pkbs.get(newBvo.getCgeneralbid()); if (newBvo.getCgeneralbid() == null || roigBvo == null) { - throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0365")/*@res "没有匹配到原始出库单表体信息,请检查数据的表体主键cgeneralbid。"*/); + throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0365")/*@res "没有匹配到原始出库单表体信息,请检查数据的表体主键cgeneralbid。"*/); } Set bfields = new HashSet(); for (String battr : newBvo.getAttributeNames()) { @@ -241,7 +242,7 @@ public class APIMaterialOutMaintainImpl implements IAPIMaterialOutMaintain { } if (bodyProFields.contains(battr) && !newBvo.getAttributeValue(battr).equals(roigBvo.getAttributeValue(battr))) { - throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0366")/*@res "表体字段:"*/ + battr + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0364")/*@res "不允许修改。"*/); + throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0366")/*@res "表体字段:"*/ + battr + NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0364")/*@res "不允许修改。"*/); } roigBvo.setAttributeValue(battr, newBvo.getAttributeValue(battr)); bfields.add(battr); @@ -319,7 +320,7 @@ public class APIMaterialOutMaintainImpl implements IAPIMaterialOutMaintain { if (parentVO.getFbillflag() == null || 0 != ((Integer) ICBillFlag.FREE.value()) .compareTo((Integer) parentVO.getFbillflag())) { - throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0361")/*@res "当前出库单编号:"*/ + parentVO.getVbillcode() + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0367")/*@res "不是自由状态,不能删除"*/); + throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0361")/*@res "当前出库单编号:"*/ + parentVO.getVbillcode() + NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0367")/*@res "不是自由状态,不能删除"*/); } } return (MaterialOutVO[]) PfServiceScmUtil.processBatch("DELETE", "4D", vos, null, null); @@ -335,11 +336,11 @@ public class APIMaterialOutMaintainImpl implements IAPIMaterialOutMaintain { if (parentVO.getFbillflag() == null || 0 != ((Integer) ICBillFlag.FREE.value()) .compareTo((Integer) parentVO.getFbillflag())) { - throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0361")/*@res "当前出库单编号:"*/ + parentVO.getVbillcode() + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0330")/*@res "不是自由状态,不能签字"*/); + throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0361")/*@res "当前出库单编号:"*/ + parentVO.getVbillcode() + NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0330")/*@res "不是自由状态,不能签字"*/); } if (aggvo.getChildrenVO() != null && aggvo.getChildrenVO().length > 0) { if (aggvo.getChildrenVO()[0].getAttributeValue(ICPubMetaNameConst.NNUM) == null) { - throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0361")/*@res "当前出库单编号:"*/ + parentVO.getVbillcode() + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0392")/*@res "总数量为空,不能签字"*/); + throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0361")/*@res "当前出库单编号:"*/ + parentVO.getVbillcode() + NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0392")/*@res "总数量为空,不能签字"*/); } } @@ -358,7 +359,7 @@ public class APIMaterialOutMaintainImpl implements IAPIMaterialOutMaintain { if (parentVO.getFbillflag() == null || 0 != ((Integer) ICBillFlag.SIGN.value()) .compareTo((Integer) parentVO.getFbillflag())) { - throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0361")/*@res "当前出库单编号:"*/ + parentVO.getVbillcode() + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0332")/*@res "不是签字状态,不能取消签字"*/); + throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0361")/*@res "当前出库单编号:"*/ + parentVO.getVbillcode() + NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0332")/*@res "不是签字状态,不能取消签字"*/); } } return (MaterialOutVO[]) PfServiceScmUtil.processBatch("CANCELSIGN", "4D", vos, null, null); @@ -384,6 +385,10 @@ public class APIMaterialOutMaintainImpl implements IAPIMaterialOutMaintain { @Override public JSONObject destIssue(Map paramMap) throws BusinessException { + UFDouble num = new UFDouble(paramMap.get("num").toString()); + if (MMValueCheck.isEmpty(num) || MathTool.isZero(num)) { + throw new BusinessException("领料套数不能为0!"); + } // 启源领料 /* 1、传入数据基本非空校验 @@ -392,9 +397,13 @@ public class APIMaterialOutMaintainImpl implements IAPIMaterialOutMaintain { 4、处理材料出库VO部分字段的赋值(行数量 = 本次领料套数(启源传入)*单位主用量(备料计划)) 5、调用材料出库的保存方法 */ - List mids; + List mids = null; + String sql = "SELECT cpickmid from mm_pickm WHERE dr = 0 AND fbillstatus = 1 AND csourcebillrowid = '[csourcebillrowid]'"; + if (MathTool.compareTo(num, UFDouble.ZERO_DBL) < 0) { + // 成套退料-查询审批态和完成态的备料计划 + sql = "SELECT cpickmid from mm_pickm WHERE dr = 0 AND fbillstatus in (1,2) AND csourcebillrowid = '[csourcebillrowid]'"; + } try { - String sql = "SELECT cpickmid from mm_pickm WHERE dr = 0 AND fbillstatus = 1 AND csourcebillrowid = '[csourcebillrowid]'"; sql = sql.replace("[csourcebillrowid]", paramMap.get("cpmobid").toString()); mids = (List) getDao().executeQuery(sql, new ColumnListProcessor()); } catch (DAOException e) { @@ -431,24 +440,8 @@ public class APIMaterialOutMaintainImpl implements IAPIMaterialOutMaintain { newVos.toArray(new AggPickmVO[0]), null, PfButtonClickContext.ClassifyByItfdef); // 设置行号 setMaterialOutRowNum(vos); - UFDouble num = new UFDouble(paramMap.get("num").toString()); for (MaterialOutVO vo : vos) { MaterialOutHeadVO headVo = vo.getHead(); - UFDate dbilldate = headVo.getDbilldate(); - // 因开关账检查的限制需设置单据日期, 如果单据日期小于2025-11-02,则单据日期设置为2025-11-02 - UFDate ufDate = new UFDate("2025-11-02"); - if (dbilldate != null) { - int i = dbilldate.compareTo(ufDate); - if (i < 0) { - headVo.setDbilldate(ufDate); - } - } else { - UFDate nowDate = new UFDate(); - int i = nowDate.compareTo(ufDate); - if (i < 0) { - headVo.setDbilldate(ufDate); - } - } // 设置 vdef9 启源领料id if (MMValueCheck.isNotEmpty(paramMap.get("vdef9"))) { headVo.setVdef9(paramMap.get("vdef9").toString()); diff --git a/uapbd/src/private/nc/bs/uapbd/task/ims/ErpIaI2billFromGyImsPlugin.java b/uapbd/src/private/nc/bs/uapbd/task/ims/ErpIaI2billFromGyImsPlugin.java index 33cbcb67..8b6647cb 100644 --- a/uapbd/src/private/nc/bs/uapbd/task/ims/ErpIaI2billFromGyImsPlugin.java +++ b/uapbd/src/private/nc/bs/uapbd/task/ims/ErpIaI2billFromGyImsPlugin.java @@ -76,7 +76,13 @@ public class ErpIaI2billFromGyImsPlugin implements IBackgroundWorkPlugin { headJson.put("cpayfinorgvid", "C003");// 应付财务组织最新版本 headJson.put("cpayfinorgoid", "C003");// 应付财务组织 headJson.put("creator", "BIP"); - headJson.put("billmaker", map.get("billmaker")); + if (MMValueCheck.isNotEmpty(map.get("creator"))) { + headJson.put("creator", map.get("creator")); + } + headJson.put("billmaker", "BIP"); + if (MMValueCheck.isNotEmpty(map.get("billmaker"))) { + headJson.put("billmaker", map.get("billmaker")); + } if (map.get("dbilldate") != null && map.get("dbilldate") instanceof Timestamp dbilldate) { String dbilldateStr = DATETIME_FORMATTER.format(dbilldate); headJson.put("dbilldate", dbilldateStr); // 单据日期 diff --git a/uapbd/src/private/nc/bs/uapbd/task/mes/epic/MaterialToEpicMesPlugin.java b/uapbd/src/private/nc/bs/uapbd/task/mes/epic/MaterialToEpicMesPlugin.java index 8667825c..d0d49ed9 100644 --- a/uapbd/src/private/nc/bs/uapbd/task/mes/epic/MaterialToEpicMesPlugin.java +++ b/uapbd/src/private/nc/bs/uapbd/task/mes/epic/MaterialToEpicMesPlugin.java @@ -105,7 +105,7 @@ public class MaterialToEpicMesPlugin implements IBackgroundWorkPlugin { String sql = " SELECT DISTINCT b.pk_material" + " FROM bd_materialstock b" + " LEFT JOIN bd_material a ON a.pk_material = b.pk_material" + - " WHERE b.dr = 0 AND a.dr = 0 AND def30 != 'Y'" + + " WHERE b.dr = 0 AND a.dr = 0 AND a.def30 != 'Y'" + " AND " + inStrPkOrg + " AND (b.ts > '" + rangeTimeString + "' OR a.ts > '" + rangeTimeString + "')"; List> pkList = (List>) getDao().executeQuery(sql, new MapListProcessor());