销售发票红冲接口调整

This commit is contained in:
mzr 2025-04-15 15:50:37 +08:00
parent 1135b199af
commit 6dc1f0e9b1
2 changed files with 32 additions and 29 deletions

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding='gb2312'?>
<module>
<rest>
<resource classname="nc.vo.so.m32.saleinvoice.operator.billSaveAction" exinfo="销售发票及其下游单据开票申请修改红冲逻辑"/>
<resource classname="nccloud.api.so.saleinvoice.operator.BillSaveAction" exinfo="销售发票及其下游单据开票申请修改红冲逻辑"/>
</rest>
</module>

View File

@ -1,4 +1,4 @@
package nc.vo.so.m32.saleinvoice.operator;
package nccloud.api.so.saleinvoice.operator;
import com.alibaba.fastjson.JSONObject;
import nc.bs.framework.common.NCLocator;
@ -42,11 +42,11 @@ import java.util.List;
* @date 2025/03/14
*/
@Path("so/saleinvoice/operator")
public class billSaveAction extends AbstractNCCRestResource {
public class BillSaveAction extends AbstractNCCRestResource {
public static String fplxStr = "";// 开票申请发票类型
public billSaveAction() {
public BillSaveAction() {
}
@ -84,13 +84,14 @@ public class billSaveAction extends AbstractNCCRestResource {
if (bject == null) {
return ResultMessageUtil.exceptionToJSON(new NullPointerException("billhead:null"));
}
String csaleinvoiceid = bject.getString("csaleinvoiceid"); // 销售发票id
// 销售发票id
String csaleinvoiceid = bject.getString("vdef40");
// 根据销售发票主实体id查询销售发票
String[] ids = {csaleinvoiceid};
SaleInvoiceVO[] saleInvoiceVOs = NCLocator.getInstance().lookup(ISaleinvoiceQueryAPI.class)
.queryVOByIDs(ids);
if (saleInvoiceVOs.length <= 0) {
return ResultMessageUtil.exceptionToJSON(new NullPointerException("查询到Erp对应的销售发票"));
if (saleInvoiceVOs == null || saleInvoiceVOs.length <= 0) {
return ResultMessageUtil.exceptionToJSON(new NullPointerException("在系统中查询到对应的销售发票"));
}
try {
// 调用函数根据原销售发票组装新红冲发票
@ -109,7 +110,7 @@ public class billSaveAction extends AbstractNCCRestResource {
context.setBillVos(returnSaveSaleInvoiceVOs);
context.setActionName("APPROVE");
SaleInvoiceVO[] returnApproveSaleInvoiceVOs = (SaleInvoiceVO[]) flowService.exeScriptPFlow(context);
if (returnApproveSaleInvoiceVOs == null && returnApproveSaleInvoiceVOs.length <= 0) {
if (returnApproveSaleInvoiceVOs == null || returnApproveSaleInvoiceVOs.length <= 0) {
throw new BusinessException("生成销售发票审核失败");
}
/**
@ -144,8 +145,8 @@ public class billSaveAction extends AbstractNCCRestResource {
Exception e = new Exception("接口调用失败");
return ResultMessageUtil.exceptionToJSON(e);
}
} catch (BusinessException e) {
Logger.error("writeBack Error: ", e);
} catch (Exception e) {
Logger.error("billSaveRp-exp: ", e);
return ResultMessageUtil.exceptionToJSON(e);
}
}
@ -153,16 +154,16 @@ public class billSaveAction extends AbstractNCCRestResource {
/**
* 构造红冲发票VO
*
* @param originalSaleInvoiceVO
* @param originalVO
* @param bject
* @return
* @throws Exception
*/
public static SaleInvoiceVO makeNewRedRushSaleInvoice(SaleInvoiceVO originalSaleInvoiceVO, JSONObject bject) throws Exception {
public static SaleInvoiceVO makeNewRedRushSaleInvoice(SaleInvoiceVO originalVO, JSONObject bject) throws Exception {
try {
SaleInvoiceVO saleInvoiceVO = new SaleInvoiceVO();
SaleInvoiceHVO saleInvoiceHVO = originalSaleInvoiceVO.getParentVO(); // 主实体
SaleInvoiceBVO[] saleInvoiceBVOs = originalSaleInvoiceVO.getChildrenVO(); // 子实体
SaleInvoiceHVO saleInvoiceHVO = originalVO.getParentVO(); // 主实体
SaleInvoiceBVO[] saleInvoiceBVOs = originalVO.getChildrenVO(); // 子实体
SaleInvoiceHVO newSaleInvoiceHVO = new SaleInvoiceHVO(); // 新主实体
// 子实体属性赋值
@ -172,14 +173,15 @@ public class billSaveAction extends AbstractNCCRestResource {
UFDouble sumNorigmny = new UFDouble(); // 合计无税金额
UFDouble sumNorigtaxmny = new UFDouble(); // 合计价税合计
int i = 0;
com.alibaba.fastjson.JSONArray paramsSaleInvoiceBVOsJSA = (com.alibaba.fastjson.JSONArray) bject.get("SaleInvoiceBVOs"); // 参数子实体数组
List<JSONObject> paramsSaleInvoiceBVOs = paramsSaleInvoiceBVOsJSA.toJavaList(JSONObject.class);
SaleInvoiceBVO[] newSaleInvoiceBVOs = new SaleInvoiceBVO[paramsSaleInvoiceBVOs.size()]; // 新子实体
// 参数子实体数组
com.alibaba.fastjson.JSONArray bvoJsonArr = (com.alibaba.fastjson.JSONArray) bject.get("csaleinvoicebid");
List<JSONObject> bvoList = bvoJsonArr.toJavaList(JSONObject.class);
SaleInvoiceBVO[] newSaleInvoiceBVOs = new SaleInvoiceBVO[bvoList.size()]; // 新子实体
for (SaleInvoiceBVO saleInvoiceBVO : saleInvoiceBVOs) {
String csaleinvoicebid = saleInvoiceBVO.getCsaleinvoicebid(); // 子表id
// 筛选参数红冲的子表集合
List<JSONObject> newParamsSaleInvoiceBVOs = paramsSaleInvoiceBVOs.stream().filter(item -> {
String parCsaleinvoicebid = item.getString("csaleinvoicebid") + "";
List<JSONObject> newParamsSaleInvoiceBVOs = bvoList.stream().filter(item -> {
String parCsaleinvoicebid = item.getString("vbdef15") + ""; // 子表id
return csaleinvoicebid.equals(parCsaleinvoicebid);
}).toList();
if (newParamsSaleInvoiceBVOs.size() <= 0) {
@ -246,14 +248,14 @@ public class billSaveAction extends AbstractNCCRestResource {
/**
* 构造红冲开票申请VO
*
* @param ivApplicationHeadVO 原开票申请主实体
* @param applyHeadVO 原开票申请主实体
* @param ivApplicationBodyVOS 原开票申请子实体
* @param bject bip参数
* @param returnApproveSaleInvoiceVOs 新生成的红冲销售发票实体
* @return
* @throws Exception
*/
public static IVApplicationAggVO makeNewRedRushIVApplicationAggVO(IVApplicationHeadVO ivApplicationHeadVO, IVApplicationBodyVO[] ivApplicationBodyVOS, JSONObject bject, SaleInvoiceVO[] returnApproveSaleInvoiceVOs) throws Exception {
public static IVApplicationAggVO makeNewRedRushIVApplicationAggVO(IVApplicationHeadVO applyHeadVO, IVApplicationBodyVO[] ivApplicationBodyVOS, JSONObject bject, SaleInvoiceVO[] returnApproveSaleInvoiceVOs) throws Exception {
try {
IVApplicationAggVO ivApplicationAggVO = new IVApplicationAggVO();
IVApplicationHeadVO newivApplicationHeadVO = new IVApplicationHeadVO(); // 新主实体
@ -266,13 +268,13 @@ public class billSaveAction extends AbstractNCCRestResource {
SaleInvoiceHVO rpSaleInvoiceHVO = rpSaleInvoiceVOs[0].getParentVO();
// 主实体属性赋值
// BeanUtil.copyProperties(ivApplicationHeadVO,newivApplicationHeadVO, CopyOptions.create().setIgnoreNullValue(true));
// BeanUtil.copyProperties(applyHeadVO,newivApplicationHeadVO, CopyOptions.create().setIgnoreNullValue(true));
// 克隆取值原子表开票申请
newivApplicationHeadVO = (IVApplicationHeadVO) CloneUtil.depthClone(ivApplicationHeadVO);
newivApplicationHeadVO = (IVApplicationHeadVO) CloneUtil.depthClone(applyHeadVO);
// 根据参数判断是否为部分红冲
boolean isPartHCFlag = false;
UFDouble paramNtotalorigmny = new UFDouble(bject.getString("ntotalorigmny")); // 参数价税合计主表红冲金额
UFDouble ntotalorigmny = ivApplicationHeadVO.getJshj(); // 原开票申请主表价税合计
UFDouble ntotalorigmny = applyHeadVO.getJshj(); // 原开票申请主表价税合计
// 红冲金额与开票申请源价税合计比较如果和值大于零则为部分红冲
if (ntotalorigmny.add(paramNtotalorigmny).compareTo(UFDouble.ZERO_DBL) > 0) {
isPartHCFlag = true;
@ -284,14 +286,15 @@ public class billSaveAction extends AbstractNCCRestResource {
UFDouble sumSe = new UFDouble(); // 合计税额
// 子实体属性赋值
int i = 0;
com.alibaba.fastjson.JSONArray paramsSaleInvoiceBVOsJSA = (com.alibaba.fastjson.JSONArray) bject.get("SaleInvoiceBVOs"); // 参数子实体数组
List<JSONObject> paramsSaleInvoiceBVOs = paramsSaleInvoiceBVOsJSA.toJavaList(JSONObject.class);
IVApplicationBodyVO[] newivApplicationBodyVOS = new IVApplicationBodyVO[paramsSaleInvoiceBVOs.size()]; // 新子实体
// 参数子实体数组
com.alibaba.fastjson.JSONArray bvoJsonArr = (com.alibaba.fastjson.JSONArray) bject.get("csaleinvoicebid");
List<JSONObject> bvoList = bvoJsonArr.toJavaList(JSONObject.class);
IVApplicationBodyVO[] newivApplicationBodyVOS = new IVApplicationBodyVO[bvoList.size()]; // 新子实体
for (IVApplicationBodyVO ivApplicationBodyVO : ivApplicationBodyVOS) {
String src_pkdetail = ivApplicationBodyVO.getSrc_pkdetail(); // 来源单据行id
// 筛选参数红冲的子表集合
List<JSONObject> newParamsSaleInvoiceBVOs = paramsSaleInvoiceBVOs.stream().filter(item -> {
String parCsaleinvoicebid = item.getString("csaleinvoicebid") + "";
List<JSONObject> newParamsSaleInvoiceBVOs = bvoList.stream().filter(item -> {
String parCsaleinvoicebid = item.getString("vbdef15") + ""; // 子表id
return src_pkdetail.equals(parCsaleinvoicebid);
}).toList();
if (newParamsSaleInvoiceBVOs.size() <= 0) {