From 79177e6f96a722f23fab3f941953a524db8ea64a Mon Sep 17 00:00:00 2001 From: mzr Date: Mon, 27 Oct 2025 11:05:06 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=BA=93=E5=AD=98=E4=BF=9D=E5=AD=98BP-?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=90=8C=E6=AD=A5-=E7=94=A8=E5=8F=8B?= =?UTF-8?q?=E6=9D=8E=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ic/general/insert/InsertBPTemplate.java | 219 ++++++++++++++++++ .../rule/before/ICItemProjectValueRule.java | 116 ++++++++++ 2 files changed, 335 insertions(+) create mode 100644 ic/src/public/nc/bs/ic/general/insert/InsertBPTemplate.java create mode 100644 ic/src/public/nc/bs/ic/general/rule/before/ICItemProjectValueRule.java diff --git a/ic/src/public/nc/bs/ic/general/insert/InsertBPTemplate.java b/ic/src/public/nc/bs/ic/general/insert/InsertBPTemplate.java new file mode 100644 index 00000000..76231fbf --- /dev/null +++ b/ic/src/public/nc/bs/ic/general/insert/InsertBPTemplate.java @@ -0,0 +1,219 @@ +package nc.bs.ic.general.insert; + +import nc.bs.ic.billcode.rule.GeneralBillAdaptor; +import nc.bs.ic.billcode.rule.ICGetBillCodeRule; +import nc.bs.ic.billcode.rule.ICUniqueBillCode; +import nc.bs.ic.general.insert.rule.after.AutoGeneralBillSign; +import nc.bs.ic.general.insert.rule.after.DeleteLocationVOAfterBillInsert; +import nc.bs.ic.general.insert.rule.after.FlowAccountUpdate; +import nc.bs.ic.general.insert.rule.after.InsertAfterEventRule; +import nc.bs.ic.general.insert.rule.after.LocationSaveAfterBillInsert; +import nc.bs.ic.general.insert.rule.after.RewriteCorNum; +import nc.bs.ic.general.insert.rule.after.SnCodeInsertAfterRule; +import nc.bs.ic.general.insert.rule.before.BillDefaultValueSetter; +import nc.bs.ic.general.insert.rule.before.CalTotalItems; +import nc.bs.ic.general.insert.rule.before.DeasInfoHandle; +import nc.bs.ic.general.insert.rule.before.DefaultBatchGenerate; +import nc.bs.ic.general.insert.rule.before.ICBillDataCheck; +import nc.bs.ic.general.insert.rule.before.ICStockOrgEnableCheckRule; +import nc.bs.ic.general.insert.rule.before.InsertBeforeEventRule; +import nc.bs.ic.general.insert.rule.before.IsFixedSpace; +import nc.bs.ic.general.insert.rule.before.IsSeparateSpace; +import nc.bs.ic.general.insert.rule.before.SnCodeInsertBeforeRule; +import nc.bs.ic.general.rule.after.AtpAfterUpdate; +import nc.bs.ic.general.rule.after.BarcodeOnhandCheck; +import nc.bs.ic.general.rule.after.InOutTraceCheck; +import nc.bs.ic.general.rule.after.MonthAfterUpdate; +import nc.bs.ic.general.rule.after.OnhandAfterUpdate; +import nc.bs.ic.general.rule.after.UpdateBatchByBill; +import nc.bs.ic.general.rule.before.*; +import nc.bs.ic.pub.base.ICAroundProcesser; +import nc.bs.ic.pub.base.IInsertRuleProvider; +import nc.bs.ic.pub.bp.BaseInsertBPTemplate; +import nc.impl.pubapp.pattern.rule.plugin.IPluginPoint; +import nc.vo.ic.general.define.ICBillVO; +import nc.vo.ic.general.define.MetaNameConst; +import nc.vo.ic.pub.define.ICPubMetaNameConst; +import nc.vo.ic.pub.util.StringUtil; +import nc.vo.scmpub.rule.AutoMaterialAssignRule; + +/** + *

+ * 普通出入库单新增模板: + *

+ *

+ * + * @param

+ * @version 6.0 + * @since 6.0 + * @author songhy + * @time 2010-8-31 上午11:30:28 + */ +public class InsertBPTemplate extends + BaseInsertBPTemplate { + + /** + * InsertBPTemplate 的构造子 + * + * @param point + * @param rules + */ + public InsertBPTemplate(IPluginPoint point, IInsertRuleProvider rules) { + super(point, rules); + } + + /** + * 获得处理后规则集合 + * + * @return + * @since 6.0 + */ + @Override + protected void addAfterRule(T[] vos, ICAroundProcesser processor) { + + // 检验单据号是否重复 + processor.addAfterRule(new ICUniqueBillCode(new GeneralBillAdaptor( + vos[0]))); + // 在单据保存后保存单品数据 + processor.addAfterRule(new LocationSaveAfterBillInsert()); + // 必须放在LocationSaveAfterBillInsert规则后 + processor.addAfterRule(new DeleteLocationVOAfterBillInsert()); + // 回写累计出库 + processor.addAfterRule(new RewriteCorNum()); + // 出库跟踪入库检查 + processor.addAfterRule(new InOutTraceCheck()); + // 子类的规则 这个顺序禁止变动 + this.getRuleProvider().addAfterRule(vos, processor); + // 现存量更新后规则 + OnhandAfterUpdate hand = new OnhandAfterUpdate(); + processor.addAfterRule(hand); + // 可用量更新后规则 + processor.addAfterRule(new AtpAfterUpdate()); + // 负结存检查(去掉 放入现存量更新后 更合适) + // processor.addAfterRule(new BillOnhandCheck()); + // 安全库存检查(去掉 放入现存量更新 更合适) + // processor.addAfterRule(new SafetyStockCheck()); + // 再订购点检查(去掉 放入现存量更新 更合适) + // processor.addAfterRule(new ReorderPointCheck()); + // 记流水账 + processor.addAfterRule(new FlowAccountUpdate()); + // 月结补单后规则 + processor.addAfterRule(new MonthAfterUpdate()); + // 更新批次档案(必须放在后规则,且必须在单据号获得和记流水账规则后) + processor.addAfterRule(new UpdateBatchByBill()); + processor.addAfterRule(new InsertAfterEventRule()); + // 条码结存和条码重复校验 + processor.addAfterRule(new BarcodeOnhandCheck()); + // 检查是否保存即签字 + processor.addAfterRule(new AutoGeneralBillSign()); + // 新增业务日志 +// processor.addAfterRule(new AddBusinessLogRule()); + processor.addAfterRule(new SnCodeInsertAfterRule()); + } + + /** + * 获得处理前规则集合 + * + * @return + * @since 6.0 + */ + @Override + protected void addBeforeRule(T[] vos, ICAroundProcesser processor) { + //库存扩展清空项目字段--规则限制单据--2025年7月17日09点54分 + processor.addBeforeRule(new ICItemProjectValueRule()); + + // 发布交易类型设置交易类型主键 + processor.addBeforeRule(new InOutBizTypeRule()); + // 库存交易类型检查 + processor.addBeforeRule(new ICTranstypeCheck()); + // 单据默认值设置 + processor.addBeforeRule(new BillDefaultValueSetter()); + //组织停用检查 + processor.addBeforeRule(new ICStockOrgEnableCheckRule()); + // 精密-单据日期检查 + // processor.addBeforeRule(new MaterialOutBillDateRule()); + // 开关账检查 + processor.addBeforeRule(new BaseAccountStatusCheck()); + // 总数量,体积计算 + processor.addBeforeRule(new CalTotalItems()); + // 默认货位数据生成 + processor.addBeforeRule(new DefaultSpaceGenerate()); + + // 保存时增加库存单据进行货位校验的时机参数校验 + processor.addBeforeRule(new GoodsAllocationCheck()); + + // 处理拆解信息 + processor.addBeforeRule(new DeasInfoHandle()); + // 单据实体数据 + processor.addBeforeRule(new ICBillDataCheck()); + + //物料自动分配 + processor.addBeforeRule(new AutoMaterialAssignRule(ICPubMetaNameConst.CMATERIALVID, + new String[] { ICPubMetaNameConst.PK_ORG, ICPubMetaNameConst.COSTREGIONID, MetaNameConst.CCOSTDOMAINID, + MetaNameConst.CPURORGOID, MetaNameConst.CFANACEORGOID }, + new String[] { MetaNameConst.CLIABILITYOID, MetaNameConst.CIOLIABILITYOID })); + + // 检查存货是否分配到库存组织(56保存后规则) + processor.addBeforeRule(new InvAllocCheck()); + // 仓库检查:包括库存组织与仓库关系检查,包括代储,废品仓,资产仓 + processor.addBeforeRule(new WarehouseAttributeCheck()); + // 序列号生成 + processor.addBeforeRule(new SnCodeInsertBeforeRule()); + // 单品数据检查 + processor.addBeforeRule(new LocactionEntityCheck()); + // 设备类物料序列号检查 + processor.addBeforeRule(new EquipSerialExistCheck()); + // 是否固定货位 改为函数实现 + processor.addBeforeRule(new IsFixedSpace()); + // 是否单独货位 + processor.addBeforeRule(new IsSeparateSpace()); + // 物料相关属性检查 包括(物料辅助属性检查) + processor.addBeforeRule(new InvAttributeCheck()); + // 自定义项检查 + processor.addBeforeRule(new UserDefCheckRule()); + // 自由辅助属性控制 + processor.addBeforeRule(new MaterialAssistantCheck()); + // 库存状态和交易类型检查,需要写Adapter + processor.addBeforeRule(new StateAndTranTypeMatch()); + + // 发运清单下产成品入库单信息填充 + processor.addBeforeRule(new InOutFillForDeliverylistRule()); + // 默认批次生成 + processor.addBeforeRule(new DefaultBatchGenerate()); + // 批次属性检查 + processor.addBeforeRule(new BatchAttributeCheck()); + // 换算率格式化规则 + processor.addBeforeRule(new ChangeRateFormat()); + // 获取单据号 + processor.addBeforeRule(new ICGetBillCodeRule(new GeneralBillAdaptor( + vos[0]))); + // 自动平衡主辅 + processor.addBeforeRule(new NumBalanceRule()); + // 可用量更新前规则 + processor.addBeforeRule(new AtpBeforeUpdate()); + + // 现存量更新前规则 + processor.addBeforeRule(new OnhandBeforeUpdate()); + + // 补单前规则 + processor.addBeforeRule(new MonthBeforeUpdate()); + this.getRuleProvider().addBeforeRule(vos, processor); + //增加业务事件监听规则 + processor.addBeforeRule(new InsertBeforeEventRule()); + + } + + @Override + protected T[] insertBill(T[] vos) { + for (T vo : vos) { + if (!StringUtil.isSEmptyOrNull(vo.getHead().getCgeneralhid())) { + continue; + } + vo.getHead().setCgeneralhid(vo.getTempBillPK()); + } + return super.insertBill(vos); + } + +} diff --git a/ic/src/public/nc/bs/ic/general/rule/before/ICItemProjectValueRule.java b/ic/src/public/nc/bs/ic/general/rule/before/ICItemProjectValueRule.java new file mode 100644 index 00000000..2767afbf --- /dev/null +++ b/ic/src/public/nc/bs/ic/general/rule/before/ICItemProjectValueRule.java @@ -0,0 +1,116 @@ +package nc.bs.ic.general.rule.before; + +import nc.bs.dao.BaseDAO; +import nc.bs.ic.pub.base.ICRule; +import nc.jdbc.framework.processor.MapListProcessor; +import nc.vo.ic.general.define.ICBillBodyVO; +import nc.vo.ic.general.define.ICBillVO; +import nc.vo.ic.m46.entity.FinProdInVO; +import nc.vo.ic.m4a.entity.GeneralInVO; +import nc.vo.ic.m4c.entity.SaleOutVO; +import nc.vo.ic.m4i.entity.GeneralOutVO; +import nc.vo.pub.BusinessException; +import nc.vo.pub.lang.UFBoolean; +import nc.vo.pubapp.pattern.exception.ExceptionUtils; +import nc.vo.pubapp.pattern.pub.SqlBuilder; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Classname ICItemProjectValueRule + * @Description 物料档案基本页签启用项目辅助属性+库存组织未启用项目,成品入库单、其它入库单保存时(包含接口导入)清除行项目,销售出库单、其它出库单保存时(包含接口导入)清除行项目; + * @Version 1.0.0 + * @Date 2025/7/17 9:55 + * @Created by ame + */ +public class ICItemProjectValueRule extends ICRule { + private static BaseDAO dao = new BaseDAO(); + @Override + public void process(E[] vos) { + if (vos == null || vos.length < 1) { + return; + } + //过滤单据 + UFBoolean isExe= checkBilltype(vos[0]); + if(!isExe.booleanValue()){ + return; + } + try { + //获取表头计划组织及表体行物料 + for (ICBillVO vo : vos) { + String pk_org = (String) vo.getParentVO().getAttributeValue("pk_org"); + ICBillBodyVO[] bodys = vo.getBodys(); + Map material_construct = new HashMap<>(); + Map material_stock = new HashMap<>(); + queryFix2ByMaterial(bodys, material_construct, material_stock, pk_org); + for (ICBillBodyVO body : bodys) { + String cmaterialvid = body.getCmaterialvid(); + if (material_construct.containsKey(cmaterialvid) && "Y".equals(material_construct.get(cmaterialvid)) && (!material_stock.containsKey(cmaterialvid) || "N".equals(material_stock.get(cmaterialvid)))) { + body.setCprojectid(null); + body.setStatus(1); + } + } + } + } catch (BusinessException var6) { + ExceptionUtils.wrappException(var6); + } + } + + private UFBoolean checkBilltype(E vo) { + //2025年7月29日14点54分--取消其它出入库的启用项目逻辑 +// if(vo instanceof FinProdInVO ||vo instanceof GeneralInVO || vo instanceof SaleOutVO || vo instanceof GeneralOutVO){ + if(vo instanceof FinProdInVO|| vo instanceof SaleOutVO){ + return UFBoolean.TRUE; + }else { + return UFBoolean.FALSE; + } + } + + private void queryFix2ByMaterial(ICBillBodyVO[] childrenVOs, Map materialConstruct, Map materialStock, String pkOrg) throws BusinessException { + List materials = new ArrayList<>(); + + for (ICBillBodyVO childrenVO : childrenVOs) { + String cmaterialvid = childrenVO.getCmaterialvid(); + materials.add(cmaterialvid); + } + SqlBuilder sql = new SqlBuilder(); + sql.append(" SELECT bdm.pk_material ,bdmf.fix2,bdms.fixasst2 "); + sql.append(" FROM bd_material bdm "); + sql.append(" LEFT JOIN bd_marasstframe bdmf ON bdm.pk_marasstframe =bdmf.pk_marasstframe "); + sql.append(" LEFT JOIN bd_materialstock bdms ON bdms.PK_MATERIAL =bdm.PK_MATERIAL AND bdms.PK_ORG ='" + pkOrg + "' "); + sql.append(" where "); + //判断物料是否超500行 + if (materials != null && materials.size() <= 500) { + sql.append("bdm.pk_material", materials.toArray(new String[0])); + } + if (materials != null && materials.size() > 500) { + //按照500条数据分批查询 + List> result = new ArrayList<>(); + int total = materials.size(); + for (int i = 0; i < total; i += 500) { + int end = Math.min(total, i + 500); + result.add(new ArrayList<>(materials.subList(i, end))); + } + for (int i = 0; i < result.size(); i++) { + sql.append("bdm.pk_material", result.get(i).toArray(new String[0])); + if (i != result.size() - 1) { + sql.append(" or "); + } + } + } + List> remain = (List>) dao.executeQuery(sql.toString(), new MapListProcessor()); + if (remain == null || remain.isEmpty()) { + throw new BusinessException("物料查询辅助属性结构失败,sql【" + sql + "】"); + } + for (Map map : remain) { + String fix2 = map.get("fix2") == null ? "N" : map.get("fix2").toString(); + String fixasst2 = map.get("fixasst2") == null ? "N" : map.get("fixasst2").toString(); + materialConstruct.put(map.get("pk_material").toString(), fix2); + materialStock.put(map.get("pk_material").toString(), fixasst2); + } + } + +} From 15790ede83daac432bfd61cdc9ce9794451beb80 Mon Sep 17 00:00:00 2001 From: mzr Date: Mon, 27 Oct 2025 11:06:28 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E7=B2=BE=E5=AF=86-=E5=90=AF=E6=BA=90?= =?UTF-8?q?=E9=A2=86=E6=96=99-=E5=8D=95=E6=8D=AE=E6=97=A5=E6=9C=9F?= =?UTF-8?q?=E8=B5=8B=E5=80=BC-=E4=BB=A3=E7=A0=81=E8=B0=83=E6=95=B4?= =?UTF-8?q?=EF=BC=8C=E9=9C=80=E8=A6=81=E5=9C=A8=E5=BC=80=E5=85=B3=E8=B4=A6?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E4=B9=8B=E5=89=8D=E8=B5=8B=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../private/nc/bs/ic/m4d/insert/InsertBP.java | 3 +- .../insert/rule/MaterialOutBillDateRule.java | 57 ------------------ .../ic/general/insert/InsertBPTemplate.java | 2 +- .../rule/before/MaterialOutBillDateRule.java | 59 +++++++++++++++++++ 4 files changed, 61 insertions(+), 60 deletions(-) delete mode 100644 ic/src/private/nc/bs/ic/m4d/insert/rule/MaterialOutBillDateRule.java create mode 100644 ic/src/public/nc/bs/ic/general/rule/before/MaterialOutBillDateRule.java diff --git a/ic/src/private/nc/bs/ic/m4d/insert/InsertBP.java b/ic/src/private/nc/bs/ic/m4d/insert/InsertBP.java index 4d06ecc0..350f57fe 100644 --- a/ic/src/private/nc/bs/ic/m4d/insert/InsertBP.java +++ b/ic/src/private/nc/bs/ic/m4d/insert/InsertBP.java @@ -8,7 +8,6 @@ import nc.bs.ic.general.insert.rule.before.InsertBeforeEventRule; import nc.bs.ic.general.rule.after.AfterInsertRuleForRewriteSpecial; import nc.bs.ic.general.rule.after.AtpAfterUpdate; import nc.bs.ic.general.rule.before.CtplcustomeridCheck; -import nc.bs.ic.m45.insert.rule.PurchaseInProjectRule; import nc.bs.ic.m4d.base.BPPlugInPoint; import nc.bs.ic.m4d.base.MaterialOutCheckRule; import nc.bs.ic.m4d.base.MaterialOutValueProcRule; @@ -109,7 +108,7 @@ public class InsertBP implements IInsertBP, //2025年6月13日09点38分 -- 物料档案基本页签启用项目辅助属性+库存组织未启用项目,采购入库单保存时(包含接口导入)清除行项目,材料出库单保存时(包含接口导入)清除行项目 processor.addBeforeRule(new MaterialOutProjectRule()); - processor.addBeforeRule(new MaterialOutBillDateRule()); + // processor.addBeforeRule(new MaterialOutBillDateRule()); } @Override diff --git a/ic/src/private/nc/bs/ic/m4d/insert/rule/MaterialOutBillDateRule.java b/ic/src/private/nc/bs/ic/m4d/insert/rule/MaterialOutBillDateRule.java deleted file mode 100644 index a90aad80..00000000 --- a/ic/src/private/nc/bs/ic/m4d/insert/rule/MaterialOutBillDateRule.java +++ /dev/null @@ -1,57 +0,0 @@ -package nc.bs.ic.m4d.insert.rule; - -import nc.bs.ic.pub.base.ICRule; -import nc.bs.uapbd.util.MyHelper; -import nc.util.mmf.framework.base.MMValueCheck; -import nc.vo.ic.general.define.ICBillHeadVO; -import nc.vo.ic.general.define.ICBillVO; -import nc.vo.ic.m4d.entity.MaterialOutVO; -import nc.vo.org.StockOrgVO; -import nc.vo.pub.BusinessException; -import nc.vo.pub.lang.UFDate; -import nc.vo.pubapp.pattern.exception.ExceptionUtils; - -/** - * 精密-材料出库新增-单据日期赋值-启源领料 - * - * @author mzr - * @date 2025/10/26 - */ -public class MaterialOutBillDateRule extends ICRule { - @Override - public void process(MaterialOutVO[] vos) { - if (MMValueCheck.isEmpty(vos)) { - return; - } - try { - for (ICBillVO vo : vos) { - ICBillHeadVO headVO = vo.getParentVO(); - String pk_org = (String) headVO.getAttributeValue("pk_org"); - String orgCode = MyHelper.transferField(StockOrgVO.getDefaultTableName(), StockOrgVO.CODE, StockOrgVO.PK_STOCKORG, pk_org); - // 启源领料id - String vdef9 = headVO.getVdef9(); - if ("C038".equals(orgCode) && MMValueCheck.isNotEmpty(vdef9)) { - // 启源传入的单据,单据日期增加校验 - 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); - } - } - } - } - } catch (BusinessException e) { - ExceptionUtils.wrappException(e); - } - } - -} diff --git a/ic/src/public/nc/bs/ic/general/insert/InsertBPTemplate.java b/ic/src/public/nc/bs/ic/general/insert/InsertBPTemplate.java index 76231fbf..cd34870d 100644 --- a/ic/src/public/nc/bs/ic/general/insert/InsertBPTemplate.java +++ b/ic/src/public/nc/bs/ic/general/insert/InsertBPTemplate.java @@ -133,7 +133,7 @@ public class InsertBPTemplate extends //组织停用检查 processor.addBeforeRule(new ICStockOrgEnableCheckRule()); // 精密-单据日期检查 - // processor.addBeforeRule(new MaterialOutBillDateRule()); + processor.addBeforeRule(new MaterialOutBillDateRule()); // 开关账检查 processor.addBeforeRule(new BaseAccountStatusCheck()); // 总数量,体积计算 diff --git a/ic/src/public/nc/bs/ic/general/rule/before/MaterialOutBillDateRule.java b/ic/src/public/nc/bs/ic/general/rule/before/MaterialOutBillDateRule.java new file mode 100644 index 00000000..33cf221c --- /dev/null +++ b/ic/src/public/nc/bs/ic/general/rule/before/MaterialOutBillDateRule.java @@ -0,0 +1,59 @@ +package nc.bs.ic.general.rule.before; + +import nc.bs.ic.pub.base.ICRule; +import nc.bs.uapbd.util.MyHelper; +import nc.util.mmf.framework.base.MMValueCheck; +import nc.vo.ic.general.define.ICBillHeadVO; +import nc.vo.ic.general.define.ICBillVO; +import nc.vo.ic.m4d.entity.MaterialOutVO; +import nc.vo.org.StockOrgVO; +import nc.vo.pub.BusinessException; +import nc.vo.pub.lang.UFDate; +import nc.vo.pubapp.pattern.exception.ExceptionUtils; + +/** + * 精密-材料出库新增-单据日期赋值-启源领料 + * + * @author mzr + * @date 2025/10/26 + */ +public class MaterialOutBillDateRule extends ICRule { + @Override + public void process(E[] vos) { + if (MMValueCheck.isEmpty(vos)) { + return; + } + try { + for (ICBillVO vo : vos) { + if (vo instanceof MaterialOutVO) { + ICBillHeadVO headVO = vo.getParentVO(); + String pk_org = (String) headVO.getAttributeValue("pk_org"); + String orgCode = MyHelper.transferField(StockOrgVO.getDefaultTableName(), StockOrgVO.CODE, StockOrgVO.PK_STOCKORG, pk_org); + // 启源领料id + String vdef9 = headVO.getVdef9(); + if ("C038".equals(orgCode) && MMValueCheck.isNotEmpty(vdef9)) { + // 启源传入的单据,单据日期增加校验 + 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); + } + } + } + } + } + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + } + } + +} From 1eddb9bc35bc5e5c43779d2516d3ec5ded372038 Mon Sep 17 00:00:00 2001 From: mzr Date: Mon, 27 Oct 2025 11:07:26 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E7=B2=BE=E5=AF=86-=E5=90=AF=E6=BA=90?= =?UTF-8?q?=E9=A2=86=E6=96=99-=E5=8D=95=E6=8D=AE=E6=97=A5=E6=9C=9F?= =?UTF-8?q?=E8=B5=8B=E5=80=BC-=E4=BB=A3=E7=A0=81=E8=B0=83=E6=95=B4?= =?UTF-8?q?=EF=BC=8C=E9=9C=80=E8=A6=81=E5=9C=A8=E5=BC=80=E5=85=B3=E8=B4=A6?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E4=B9=8B=E5=89=8D=E8=B5=8B=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ic/src/private/nc/bs/ic/m4d/insert/InsertBP.java | 1 - 1 file changed, 1 deletion(-) diff --git a/ic/src/private/nc/bs/ic/m4d/insert/InsertBP.java b/ic/src/private/nc/bs/ic/m4d/insert/InsertBP.java index 350f57fe..0d037b81 100644 --- a/ic/src/private/nc/bs/ic/m4d/insert/InsertBP.java +++ b/ic/src/private/nc/bs/ic/m4d/insert/InsertBP.java @@ -108,7 +108,6 @@ public class InsertBP implements IInsertBP, //2025年6月13日09点38分 -- 物料档案基本页签启用项目辅助属性+库存组织未启用项目,采购入库单保存时(包含接口导入)清除行项目,材料出库单保存时(包含接口导入)清除行项目 processor.addBeforeRule(new MaterialOutProjectRule()); - // processor.addBeforeRule(new MaterialOutBillDateRule()); } @Override From ddb7eda54032c5fa9e6120006cd7db7d0d620007 Mon Sep 17 00:00:00 2001 From: houyi <1398559711@qq.com> Date: Mon, 27 Oct 2025 15:10:51 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E5=A4=87=E6=96=99=E8=AE=A1=E5=88=92?= =?UTF-8?q?=E7=82=B9=E5=87=BB=E5=A4=87=E6=96=99=E9=87=8D=E7=AE=97=E5=90=8E?= =?UTF-8?q?=E8=B0=83=E9=AB=98=E5=8E=8BMES=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nc/bs/mmpac/pickm/bp/rewrite/PickmRewriteNNum4DBP.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mmpac/src/private/nc/bs/mmpac/pickm/bp/rewrite/PickmRewriteNNum4DBP.java b/mmpac/src/private/nc/bs/mmpac/pickm/bp/rewrite/PickmRewriteNNum4DBP.java index 0c41f334..8d331756 100644 --- a/mmpac/src/private/nc/bs/mmpac/pickm/bp/rewrite/PickmRewriteNNum4DBP.java +++ b/mmpac/src/private/nc/bs/mmpac/pickm/bp/rewrite/PickmRewriteNNum4DBP.java @@ -142,8 +142,8 @@ public class PickmRewriteNNum4DBP { PickmItemVO[] pickmItemVOS = update.update(updateItems); //备料计划点击备料重算后调高压MES修改 - // SyncGyMesPickmUtil pickmUtil = new SyncGyMesPickmUtil(); - // pickmUtil.process(aggVOs); + SyncGyMesPickmUtil pickmUtil = new SyncGyMesPickmUtil(); + pickmUtil.process(aggVOs); } } From d13a478b112861a6826a785d532b81d336826ed5 Mon Sep 17 00:00:00 2001 From: houyi <1398559711@qq.com> Date: Mon, 27 Oct 2025 17:07:12 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E5=A4=87=E6=96=99=E8=AE=A1=E5=88=92?= =?UTF-8?q?=E7=82=B9=E5=87=BB=E5=A4=87=E6=96=99=E9=87=8D=E7=AE=97=E5=90=8E?= =?UTF-8?q?=E8=B0=83=E9=AB=98=E5=8E=8BMES=E4=BF=AE=E6=94=B9=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rule/AfterApproveRuleHighpressureMes.java | 20 +++++++++++-------- .../rule/AfterPickmRuleHighpressureRule.java | 10 ++++++---- .../pickm/service/SyncGyMesPickmUtil.java | 10 ++++++---- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/mmpac/src/private/nc/bs/mmpac/pickm/bp/rule/AfterApproveRuleHighpressureMes.java b/mmpac/src/private/nc/bs/mmpac/pickm/bp/rule/AfterApproveRuleHighpressureMes.java index 839ceadb..a42a2d08 100644 --- a/mmpac/src/private/nc/bs/mmpac/pickm/bp/rule/AfterApproveRuleHighpressureMes.java +++ b/mmpac/src/private/nc/bs/mmpac/pickm/bp/rule/AfterApproveRuleHighpressureMes.java @@ -101,9 +101,10 @@ public class AfterApproveRuleHighpressureMes implements IRule { // 生产部门 String deptsql = " select code,name from org_dept where pk_dept='" + pickmHeadVO.getCdeptid() + "' and dr=0 "; Map dept = (Map) baseDAO.executeQuery(deptsql, new MapProcessor()); - singleObj.put("bipDeptName", dept.get("name")); // 生产部门 - singleObj.put("bipDeptId", dept.get("code")); // 生产部门编码 - + if (!dept.isEmpty()) { + singleObj.put("bipDeptName", dept.get("name")); // 生产部门 + singleObj.put("bipDeptId", dept.get("code")); // 生产部门编码 + } singleObj.put("bipProcessProductionOrderId", pickmHeadVO.getVsourcemocode()); // 流程生产订单号 singleObj.put("bipProcessProductionOrderRowNum", pickmHeadVO.getVsourcemorowcode()); // 来源单据号行号 singleObj.put("bipParentProcessProductionOrderId", pickmHeadVO.getVfirstbillcode()); // 上级来源单据号 @@ -140,8 +141,8 @@ public class AfterApproveRuleHighpressureMes implements IRule { JSONObject itemObj = new JSONObject(); itemObj.put("bipChildId", item.getCpickm_bid()); // 子项主键ID -// itemObj.put("bchkitemforwr", item.getBchkitemforwr()); // 完工齐套检查 - itemObj.put("bchkitemforwr", "Y"); // 完工齐套检查 +// itemObj.put("bchkitemforwr", "Y"); // 完工齐套检查 + itemObj.put("bchkitemforwr",item.getBchkitemforwr().booleanValue()?"Y":"N"); // 完工齐套检查 itemObj.put("quantityPerSet", item.getNunituseastnum() != null ? item.getNunituseastnum().doubleValue() : null); // 单套数量(单位用量) itemObj.put("reservedQuantity", item.getNatpastnum() != null ? item.getNatpastnum().doubleValue() : null); // 预留数量 itemObj.put("cumulativePendingQuantity", item.getNshouldastnum() != null ? item.getNshouldastnum().doubleValue() : null); // 累计待发数量 @@ -180,8 +181,10 @@ public class AfterApproveRuleHighpressureMes implements IRule { // 生产部门 String deptsql = " select code,name from org_dept where pk_dept='" + pickmHeadVO.getCdeptid() + "' and dr=0 "; Map dept = (Map) baseDAO.executeQuery(deptsql, new MapProcessor()); - singleObj.put("bipDeptName", dept.get("name")); // 生产部门 - singleObj.put("bipDeptId", dept.get("code")); // 生产部门编码 + if (!dept.isEmpty()) { + singleObj.put("bipDeptName", dept.get("name")); // 生产部门 + singleObj.put("bipDeptId", dept.get("code")); // 生产部门编码 + } singleObj.put("bipProcessProductionOrderId", pickmHeadVO.getVsourcemocode()); // 流程生产订单号 singleObj.put("bipProcessProductionOrderRowNum", pickmHeadVO.getVsourcemorowcode()); // 来源单据号行号 @@ -220,7 +223,8 @@ public class AfterApproveRuleHighpressureMes implements IRule { JSONObject itemObj = new JSONObject(); itemObj.put("bipChildId", item.getCpickm_bid()); // 子项主键ID - itemObj.put("bchkitemforwr", "Y"); // 完工齐套检查 +// itemObj.put("bchkitemforwr", "Y"); // 完工齐套检查 + itemObj.put("bchkitemforwr",item.getBchkitemforwr().booleanValue()?"Y":"N"); // 完工齐套检查 itemObj.put("quantityPerSet", item.getNunituseastnum() != null ? item.getNunituseastnum().doubleValue() : null); // 单套数量(单位用量) itemObj.put("reservedQuantity", item.getNatpastnum() != null ? item.getNatpastnum().doubleValue() : null); // 预留数量 itemObj.put("cumulativePendingQuantity", item.getNshouldastnum() != null ? item.getNshouldastnum().doubleValue() : null); // 累计待发数量 diff --git a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterPickmRuleHighpressureRule.java b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterPickmRuleHighpressureRule.java index bb77c8ee..bfb749f7 100644 --- a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterPickmRuleHighpressureRule.java +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterPickmRuleHighpressureRule.java @@ -130,9 +130,10 @@ public class AfterPickmRuleHighpressureRule implements IRule { // 生产部门 String deptsql = " select code,name from org_dept where pk_dept='" + pickmHeadVO.getCdeptid() + "' and dr=0 "; Map dept = (Map) baseDAO.executeQuery(deptsql, new MapProcessor()); - singleObj.put("bipDeptName", dept.get("name")); // 生产部门 - singleObj.put("bipDeptId", dept.get("code")); // 生产部门编码 - + if (!dept.isEmpty()) { + singleObj.put("bipDeptName", dept.get("name")); // 生产部门 + singleObj.put("bipDeptId", dept.get("code")); // 生产部门编码 + } singleObj.put("bipProcessProductionOrderId", pickmHeadVO.getVsourcemocode()); // 流程生产订单号 singleObj.put("bipProcessProductionOrderRowNum", pickmHeadVO.getVsourcemorowcode()); // 来源单据号行号 singleObj.put("bipParentProcessProductionOrderId", pickmHeadVO.getVfirstbillcode()); // 上级来源单据号 @@ -168,7 +169,8 @@ public class AfterPickmRuleHighpressureRule implements IRule { JSONObject itemObj = new JSONObject(); itemObj.put("bipChildId", item.getCpickm_bid()); // 子项主键ID - itemObj.put("bchkitemforwr", "Y"); // 完工齐套检查 +// itemObj.put("bchkitemforwr", "Y"); // 完工齐套检查 + itemObj.put("bchkitemforwr",item.getBchkitemforwr().booleanValue()?"Y":"N"); // 完工齐套检查 itemObj.put("quantityPerSet", item.getNunituseastnum() != null ? item.getNunituseastnum().doubleValue() : null); // 单套数量(单位用量) itemObj.put("reservedQuantity", item.getNatpastnum() != null ? item.getNatpastnum().doubleValue() : null); // 预留数量 itemObj.put("cumulativePendingQuantity", item.getNshouldastnum() != null ? item.getNshouldastnum().doubleValue() : null); // 累计待发数量 diff --git a/mmpac/src/public/nccloud/web/mmpac/pickm/service/SyncGyMesPickmUtil.java b/mmpac/src/public/nccloud/web/mmpac/pickm/service/SyncGyMesPickmUtil.java index dd392046..68d29084 100644 --- a/mmpac/src/public/nccloud/web/mmpac/pickm/service/SyncGyMesPickmUtil.java +++ b/mmpac/src/public/nccloud/web/mmpac/pickm/service/SyncGyMesPickmUtil.java @@ -88,9 +88,10 @@ public class SyncGyMesPickmUtil { // 生产部门 String deptsql = " select code,name from org_dept where pk_dept='" + pickmHeadVO.getCdeptid() + "' and dr=0 "; Map dept = (Map) baseDAO.executeQuery(deptsql, new MapProcessor()); - singleObj.put("bipDeptName", dept.get("name")); // 生产部门 - singleObj.put("bipDeptId", dept.get("code")); // 生产部门编码 - + if (!dept.isEmpty()) { + singleObj.put("bipDeptName", dept.get("name")); // 生产部门 + singleObj.put("bipDeptId", dept.get("code")); // 生产部门编码 + } singleObj.put("bipProcessProductionOrderId", pickmHeadVO.getVsourcemocode()); // 流程生产订单号 singleObj.put("bipProcessProductionOrderRowNum", pickmHeadVO.getVsourcemorowcode()); // 来源单据号行号 singleObj.put("bipParentProcessProductionOrderId", pickmHeadVO.getVfirstbillcode()); // 上级来源单据号 @@ -126,7 +127,8 @@ public class SyncGyMesPickmUtil { JSONObject itemObj = new JSONObject(); itemObj.put("bipChildId", item.getCpickm_bid()); // 子项主键ID - itemObj.put("bchkitemforwr", "Y"); // 完工齐套检查 +// itemObj.put("bchkitemforwr", "Y"); // 完工齐套检查 + itemObj.put("bchkitemforwr",item.getBchkitemforwr().booleanValue()?"Y":"N"); // 完工齐套检查 itemObj.put("quantityPerSet", item.getNunituseastnum() != null ? item.getNunituseastnum().doubleValue() : null); // 单套数量(单位用量) itemObj.put("reservedQuantity", item.getNatpastnum() != null ? item.getNatpastnum().doubleValue() : null); // 预留数量 itemObj.put("cumulativePendingQuantity", item.getNshouldastnum() != null ? item.getNshouldastnum().doubleValue() : null); // 累计待发数量 From 28f8b50311580963d644ded95685fa0f905395f6 Mon Sep 17 00:00:00 2001 From: mzr Date: Mon, 27 Oct 2025 17:29:40 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E7=B2=BE=E5=AF=86-=E5=90=AF=E6=BA=90?= =?UTF-8?q?=E9=A2=86=E6=96=99-=E5=8D=95=E6=8D=AE=E6=97=A5=E6=9C=9F?= =?UTF-8?q?=E8=B5=8B=E5=80=BC-=E4=BB=A3=E7=A0=81=E8=B0=83=E6=95=B4?= =?UTF-8?q?=EF=BC=8C=E9=9C=80=E8=A6=81=E5=9C=A8=E5=BC=80=E5=85=B3=E8=B4=A6?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E4=B9=8B=E5=89=8D=E8=B5=8B=E5=80=BC=EF=BC=8C?= =?UTF-8?q?PushSaveActionFor55A3=E5=A2=9E=E5=8A=A0=E5=89=8D=E8=A7=84?= =?UTF-8?q?=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mm55a3/action/PushSaveActionFor55A3.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 ic/src/private/nc/pubimpl/ic/m4d/mm55a3/action/PushSaveActionFor55A3.java diff --git a/ic/src/private/nc/pubimpl/ic/m4d/mm55a3/action/PushSaveActionFor55A3.java b/ic/src/private/nc/pubimpl/ic/m4d/mm55a3/action/PushSaveActionFor55A3.java new file mode 100644 index 00000000..a9ed319b --- /dev/null +++ b/ic/src/private/nc/pubimpl/ic/m4d/mm55a3/action/PushSaveActionFor55A3.java @@ -0,0 +1,40 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package nc.pubimpl.ic.m4d.mm55a3.action; + +import nc.bs.ic.general.rule.before.IgnoreSafetyStockCheck; +import nc.bs.ic.general.rule.before.MaterialOutBillDateRule; +import nc.bs.ic.general.rule.before.RowNoProcessForPushBill; +import nc.bs.ic.m4d.base.ServicePluginPoint; +import nc.bs.ic.m4d.insert.InsertBP; +import nc.bs.ic.pub.base.ICAroundProcesser; +import nc.vo.ic.general.util.BillChangeUtil; +import nc.vo.ic.m4d.entity.MaterialOutVO; +import nc.vo.pubapp.pattern.log.TimeLog; + +public class PushSaveActionFor55A3 { + public PushSaveActionFor55A3() { + } + + public MaterialOutVO[] pushSave(MaterialOutVO[] vos, boolean isFillNum) { + ICAroundProcesser processor = new ICAroundProcesser(ServicePluginPoint.pushSaveFor55A3); + processor.addBeforeRule(new MaterialOutBillDateRule<>()); + processor.addBeforeRule(new Push4DFor55A3BeforeProcess(isFillNum)); + processor.addBeforeRule(new IgnoreSafetyStockCheck()); + processor.addBeforeRule(new RowNoProcessForPushBill()); + TimeLog.logStart(); + (new BillChangeUtil()).dealLiabilityFor4D(vos); + MaterialOutVO[] beforeRstVos = (MaterialOutVO[])processor.before(vos); + TimeLog.info("调用新增保存BP前执行业务规则"); + TimeLog.logStart(); + MaterialOutVO[] ret = (new InsertBP()).insert(beforeRstVos); + TimeLog.info("调用新增保存BP,进行保存"); + TimeLog.logStart(); + processor.after(ret); + TimeLog.info("调用新增保存BP后执行业务规则"); + return ret; + } +}