精密铸造-根据采购入库进行无备料领料-V1
This commit is contained in:
parent
c6f9c1a729
commit
9bee99b80b
|
|
@ -58,6 +58,8 @@ public class InsertBP implements IInsertBP<PurchaseInVO>,
|
||||||
processor.addAfterRule(new InsertOrSignRewritePayPlanInvoiceRule(IPaymentUtil.STORE_RECEIPT_DATE));
|
processor.addAfterRule(new InsertOrSignRewritePayPlanInvoiceRule(IPaymentUtil.STORE_RECEIPT_DATE));
|
||||||
// 흙욋데괏닸쀼畇꽃뭔북谿마운셕뺍
|
// 흙욋데괏닸쀼畇꽃뭔북谿마운셕뺍
|
||||||
processor.addAfterRule(new M45SaveAndRewriteCTPayPlan());
|
processor.addAfterRule(new M45SaveAndRewriteCTPayPlan());
|
||||||
|
// 精密铸造-无备料领料
|
||||||
|
processor.addAfterRule(new NoItemsDeliverMaterialRule());
|
||||||
|
|
||||||
// processor.addAfterRule(new InsertRewritePORule());
|
// processor.addAfterRule(new InsertRewritePORule());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,252 @@
|
||||||
|
package nc.bs.ic.m45.insert.rule;
|
||||||
|
|
||||||
|
import nc.bs.dao.BaseDAO;
|
||||||
|
import nc.bs.dao.DAOException;
|
||||||
|
import nc.bs.framework.common.NCLocator;
|
||||||
|
import nc.bs.logging.Log;
|
||||||
|
import nc.bs.trade.business.HYPubBO;
|
||||||
|
import nc.bs.uapbd.util.MyHelper;
|
||||||
|
import nc.impl.pubapp.pattern.rule.IRule;
|
||||||
|
import nc.itf.mmpac.pickm.IPickmBusinessService;
|
||||||
|
import nc.itf.mmpac.pmo.pac0002.IPMOQueryService;
|
||||||
|
import nc.itf.mmpac.pmo.pac0002.IPMOTransTypeQueryService;
|
||||||
|
import nc.itf.uap.IUAPQueryBS;
|
||||||
|
import nc.jdbc.framework.processor.ColumnProcessor;
|
||||||
|
import nc.jdbc.framework.processor.MapProcessor;
|
||||||
|
import nc.pubitf.mmpac.pickm.mo.IPickmQueryServiceForMO;
|
||||||
|
import nc.util.mmf.framework.base.MMArrayUtil;
|
||||||
|
import nc.util.mmf.framework.base.MMValueCheck;
|
||||||
|
import nc.vo.bd.material.MaterialVO;
|
||||||
|
import nc.vo.bd.stordoc.StordocVO;
|
||||||
|
import nc.vo.ic.m45.entity.PurchaseInBodyVO;
|
||||||
|
import nc.vo.ic.m45.entity.PurchaseInHeadVO;
|
||||||
|
import nc.vo.ic.m45.entity.PurchaseInVO;
|
||||||
|
import nc.vo.ml.NCLangRes4VoTransl;
|
||||||
|
import nc.vo.mmpac.pickm.entity.AggPickmVO;
|
||||||
|
import nc.vo.mmpac.pickm.entity.PickmHeadVO;
|
||||||
|
import nc.vo.mmpac.pickm.entity.PickmItemVO;
|
||||||
|
import nc.vo.mmpac.pickm.enumeration.FbillstatusEnum;
|
||||||
|
import nc.vo.mmpac.pickm.param.PickmTransParam;
|
||||||
|
import nc.vo.mmpac.pmo.pac0002.constant.PMOConstLang;
|
||||||
|
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.mmpac.pmo.pac0002.enumeration.PMOFBillstatusEnum;
|
||||||
|
import nc.vo.mmpac.pmo.pac0002.enumeration.PMOFItemStatusEnum;
|
||||||
|
import nc.vo.org.OrgVO;
|
||||||
|
import nc.vo.pmpub.common.utils.ArrayUtils;
|
||||||
|
import nc.vo.pub.BusinessException;
|
||||||
|
import nc.vo.pub.VOStatus;
|
||||||
|
import nc.vo.pub.lang.UFBoolean;
|
||||||
|
import nc.vo.pub.lang.UFDate;
|
||||||
|
import nc.vo.pub.lang.UFDouble;
|
||||||
|
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
|
||||||
|
import nc.vo.pubapp.pattern.pub.SqlBuilder;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 精密铸造-根据采购入库进行无备料领料
|
||||||
|
*
|
||||||
|
* @author mzr
|
||||||
|
* @date 2025/10/14
|
||||||
|
*/
|
||||||
|
public class NoItemsDeliverMaterialRule implements IRule<PurchaseInVO> {
|
||||||
|
private static final String LOG_INFO_NAME = "qyMesLog";
|
||||||
|
private static final Log logger = Log.getInstance(LOG_INFO_NAME);
|
||||||
|
public BaseDAO dao;
|
||||||
|
|
||||||
|
public BaseDAO getDao() {
|
||||||
|
if (dao == null) {
|
||||||
|
dao = new BaseDAO();
|
||||||
|
}
|
||||||
|
return dao;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void process(PurchaseInVO[] vos) {
|
||||||
|
if (ArrayUtils.isEmpty(vos)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
noItemsDeliverMaterial(vos);
|
||||||
|
} catch (BusinessException e) {
|
||||||
|
logger.error("NoItemsDeliverMaterialRule-exp:" + e.getMessage(), e);
|
||||||
|
ExceptionUtils.wrappException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void noItemsDeliverMaterial(PurchaseInVO[] inVOS) throws BusinessException {
|
||||||
|
String OrgCondition = "code = 'C038' and enablestate = '2' and isbusinessunit='Y'";
|
||||||
|
HYPubBO hyPub = new HYPubBO();
|
||||||
|
String orgId = hyPub.findColValue(OrgVO.getDefaultTableName(), OrgVO.PK_ORG, OrgCondition) + "";
|
||||||
|
// 精密铸造,生成采购入库成功后再进行无备料领料
|
||||||
|
for (PurchaseInVO inVO : inVOS) {
|
||||||
|
PurchaseInHeadVO head = inVO.getHead();
|
||||||
|
PurchaseInBodyVO[] bodys = inVO.getBodys();
|
||||||
|
String pkOrg = head.getPk_org();
|
||||||
|
// 判断是否是精密铸造(C038)
|
||||||
|
if (!"null".equals(orgId) && orgId.equals(pkOrg)) {
|
||||||
|
Map<String, String> configParams = MyHelper.getConfigParams("jm-config", null);
|
||||||
|
if (configParams.isEmpty()) {
|
||||||
|
ExceptionUtils.wrappBusinessException("自定义档案中的jm-config参数未配置");
|
||||||
|
}
|
||||||
|
for (PurchaseInBodyVO body : bodys) {
|
||||||
|
String cmaterialvid = body.getCmaterialvid();
|
||||||
|
String condition = "pk_material = '" + cmaterialvid + "'";
|
||||||
|
String materialCode = hyPub.findColValue(MaterialVO.getDefaultTableName(), MaterialVO.CODE, condition) + "";
|
||||||
|
// 根据该费用物料无备料领料
|
||||||
|
String configMaterialCode = configParams.get("noItemCode");
|
||||||
|
if (configMaterialCode == null || configMaterialCode.isEmpty()) {
|
||||||
|
ExceptionUtils.wrappBusinessException("自定义档案中的物料参数未配置");
|
||||||
|
}
|
||||||
|
if (configMaterialCode.equals(materialCode)) {
|
||||||
|
// 批次号=流程生产订单明细id
|
||||||
|
String vbatchcode = body.getVbatchcode();
|
||||||
|
if (vbatchcode == null || vbatchcode.isEmpty()) {
|
||||||
|
ExceptionUtils.wrappBusinessException("未存储流程生产明细id,无法进行无备料领料");
|
||||||
|
}
|
||||||
|
// 流程生产订单明细id
|
||||||
|
String mobid = vbatchcode;
|
||||||
|
// ====领料前校验流程生产订单-start====
|
||||||
|
IPMOQueryService pmoQuery = NCLocator.getInstance().lookup(IPMOQueryService.class);
|
||||||
|
PMOAggVO[] pmoAggVOS = pmoQuery.queryPMOAggVOByBid(new String[]{mobid});
|
||||||
|
if (MMValueCheck.isEmpty(pmoAggVOS)) {
|
||||||
|
ExceptionUtils.wrappBusinessException("查询不到对应的流程生产订单,无法进行无备料领料");
|
||||||
|
}
|
||||||
|
PMOAggVO aggvo = pmoAggVOS[0];
|
||||||
|
List<String> cmoidList = new ArrayList<>();
|
||||||
|
PMOHeadVO headvo = aggvo.getParentVO();
|
||||||
|
if (PMOFBillstatusEnum.AUDIT.equalsValue(headvo.getFbillstatus())) {
|
||||||
|
Map<String, UFBoolean> trantypeMap = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
trantypeMap = NCLocator.getInstance().lookup(IPMOTransTypeQueryService.class).getBunplannpickingByTranTypeIDs(new String[]{headvo.getCtrantypeid()});
|
||||||
|
} catch (BusinessException e) {
|
||||||
|
ExceptionUtils.wrappException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (trantypeMap == null || UFBoolean.FALSE.equals(trantypeMap.get(headvo.getCtrantypeid()))) {
|
||||||
|
ExceptionUtils.wrappBusinessException(PMOConstLang.getUnPickmDeliverTransTypeInfo());
|
||||||
|
}
|
||||||
|
|
||||||
|
PMOItemVO[] items = aggvo.getChildrenVO();
|
||||||
|
if (!MMArrayUtil.isEmpty(items)) {
|
||||||
|
if (items.length > 1) {
|
||||||
|
ExceptionUtils.wrappBusinessException(PMOConstLang.getSingleRowSelectedInfo());
|
||||||
|
}
|
||||||
|
|
||||||
|
for (PMOItemVO item : items) {
|
||||||
|
if (!PMOFItemStatusEnum.PLAN.equalsValue(item.getFitemstatus())) {
|
||||||
|
cmoidList.add(item.getCmoid());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (cmoidList.isEmpty()) {
|
||||||
|
ExceptionUtils.wrappBusinessException(PMOConstLang.getMSG_RULE_NO_ROWDATA());
|
||||||
|
}
|
||||||
|
// ====领料前校验流程生产订单-end====
|
||||||
|
|
||||||
|
// ====领料前校验流程备料计划-start====
|
||||||
|
// 根据流程生产订单明细id查询备料计划
|
||||||
|
PickmTransParam param = new PickmTransParam();
|
||||||
|
param.setSourceBillRowID(mobid);
|
||||||
|
IPickmQueryServiceForMO pickmQueryServiceForMO = NCLocator.getInstance().lookup(IPickmQueryServiceForMO.class);
|
||||||
|
AggPickmVO[] vos = pickmQueryServiceForMO.queryPickmByMO(new PickmTransParam[]{param});
|
||||||
|
if (MMValueCheck.isEmpty(vos)) {
|
||||||
|
ExceptionUtils.wrappBusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("5008100_0", "05008100-0014"));
|
||||||
|
}
|
||||||
|
if (vos.length > 1) {
|
||||||
|
ExceptionUtils.wrappBusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("5008100_0", "05008100-0015"));
|
||||||
|
}
|
||||||
|
if (FbillstatusEnum.PLAN_STATE.equalsValue(vos[0].getParentVO().getFbillstatus())) {
|
||||||
|
// 只有审核态或完成态的备料计划才能进行无备料领料!
|
||||||
|
ExceptionUtils.wrappBusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("5008100_0", "05008100-0016"));
|
||||||
|
}
|
||||||
|
// ====领料前校验流程备料计划-end====
|
||||||
|
AggPickmVO pickmVO = vos[0];
|
||||||
|
PickmHeadVO pickmHeadVO = pickmVO.getParentVO();
|
||||||
|
String cpickmid = pickmHeadVO.getCpickmid();
|
||||||
|
List<PickmItemVO> itemVOS = new ArrayList<>();
|
||||||
|
String warehouseId = getWarehouseInfo(pkOrg, configParams);
|
||||||
|
if (MMValueCheck.isEmpty(warehouseId) || "~".equals(warehouseId)) {
|
||||||
|
ExceptionUtils.wrappBusinessException("请检查仓库编码是否配置正确");
|
||||||
|
}
|
||||||
|
Map<String, Object> materialMap = getMaterialInfo(cmaterialvid);
|
||||||
|
String pkMeasdoc = "";
|
||||||
|
if (materialMap != null) {
|
||||||
|
pkMeasdoc = materialMap.get("pk_measdoc") + "";
|
||||||
|
}
|
||||||
|
PickmItemVO itemVO = new PickmItemVO();
|
||||||
|
itemVO.setCpickmid(cpickmid);
|
||||||
|
itemVO.setPk_group("00");
|
||||||
|
itemVO.setPk_org(pkOrg);
|
||||||
|
itemVO.setPk_org_v(pkOrg);
|
||||||
|
itemVO.setCdeliverorgvid(pkOrg);// 发料组织
|
||||||
|
itemVO.setCdeliverorgid(pkOrg);// 发料组织
|
||||||
|
itemVO.setVrowno("10");// 行号
|
||||||
|
itemVO.setCbmaterialid(cmaterialvid);
|
||||||
|
itemVO.setCbmaterialvid(cmaterialvid);
|
||||||
|
itemVO.setCbastunitid(pkMeasdoc);
|
||||||
|
itemVO.setCbunitid(pkMeasdoc);
|
||||||
|
itemVO.setVbchangerate("1/1");
|
||||||
|
itemVO.setCoutstockid(warehouseId);// 发料仓库
|
||||||
|
// 需用日期
|
||||||
|
itemVO.setDrequiredate(new UFDate());
|
||||||
|
// 获取采购入库表体的应收主数量 nshouldnum
|
||||||
|
UFDouble nshouldnum = body.getNshouldnum();
|
||||||
|
itemVO.setNplanoutastnum(nshouldnum);// 计划出库数量
|
||||||
|
itemVO.setNplanoutnum(nshouldnum);// 计划出库主数量
|
||||||
|
itemVO.setNunitastnum(nshouldnum);// 单位定额
|
||||||
|
itemVO.setNunitnum(nshouldnum);// 主单位定额
|
||||||
|
itemVO.setNunituseastnum(nshouldnum);// 单位用量
|
||||||
|
itemVO.setNunitusenum(nshouldnum);// 单位主用量
|
||||||
|
itemVO.setAttributeValue("nquotastnum", nshouldnum);// 定额用量
|
||||||
|
itemVO.setAttributeValue("nquotnum", nshouldnum);// 主定额用量
|
||||||
|
itemVO.setFsupplytype(1);// 供应方式 一般发料=0,定量发料=1
|
||||||
|
itemVO.setStatus(VOStatus.NEW);
|
||||||
|
itemVOS.add(itemVO);
|
||||||
|
// 调用无备料领料的标准业务方法
|
||||||
|
IPickmBusinessService service = NCLocator.getInstance().lookup(IPickmBusinessService.class);
|
||||||
|
service.noItemsDeliverMaterial(itemVOS.toArray(new PickmItemVO[0]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getWarehouseInfo(String pk_org, Map<String, String> configParams) throws DAOException {
|
||||||
|
String warehouseCode = configParams.get("warehouseCode");
|
||||||
|
SqlBuilder sqlBuilder = new SqlBuilder();
|
||||||
|
sqlBuilder.append(" select " + StordocVO.PK_STORDOC);
|
||||||
|
sqlBuilder.append(" from " + StordocVO.getDefaultTableName());
|
||||||
|
sqlBuilder.append(" where dr = 0");
|
||||||
|
sqlBuilder.append(" and ");
|
||||||
|
sqlBuilder.append(StordocVO.CODE, warehouseCode);
|
||||||
|
sqlBuilder.append(" and ");
|
||||||
|
sqlBuilder.append(StordocVO.PK_ORG, pk_org);
|
||||||
|
String warehouseId = (String) getDao().executeQuery(sqlBuilder.toString(), new ColumnProcessor());
|
||||||
|
return warehouseId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取物料的信息
|
||||||
|
*
|
||||||
|
* @param cbmaterialvid
|
||||||
|
* @return
|
||||||
|
* @throws BusinessException
|
||||||
|
*/
|
||||||
|
private Map<String, Object> getMaterialInfo(String cbmaterialvid) throws BusinessException {
|
||||||
|
if (cbmaterialvid == null || cbmaterialvid.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
IUAPQueryBS queryBS = NCLocator.getInstance().lookup(IUAPQueryBS.class);
|
||||||
|
String sql = " select pk_material,pk_measdoc" +
|
||||||
|
" from bd_material" +
|
||||||
|
" where pk_material = '" + cbmaterialvid + "' ";
|
||||||
|
return (Map<String, Object>) queryBS.executeQuery(sql, new MapProcessor());
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue