采购入库保存接口-调用费用领料逻辑+wms代码同步
This commit is contained in:
		
							parent
							
								
									075a6948ff
								
							
						
					
					
						commit
						91da40edf2
					
				| 
						 | 
				
			
			@ -51,8 +51,6 @@ public class InsertBP implements IInsertBP<PurchaseInVO>,
 | 
			
		|||
        processor.addAfterRule(new InsertOrSignRewritePayPlanInvoiceRule(IPaymentUtil.STORE_RECEIPT_DATE));
 | 
			
		||||
        // 흙욋데괏닸쀼畇꽃뭔북谿마운셕뺍
 | 
			
		||||
        processor.addAfterRule(new M45SaveAndRewriteCTPayPlan());
 | 
			
		||||
        // žŤĂÜÖýÔě-ÁěÁĎ
 | 
			
		||||
        processor.addAfterRule(new ManualMaterialPickupRule());
 | 
			
		||||
 | 
			
		||||
        // processor.addAfterRule(new InsertRewritePORule());
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,21 +1,16 @@
 | 
			
		|||
package nccloud.api.impl.ic.m45;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
import nc.impl.pubapp.pattern.data.vo.VOQuery;
 | 
			
		||||
import nc.vo.ic.org.OrgInfoQuery;
 | 
			
		||||
import nc.vo.pu.m23.entity.ArriveHeaderVO;
 | 
			
		||||
import org.apache.commons.lang3.ArrayUtils;
 | 
			
		||||
import org.apache.commons.lang3.StringUtils;
 | 
			
		||||
 | 
			
		||||
import nc.bs.framework.common.InvocationInfoProxy;
 | 
			
		||||
import nc.bs.framework.common.NCLocator;
 | 
			
		||||
import nc.bs.framework.server.ISecurityTokenCallback;
 | 
			
		||||
import nc.bs.ic.m45.insert.rule.ManualMaterialPickupRule;
 | 
			
		||||
import nc.bs.scmpub.query.SCMBillQuery;
 | 
			
		||||
import nc.impl.pubapp.pattern.data.vo.VOQuery;
 | 
			
		||||
import nc.itf.ic.m45.self.IPurchaseInMaintain;
 | 
			
		||||
import nc.itf.scmpub.reference.uap.pf.PfServiceScmUtil;
 | 
			
		||||
import nc.pubimpl.ic.api.maintain.BillMaintainTool;
 | 
			
		||||
import nc.pubimpl.ic.api.maintain.BillManuInsertTool;
 | 
			
		||||
import nc.vo.bc.pub.util.SysParaInitQuery;
 | 
			
		||||
import nc.vo.ic.general.define.ICBillFlag;
 | 
			
		||||
import nc.vo.ic.general.define.ICBillHeadVO;
 | 
			
		||||
import nc.vo.ic.general.util.ICLocationUtil;
 | 
			
		||||
| 
						 | 
				
			
			@ -23,9 +18,13 @@ import nc.vo.ic.location.ICLocationVO;
 | 
			
		|||
import nc.vo.ic.m45.entity.PurchaseInBodyVO;
 | 
			
		||||
import nc.vo.ic.m45.entity.PurchaseInHeadVO;
 | 
			
		||||
import nc.vo.ic.m45.entity.PurchaseInVO;
 | 
			
		||||
import nc.vo.ic.org.OrgInfoQuery;
 | 
			
		||||
import nc.vo.ic.pub.define.ICPubMetaNameConst;
 | 
			
		||||
import nc.vo.pu.m23.entity.ArriveHeaderVO;
 | 
			
		||||
import nc.vo.pub.BusinessException;
 | 
			
		||||
import nc.vo.pub.VOStatus;
 | 
			
		||||
import nc.vo.pub.lang.UFBoolean;
 | 
			
		||||
import nc.vo.pubapp.pattern.data.ValueUtils;
 | 
			
		||||
import nc.vo.scmpub.check.billvalidate.BillVOsCheckRule;
 | 
			
		||||
import nc.vo.scmpub.res.billtype.ICBillType;
 | 
			
		||||
