销售订单客户与收款单客户不一致取消校验

This commit is contained in:
lihao 2025-04-15 10:51:47 +08:00
parent 3560f064b2
commit 9901f045eb
1 changed files with 356 additions and 0 deletions

View File

@ -0,0 +1,356 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package nc.pubimpl.so.sobalance.arap.listener;
import com.yonyou.cloud.iuap.sagas.Sagas;
import com.yonyou.cloud.middleware.entity.SagasEntity;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import nc.bs.businessevent.BdUpdateEvent;
import nc.bs.businessevent.BusinessEvent;
import nc.bs.businessevent.IBusinessEvent;
import nc.bs.framework.common.NCLocator;
import nc.impl.pubapp.pattern.data.bill.BillQuery;
import nc.impl.so.m30.sobalance.maintain.IInsertBP;
import nc.impl.so.m30.sobalance.maintain.IUpdateBP;
import nc.impl.so.m30.sobalance.maintain.SobalanceBPFactoryForSoAuto;
import nc.itf.arap.forso.IDataFromF2ForM30;
import nc.pubitf.arap.pub.GetSODataByArapUtils;
import nc.vo.arap.gathering.AggGatheringBillVO;
import nc.vo.arap.gathering.GatheringBillItemVO;
import nc.vo.ml.NCLangRes4VoTransl;
import nc.vo.pub.AggregatedValueObject;
import nc.vo.pub.BusinessException;
import nc.vo.pub.lang.UFBoolean;
import nc.vo.pub.lang.UFDateTime;
import nc.vo.pub.lang.UFDouble;
import nc.vo.pubapp.AppContext;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import nc.vo.pubapp.pattern.pub.MathTool;
import nc.vo.scmpub.res.billtype.SOBillType;
import nc.vo.scmpub.util.SagasUtil;
import nc.vo.so.m30.entity.SaleOrderHVO;
import nc.vo.so.m30.entity.SaleOrderVO;
import nc.vo.so.m30.sobalance.entity.SoBalanceBVO;
import nc.vo.so.m30.sobalance.entity.SoBalanceHVO;
import nc.vo.so.m30.sobalance.entity.SoBalanceVO;
import nc.vo.so.m30.sobalance.enumeration.SoBalanceType;
import nccloud.pubitf.platform.businesslog.IBusinessLog;
import nccloud.pubitf.platform.businesslog.vo.SagasBusinessLog;
public class GatheringAddAfterListenerAction {
Map<String, Collection<IDataFromF2ForM30>> insertDataMap;
Map<String, Collection<IDataFromF2ForM30>> updateDataMap;
Map<String, UFDateTime> tss = new HashMap();
public GatheringAddAfterListenerAction() {
}
public void doAction(IBusinessEvent event) {
Object value = null;
if ("1004".equalsIgnoreCase(event.getEventType())) {
BdUpdateEvent busievent = (BdUpdateEvent)event;
value = busievent.getNewObject();
} else {
BusinessEvent busievent = (BusinessEvent)event;
value = busievent.getObject();
}
AggGatheringBillVO[] billvos = this.constGatherBills(value);
for(AggGatheringBillVO billvo : billvos) {
GatheringBillItemVO[] bvos = billvo.getBodyVOs();
for(GatheringBillItemVO bvo : bvos) {
this.tss.put(bvo.getSrc_billid(), bvo.getTop_changets());
}
}
IDataFromF2ForM30[] datas = (new GetSODataByArapUtils()).getIDataFromF2ForM30(event);
Map<String, Collection<IDataFromF2ForM30>> dataMap = ArListenerUtils.getInstance().organizeDataMap(datas);
String[] csaleorderids = (String[])dataMap.keySet().toArray(new String[dataMap.keySet().size()]);
if (csaleorderids != null && csaleorderids.length != 0) {
SoBalanceVO[] vos = null;
try {
vos = ArListenerUtils.getInstance().querySoBalanceVOByIDs(csaleorderids);
} catch (BusinessException e) {
ExceptionUtils.wrappException(e);
}
this.splitDataMap(vos, dataMap);
try {
if (this.insertDataMap.size() > 0) {
this.insertVO();
}
if (this.updateDataMap.size() > 0) {
this.updateVO(vos);
}
} catch (BusinessException e) {
ExceptionUtils.wrappException(e);
}
}
}
private AggGatheringBillVO[] constGatherBills(Object value) {
AggGatheringBillVO[] bills = null;
if (value.getClass().isArray()) {
AggregatedValueObject[] vos1 = (AggregatedValueObject[])value;
bills = (AggGatheringBillVO[])Array.newInstance(vos1[0].getClass(), vos1.length);
System.arraycopy(vos1, 0, bills, 0, vos1.length);
} else {
AggGatheringBillVO aggVO = (AggGatheringBillVO)value;
bills = new AggGatheringBillVO[]{aggVO};
}
return bills;
}
private void checkGatheringAndSaleOrderConsistent(IDataFromF2ForM30[] datas, SaleOrderVO saleOrderVO) throws BusinessException {
SaleOrderHVO head = saleOrderVO.getParentVO();
String ccustomerid = head.getCcustomerid();
String corigcurrencyid = head.getCorigcurrencyid();
String cinvoicecustid = head.getCinvoicecustid();
String carorgid = saleOrderVO.getChildrenVO()[0].getCarorgid();
UFDouble ntotalorigmny = head.getNtotalorigmny();
for(IDataFromF2ForM30 data : datas) {
if (!ccustomerid.equals(data.getPayBillOrderCust())) {
throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("4006011_0", "04006011-0193", (String)null, new String[]{head.getVbillcode()}));
}
if (!cinvoicecustid.equals(data.getPayBillCustomer())) {
throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("4006011_0", "04006011-0194", (String)null, new String[]{head.getVbillcode()}));
}
if (!corigcurrencyid.equals(data.getPayBillCurID())) {
throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("4006011_0", "04006011-0195", (String)null, new String[]{head.getVbillcode()}));
}
if (!carorgid.equals(data.getPayBillOrg())) {
throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("4006011_0", "04006011-0196", (String)null, new String[]{head.getVbillcode()}));
}
if (MathTool.isDiffSign(ntotalorigmny, data.getPayBillmny())) {
throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("4006011_0", "04006011-0412"));
}
}
}
private SoBalanceVO createInsertSoBalanceVO(IDataFromF2ForM30[] datas, SaleOrderVO saleOrderVO) {
SoBalanceHVO headVO = ArListenerUtils.getInstance().createSoBalanceHVO(saleOrderVO);
UFDouble ntotalorigmny = saleOrderVO.getParentVO().getNtotalorigmny();
SoBalanceBVO[] bodyVOs = this.createSoBalanceBVOs(datas, ntotalorigmny, UFDouble.ZERO_DBL);
SoBalanceVO retVO = new SoBalanceVO();
retVO.setParentVO(headVO);
retVO.setChildrenVO(bodyVOs);
return retVO;
}
private SoBalanceBVO[] createSoBalanceBVOs(IDataFromF2ForM30[] datas, UFDouble ntotalorigmny, UFDouble ntotalpaymny) {
SoBalanceBVO[] retBodyVOs = new SoBalanceBVO[datas.length];
for(int i = 0; i < datas.length; ++i) {
retBodyVOs[i] = new SoBalanceBVO();
retBodyVOs[i].setCpaybillid(datas[i].getPayBillID());
retBodyVOs[i].setCpaybillrowid(datas[i].getPayBillRowID());
retBodyVOs[i].setVarbillcode(datas[i].getPayBillNo());
retBodyVOs[i].setDarbilldate(datas[i].getPayBillDate());
retBodyVOs[i].setDarbalancedate(AppContext.getInstance().getBusiDate());
retBodyVOs[i].setCarorigcurrencyid(datas[i].getPayBillCurID());
retBodyVOs[i].setCprodlineid(datas[i].getCprodlineID());
retBodyVOs[i].setNorigarmny(datas[i].getPayBillmny());
UFDouble canPayMny = MathTool.sub(ntotalorigmny, ntotalpaymny);
if (MathTool.absCompareTo(canPayMny, datas[i].getPayBillmny()) > 0) {
retBodyVOs[i].setNorigordbalmny(datas[i].getPayBillmny());
} else {
retBodyVOs[i].setNorigordbalmny(canPayMny);
}
retBodyVOs[i].setFibaltype(SoBalanceType.SOBALANCE_ORDERBAL.getIntValue());
retBodyVOs[i].setBpreceiveflag(UFBoolean.valueOf(datas[i].isPrePay()));
retBodyVOs[i].setDr(0);
retBodyVOs[i].setStatus(2);
}
return retBodyVOs;
}
private SoBalanceVO createUpdateSoBalanceVO(IDataFromF2ForM30[] datas, SoBalanceVO oldSoBalanceVO) {
SoBalanceHVO newHeadVO = (SoBalanceHVO)oldSoBalanceVO.getParentVO().clone();
newHeadVO.setStatus(0);
UFDouble ntotalorigtaxmny = newHeadVO.getNtotalorigtaxmny();
UFDouble ntotalpaymny = newHeadVO.getNtotalpaymny();
SoBalanceBVO[] oldBodyVOs = oldSoBalanceVO.getChildrenVO();
Map<String, SoBalanceBVO> oldBodyMap = new HashMap();
for(SoBalanceBVO oldBodyVO : oldBodyVOs) {
oldBodyMap.put(oldBodyVO.getCpaybillrowid(), oldBodyVO);
}
Map<String, IDataFromF2ForM30> updateMap = new HashMap();
List<IDataFromF2ForM30> newList = new ArrayList();
for(IDataFromF2ForM30 data : datas) {
String paybillrowid = data.getPayBillRowID();
if (oldBodyMap.containsKey(paybillrowid)) {
updateMap.put(data.getPayBillRowID(), data);
} else {
newList.add(data);
}
}
List<SoBalanceBVO> bodyVOList = new ArrayList();
SoBalanceBVO[] newBodyVOs = this.createSoBalanceBVOs((IDataFromF2ForM30[])newList.toArray(new IDataFromF2ForM30[newList.size()]), ntotalorigtaxmny, ntotalpaymny);
if (newBodyVOs.length > 0) {
for(SoBalanceBVO bodyvo : newBodyVOs) {
bodyvo.setDr(0);
bodyvo.setStatus(2);
bodyvo.setCsobalanceid(newHeadVO.getPrimaryKey());
bodyVOList.add(bodyvo);
}
}
for(SoBalanceBVO oldBody : oldBodyVOs) {
String paybillrowid = oldBody.getCpaybillrowid();
if (updateMap.containsKey(paybillrowid)) {
SoBalanceBVO newbodyvo = (SoBalanceBVO)oldBody.clone();
newbodyvo.setNorigordbalmny(((IDataFromF2ForM30)updateMap.get(paybillrowid)).getPayBillmny());
newbodyvo.setStatus(1);
bodyVOList.add(newbodyvo);
} else {
SoBalanceBVO newbodyvo = (SoBalanceBVO)oldBody.clone();
newbodyvo.setStatus(0);
bodyVOList.add(newbodyvo);
}
}
SoBalanceVO retSobalanceVO = new SoBalanceVO();
retSobalanceVO.setParentVO(newHeadVO);
retSobalanceVO.setChildrenVO((SoBalanceBVO[])bodyVOList.toArray(new SoBalanceBVO[bodyVOList.size()]));
return retSobalanceVO;
}
private void insertVO() throws BusinessException {
String[] csaleorderids = (String[])this.insertDataMap.keySet().toArray(new String[this.insertDataMap.keySet().size()]);
BillQuery<SaleOrderVO> query = new BillQuery(SaleOrderVO.class);
SaleOrderVO[] saleOrderVOs = (SaleOrderVO[])query.query(csaleorderids);
if (this.insertDataMap.size() != saleOrderVOs.length) {
throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("4006011_0", "04006011-0117"));
} else {
for(SaleOrderVO vo : saleOrderVOs) {
if (!SagasUtil.isNccnativeMerged() && !this.isCheck()) {
break;
}
UFDateTime factTs = vo.getParentVO().getTs();
if (this.tss.get(vo.getParentVO().getCsaleorderid()) != null && !((UFDateTime)this.tss.get(vo.getParentVO().getCsaleorderid())).equals(factTs)) {
String message = NCLangRes4VoTransl.getNCLangRes().getStrByID("4020003_0", "04020003-0086");
ExceptionUtils.wrappBusinessException(message);
}
}
SoBalanceVO[] newSoBalanceVOs = new SoBalanceVO[this.insertDataMap.size()];
for(int i = 0; i < saleOrderVOs.length; ++i) {
String csaleorderid = saleOrderVOs[i].getParentVO().getCsaleorderid();
List<IDataFromF2ForM30> dataList = (List)this.insertDataMap.get(csaleorderid);
IDataFromF2ForM30[] datas = (IDataFromF2ForM30[])dataList.toArray(new IDataFromF2ForM30[dataList.size()]);
this.checkGatheringAndSaleOrderConsistent(datas, saleOrderVOs[i]);
newSoBalanceVOs[i] = this.createInsertSoBalanceVO(datas, saleOrderVOs[i]);
}
IInsertBP service = SobalanceBPFactoryForSoAuto.getInstance().getInsertBP();
service.insert(newSoBalanceVOs);
}
}
private void splitDataMap(SoBalanceVO[] vos, Map<String, Collection<IDataFromF2ForM30>> dataMap) {
Set<String> csaleorderidSet = new HashSet();
if (vos != null && vos.length > 0) {
for(SoBalanceVO vo : vos) {
csaleorderidSet.add(vo.getParentVO().getCsaleorderid());
}
}
this.insertDataMap = new HashMap();
this.updateDataMap = new HashMap();
for(Map.Entry<String, Collection<IDataFromF2ForM30>> entry : dataMap.entrySet()) {
if (csaleorderidSet.contains(entry.getKey())) {
this.updateDataMap.put((String)entry.getKey(), (Collection)entry.getValue());
} else {
this.insertDataMap.put((String)entry.getKey(), (Collection)entry.getValue());
}
}
}
private void updateVO(SoBalanceVO[] oldSoBalanceVOs) throws BusinessException {
String[] csaleorderids = (String[])this.updateDataMap.keySet().toArray(new String[this.updateDataMap.keySet().size()]);
BillQuery<SaleOrderVO> query = new BillQuery(SaleOrderVO.class);
SaleOrderVO[] saleOrderVOs = (SaleOrderVO[])query.query(csaleorderids);
if (this.updateDataMap.size() != saleOrderVOs.length) {
throw new BusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("4006011_0", "04006011-0117"));
} else {
for(SaleOrderVO vo : saleOrderVOs) {
if (!SagasUtil.isNccnativeMerged() && !this.isCheck()) {
break;
}
UFDateTime factTs = vo.getParentVO().getTs();
if (this.tss.get(vo.getParentVO().getCsaleorderid()) != null && !((UFDateTime)this.tss.get(vo.getParentVO().getCsaleorderid())).equals(factTs)) {
String message = NCLangRes4VoTransl.getNCLangRes().getStrByID("4020003_0", "04020003-0086");
ExceptionUtils.wrappBusinessException(message);
}
}
SoBalanceVO[] newSoBalanceVOs = new SoBalanceVO[this.updateDataMap.size()];
for(int i = 0; i < oldSoBalanceVOs.length; ++i) {
String csaleorderid = oldSoBalanceVOs[i].getParentVO().getCsaleorderid();
List<IDataFromF2ForM30> dataList = (List)this.updateDataMap.get(csaleorderid);
IDataFromF2ForM30[] datas = (IDataFromF2ForM30[])dataList.toArray(new IDataFromF2ForM30[dataList.size()]);
this.checkGatheringAndSaleOrderConsistent(datas, saleOrderVOs[i]);
newSoBalanceVOs[i] = this.createUpdateSoBalanceVO(datas, oldSoBalanceVOs[i]);
newSoBalanceVOs[i].setListenerflag(UFBoolean.TRUE);
}
SagasUtil.frozenAndAddSagaForHead(saleOrderVOs, SOBillType.Order.getCode());
SagasUtil.frozenAndAddSagaForHead(oldSoBalanceVOs, SOBillType.Order.getCode());
IUpdateBP mainservice = SobalanceBPFactoryForSoAuto.getInstance().getUpdateBP();
mainservice.update(newSoBalanceVOs, oldSoBalanceVOs);
}
}
private Boolean isCheck() {
Boolean isCheck = true;
SagasEntity sc = Sagas.getCurrentSagasInfo().getCurrent();
IBusinessLog bl = (IBusinessLog)NCLocator.getInstance().lookup(IBusinessLog.class);
try {
SagasBusinessLog log = bl.queryByGtxid(sc.getGtxId());
String billType = log.getBillType();
if (billType.indexOf("30") != -1) {
isCheck = false;
}
} catch (Exception e) {
ExceptionUtils.wrappException(e);
}
return isCheck;
}
}