fix(so): 优化销售订单修改接口的收款单和销售发票更新逻辑

This commit is contained in:
mzr 2025-07-28 18:54:08 +08:00
parent c5773b1d4a
commit a4da9047c3
1 changed files with 56 additions and 45 deletions

View File

@ -16,11 +16,11 @@ import nc.itf.so.m30.self.ISaleOrderMaintain;
import nc.itf.so.m30.self.ISaleOrderScriptMaintain;
import nc.itf.uap.IUAPQueryBS;
import nc.itf.uap.pf.IPFBusiAction;
import nc.jdbc.framework.SQLParameter;
import nc.jdbc.framework.processor.ColumnProcessor;
import nc.jdbc.framework.processor.MapProcessor;
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.bd.defdoc.DefdocVO;
import nc.vo.ml.NCLangRes4VoTransl;
@ -42,6 +42,7 @@ import nc.vo.scmpub.util.StringUtil;
import nc.vo.so.m30.entity.SaleOrderBVO;
import nc.vo.so.m30.entity.SaleOrderHVO;
import nc.vo.so.m30.entity.SaleOrderVO;
import nc.vo.so.m32.entity.SaleInvoiceBVO;
import nc.vo.so.m32.entity.SaleInvoiceHVO;
import nc.vo.so.pub.SOConstant;
import nc.vo.so.pub.enumeration.BillStatus;
@ -1775,6 +1776,11 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
for (SaleOrderVO vo : vos) {
SaleOrderHVO hvo = vo.getParentVO();
String csaleorderid = hvo.getCsaleorderid();// 销售订单ID
String ccustomerid = hvo.getCcustomerid();
String ccustomervid = hvo.getCcustomervid();
String cemployeeid = hvo.getCemployeeid();
String cdeptid = hvo.getCdeptid();
String cdeptvid = hvo.getCdeptvid();
SaleOrderBVO[] bvos = vo.getChildrenVO();
// 同步修改流程生产订单的国网行项目号国内采购订单号
for (SaleOrderBVO bvo : bvos) {
@ -1810,39 +1816,40 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
* 单据和凭证的关联 查询`fip_relation`表可知src_relationid 存的是关联单据的主键
*/
SqlBuilder strWhere = new SqlBuilder();
strWhere.append("dr = 0 and ");
strWhere.append("src_billid", csaleorderid);
GatheringBillVO[] payBillVOs = (GatheringBillVO[]) hypub.queryByCondition(GatheringBillVO.class, strWhere.toString());
String ccustomerid = hvo.getCcustomerid();
String ccustomervid = hvo.getCcustomervid();
String cemployeeid = hvo.getCemployeeid();
String cdeptid = hvo.getCdeptid();
String cdeptvid = hvo.getCdeptvid();
if (null != payBillVOs) {
for (GatheringBillVO payBillVO : payBillVOs) {
GatheringBillItemVO[] payItemVOS = (GatheringBillItemVO[]) hypub.queryByCondition(GatheringBillItemVO.class, strWhere.toString());
if (null != payItemVOS) {
Set<String> billIds = new HashSet<>();
for (GatheringBillItemVO itemVO : payItemVOS) {
// 查询收款单是否已生成凭证
String countSql = "SELECT count(1) FROM fip_relation "
+ " WHERE dr = 0 and src_relationid = '[billId]' ";
countSql = countSql.replace("[billId]", payBillVO.getPk_gatherbill());
countSql = countSql.replace("[billId]", itemVO.getPk_gatherbill());
Integer num = (Integer) getDao().executeQuery(countSql, new ColumnProcessor());
if (num > 0) {
continue;
}
// 修改收款单
payBillVO.setPk_psndoc(cemployeeid);
payBillVO.setCustomer(ccustomerid);
payBillVO.setPk_deptid(cdeptid);
payBillVO.setPk_deptid_v(cdeptvid);
payBillVO.setStatus(VOStatus.UPDATED);
hypub.update(payBillVO);
// 修改收款单子表
String updateSql = "update ar_gatheritem set pk_psndoc=?,customer=?,pk_deptid=?,pk_deptid_v=? where pk_gatherbill=?";
SQLParameter parameter = new SQLParameter();
parameter.addParam(cemployeeid);
parameter.addParam(ccustomerid);
parameter.addParam(cdeptid);
parameter.addParam(cdeptvid);
int num1 = getDao().executeUpdate(updateSql);
itemVO.setPk_psndoc(cemployeeid);
itemVO.setCustomer(ccustomerid);
itemVO.setPk_deptid(cdeptid);
itemVO.setPk_deptid_v(cdeptvid);
itemVO.setStatus(VOStatus.UPDATED);
hypub.update(itemVO);
billIds.add(itemVO.getPk_gatherbill());
}
if (!billIds.isEmpty()) {
// 修改收款单
for (String billId : billIds) {
GatheringBillVO billVO = new GatheringBillVO();
billVO.setPk_gatherbill(billId);
billVO.setPk_psndoc(cemployeeid);
billVO.setCustomer(ccustomerid);
billVO.setPk_deptid(cdeptid);
billVO.setPk_deptid_v(cdeptvid);
billVO.setStatus(VOStatus.UPDATED);
hypub.update(billVO);
}
}
}
@ -1851,11 +1858,11 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
* 首先根据源头单据id查询关联的销售发票如果有则循环判断应收单是否生效未生效则更新字段值为销售订单同字段的值
*/
SqlBuilder strWhereInv = new SqlBuilder();
strWhereInv.append("dr = 0 and ");
strWhereInv.append("cfirstid", csaleorderid);
SaleInvoiceHVO[] invoiceHvos = (SaleInvoiceHVO[]) hypub.queryByCondition(SaleInvoiceHVO.class, strWhereInv.toString());
if (null != invoiceHvos) {
for (SaleInvoiceHVO invoiceHVO : invoiceHvos) {
SaleInvoiceBVO[] invoiceBVOS = (SaleInvoiceBVO[]) hypub.queryByCondition(SaleInvoiceBVO.class, strWhereInv.toString());
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 "
@ -1865,22 +1872,26 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
if (num > 0) {
continue;
}
invoiceHVO.setCinvoicecustid(ccustomerid);
invoiceHVO.setCinvoicecustvid(ccustomervid);
invoiceHVO.setStatus(VOStatus.UPDATED);
hypub.update(invoiceHVO);
// 修改销售发票子表
String updateSql = "update so_saleinvoice_b set " +
"cordercustid=?,cordercustvid=?,cdeptid=?,cdeptvid=?,cemployeeid=?, " +
"where csaleinvoiceid=?";
SQLParameter parameter = new SQLParameter();
parameter.addParam(ccustomerid);
parameter.addParam(ccustomerid);
parameter.addParam(cdeptid);
parameter.addParam(cdeptvid);
parameter.addParam(cemployeeid);
parameter.addParam(invoiceHVO.getPrimaryKey());
int num1 = getDao().executeUpdate(updateSql);
invoiceBVO.setCordercustid(ccustomerid);
invoiceBVO.setCordercustvid(ccustomervid);
invoiceBVO.setCdeptid(cdeptid);
invoiceBVO.setCdeptvid(cdeptvid);
invoiceBVO.setCemployeeid(cemployeeid);
invoiceBVO.setStatus(VOStatus.UPDATED);
hypub.update(invoiceBVO);
billIds.add(invoiceBVO.getCsaleinvoiceid());
// 修改销售发票表
}
if (!billIds.isEmpty()) {
// 修改销售发票表
for (String billId : billIds) {
SaleInvoiceHVO invoiceHVO = new SaleInvoiceHVO();
invoiceHVO.setCsaleinvoiceid(billId);
invoiceHVO.setCinvoicecustid(ccustomerid);
invoiceHVO.setCinvoicecustvid(ccustomervid);
invoiceHVO.setStatus(VOStatus.UPDATED);
hypub.update(invoiceHVO);
}
}
}
}