import nccloud.api.ic.m45.IAPIPurchaseInMaitain;
 | 
			
		||||
| 
						 | 
				
			
			@ -33,9 +32,14 @@ import nccloud.api.impl.ic.m45.check.CheckPurchaseInSaveValidator;
 | 
			
		|||
import nccloud.api.impl.ic.m45.fill.PurchaseInSaveFillValue;
 | 
			
		||||
import nccloud.api.impl.ic.m45.fill.PurchaseInUpdateFillValue;
 | 
			
		||||
import nccloud.api.impl.ic.pub.check.CheckProhibitUpdateFields;
 | 
			
		||||
import nccloud.api.uapbd.wms.utils.IWmsSyncUtils;
 | 
			
		||||
import nccloud.openapi.ic.util.ICAPILocationVOUtils;
 | 
			
		||||
import nccloud.openapi.scmpub.pub.TransferCodeToPKTool;
 | 
			
		||||
import nccloud.openapi.scmpub.pub.TransferMapToVOTool;
 | 
			
		||||
import org.apache.commons.lang3.ArrayUtils;
 | 
			
		||||
import org.apache.commons.lang3.StringUtils;
 | 
			
		||||
 | 
			
		||||
import java.util.*;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @version NCC1909
 | 
			
		||||
| 
						 | 
				
			
			@ -46,18 +50,18 @@ import nccloud.openapi.scmpub.pub.TransferMapToVOTool;
 | 
			
		|||
public class APIPurchaseInMaitainImpl implements IAPIPurchaseInMaitain {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public PurchaseInVO[] save(List<Map<String, Object>> paramList)
 | 
			
