解决跟进采购订单生成到货单校验问题-张鑫0408

This commit is contained in:
zhangxinah@yonyou.com 2025-04-08 18:52:49 +08:00
parent 5e9839b804
commit 5030af533f
2 changed files with 1545 additions and 0 deletions

View File

@ -0,0 +1,158 @@
package nccloud.api.impl.pu.m23;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import nc.bs.framework.common.NCLocator;
import nc.bs.pf.pub.PfDataCache;
import nc.itf.scmpub.reference.uap.pf.PfServiceScmUtil;
import nc.itf.uap.pf.IPfExchangeService;
import nc.pubimpl.pu.m23.api.ProduceDateSetForArrival;
import nc.ui.pub.print.version55.util.DeepClone;
import nc.vo.pu.m21.entity.OrderItemVO;
import nc.vo.pu.m21.entity.OrderVO;
import nc.vo.pu.m23.entity.ArriveHeaderVO;
import nc.vo.pu.m23.entity.ArriveItemVO;
import nc.vo.pu.m23.entity.ArriveVO;
import nc.vo.pu.m23.rule.api.check.PUArriveVONullValidate;
import nc.vo.pub.BusinessException;
import nc.vo.pub.billtype.BilltypeVO;
import nc.vo.pubapp.AppContext;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import nc.vo.pubapp.pattern.pub.MathTool;
import nc.vo.scmpub.check.billvalidate.BillVOsCheckRule;
import nccloud.api.impl.pu.m23.fill.ArriveSaveFromOrder;
import nccloud.api.impl.pu.m23.util.queryFromOrder;
import nccloud.api.pu.m23.IAPIPuArriveMaitain;
import nccloud.openapi.scmpub.pub.TransferCodeToPKTool;
import nccloud.openapi.scmpub.pub.TransferMapToVOTool;
/**
* zhangxinah 解决参照采购订单生成到货单校验过早的问题
* 2312
*/
public class APIPuArriveMaitainImpl implements IAPIPuArriveMaitain {
public ArriveVO[] saveFromOrder(List<Map<String, Object>> paramList) throws BusinessException {
ArriveVO[] arriveVOs = null;
ArriveVO[] saveVOs = null;
try {
List<ArriveVO> aggVOList = TransferMapToVOTool.transferMapToAggVO(paramList, ArriveVO.class);
ArriveVO[] vos = (ArriveVO[]) aggVOList.toArray(new ArriveVO[aggVOList.size()]);
aggVOList = TransferCodeToPKTool.transferAggVO(aggVOList);
HashSet<String> pk_order = new HashSet<String>();
for (ArriveVO vo : vos) {
for (ArriveItemVO itemVO : vo.getBVO()) {
pk_order.add(itemVO.getCsourceid());
}
}
OrderVO[] orderVOs = (new queryFromOrder()).query((String[]) pk_order.toArray(new String[0]));
calNumAndMny(orderVOs);
IPfExchangeService service = (IPfExchangeService) NCLocator.getInstance().lookup(IPfExchangeService.class);
arriveVOs = (ArriveVO[]) service.runChangeDataAry("21", "23", orderVOs, null);
BillVOsCheckRule checker = new BillVOsCheckRule(new PUArriveVONullValidate());
checker.check(arriveVOs);
Map<String, ArriveHeaderVO> destiHMap = new HashMap<String, ArriveHeaderVO>();
for (ArriveVO arriveVO : arriveVOs) {
destiHMap.put(arriveVO.getBVO()[0].getCsourceid(), arriveVO.getHVO());
}
Map<String, ArriveItemVO> destiItemMap = new HashMap<String, ArriveItemVO>();
for (ArriveVO arriveVO : arriveVOs) {
for (ArriveItemVO arriveItemVO : arriveVO.getBVO()) {
destiItemMap.put(arriveItemVO.getCsourcebid(), arriveItemVO);
}
}
saveVOs = new ArriveVO[vos.length];
for (int i = 0; i < saveVOs.length; i++) {
saveVOs[i] = new ArriveVO();
saveVOs[i].setHVO((ArriveHeaderVO) destiHMap.get(vos[i].getBVO()[0].getCsourceid()));
ArriveItemVO[] itemvos = new ArriveItemVO[vos[i].getBVO().length];
for (int j = 0; j < itemvos.length; j++) {
itemvos[j] = (ArriveItemVO) DeepClone.clone(destiItemMap.get(vos[i].getBVO()[j].getCsourcebid()));
}
saveVOs[i].setBVO(itemvos);
}
for (int i = 0; i < vos.length; i++) {
ArriveHeaderVO HVO = vos[i].getHVO();
ArriveItemVO[] BVO = vos[i].getBVO();
for (String key : HVO.getAttributeNames()) {
if (null != HVO.getAttributeValue(key)) {
saveVOs[i].getHVO().setAttributeValue(key, HVO.getAttributeValue(key));
}
}
for (int j = 0; j < BVO.length; j++) {
for (String key : BVO[j].getAttributeNames()) {
if (null != BVO[j].getAttributeValue(key)) {
saveVOs[i].getBVO()[j].setAttributeValue(key, BVO[j].getAttributeValue(key));
}
}
}
}
for (ArriveVO saveVO : saveVOs) {
int rowNum = 0;
ArriveItemVO[] bvos = saveVO.getBVO();
for (int i = 0; i < bvos.length; i++) {
rowNum++;
bvos[i].setCrowno("" + rowNum * 10);
}
BilltypeVO trantypeVO = PfDataCache.getBillTypeInfo(AppContext.getInstance().getPkGroup(),
saveVO.getHVO().getVtrantypecode());
saveVO.getHVO().setCtrantypeid(trantypeVO.getPk_billtypeid());
}
(new ArriveSaveFromOrder()).setDefaultValue(saveVOs);
(new ProduceDateSetForArrival()).setProduceDate(saveVOs);
saveVOs = (ArriveVO[]) PfServiceScmUtil.processBatch("SAVEBASE", "23", saveVOs, null, null);
} catch (Exception e) {
ExceptionUtils.wrappException(e);
}
return saveVOs;
}
private void calNumAndMny(OrderVO[] vos) {
for (OrderVO vo : vos) {
OrderItemVO[] bvos = vo.getBVO();
for (OrderItemVO bvo : bvos) {
if (bvo.getNnopayorgmny() == null) {
bvo.setNnopayorgmny(MathTool.sub(bvo.getNtaxmny(), bvo.getNacccancelinvmny()));
}
if (bvo.getNcanarrivenum() == null) {
bvo.setNcanarrivenum(MathTool.sub(bvo.getNnum(), bvo.getNaccumarrvnum()));
}
if (bvo.getNcaninnum() == null) {
bvo.setNcaninnum(MathTool.sub(bvo.getNnum(), bvo.getNaccumstorenum()));
}
if (bvo.getNcaninvoicenum() == null)
bvo.setNcaninvoicenum(MathTool.sub(bvo.getNnum(), bvo.getNaccuminvoicenum()));
}
}
}
}

File diff suppressed because it is too large Load Diff