Merge remote-tracking branch 'origin/main'
This commit is contained in:
commit
6a77360408
|
|
@ -108,6 +108,7 @@ public class InsertBP implements IInsertBP<MaterialOutVO>,
|
||||||
|
|
||||||
//2025年6月13日09点38分 -- 物料档案基本页签启用项目辅助属性+库存组织未启用项目,采购入库单保存时(包含接口导入)清除行项目,材料出库单保存时(包含接口导入)清除行项目
|
//2025年6月13日09点38分 -- 物料档案基本页签启用项目辅助属性+库存组织未启用项目,采购入库单保存时(包含接口导入)清除行项目,材料出库单保存时(包含接口导入)清除行项目
|
||||||
processor.addBeforeRule(new MaterialOutProjectRule());
|
processor.addBeforeRule(new MaterialOutProjectRule());
|
||||||
|
processor.addBeforeRule(new MaterialOutBatchCodeRule());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,129 @@
|
||||||
|
package nc.bs.ic.m4d.insert.rule;
|
||||||
|
|
||||||
|
import nc.bs.framework.common.InvocationInfoProxy;
|
||||||
|
import nc.bs.framework.common.NCLocator;
|
||||||
|
import nc.bs.ic.pub.base.ICRule;
|
||||||
|
import nc.bs.logging.Log;
|
||||||
|
import nc.bs.trade.business.HYPubBO;
|
||||||
|
import nc.bs.uapbd.util.MyHelper;
|
||||||
|
import nc.itf.mmpac.pickm.IPickmQueryService;
|
||||||
|
import nc.itf.uap.IUAPQueryBS;
|
||||||
|
import nc.util.mmf.framework.base.MMValueCheck;
|
||||||
|
import nc.vo.bd.material.MaterialVO;
|
||||||
|
import nc.vo.ic.m4d.entity.MaterialOutBodyVO;
|
||||||
|
import nc.vo.ic.m4d.entity.MaterialOutHeadVO;
|
||||||
|
import nc.vo.ic.m4d.entity.MaterialOutVO;
|
||||||
|
import nc.vo.mmpac.pickm.entity.AggPickmVO;
|
||||||
|
import nc.vo.mmpac.pickm.entity.PickmHeadVO;
|
||||||
|
import nc.vo.org.StockOrgVO;
|
||||||
|
import nc.vo.pub.BusinessException;
|
||||||
|
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
|
||||||
|
import nc.vo.pubapp.pattern.pub.SqlBuilder;
|
||||||
|
import nc.vo.scmf.ic.mbatchcode.BatchcodeVO;
|
||||||
|
import nccloud.baseapp.core.log.NCCForUAPLogger;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 精密-材料出库新增--批次号赋值
|
||||||
|
*
|
||||||
|
* @author mzr
|
||||||
|
* @date 2025/10/26
|
||||||
|
*/
|
||||||
|
public class MaterialOutBatchCodeRule extends ICRule<MaterialOutVO> {
|
||||||
|
private static final String LOG_INFO_NAME = "jmqylog";
|
||||||
|
private static final Log logger = Log.getInstance(LOG_INFO_NAME);
|
||||||
|
private Map<String, String> configParams;
|
||||||
|
private IUAPQueryBS queryBS = null;
|
||||||
|
|
||||||
|
public final IUAPQueryBS getQueryBS() {
|
||||||
|
if (null == queryBS) {
|
||||||
|
queryBS = NCLocator.getInstance().lookup(IUAPQueryBS.class);
|
||||||
|
}
|
||||||
|
return queryBS;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void process(MaterialOutVO[] vos) {
|
||||||
|
if (MMValueCheck.isEmpty(vos)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
configParams = MyHelper.getConfigParams("jm-config", null);
|
||||||
|
if (configParams.isEmpty()) {
|
||||||
|
throw new BusinessException("精密的启源接口缺少配置");
|
||||||
|
}
|
||||||
|
String configMaterialCode = configParams.get("noItemCode");
|
||||||
|
if (configMaterialCode == null || configMaterialCode.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
HYPubBO hyPub = new HYPubBO();
|
||||||
|
for (MaterialOutVO vo : vos) {
|
||||||
|
MaterialOutHeadVO headVO = vo.getHead();
|
||||||
|
MaterialOutBodyVO[] bodys = vo.getBodys();
|
||||||
|
String pk_org = (String) headVO.getAttributeValue("pk_org");
|
||||||
|
String vtrantypecode = headVO.getVtrantypecode();
|
||||||
|
String orgCode = MyHelper.transferField(StockOrgVO.getDefaultTableName(), StockOrgVO.CODE, StockOrgVO.PK_STOCKORG, pk_org);
|
||||||
|
if ("C038".equals(orgCode)) {
|
||||||
|
if ("4D-Cxx-58".equals(vtrantypecode)) {
|
||||||
|
IPickmQueryService service = NCLocator.getInstance().lookup(IPickmQueryService.class);
|
||||||
|
// 批次号赋值
|
||||||
|
for (MaterialOutBodyVO body : bodys) {
|
||||||
|
// 备料计划表头主键
|
||||||
|
String cpickmhid = body.getCpickmhid();
|
||||||
|
String cmaterialvid = body.getCmaterialvid();
|
||||||
|
String condition = "pk_material = '" + cmaterialvid + "'";
|
||||||
|
String materialCode = hyPub.findColValue(MaterialVO.getDefaultTableName(), MaterialVO.CODE, condition) + "";
|
||||||
|
if (!configMaterialCode.equals(materialCode)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (MMValueCheck.isNotEmpty(cpickmhid)) {
|
||||||
|
AggPickmVO aggVO = service.querySingleBillByPk(cpickmhid);
|
||||||
|
if (aggVO == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
PickmHeadVO pickmHeadVO = aggVO.getParentVO();
|
||||||
|
// 来源生产订单明细
|
||||||
|
String vsourcemorowid = pickmHeadVO.getVsourcemorowid();
|
||||||
|
NCCForUAPLogger.debug("来源生产订单明细:" + vsourcemorowid);
|
||||||
|
if (vsourcemorowid != null && !vsourcemorowid.isEmpty()) {
|
||||||
|
body.setVbatchcode(vsourcemorowid);// 批次号
|
||||||
|
Map<String, String> batchMap = getBatchCodeVO(cmaterialvid, vsourcemorowid);
|
||||||
|
String pkBatchcode = batchMap.get(vsourcemorowid);
|
||||||
|
body.setPk_batchcode(pkBatchcode);// 批次档案id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (BusinessException e) {
|
||||||
|
logger.error("MaterialOutBatchCodeRule-exp:" + e.getMessage(), e);
|
||||||
|
ExceptionUtils.wrappException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, String> getBatchCodeVO(String cbmaterialvid, String vbatchcode)
|
||||||
|
throws BusinessException {
|
||||||
|
Map<String, String> resMap = new HashMap<>();
|
||||||
|
SqlBuilder sb = new SqlBuilder();
|
||||||
|
sb.append("pk_group", InvocationInfoProxy.getInstance().getGroupId());
|
||||||
|
sb.append(" and ");
|
||||||
|
sb.append("nvl(dr,0)", 0);
|
||||||
|
sb.append(" and ");
|
||||||
|
sb.append("cmaterialvid", cbmaterialvid);
|
||||||
|
sb.append(" and ");
|
||||||
|
sb.append("vbatchcode", vbatchcode);
|
||||||
|
Collection<BatchcodeVO> vos = this.getQueryBS().retrieveByClause(BatchcodeVO.class, sb.toString());
|
||||||
|
for (BatchcodeVO vo : vos) {
|
||||||
|
String pk_batchcode = vo.getPk_batchcode();
|
||||||
|
String vbatchcode1 = vo.getVbatchcode();
|
||||||
|
resMap.put(vbatchcode1, pk_batchcode);
|
||||||
|
}
|
||||||
|
return resMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -495,11 +495,14 @@ public class APIMaterialOutMaintainImpl implements IAPIMaterialOutMaintain {
|
||||||
for (AggPickmVO newPickmVO : newPickmVOS) {
|
for (AggPickmVO newPickmVO : newPickmVOS) {
|
||||||
PickmItemVO[] pickmItemVOS = (PickmItemVO[]) newPickmVO.getChildren(PickmItemVO.class);
|
PickmItemVO[] pickmItemVOS = (PickmItemVO[]) newPickmVO.getChildren(PickmItemVO.class);
|
||||||
for (PickmItemVO pickmItemVO : pickmItemVOS) {
|
for (PickmItemVO pickmItemVO : pickmItemVOS) {
|
||||||
Double nbsetpartsnum = pickmItemVO.getNbsetpartsnum().toDouble();
|
UFDouble nbsetpartsnum1 = pickmItemVO.getNbsetpartsnum();
|
||||||
|
if (nbsetpartsnum1 != null) {
|
||||||
|
Double nbsetpartsnum = nbsetpartsnum1.toDouble();
|
||||||
sum += nbsetpartsnum;
|
sum += nbsetpartsnum;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
JSONObject result = new JSONObject();
|
JSONObject result = new JSONObject();
|
||||||
result.put("vbillcode", paramMap.get("vbillcode"));// 生产订单号
|
result.put("vbillcode", paramMap.get("vbillcode"));// 生产订单号
|
||||||
result.put("outcode", outVOS[0].getHead().getVbillcode());// 材料出库单号
|
result.put("outcode", outVOS[0].getHead().getVbillcode());// 材料出库单号
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,42 @@
|
||||||
|
package nccloud.wmssync.ml.m4a;
|
||||||
|
|
||||||
|
import nc.bs.businessevent.IBusinessEvent;
|
||||||
|
import nc.bs.businessevent.IBusinessListener;
|
||||||
|
import nc.bs.framework.common.NCLocator;
|
||||||
|
import nc.bs.ic.general.businessevent.ICGeneralCommonEvent;
|
||||||
|
import nc.bs.logging.Log;
|
||||||
|
import nc.vo.ic.m4a.entity.GeneralInHeadVO;
|
||||||
|
import nc.vo.ic.m4a.entity.GeneralInVO;
|
||||||
|
import nc.vo.org.StockOrgVO;
|
||||||
|
import nc.vo.pub.BusinessException;
|
||||||
|
import nccloud.api.uapbd.wms.utils.IWmsSyncUtils;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 其他入库单删除后同步WMS
|
||||||
|
* 支持的交易类型:
|
||||||
|
* - 4A-Cxx-14: 形态转换入库 -> XTRK
|
||||||
|
* - 4A-Cxx-13: 其他入库 -> QTRK
|
||||||
|
* - 4A-Cxx-12: 盘盈入库 -> ADJ
|
||||||
|
*/
|
||||||
|
public class WmsSyncAfterDeleteGeneralInListener implements IBusinessListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 支持取消同步的交易类型编码映射
|
||||||
|
* key: ERP交易类型编码, value: WMS交易类型
|
||||||
|
*/
|
||||||
|
private static final Map<String, String> SUPPORTED_TRAN_TYPES = new HashMap<>();
|
||||||
|
|
||||||
|
static {
|
||||||
|
SUPPORTED_TRAN_TYPES.put("4A-06", "XTRK"); // 形态转换入库
|
||||||
|
SUPPORTED_TRAN_TYPES.put("4A-01", "QTRK"); // 其他入库
|
||||||
|
SUPPORTED_TRAN_TYPES.put("4A-03", "ADJ"); // 盘盈入库
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doAction(IBusinessEvent iBusinessEvent) throws BusinessException {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,8 +1,10 @@
|
||||||
package nc.bs.ic.general.rule.before;
|
package nc.bs.ic.general.rule.before;
|
||||||
|
|
||||||
import nc.bs.ic.pub.base.ICRule;
|
import nc.bs.ic.pub.base.ICRule;
|
||||||
|
import nc.bs.logging.Log;
|
||||||
import nc.bs.uapbd.util.MyHelper;
|
import nc.bs.uapbd.util.MyHelper;
|
||||||
import nc.util.mmf.framework.base.MMValueCheck;
|
import nc.util.mmf.framework.base.MMValueCheck;
|
||||||
|
import nc.vo.ic.general.define.ICBillBodyVO;
|
||||||
import nc.vo.ic.general.define.ICBillHeadVO;
|
import nc.vo.ic.general.define.ICBillHeadVO;
|
||||||
import nc.vo.ic.general.define.ICBillVO;
|
import nc.vo.ic.general.define.ICBillVO;
|
||||||
import nc.vo.ic.m4d.entity.MaterialOutVO;
|
import nc.vo.ic.m4d.entity.MaterialOutVO;
|
||||||
|
|
@ -11,6 +13,8 @@ import nc.vo.pub.BusinessException;
|
||||||
import nc.vo.pub.lang.UFDate;
|
import nc.vo.pub.lang.UFDate;
|
||||||
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
|
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 精密-材料出库新增-单据日期赋值-启源领料
|
* 精密-材料出库新增-单据日期赋值-启源领料
|
||||||
*
|
*
|
||||||
|
|
@ -18,24 +22,38 @@ import nc.vo.pubapp.pattern.exception.ExceptionUtils;
|
||||||
* @date 2025/10/26
|
* @date 2025/10/26
|
||||||
*/
|
*/
|
||||||
public class MaterialOutBillDateRule<E extends ICBillVO> extends ICRule<E> {
|
public class MaterialOutBillDateRule<E extends ICBillVO> extends ICRule<E> {
|
||||||
|
private static final String LOG_INFO_NAME = "jmqylog";
|
||||||
|
private static final Log logger = Log.getInstance(LOG_INFO_NAME);
|
||||||
|
private Map<String, String> configParams;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void process(E[] vos) {
|
public void process(E[] vos) {
|
||||||
if (MMValueCheck.isEmpty(vos)) {
|
if (MMValueCheck.isEmpty(vos)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
|
configParams = MyHelper.getConfigParams("jm-config", null);
|
||||||
|
if (configParams.isEmpty()) {
|
||||||
|
throw new BusinessException("精密的启源接口缺少配置");
|
||||||
|
}
|
||||||
|
String outBillDate = configParams.get("outBillDate");
|
||||||
for (ICBillVO vo : vos) {
|
for (ICBillVO vo : vos) {
|
||||||
if (vo instanceof MaterialOutVO) {
|
if (vo instanceof MaterialOutVO) {
|
||||||
ICBillHeadVO headVO = vo.getParentVO();
|
ICBillHeadVO headVO = vo.getParentVO();
|
||||||
|
ICBillBodyVO[] bodys = vo.getBodys();
|
||||||
String pk_org = (String) headVO.getAttributeValue("pk_org");
|
String pk_org = (String) headVO.getAttributeValue("pk_org");
|
||||||
String orgCode = MyHelper.transferField(StockOrgVO.getDefaultTableName(), StockOrgVO.CODE, StockOrgVO.PK_STOCKORG, pk_org);
|
String orgCode = MyHelper.transferField(StockOrgVO.getDefaultTableName(), StockOrgVO.CODE, StockOrgVO.PK_STOCKORG, pk_org);
|
||||||
// 启源领料id
|
// 启源领料id
|
||||||
String vdef9 = headVO.getVdef9();
|
String vdef9 = headVO.getVdef9();
|
||||||
if ("C038".equals(orgCode) && MMValueCheck.isNotEmpty(vdef9)) {
|
if ("C038".equals(orgCode)) {
|
||||||
|
if (MMValueCheck.isNotEmpty(vdef9)) {
|
||||||
|
if (MMValueCheck.isEmpty(outBillDate) || "N".equals(outBillDate)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
// 启源传入的单据,单据日期增加校验
|
// 启源传入的单据,单据日期增加校验
|
||||||
UFDate dbilldate = headVO.getDbilldate();
|
UFDate dbilldate = headVO.getDbilldate();
|
||||||
// 设置单据日期, 如果单据日期小于2025-11-02,则单据日期设置为2025-11-02
|
// 设置单据日期, 如果单据日期小于2025-11-02,则单据日期设置为2025-11-02
|
||||||
UFDate ufDate = new UFDate("2025-11-02");
|
UFDate ufDate = new UFDate(outBillDate);
|
||||||
if (dbilldate != null) {
|
if (dbilldate != null) {
|
||||||
int i = dbilldate.compareTo(ufDate);
|
int i = dbilldate.compareTo(ufDate);
|
||||||
if (i < 0) {
|
if (i < 0) {
|
||||||
|
|
@ -51,7 +69,9 @@ public class MaterialOutBillDateRule<E extends ICBillVO> extends ICRule<E> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} catch (BusinessException e) {
|
} catch (BusinessException e) {
|
||||||
|
logger.error("MaterialOutBillDateRule-exp:" + e.getMessage(), e);
|
||||||
ExceptionUtils.wrappException(e);
|
ExceptionUtils.wrappException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
package nccloud.resources.ic.ic.materialout;
|
||||||
|
|
||||||
|
import nc.bs.businessevent.IBusinessEvent;
|
||||||
|
import nc.bs.businessevent.IBusinessListener;
|
||||||
|
import nc.bs.logging.Log;
|
||||||
|
import nc.vo.pub.BusinessException;
|
||||||
|
import nccloud.api.uapbd.wms.utils.WmsSyncUtils;
|
||||||
|
|
||||||
|
// 取消材料出库单据同步到FLUX WMS
|
||||||
|
public class CancelMaterialOutWmsPlugin implements IBusinessListener {
|
||||||
|
|
||||||
|
private static final Log log = Log.getInstance("wmslog");
|
||||||
|
private final WmsSyncUtils wmsSyncUtils = new WmsSyncUtils();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doAction(IBusinessEvent iBusinessEvent) throws BusinessException {
|
||||||
|
try {
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("CancelMaterialOutWmsPlugin - 处理异常: " + e.getMessage(), e);
|
||||||
|
throw new BusinessException("取消材料出库单同步时报错,报错信息:" + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,22 +1,25 @@
|
||||||
package nccloud.openapi.mmpac.wr;
|
package nccloud.openapi.mmpac.wr;
|
||||||
|
|
||||||
|
|
||||||
import nc.bs.dao.BaseDAO;
|
import nc.bs.dao.BaseDAO;
|
||||||
import nc.bs.framework.common.InvocationInfoProxy;
|
import nc.bs.framework.common.InvocationInfoProxy;
|
||||||
import nc.bs.framework.common.NCLocator;
|
import nc.bs.framework.common.NCLocator;
|
||||||
import nc.bs.logging.Log;
|
import nc.bs.logging.Log;
|
||||||
import nc.bs.uif2.validation.ValidationFailure;
|
import nc.bs.uif2.validation.ValidationFailure;
|
||||||
|
import nc.itf.mmpac.wr.IWrBusinessService;
|
||||||
import nc.jdbc.framework.SQLParameter;
|
import nc.jdbc.framework.SQLParameter;
|
||||||
import nc.jdbc.framework.processor.ColumnProcessor;
|
import nc.jdbc.framework.processor.ColumnProcessor;
|
||||||
import nc.util.mmf.framework.base.MMArrayUtil;
|
import nc.util.mmf.framework.base.MMArrayUtil;
|
||||||
import nc.util.mmf.framework.base.MMCollectionUtil;
|
import nc.util.mmf.framework.base.MMCollectionUtil;
|
||||||
import nc.util.mmf.framework.base.MMNumberUtil;
|
import nc.util.mmf.framework.base.MMNumberUtil;
|
||||||
import nc.util.mmf.framework.base.MMValueCheck;
|
import nc.util.mmf.framework.base.MMValueCheck;
|
||||||
|
import nc.vo.bd.bom.bom0202.enumeration.OutputTypeEnum;
|
||||||
|
import nc.vo.mmpac.wr.consts.WrptLangConst;
|
||||||
import nc.vo.mmpac.wr.entity.*;
|
import nc.vo.mmpac.wr.entity.*;
|
||||||
import nc.vo.mmpac.wr.enumeration.WrBillStatusEnum;
|
import nc.vo.mmpac.wr.enumeration.WrBillStatusEnum;
|
||||||
import nc.vo.pub.BusinessException;
|
import nc.vo.pub.BusinessException;
|
||||||
import nc.vo.pub.VOStatus;
|
import nc.vo.pub.VOStatus;
|
||||||
import nc.vo.pub.billtype.BilltypeVO;
|
import nc.vo.pub.billtype.BilltypeVO;
|
||||||
|
import nc.vo.pub.lang.UFBoolean;
|
||||||
import nc.vo.pub.lang.UFDate;
|
import nc.vo.pub.lang.UFDate;
|
||||||
import nc.vo.pubapp.AppContext;
|
import nc.vo.pubapp.AppContext;
|
||||||
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
|
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
|
||||||
|
|
@ -24,6 +27,7 @@ import nc.ws.opm.pub.utils.result.APIErrCodeEnum;
|
||||||
import nccloud.api.mmpac.wr.IAPIWrMaintain;
|
import nccloud.api.mmpac.wr.IAPIWrMaintain;
|
||||||
import nccloud.api.rest.utils.NCCRestUtils;
|
import nccloud.api.rest.utils.NCCRestUtils;
|
||||||
import nccloud.api.rest.utils.ResultMessageUtil;
|
import nccloud.api.rest.utils.ResultMessageUtil;
|
||||||
|
import nccloud.framework.service.ServiceLocator;
|
||||||
import nccloud.openapi.scmpub.pub.TransferCodeToPKTool;
|
import nccloud.openapi.scmpub.pub.TransferCodeToPKTool;
|
||||||
import nccloud.ws.rest.resource.AbstractNCCRestResource;
|
import nccloud.ws.rest.resource.AbstractNCCRestResource;
|
||||||
import org.json.JSONString;
|
import org.json.JSONString;
|
||||||
|
|
@ -379,7 +383,50 @@ public class WrResource extends AbstractNCCRestResource {
|
||||||
aggWrVO.getParentVO().setVtrantypeid(collection.get(0).getPk_billtypeid());
|
aggWrVO.getParentVO().setVtrantypeid(collection.get(0).getPk_billtypeid());
|
||||||
aggWrVO.getParentVO().setDbilldate(new UFDate());
|
aggWrVO.getParentVO().setDbilldate(new UFDate());
|
||||||
}
|
}
|
||||||
AggWrVO[] aggvos = server.newsave(voList.toArray(new AggWrVO[0]));
|
|
||||||
|
/*
|
||||||
|
* edit by xc 2025-10-22
|
||||||
|
* 齐套检查前置 从产品入库 前置 完工报告
|
||||||
|
* 考虑标品接口扩展性 表头增加校验参数 isdonecheck:Y/N
|
||||||
|
*/
|
||||||
|
AggWrVO[] wrVOS = voList.toArray(new AggWrVO[0]);
|
||||||
|
if (headInfo.containsKey("isdonecheck") && "Y".equals(headInfo.get("isdonecheck").toString())) {
|
||||||
|
IWrBusinessService service = (IWrBusinessService) ServiceLocator.find(IWrBusinessService.class);
|
||||||
|
AggWrVO[] resultvos = service.setCheck(wrVOS);
|
||||||
|
if (!MMValueCheck.isEmpty(resultvos)) {
|
||||||
|
StringBuilder errorMessagesSB = new StringBuilder();
|
||||||
|
|
||||||
|
for (AggWrVO aggWrVO : resultvos) {
|
||||||
|
if (!WrBillStatusEnum.FREEDOM.equalsValue(aggWrVO.getParentVO().getFbillstatus())) {
|
||||||
|
StringBuilder notThroughSB = new StringBuilder();
|
||||||
|
String billCode = aggWrVO.getParentVO().getVbillcode();
|
||||||
|
WrItemVO[] itemVOs = (WrItemVO[]) aggWrVO.getChildren(WrItemVO.class);
|
||||||
|
if (!MMValueCheck.isEmpty(itemVOs)) {
|
||||||
|
for (WrItemVO itemVO : itemVOs) {
|
||||||
|
if (!MMValueCheck.isEmpty(itemVO.getCbmoid()) && OutputTypeEnum.MAIN_PRODUCT.equalsValue(itemVO.getFbproducttype()) && !UFBoolean.TRUE.equals(itemVO.getBbsetmark())) {
|
||||||
|
notThroughSB.append(itemVO.getVbrowno());
|
||||||
|
notThroughSB.append(",");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!MMValueCheck.isEmpty(notThroughSB)) {
|
||||||
|
notThroughSB.setLength(notThroughSB.length() - 1);
|
||||||
|
String message = WrptLangConst.getSetCheckError_Msg(new String[]{billCode, notThroughSB.toString()});
|
||||||
|
errorMessagesSB.append(message);
|
||||||
|
errorMessagesSB.append("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!MMValueCheck.isEmpty(errorMessagesSB)) {
|
||||||
|
ExceptionUtils.wrappBusinessException(errorMessagesSB.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* end 齐套检查
|
||||||
|
* edit by xc 2025-10-22
|
||||||
|
*/
|
||||||
|
AggWrVO[] aggvos = server.newsave(wrVOS);
|
||||||
boolean successFlag = true;
|
boolean successFlag = true;
|
||||||
StringBuilder errMsg = new StringBuilder();
|
StringBuilder errMsg = new StringBuilder();
|
||||||
if (MMArrayUtil.isNotEmpty(aggvos)) {
|
if (MMArrayUtil.isNotEmpty(aggvos)) {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
package nccloud.wmssync.ml.c003;
|
||||||
|
|
||||||
|
import nc.bs.businessevent.IBusinessEvent;
|
||||||
|
import nc.bs.businessevent.IBusinessListener;
|
||||||
|
import nc.vo.pub.BusinessException;
|
||||||
|
|
||||||
|
public class WmsSyncQcReportListener implements IBusinessListener {
|
||||||
|
@Override
|
||||||
|
public void doAction(IBusinessEvent iBusinessEvent) throws BusinessException {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -182,6 +182,19 @@ public class MaterialToEpicMesPlugin implements IBackgroundWorkPlugin {
|
||||||
if (num > 0) {
|
if (num > 0) {
|
||||||
mesType = "1";
|
mesType = "1";
|
||||||
}
|
}
|
||||||
|
// 判断物料是否是虚拟件,只要有一个组织是就赋值0
|
||||||
|
String countSql1 = "SELECT count(1)" +
|
||||||
|
" FROM bd_materialplan a" +
|
||||||
|
" LEFT JOIN org_orgs b ON a.pk_org = b.pk_org" +
|
||||||
|
" WHERE a.dr = 0 AND a.isvirtual = 'Y' " +
|
||||||
|
" AND a.pk_material = '[pkMaterial]'" +
|
||||||
|
" AND b.isbusinessunit = 'Y'" +
|
||||||
|
" AND " + inStr;
|
||||||
|
countSql1 = countSql1.replace("[pkMaterial]", pkMaterial);
|
||||||
|
Integer num1 = (Integer) new BaseDAO().executeQuery(countSql1, new ColumnProcessor());
|
||||||
|
if (num1 > 0) {
|
||||||
|
mesType = "0";
|
||||||
|
}
|
||||||
return mesType;
|
return mesType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,9 @@ import nc.jdbc.framework.processor.ColumnProcessor;
|
||||||
import nc.jdbc.framework.processor.MapProcessor;
|
import nc.jdbc.framework.processor.MapProcessor;
|
||||||
import nc.util.mmf.framework.base.MMValueCheck;
|
import nc.util.mmf.framework.base.MMValueCheck;
|
||||||
import nc.vo.bd.material.MaterialVO;
|
import nc.vo.bd.material.MaterialVO;
|
||||||
|
import nc.vo.bd.material.plan.MaterialPlanVO;
|
||||||
|
import nc.vo.bd.material.prod.MaterialProdVO;
|
||||||
|
import nc.vo.bd.material.stock.MaterialStockVO;
|
||||||
import nc.vo.fi.pub.SqlUtils;
|
import nc.vo.fi.pub.SqlUtils;
|
||||||
import nc.vo.org.OrgVO;
|
import nc.vo.org.OrgVO;
|
||||||
import nc.vo.pub.BusinessException;
|
import nc.vo.pub.BusinessException;
|
||||||
|
|
@ -55,12 +58,34 @@ public class MaterialToEpicMesListener implements IBusinessListener {
|
||||||
try {
|
try {
|
||||||
if ("1002".equals(eventType) || "1004".equals(eventType) || "1061".equals(eventType) ||
|
if ("1002".equals(eventType) || "1004".equals(eventType) || "1061".equals(eventType) ||
|
||||||
"1071".equals(eventType) || "1069".equals(eventType)) {
|
"1071".equals(eventType) || "1069".equals(eventType)) {
|
||||||
useVOs = ArrayClassConvertUtil.convert(objs, MaterialVO.class);
|
|
||||||
configParams = MyHelper.getConfigParams("Dldz-config", null);
|
configParams = MyHelper.getConfigParams("Dldz-config", null);
|
||||||
if (configParams.isEmpty()) {
|
if (configParams.isEmpty()) {
|
||||||
throw new BusinessException("电力电子的艾普MES接口缺少配置");
|
throw new BusinessException("电力电子的艾普MES接口缺少配置");
|
||||||
}
|
}
|
||||||
|
List<MaterialVO> list = new ArrayList<>();
|
||||||
|
if (objs instanceof MaterialVO[]) {
|
||||||
|
// 基本信息修改后/停用启用
|
||||||
|
useVOs = ArrayClassConvertUtil.convert(objs, MaterialVO.class);
|
||||||
|
for (MaterialVO materialVO : useVOs) {
|
||||||
|
String pkMaterial = materialVO.getPk_material();
|
||||||
|
// 如果修改基本信息,判断物料所属组织中是否存在电力电子,不存在则跳过
|
||||||
|
Integer num = MyHelper.checkIfOrg(configParams, pkMaterial, "dldzOrg");
|
||||||
|
if (num <= 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
list.add(materialVO);
|
||||||
|
}
|
||||||
|
} else if (objs instanceof MaterialStockVO[]) {
|
||||||
|
// 库存信息修改
|
||||||
|
processMaterialChange(objs, list);
|
||||||
|
} else if (objs instanceof MaterialPlanVO[]) {
|
||||||
|
// 计划信息修改
|
||||||
|
processMaterialChange(objs, list);
|
||||||
|
}
|
||||||
|
if (!list.isEmpty()) {
|
||||||
|
useVOs = list.toArray(new MaterialVO[0]);
|
||||||
buildSyncData(useVOs, eventType);
|
buildSyncData(useVOs, eventType);
|
||||||
|
}
|
||||||
} else if ("1009".equals(eventType)) {
|
} else if ("1009".equals(eventType)) {
|
||||||
// 物料可见性范围-分配后 1009
|
// 物料可见性范围-分配后 1009
|
||||||
configParams = MyHelper.getConfigParams("Dldz-config", null);
|
configParams = MyHelper.getConfigParams("Dldz-config", null);
|
||||||
|
|
@ -110,10 +135,10 @@ public class MaterialToEpicMesListener implements IBusinessListener {
|
||||||
// 判断物料的业务单元是否是电力电子公司,不是则跳过
|
// 判断物料的业务单元是否是电力电子公司,不是则跳过
|
||||||
String pkOrg = vo.getPk_org();
|
String pkOrg = vo.getPk_org();
|
||||||
String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg);
|
String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg);
|
||||||
Integer num = MyHelper.checkIfOrg(configParams, pkMaterial, "dldzOrg");
|
/*Integer num = MyHelper.checkIfOrg(configParams, pkMaterial, "dldzOrg");
|
||||||
if (!"1009".equals(eventType) && (num <= 0)) {
|
if (!"1009".equals(eventType) && (num <= 0)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}*/
|
||||||
// 字段值翻译
|
// 字段值翻译
|
||||||
// String pk_marbasclass = vo.getPk_marbasclass();
|
// String pk_marbasclass = vo.getPk_marbasclass();
|
||||||
// String mrlTypeCOde = MyHelper.transferField(MarBasClassVO.getDefaultTableName(), MarBasClassVO.CODE, MarBasClassVO.PK_MARBASCLASS, pk_marbasclass);
|
// String mrlTypeCOde = MyHelper.transferField(MarBasClassVO.getDefaultTableName(), MarBasClassVO.CODE, MarBasClassVO.PK_MARBASCLASS, pk_marbasclass);
|
||||||
|
|
@ -169,6 +194,55 @@ public class MaterialToEpicMesListener implements IBusinessListener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理物料VO的通用方法
|
||||||
|
*/
|
||||||
|
private void processMaterialChange(Object[] objs, List<MaterialVO> list) throws BusinessException {
|
||||||
|
HYPubBO hyPub = new HYPubBO();
|
||||||
|
for (Object newVO : objs) {
|
||||||
|
String pk_material = getPkMaterialFromVO(newVO);
|
||||||
|
if (MMValueCheck.isEmpty(pk_material)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String pkOrg = getPkOrgFromVO(newVO);
|
||||||
|
String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg);
|
||||||
|
// 判断各个页签修改信息是否属于电力电子
|
||||||
|
if (MMValueCheck.isNotEmpty(pkOrg) && MyHelper.checkIfDldzOrg(orgCode, configParams)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
MaterialVO materialVO = (MaterialVO) hyPub.queryByPrimaryKey(MaterialVO.class, pk_material);
|
||||||
|
list.add(materialVO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从不同类型的VO中获取pk_material
|
||||||
|
*/
|
||||||
|
private String getPkMaterialFromVO(Object vo) {
|
||||||
|
if (vo instanceof MaterialStockVO newVo) {
|
||||||
|
return newVo.getPk_material();
|
||||||
|
} else if (vo instanceof MaterialPlanVO newVo) {
|
||||||
|
return newVo.getPk_material();
|
||||||
|
} else if (vo instanceof MaterialProdVO) {
|
||||||
|
return ((MaterialProdVO) vo).getPk_material();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从不同类型的VO中获取pk_org
|
||||||
|
*/
|
||||||
|
private String getPkOrgFromVO(Object vo) {
|
||||||
|
if (vo instanceof MaterialStockVO) {
|
||||||
|
return ((MaterialStockVO) vo).getPk_org();
|
||||||
|
} else if (vo instanceof MaterialPlanVO) {
|
||||||
|
return ((MaterialPlanVO) vo).getPk_org();
|
||||||
|
} else if (vo instanceof MaterialProdVO) {
|
||||||
|
return ((MaterialProdVO) vo).getPk_org();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
private String getType(String eventType) {
|
private String getType(String eventType) {
|
||||||
// 类型(I:新增 U:修改 D:删除)
|
// 类型(I:新增 U:修改 D:删除)
|
||||||
Map<String, String> map = new HashMap<>();
|
Map<String, String> map = new HashMap<>();
|
||||||
|
|
@ -212,6 +286,19 @@ public class MaterialToEpicMesListener implements IBusinessListener {
|
||||||
if (num > 0) {
|
if (num > 0) {
|
||||||
mesType = "1";
|
mesType = "1";
|
||||||
}
|
}
|
||||||
|
// 判断物料是否是虚拟件,只要有一个组织是就赋值0
|
||||||
|
String countSql1 = "SELECT count(1)" +
|
||||||
|
" FROM bd_materialplan a" +
|
||||||
|
" LEFT JOIN org_orgs b ON a.pk_org = b.pk_org" +
|
||||||
|
" WHERE a.dr = 0 AND a.isvirtual = 'Y' " +
|
||||||
|
" AND a.pk_material = '[pkMaterial]'" +
|
||||||
|
" AND b.isbusinessunit = 'Y'" +
|
||||||
|
" AND " + inStr;
|
||||||
|
countSql1 = countSql1.replace("[pkMaterial]", pkMaterial);
|
||||||
|
Integer num1 = (Integer) new BaseDAO().executeQuery(countSql1, new ColumnProcessor());
|
||||||
|
if (num1 > 0) {
|
||||||
|
mesType = "0";
|
||||||
|
}
|
||||||
return mesType;
|
return mesType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
package nccloud.resources.ic.ic.materialin;
|
||||||
|
|
||||||
|
import nc.bs.businessevent.IBusinessEvent;
|
||||||
|
import nc.bs.businessevent.IBusinessListener;
|
||||||
|
import nc.bs.logging.Log;
|
||||||
|
import nc.vo.pub.BusinessException;
|
||||||
|
import nccloud.api.uapbd.wms.utils.WmsSyncUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Éú²úÍËÁϵ¥É¾³ýºóͬ²½WMS
|
||||||
|
*/
|
||||||
|
public class MaterialInAfterDeleteWmsPlugin implements IBusinessListener {
|
||||||
|
|
||||||
|
private static final Log log = Log.getInstance("wmslog");
|
||||||
|
private final WmsSyncUtils wmsSyncUtils = new WmsSyncUtils();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doAction(IBusinessEvent iBusinessEvent) throws BusinessException {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,61 @@
|
||||||
|
package nccloud.resources.ic.ic.materialin;
|
||||||
|
|
||||||
|
import nc.bs.businessevent.BdUpdateEvent;
|
||||||
|
import nc.bs.businessevent.BusinessEvent;
|
||||||
|
import nc.bs.businessevent.IBusinessEvent;
|
||||||
|
import nc.bs.businessevent.IBusinessListener;
|
||||||
|
import nc.bs.ic.general.businessevent.ICGeneralCommonEvent;
|
||||||
|
import nc.bs.logging.Log;
|
||||||
|
import nc.vo.ic.m4d.entity.MaterialOutVO;
|
||||||
|
import nc.vo.pub.BusinessException;
|
||||||
|
import nccloud.api.uapbd.wms.utils.WmsSyncUtils;
|
||||||
|
|
||||||
|
// 材料入库保存后同步到FLUX WMS
|
||||||
|
public class MaterialInAfterSaveWmsPlugin implements IBusinessListener {
|
||||||
|
|
||||||
|
private static final Log log = Log.getInstance("wmslog");
|
||||||
|
private final WmsSyncUtils wmsSyncUtils = new WmsSyncUtils();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doAction(IBusinessEvent iBusinessEvent) throws BusinessException {
|
||||||
|
try {
|
||||||
|
log.info("MaterialInAfterSaveWmsPlugin - 开始处理生产退料入库WMS同步");
|
||||||
|
// 获取单据数据
|
||||||
|
MaterialOutVO[] materialOutVOs = getMaterialOutVOs(iBusinessEvent);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("MaterialInAfterSaveWmsPlugin - 处理异常: " + e.getMessage(), e);
|
||||||
|
throw new BusinessException("材料入库单同步时报错,报错信息:" + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从业务事件中获取生产退料入库数据
|
||||||
|
*/
|
||||||
|
private MaterialOutVO[] getMaterialOutVOs(IBusinessEvent event) throws BusinessException {
|
||||||
|
Object object = null;
|
||||||
|
|
||||||
|
// 根据不同的事件类型获取单据数据
|
||||||
|
if (event instanceof BusinessEvent businessEvent) {
|
||||||
|
object = businessEvent.getObject();
|
||||||
|
} else if (event instanceof BdUpdateEvent updateEvent) {
|
||||||
|
object = updateEvent.getNewObject();
|
||||||
|
} else if (event instanceof ICGeneralCommonEvent commonEvent) {
|
||||||
|
object = commonEvent.getOldObjs();
|
||||||
|
} else {
|
||||||
|
log.warn("MaterialInAfterSaveWmsPlugin - 未支持的事件类型: " + event.getClass().getName());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (object == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 转换为MaterialOutVO数组
|
||||||
|
if (object.getClass().isArray()) {
|
||||||
|
return (MaterialOutVO[]) object;
|
||||||
|
} else {
|
||||||
|
return new MaterialOutVO[]{(MaterialOutVO) object};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
package nccloud.resources.ic.ic.materialout;
|
||||||
|
|
||||||
|
import nc.bs.businessevent.IBusinessEvent;
|
||||||
|
import nc.bs.businessevent.IBusinessListener;
|
||||||
|
import nc.bs.logging.Log;
|
||||||
|
import nc.vo.pub.BusinessException;
|
||||||
|
import nccloud.api.uapbd.wms.utils.WmsSyncUtils;
|
||||||
|
|
||||||
|
// ²ÄÁϳö¿â±£´æºóͬ²½µ½FLUX WMS
|
||||||
|
public class MaterialOutAfterSaveWmsPlugin implements IBusinessListener {
|
||||||
|
|
||||||
|
private static final Log log = Log.getInstance("wmslog");
|
||||||
|
private final WmsSyncUtils wmsSyncUtils = new WmsSyncUtils();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doAction(IBusinessEvent iBusinessEvent) throws BusinessException {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
package nccloud.wmssync.ml;
|
||||||
|
|
||||||
|
import nc.bs.businessevent.IBusinessEvent;
|
||||||
|
import nc.bs.businessevent.IBusinessListener;
|
||||||
|
import nc.vo.pub.BusinessException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 膠죕谿꼍말잇WMS
|
||||||
|
*/
|
||||||
|
public class WmsSyncMaterialListener implements IBusinessListener {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doAction(IBusinessEvent iBusinessEvent) throws BusinessException {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
Loading…
Reference in New Issue