refactor(so): 同步更新应收单和销售发票信息

- 修改销售订单时,同步更新相关的应收单和销售发票信息
- 更新应收单的部门、业务员、客户等信息
- 更新销售发票的物料、单位等信息- 优化了查询和更新逻辑,提高了系统性能
This commit is contained in:
mzr 2025-08-01 09:04:20 +08:00
parent a88411238e
commit b10459f27a
1 changed files with 53 additions and 9 deletions

View File

@ -22,6 +22,8 @@ import nc.pubimpl.so.m30.pub.SaleOrderSaveUtil;
import nc.pubitf.so.m30.api.ISaleOrderQueryAPI;
import nc.vo.arap.gathering.GatheringBillItemVO;
import nc.vo.arap.gathering.GatheringBillVO;
import nc.vo.arap.receivable.ReceivableBillItemVO;
import nc.vo.arap.receivable.ReceivableBillVO;
import nc.vo.bd.defdoc.DefdocVO;
import nc.vo.ml.NCLangRes4VoTransl;
import nc.vo.pub.BusinessException;
@ -1867,20 +1869,27 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
if (null != invoiceBVOS) {
Set<String> billIds = new HashSet<>();
for (SaleInvoiceBVO invoiceBVO : invoiceBVOS) {
// ²éѯӦÊÕµ¥ÊÇ·ñÉúЧ
String countSql = "SELECT count(1) FROM ar_recitem b "
+ " left join ar_recbill a on a.pk_recbill = b.pk_recbill "
+ " WHERE b.dr = 0 and a.effectstatus = 10 and b.src_billid = '[billId]' ";
countSql = countSql.replace("[billId]", csaleorderid);
Integer num = (Integer) getDao().executeQuery(countSql, new ColumnProcessor());
if (num > 0) {
continue;
}
// 来源单据子表
String csrcbid = invoiceBVO.getCsrcbid() != null ? invoiceBVO.getCsrcbid() : "~";
// 匹配销售订单子表的vo
SaleOrderBVO soBvo = Arrays.stream(bvos)
.filter(bvo -> csrcbid.equals(bvo.getCsaleorderbid()))
.findFirst()
.orElse(null);
invoiceBVO.setCordercustid(ccustomerid);
invoiceBVO.setCordercustvid(ccustomervid);
invoiceBVO.setCdeptid(cdeptid);
invoiceBVO.setCdeptvid(cdeptvid);
invoiceBVO.setCemployeeid(cemployeeid);
if (soBvo != null) {
invoiceBVO.setCmaterialid(soBvo.getCmaterialid());
invoiceBVO.setCmaterialvid(soBvo.getCmaterialvid());
invoiceBVO.setCastunitid(soBvo.getCastunitid());
invoiceBVO.setCunitid(soBvo.getCunitid());
invoiceBVO.setVchangerate(soBvo.getVchangerate());
invoiceBVO.setCqtunitid(soBvo.getCqtunitid());
invoiceBVO.setVqtunitrate(soBvo.getVqtunitrate());
}
invoiceBVO.setStatus(VOStatus.UPDATED);
hypub.update(invoiceBVO);
billIds.add(invoiceBVO.getCsaleinvoiceid());
@ -1897,6 +1906,41 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
}
}
}
// 同步修改应收单的部门业务员客户开票客户
for (SaleOrderBVO saleOrderBVO : bvos) {
SqlBuilder recWhere = new SqlBuilder();
recWhere.append("src_itemid", saleOrderBVO.getCsaleorderbid());
ReceivableBillItemVO[] receivableBillItemVOS = (ReceivableBillItemVO[]) hypub.queryByCondition(ReceivableBillItemVO.class, recWhere.toString());
if (null != receivableBillItemVOS) {
for (ReceivableBillItemVO itemVO : receivableBillItemVOS) {
String pkRecbill = itemVO.getPk_recbill();// 应收单id
ReceivableBillVO billVO = (ReceivableBillVO) hypub.queryByPrimaryKey(ReceivableBillVO.class, pkRecbill);
if (billVO != null) {
// 应收单未生效则同步修改
if (billVO.getEffectstatus() != 10) {
itemVO.setPk_deptid(cdeptid);
itemVO.setPk_deptid_v(cdeptvid);
itemVO.setPk_psndoc(cemployeeid);
itemVO.setCustomer(ccustomerid);
itemVO.setCustomer_v(ccustomervid);
itemVO.setMaterial(saleOrderBVO.getCmaterialid());
itemVO.setMaterial_src(saleOrderBVO.getCmaterialid());
itemVO.setStatus(VOStatus.UPDATED);
hypub.update(itemVO);
// 修改应收单
billVO.setPk_deptid(cdeptid);
billVO.setPk_deptid_v(cdeptvid);
billVO.setPk_psndoc(cemployeeid);
billVO.setCustomer(ccustomerid);
billVO.setCustomer_v(ccustomervid);
billVO.setStatus(VOStatus.UPDATED);
hypub.update(billVO);
}
}
}
}
}
}
}