		||||
            throws BusinessException {
 | 
			
		||||
    public PurchaseInVO[] save(List<Map<String, Object>> paramList) throws BusinessException {
 | 
			
		||||
        // MapList转聚合VOList
 | 
			
		||||
        List<PurchaseInVO> aggVOList =
 | 
			
		||||
                TransferMapToVOTool.transferMapToAggVO(paramList, PurchaseInVO.class);
 | 
			
		||||
        List<PurchaseInVO> aggVOList = TransferMapToVOTool.transferMapToAggVO(paramList, PurchaseInVO.class);
 | 
			
		||||
        //检查是否满足wms组织条件
 | 
			
		||||
        UFBoolean isWmsOrg = checkWmsOrg(aggVOList);
 | 
			
		||||
        String creatorCode = aggVOList.get(0).getHead().getCreator();
 | 
			
		||||
        PurchaseInVO[] vos = aggVOList.toArray(new PurchaseInVO[aggVOList.size()]);
 | 
			
		||||
        // 设置货位序列号VO
 | 
			
		||||
        ICAPILocationVOUtils.setLocationVO(ICBillType.PurchaseIn.getCode(), vos);
 | 
			
		||||
        // 1、传入数据基本非空校验
 | 
			
		||||
        BillVOsCheckRule checker =
 | 
			
		||||
                new BillVOsCheckRule(new CheckPurchaseInSaveValidator());
 | 
			
		||||
        //2025年4月23日15点10分 采购入库单接口项目字段为波浪则清空 sdlizheng --start
 | 
			
		||||
        BillVOsCheckRule checker = new BillVOsCheckRule(new CheckPurchaseInSaveValidator());
 | 
			
		||||
        // 2025年4月23日15点10分 采购入库单接口项目字段为波浪则清空 sdlizheng --start
 | 
			
		||||
        for (PurchaseInVO vo : vos) {
 | 
			
		||||
            PurchaseInBodyVO[] bodys = vo.getBodys();
 | 
			
		||||
            if (bodys != null && bodys.length > 0) {
 | 
			
		||||
| 
						 | 
				
			
			@ -72,16 +76,27 @@ public class APIPurchaseInMaitainImpl implements IAPIPurchaseInMaitain {
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        //2025年4月23日15点10分 采购入库单接口项目字段为波浪则清空 sdlizheng --end
 | 
			
		||||
        //添加供应商和交易类型为空赋值
 | 
			
		||||
        // 2025年4月23日15点10分 采购入库单接口项目字段为波浪则清空 sdlizheng --end
 | 
			
		||||
        // 添加供应商和交易类型为空赋值
 | 
			
		||||
        fillHeadDataBeforeCheck(vos);
 | 
			
		||||
        checker.check(vos);
 | 
			
		||||
        // 2、编码翻译成pk
 | 
			
		||||
        aggVOList = TransferCodeToPKTool.transferAggVO(aggVOList);
 | 
			
		||||
        if (aggVOList == null || aggVOList.size() < 1) {
 | 
			
		||||
            throw new BusinessException("翻译采购入库对象失败,检查数据格式");
 | 
			
		||||
        }
 | 
			
		||||
        String creatorPK = aggVOList.get(0).getHead().getCreator();
 | 
			
		||||
        if (isWmsOrg.booleanValue()) {
 | 
			
		||||
            if (!nc.vo.cmp.util.StringUtils.isEmpty(creatorCode)) {
 | 
			
		||||
                InvocationInfoProxy.getInstance().setUserCode(creatorCode);
 | 
			
		||||
                InvocationInfoProxy.getInstance().setUserId(creatorPK);
 | 
			
		||||
                NCLocator.getInstance().lookup(ISecurityTokenCallback.class).token("NCSystem".getBytes(), "pfxx".getBytes());
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        // 翻译货位
 | 
			
		||||
        ICAPILocationVOUtils.translate(vos);
 | 
			
		||||
 | 
			
		||||
        //begin没取到财务组织导致的报错,在这里给财务组织赋值为库存组织
 | 
			
		||||
        // begin没取到财务组织导致的报错,在这里给财务组织赋值为库存组织
 | 
			
		||||
        for (PurchaseInVO vo : vos) {
 | 
			
		||||
            if (vo.getHead().getCfanaceorgoid() != null) {
 | 
			
		||||
                continue;
 | 
			
		||||
| 
						 | 
				
			
			@ -91,30 +106,60 @@ public class APIPurchaseInMaitainImpl implements IAPIPurchaseInMaitain {
 | 
			
		|||
            vo.getHead().setCfanaceorgoid(cfinanceoid);
 | 
			
		||||
            vo.getHead().setCfanaceorgvid(cfinancevid);
 | 
			
		||||
        }
 | 
			
		||||
        //end
 | 
			
		||||
        // end
 | 
			
		||||
 | 
			
		||||
        // 3、其他数据填充
 | 
			
		||||
        new PurchaseInSaveFillValue().setDefaultValue(vos);
 | 
			
		||||
 | 
			
		||||
        BillMaintainTool<PurchaseInVO> tool = new BillMaintainTool<PurchaseInVO>(
 | 
			
		||||
                PurchaseInVO.class, ICBillType.PurchaseIn.getCode());
 | 
			
		||||
        return tool.insert(vos);
 | 
			
		||||
        BillMaintainTool<PurchaseInVO> tool = new BillMaintainTool<PurchaseInVO>(PurchaseInVO.class,
 | 
			
		||||
                ICBillType.PurchaseIn.getCode());
 | 
			
		||||
        PurchaseInVO[] insert = tool.insert(vos);
 | 
			
		||||
        IWmsSyncUtils wmsSyncUtils = NCLocator.getInstance().lookup(IWmsSyncUtils.class);
 | 
			
		||||
        if (wmsSyncUtils.isWMS()) {
 | 
			
		||||
            return this.signOnWMS(insert);
 | 
			
		||||
        }
 | 
			
		||||
        ManualMaterialPickupRule rule = new ManualMaterialPickupRule();
 | 
			
		||||
        rule.process(insert);
 | 
			
		||||
        return insert;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private UFBoolean checkWmsOrg(List<PurchaseInVO> paramList) throws BusinessException {
 | 
			
		||||
        if (paramList == null || paramList.size() < 1) {
 | 
			
		||||
            throw new BusinessException("转换采购入库对象失败,检查报文结构及数据格式");
 | 
			
		||||
        }
 | 
			
		||||
        String targetCode = SysParaInitQuery.getParaString("GLOBLE00000000000000", "WMSORG");
 | 
			
		||||
        if (targetCode == null || StringUtils.isEmpty(targetCode)) {
 | 
			
		||||
            throw new BusinessException("未配置组织参数,请前往 [业务参数设置-全局] 配置WMSORG 参数");
 | 
			
		||||
        }
 | 
			
		||||
        String[] orgItem = targetCode.split(";");
 | 
			
		||||
        if (orgItem == null || orgItem.length < 1) {
 | 
			
		||||
            throw new BusinessException("WMSORG全局参数解析失败,请检查");
 | 
			
		||||
        }
 | 
			
		||||
        //使用Stream将orgItem转成list
 | 
			
		||||
        List<String> orgList = Arrays.asList(orgItem);
 | 
			
		||||
        String pkOrg = paramList.get(0).getHead().getPk_org();
 | 
			
		||||
        if (orgList.contains(pkOrg)) {
 | 
			
		||||
            return UFBoolean.TRUE;
 | 
			
		||||
        } else {
 | 
			
		||||
            return UFBoolean.FALSE;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillHeadDataBeforeCheck(PurchaseInVO[] vos) {
 | 
			
		||||
        for (PurchaseInVO vo : vos) {
 | 
			
		||||
            if (StringUtils.isEmpty(vo.getHead().getVtrantypecode())) {
 | 
			
		||||
                //设置默认交易类型
 | 
			
		||||
                // 设置默认交易类型
 | 
			
		||||
                vo.getHead().setVtrantypecode("45-01");
 | 
			
		||||
            }
 | 
			
		||||
            if (StringUtils.isEmpty(vo.getHead().getCvendorid())) {
 | 
			
		||||
                //根据上游获取数据
 | 
			
		||||
                // 根据上游获取数据
 | 
			
		||||
                PurchaseInBodyVO[] bodys = vo.getBodys();
 | 
			
		||||
                String csourcetype = bodys[0].getCsourcetype();
 | 
			
		||||
                String csourcebillhid = bodys[0].getCsourcebillhid();
 | 
			
		||||
                if ("23".equals(csourcetype) && StringUtils.isNotEmpty(csourcebillhid)) {
 | 
			
		||||
                    //上游到货单
 | 
			
		||||
                    ArriveHeaderVO[] srcHVOs = new VOQuery<>(ArriveHeaderVO.class).query(new String[]{csourcebillhid});
 | 
			
		||||
                    // 上游到货单
 | 
			
		||||
                    ArriveHeaderVO[] srcHVOs = new VOQuery<>(ArriveHeaderVO.class)
 | 
			
		||||
                            .query(new String[]{csourcebillhid});
 | 
			
		||||
                    if (ArrayUtils.isNotEmpty(srcHVOs)) {
 | 
			
		||||
                        vo.getHead().setCvendorid(srcHVOs[0].getPk_supplier());
 | 
			
		||||
                    }
 | 
			
		||||
| 
						 | 
				
			
			@ -124,11 +169,9 @@ public class APIPurchaseInMaitainImpl implements IAPIPurchaseInMaitain {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public PurchaseInVO[] update(List<Map<String, Object>> paramList)
 | 
			
		||||
            throws BusinessException {
 | 
			
		||||
    public PurchaseInVO[] update(List<Map<String, Object>> paramList) throws BusinessException {
 | 
			
		||||
        // MapList转聚合VOList
 | 
			
		||||
        List<PurchaseInVO> aggVOList =
 | 
			
		||||
                TransferMapToVOTool.transferMapToAggVO(paramList, PurchaseInVO.class);
 | 
			
		||||
        List<PurchaseInVO> aggVOList = TransferMapToVOTool.transferMapToAggVO(paramList, PurchaseInVO.class);
 | 
			
		||||
        PurchaseInVO[] vos = aggVOList.toArray(new PurchaseInVO[aggVOList.size()]);
 | 
			
		||||
        // 2、编码翻译成pk
 | 
			
		||||
        aggVOList = TransferCodeToPKTool.transferAggVO(aggVOList);
 | 
			
		||||
| 
						 | 
				
			
			@ -136,53 +179,41 @@ public class APIPurchaseInMaitainImpl implements IAPIPurchaseInMaitain {
 | 
			
		|||
        PurchaseInHeadVO newVO = vos[0].getHead();
 | 
			
		||||
        String cgeneralhid = newVO.getCgeneralhid();
 | 
			
		||||
        if (StringUtils.isEmpty(cgeneralhid)) {
 | 
			
		||||
            throw new BusinessException(
 | 
			
		||||
                    nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0",
 | 
			
		||||
                            "04008027-0380")/* @res "修改采购入库单请指定表头主键cgeneralhid值。" */);
 | 
			
		||||
            throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0",
 | 
			
		||||
                    "04008027-0380")/* @res "修改采购入库单请指定表头主键cgeneralhid值。" */);
 | 
			
		||||
        }
 | 
			
		||||
        SCMBillQuery<PurchaseInVO> queryTool =
 | 
			
		||||
                new SCMBillQuery<PurchaseInVO>(PurchaseInVO.class);
 | 
			
		||||
        PurchaseInVO[] purInVOs = queryTool.queryVOByIDs(new String[]{
 | 
			
		||||
                cgeneralhid
 | 
			
		||||
        });
 | 
			
		||||
        Map<String, ICLocationVO[]> deleteLoc =
 | 
			
		||||
                new HashMap<String, ICLocationVO[]>();
 | 
			
		||||
        SCMBillQuery<PurchaseInVO> queryTool = new SCMBillQuery<PurchaseInVO>(PurchaseInVO.class);
 | 
			
		||||
        PurchaseInVO[] purInVOs = queryTool.queryVOByIDs(new String[]{cgeneralhid});
 | 
			
		||||
        Map<String, ICLocationVO[]> deleteLoc = new HashMap<String, ICLocationVO[]>();
 | 
			
		||||
        // 加载原始单据和货位信息
 | 
			
		||||
        PurchaseInVO[] originBills = queryTool.queryVOByIDs(new String[]{
 | 
			
		||||
                cgeneralhid
 | 
			
		||||
        });
 | 
			
		||||
        PurchaseInVO[] originBills = queryTool.queryVOByIDs(new String[]{cgeneralhid});
 | 
			
		||||
        ICLocationUtil.loadLocationVOs(originBills);
 | 
			
		||||
        if (ArrayUtils.isEmpty(purInVOs)) {
 | 
			
		||||
            throw new BusinessException(
 | 
			
		||||
                    nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0",
 | 
			
		||||
                            "04008027-0381")/* @res "没找到要修改的入库单信息,请检查数据的表头主键cgeneralhid。" */);
 | 
			
		||||
            throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0",
 | 
			
		||||
                    "04008027-0381")/* @res "没找到要修改的入库单信息,请检查数据的表头主键cgeneralhid。" */);
 | 
			
		||||
        } else {
 | 
			
		||||
            List<String> headProFields =
 | 
			
		||||
                    CheckProhibitUpdateFields.getHeadProhibitFields("45");
 | 
			
		||||
            List<String> bodyProFields =
 | 
			
		||||
                    CheckProhibitUpdateFields.getBodyProhibitFields("45");
 | 
			
		||||
            List<String> headProFields = CheckProhibitUpdateFields.getHeadProhibitFields("45");
 | 
			
		||||
            List<String> bodyProFields = CheckProhibitUpdateFields.getBodyProhibitFields("45");
 | 
			
		||||
            PurchaseInHeadVO origVO = purInVOs[0].getHead();
 | 
			
		||||
            if (origVO.getFbillflag() == null
 | 
			
		||||
                    || 0 != ((Integer) ICBillFlag.FREE.value())
 | 
			
		||||
                    .compareTo((Integer) origVO.getFbillflag())) {
 | 
			
		||||
                    || 0 != ((Integer) ICBillFlag.FREE.value()).compareTo((Integer) origVO.getFbillflag())) {
 | 
			
		||||
                throw new BusinessException(
 | 
			
		||||
                        nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0",
 | 
			
		||||
                                "04008027-0329")/* @res "当前入库单编号:" */ + origVO.getVbillcode()
 | 
			
		||||
                                + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID(
 | 
			
		||||
                                "4008027_0", "04008027-0362")/* @res "不是自由状态,不能修改" */);
 | 
			
		||||
                        nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0329")
 | 
			
		||||
                                /* @res "当前入库单编号:" */ + origVO.getVbillcode()
 | 
			
		||||
                                + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0",
 | 
			
		||||
                                "04008027-0362")/* @res "不是自由状态,不能修改" */);
 | 
			
		||||
            }
 | 
			
		||||
            origVO.setStatus(VOStatus.UPDATED);
 | 
			
		||||
            for (String attr : newVO.getAttributeNames()) {
 | 
			
		||||
                if (newVO.getAttributeValue(attr) == null) {
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                if (headProFields.contains(attr) && !newVO.getAttributeValue(attr)
 | 
			
		||||
                        .equals(origVO.getAttributeValue(attr))) {
 | 
			
		||||
                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 "不允许修改。" */);
 | 
			
		||||
                            nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0363")
 | 
			
		||||
                                    /* @res "表头字段:" */ + attr + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes()
 | 
			
		||||
                                    .getStrByID("4008027_0", "04008027-0364")/* @res "不允许修改。" */);
 | 
			
		||||
                }
 | 
			
		||||
                origVO.setAttributeValue(attr, newVO.getAttributeValue(attr));
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -196,8 +227,7 @@ public class APIPurchaseInMaitainImpl implements IAPIPurchaseInMaitain {
 | 
			
		|||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (vos[0].getBodys() != null) {
 | 
			
		||||
                Map<String, PurchaseInBodyVO> pkbs =
 | 
			
		||||
                        new HashMap<String, PurchaseInBodyVO>();
 | 
			
		||||
                Map<String, PurchaseInBodyVO> pkbs = new HashMap<String, PurchaseInBodyVO>();
 | 
			
		||||
                for (PurchaseInBodyVO origBvo : purInVOs[0].getBodys()) {
 | 
			
		||||
                    origBvo.setStatus(VOStatus.UPDATED);
 | 
			
		||||
                    pkbs.put(origBvo.getCgeneralbid(), origBvo);
 | 
			
		||||
| 
						 | 
				
			
			@ -205,10 +235,9 @@ public class APIPurchaseInMaitainImpl implements IAPIPurchaseInMaitain {
 | 
			
		|||
                for (PurchaseInBodyVO newBvo : vos[0].getBodys()) {
 | 
			
		||||
                    PurchaseInBodyVO roigBvo = pkbs.get(newBvo.getCgeneralbid());
 | 
			
		||||
                    if (newBvo.getCgeneralbid() == null || roigBvo == null) {
 | 
			
		||||
                        throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl
 | 
			
		||||
                                .getNCLangRes().getStrByID("4008027_0", "04008027-0382")/*
 | 
			
		||||
                         * @res
 | 
			
		||||
                         * "没有匹配到原始入库单表体信息,请检查数据的表体主键cgeneralbid。"
 | 
			
		||||
                        throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0",
 | 
			
		||||
                                "04008027-0382")/*
 | 
			
		||||
                         * @res "没有匹配到原始入库单表体信息,请检查数据的表体主键cgeneralbid。"
 | 
			
		||||
                         */);
 | 
			
		||||
                    }
 | 
			
		||||
                    for (String battr : newBvo.getAttributeNames()) {
 | 
			
		||||
| 
						 | 
				
			
			@ -216,18 +245,16 @@ public class APIPurchaseInMaitainImpl implements IAPIPurchaseInMaitain {
 | 
			
		|||
                            continue;
 | 
			
		||||
                        }
 | 
			
		||||
                        if (bodyProFields.contains(battr)
 | 
			
		||||
                                && !newBvo.getAttributeValue(battr)
 | 
			
		||||
                                .equals(roigBvo.getAttributeValue(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 "不允许修改。" */);
 | 
			
		||||
                                    nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0366")
 | 
			
		||||
                                            /* @res "表体字段:" */ + battr + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes()
 | 
			
		||||
                                            .getStrByID("4008027_0", "04008027-0364")/* @res "不允许修改。" */);
 | 
			
		||||
                        }
 | 
			
		||||
                        roigBvo.setAttributeValue(battr, newBvo.getAttributeValue(battr));
 | 
			
		||||
                        bfields.add(battr);
 | 
			
		||||
                    }
 | 
			
		||||
                    //设置货位序列号孙表,把原来的孙表删除,修改的货位置为新增
 | 
			
		||||
                    // 设置货位序列号孙表,把原来的孙表删除,修改的货位置为新增
 | 
			
		||||
                    if (null != newBvo.getLocationVOs()) {
 | 
			
		||||
                        List<ICLocationVO> allloc = new ArrayList<ICLocationVO>();
 | 
			
		||||
                        if (null != deleteLoc && null != deleteLoc.get(roigBvo.getCgeneralbid())) {
 | 
			
		||||
| 
						 | 
				
			
			@ -250,18 +277,27 @@ public class APIPurchaseInMaitainImpl implements IAPIPurchaseInMaitain {
 | 
			
		|||
        ICAPILocationVOUtils.translate(purInVOs);
 | 
			
		||||
        // 其他数据填充
 | 
			
		||||
        new PurchaseInUpdateFillValue().setDefaultValue(purInVOs);
 | 
			
		||||
        BillMaintainTool<PurchaseInVO> tool = new BillMaintainTool<PurchaseInVO>(
 | 
			
		||||
                PurchaseInVO.class, ICBillType.PurchaseIn.getCode());
 | 
			
		||||
        tool.doBeforeInsert(purInVOs);
 | 
			
		||||
        return nc.bs.framework.common.NCLocator.getInstance()
 | 
			
		||||
                .lookup(nc.itf.ic.m45.self.IPurchaseInMaintain.class)
 | 
			
		||||
        // 如果是退回则直接调用新增自制补值
 | 
			
		||||
        if (ValueUtils.getBoolean(purInVOs[0].getHead().getFreplenishflag())) {
 | 
			
		||||
            BillManuInsertTool<PurchaseInVO> tool = new BillManuInsertTool<PurchaseInVO>();
 | 
			
		||||
            tool.doBeforeInsert(purInVOs, ICBillType.PurchaseIn.getCode());
 | 
			
		||||
        } else {
 | 
			
		||||
            BillMaintainTool<PurchaseInVO> tool = new BillMaintainTool<PurchaseInVO>(PurchaseInVO.class,
 | 
			
		||||
                    ICBillType.PurchaseIn.getCode());
 | 
			
		||||
            tool.doBeforeInsert(purInVOs);
 | 
			
		||||
        }
 | 
			
		||||
        PurchaseInVO[] updateVO = NCLocator.getInstance().lookup(IPurchaseInMaintain.class)
 | 
			
		||||
                .update(purInVOs, originBills);
 | 
			
		||||
        IWmsSyncUtils wmsSyncUtils = NCLocator.getInstance().lookup(IWmsSyncUtils.class);
 | 
			
		||||
        if (wmsSyncUtils.isWMS()) {
 | 
			
		||||
            return this.signOnWMS(updateVO);
 | 
			
		||||
        }
 | 
			
		||||
        return updateVO;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void delete(PurchaseInVO[] vos) throws BusinessException {
 | 
			
		||||
        nc.bs.framework.common.NCLocator.getInstance()
 | 
			
		||||
                .lookup(nc.itf.ic.m45.self.IPurchaseInMaintain.class).delete(vos);
 | 
			
		||||
        nc.bs.framework.common.NCLocator.getInstance().lookup(nc.itf.ic.m45.self.IPurchaseInMaintain.class).delete(vos);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -273,30 +309,27 @@ public class APIPurchaseInMaitainImpl implements IAPIPurchaseInMaitain {
 | 
			
		|||
        for (PurchaseInVO aggvo : vos) {
 | 
			
		||||
            ICBillHeadVO parentVO = aggvo.getParentVO();
 | 
			
		||||
            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-0329")
 | 
			
		||||
                        /* @res "当前入库单编号:" */ + parentVO.getVbillcode()
 | 
			
		||||
                        + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID(
 | 
			
		||||
                        "4008027_0", "04008027-0330")/* @res "不是自由状态,不能签字" */);
 | 
			
		||||
                    || 0 != ((Integer) ICBillFlag.FREE.value()).compareTo((Integer) parentVO.getFbillflag())) {
 | 
			
		||||
                throw new BusinessException(
 | 
			
		||||
                        nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0329")
 | 
			
		||||
                                /* @res "当前入库单编号:" */ + parentVO.getVbillcode()
 | 
			
		||||
                                + nc.vo.ml.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-0329")
 | 
			
		||||
                            /* @res "当前入库单编号:" */ + parentVO.getVbillcode()
 | 
			
		||||
                            + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID(
 | 
			
		||||
                            "4008027_0", "04008027-0331")/* @res "主数量为空,不能签字" */);
 | 
			
		||||
                if (aggvo.getChildrenVO()[0].getAttributeValue(ICPubMetaNameConst.NNUM) == null) {
 | 
			
		||||
                    throw new BusinessException(
 | 
			
		||||
                            nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0329")
 | 
			
		||||
                                    /* @res "当前入库单编号:" */ + parentVO.getVbillcode()
 | 
			
		||||
                                    + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0",
 | 
			
		||||
                                    "04008027-0331")/* @res "主数量为空,不能签字" */);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        // 加载货位单品明细
 | 
			
		||||
        ICLocationUtil.loadLocationVOs(vos);
 | 
			
		||||
 | 
			
		||||
        return (PurchaseInVO[]) PfServiceScmUtil.processBatch("SIGN", "45", vos,
 | 
			
		||||
                null, null);
 | 
			
		||||
        return (PurchaseInVO[]) PfServiceScmUtil.processBatch("SIGN", "45", vos, null, null);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
| 
						 | 
				
			
			@ -307,17 +340,21 @@ public class APIPurchaseInMaitainImpl implements IAPIPurchaseInMaitain {
 | 
			
		|||
        for (PurchaseInVO aggvo : vos) {
 | 
			
		||||
            ICBillHeadVO parentVO = aggvo.getParentVO();
 | 
			
		||||
            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-0329")
 | 
			
		||||
                        /* @res "当前入库单编号:" */ + parentVO.getVbillcode()
 | 
			
		||||
                        + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID(
 | 
			
		||||
                        "4008027_0", "04008027-0332")/* @res "不是签字状态,不能取消签字" */);
 | 
			
		||||
                    || 0 != ((Integer) ICBillFlag.SIGN.value()).compareTo((Integer) parentVO.getFbillflag())) {
 | 
			
		||||
                throw new BusinessException(
 | 
			
		||||
                        nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0", "04008027-0329")
 | 
			
		||||
                                /* @res "当前入库单编号:" */ + parentVO.getVbillcode()
 | 
			
		||||
                                + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0",
 | 
			
		||||
                                "04008027-0332")/* @res "不是签字状态,不能取消签字" */);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return (PurchaseInVO[]) PfServiceScmUtil.processBatch("CANCELSIGN", "45",
 | 
			
		||||
                vos, null, null);
 | 
			
		||||
        return (PurchaseInVO[]) PfServiceScmUtil.processBatch("CANCELSIGN", "45", vos, null, null);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private PurchaseInVO[] signOnWMS(PurchaseInVO[] updateVO) throws BusinessException {
 | 
			
		||||
        List<PurchaseInVO> purchaseInVOList = new ArrayList<>();
 | 
			
		||||
        Arrays.stream(updateVO).filter(vo -> vo.getHead().getFbillflag() == 2).forEach(purchaseInVOList::add);
 | 
			
		||||
        return NCLocator.getInstance().lookup(IAPIPurchaseInMaitain.class).sign(purchaseInVOList.toArray(new PurchaseInVO[]{}));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue