bip销售发票红冲接口

This commit is contained in:
lj 2025-03-14 17:43:36 +08:00
parent bed6eaacd8
commit 35a57b3551
1 changed files with 53 additions and 24 deletions

View File

@ -31,7 +31,10 @@ import nccloud.api.baseapp.exchange.convert.OpenApiConvertDataResult;
import nccloud.api.rest.utils.ResultMessageUtil;
import nccloud.framework.service.ServiceLocator;
import nccloud.itf.sscivm.ivsale.impl.IVApplicationServiceImpl;
import nccloud.itf.sscivm.ivsale.service.IVApplicationService;
import nccloud.pubitf.riart.pflow.CloudPFlowContext;
import nccloud.pubitf.riart.pflow.ICloudScriptPFlowService;
import nccloud.ws.rest.resource.AbstractNCCRestResource;
import org.json.JSONString;
import uap.mw.trans.TransactionFactory;
@ -97,14 +100,25 @@ public class billSaveAction extends AbstractNCCRestResource {
return ResultMessageUtil.exceptionToJSON(new NullPointerException("未查询到Erp对应的销售发票"));
}
try{
//手动开启事务
TransactionFactory.getTMProxy().begin(3,0);
//调用函数根据原销售发票组装新红冲发票
SaleInvoiceVO saleInvoiceRedRushVO = makeNewRedRushSaleInvoice(saleInvoiceVOs[0],bject);
//生成红冲发票
SaleInvoiceVO[] returnSaleInvoiceVO = (SaleInvoiceVO[])PfServiceScmUtil.processBatch("WRITE", SOBillType.Invoice.getCode(), new SaleInvoiceVO[] { saleInvoiceRedRushVO }, null, null);
if(returnSaleInvoiceVO !=null && returnSaleInvoiceVO.length > 0) {
//生成红冲发票成功后执行开票申请红冲逻辑
ICloudScriptPFlowService flowService = NCLocator.getInstance().lookup(ICloudScriptPFlowService.class);
CloudPFlowContext context = new CloudPFlowContext();
context.setBillType("32");
context.setBillVos( new SaleInvoiceVO[] { saleInvoiceRedRushVO });
context.setActionName("WRITE");
SaleInvoiceVO[] returnSaveSaleInvoiceVOs = (SaleInvoiceVO[])flowService.exeScriptPFlow(context);
// SaleInvoiceVO[] returnSaveSaleInvoiceVO = (SaleInvoiceVO[])PfServiceScmUtil.processBatch("WRITE", SOBillType.Invoice.getCode(), new SaleInvoiceVO[] { saleInvoiceRedRushVO }, null, null);
if(returnSaveSaleInvoiceVOs !=null && returnSaveSaleInvoiceVOs.length > 0) {
//生成红冲发票成功后执行销售发票审批动作
context.setBillType("32");
context.setBillVos( returnSaveSaleInvoiceVOs);
context.setActionName("APPROVE");
SaleInvoiceVO[] returnApproveSaleInvoiceVOs = (SaleInvoiceVO[])flowService.exeScriptPFlow(context);
if(returnApproveSaleInvoiceVOs ==null && returnApproveSaleInvoiceVOs.length <= 0) {
throw new BusinessException("生成销售发票审核失败");
}
/**
* 开票申请红冲逻辑
* 1.根据销售发票号查询下游开票申请
@ -118,14 +132,16 @@ public class billSaveAction extends AbstractNCCRestResource {
//开票申请单子表
IVApplicationBodyVO[] iVApplicationBodyVOs=(IVApplicationBodyVO[]) dmo.queryByWhereClause(IVApplicationBodyVO.class, "pk_ivapplication='"+pk_ivapplication+"' and dr=0 ");
//调用函数封装开票申请红冲VO
IVApplicationAggVO iVApplicationAggVO = makeNewRedRushIVApplicationAggVO(iVApplicationHeadVO[0],iVApplicationBodyVOs,bject);
IVApplicationAggVO iVApplicationAggVO = makeNewRedRushIVApplicationAggVO(iVApplicationHeadVO[0],iVApplicationBodyVOs,bject,returnApproveSaleInvoiceVOs);
//生成红冲的开票申请
// IVApplicationService ivApplicationServiceservice = (IVApplicationService) ServiceLocator.find(IVApplicationService.class);
// IVApplicationAggVO returnIVApplicationAggVO = ivApplicationServiceservice.save(iVApplicationAggVO);
Object returnIVApplicationAggVO = PfServiceScmUtil.processBatch("SAVE", "SSCIVA", new IVApplicationAggVO[] { iVApplicationAggVO }, null, null);
if(returnIVApplicationAggVO != null ) {
//正常结束
TransactionFactory.getTMProxy().end(null);
// context.setBillType("SSCIVA");
// context.setBillVos( new IVApplicationAggVO[] { iVApplicationAggVO });
// context.setActionName("SAVE");
// IVApplicationAggVO[] returnSaveIVApplicationAggVO = (IVApplicationAggVO[] )flowService.exeScriptPFlow(context);
IVApplicationServiceImpl serviceImpl = new IVApplicationServiceImpl();
IVApplicationAggVO returnSaveIVApplicationAggVO = serviceImpl.save(iVApplicationAggVO);
// Object returnIVApplicationAggVO = PfServiceScmUtil.processBatch("SAVE", "SSCIVA", new IVApplicationAggVO[] { iVApplicationAggVO }, null, null);
if(returnSaveIVApplicationAggVO != null ) {
return ResultMessageUtil.toJSON(null, "接口调用成功");
}else{
Exception e = new Exception("接口调用失败");
@ -136,8 +152,6 @@ public class billSaveAction extends AbstractNCCRestResource {
return ResultMessageUtil.exceptionToJSON(e);
}
}catch (BusinessException e) {
//异常回滚
TransactionFactory.getTMProxy().end(e);
Logger.error("writeBack Error: ",e);
return ResultMessageUtil.exceptionToJSON(e);
}
@ -237,17 +251,25 @@ public class billSaveAction extends AbstractNCCRestResource {
/**
* 构造红冲开票申请VO
* @param ivApplicationHeadVO
* @param ivApplicationBodyVOS
* @param bject
* @param ivApplicationHeadVO 原开票申请主实体
* @param ivApplicationBodyVOS 原开票申请子实体
* @param bject bip参数
* @param returnApproveSaleInvoiceVOs 新生成的红冲销售发票实体
* @return
* @throws Exception
*/
public static IVApplicationAggVO makeNewRedRushIVApplicationAggVO(IVApplicationHeadVO ivApplicationHeadVO,IVApplicationBodyVO[] ivApplicationBodyVOS, JSONObject bject) throws Exception {
public static IVApplicationAggVO makeNewRedRushIVApplicationAggVO(IVApplicationHeadVO ivApplicationHeadVO,IVApplicationBodyVO[] ivApplicationBodyVOS, JSONObject bject,SaleInvoiceVO[] returnApproveSaleInvoiceVOs) throws Exception {
try {
IVApplicationAggVO ivApplicationAggVO = new IVApplicationAggVO();
IVApplicationHeadVO newivApplicationHeadVO = new IVApplicationHeadVO(); //新主实体
//取新生成红冲发票的主实体数据
String csaleinvoiceid = returnApproveSaleInvoiceVOs[0].getParentVO().getCsaleinvoiceid();
String[] ids = {csaleinvoiceid};
SaleInvoiceVO[] rpSaleInvoiceVOs = NCLocator.getInstance().lookup(ISaleinvoiceQueryAPI.class)
.queryVOByIDs(ids);
SaleInvoiceHVO rpSaleInvoiceHVO = rpSaleInvoiceVOs[0].getParentVO();
//主实体属性赋值
// BeanUtil.copyProperties(ivApplicationHeadVO,newivApplicationHeadVO, CopyOptions.create().setIgnoreNullValue(true));
//克隆取值原子表开票申请
@ -264,6 +286,7 @@ public class billSaveAction extends AbstractNCCRestResource {
UFDouble sumXmje = new UFDouble(); //合计金额
UFDouble sumXmjshj = new UFDouble(); //合计价税合计
UFDouble sumBchcje = new UFDouble(); //合计本次红冲金额
UFDouble sumSe = new UFDouble(); //合计税额
//子实体属性赋值
int i = 0;
com.alibaba.fastjson.JSONArray paramsSaleInvoiceBVOsJSA = (com.alibaba.fastjson.JSONArray)bject.get("SaleInvoiceBVOs"); //参数子实体数组
@ -287,27 +310,33 @@ public class billSaveAction extends AbstractNCCRestResource {
//赋值之后修改子实体红冲时字段
newivApplicationBodyVO.setPk_ivappdetail(null); //开票申请子实体id
newivApplicationBodyVO.setBillno(null); //开票申请子实体单据号
newivApplicationBodyVO.setSe(new UFDouble(paramSaleInvoiceBVO.getString("ntax"))); //税额
newivApplicationBodyVO.setXmsl(new UFDouble(paramSaleInvoiceBVO.getString("nnum"))); //数量
newivApplicationBodyVO.setXmje(new UFDouble(paramSaleInvoiceBVO.getString("norigmny"))); //金额
newivApplicationBodyVO.setXmjshj(new UFDouble(paramSaleInvoiceBVO.getString("norigtaxmny"))); //价税合计
newivApplicationBodyVO.setBchcje(new UFDouble(paramSaleInvoiceBVO.getString("norigtaxmny"))); //本次红冲金额 = 本次参数红冲金额
newivApplicationBodyVO.setBchcje(new UFDouble(paramSaleInvoiceBVO.getString("norigtaxmny")).multiply(new UFDouble(-1))); //本次红冲金额 = 本次参数红冲金额
newivApplicationBodyVOS[i++] = newivApplicationBodyVO;
sumSe = sumSe.add(new UFDouble(paramSaleInvoiceBVO.getString("ntax")));
sumXmsl = sumXmsl.add(new UFDouble(paramSaleInvoiceBVO.getString("nnum")));
sumXmje = sumXmje.add(new UFDouble(paramSaleInvoiceBVO.getString("norigmny")));
sumXmjshj = sumXmjshj.add(new UFDouble(paramSaleInvoiceBVO.getString("norigtaxmny")));
sumBchcje = sumBchcje.add(new UFDouble(paramSaleInvoiceBVO.getString("norigtaxmny")));
sumBchcje = sumBchcje.add(new UFDouble(paramSaleInvoiceBVO.getString("norigtaxmny")).multiply(new UFDouble(-1)));
}
//赋值之后修改主实体红冲时字段
newivApplicationHeadVO.setPk_ivapplication(null); //开票申请单主实体id
newivApplicationHeadVO.setBillno(null); //单据号
newivApplicationHeadVO.setPreparedate(new UFDate()); //单据日期
newivApplicationHeadVO.setJshj(sumXmjshj); //价税合计
newivApplicationHeadVO.setHjje(sumXmje); //合计金额
newivApplicationHeadVO.setHjse(ivApplicationHeadVO.getHjse().multiply(new UFDouble(-1))); //合计税额
newivApplicationHeadVO.setHjse(sumSe); //合计税额
newivApplicationHeadVO.setBchcje(sumBchcje); //本次红冲金额
newivApplicationHeadVO.setHzfp(UFBoolean.TRUE); //红字发票
newivApplicationHeadVO.setSrc_billtype(ivApplicationHeadVO.getSrc_billtype()); //来源单据类型
newivApplicationHeadVO.setSrc_tradetype(ivApplicationHeadVO.getSrc_tradetype()); //来源交易类型
newivApplicationHeadVO.setSrc_billno(ivApplicationHeadVO.getSrc_billno()); //来源单据编号
newivApplicationHeadVO.setSrc_billtype(SOBillType.Invoice.getCode()); //来源单据类型
newivApplicationHeadVO.setSrc_tradetype(rpSaleInvoiceHVO.getCtrantypeid()); //来源交易类型
newivApplicationHeadVO.setTranstypecode(rpSaleInvoiceHVO.getVtrantypecode()); //来源交易类型编码
newivApplicationHeadVO.setSrc_pkbusibill(rpSaleInvoiceHVO.getCsaleinvoiceid()); //来源单据id
newivApplicationHeadVO.setSrc_billno(rpSaleInvoiceHVO.getVbillcode()); //来源单据编号
newivApplicationHeadVO.setHcyy("2"); //红冲原因2开票有误
//组装VO
ivApplicationAggVO.setParentVO(newivApplicationHeadVO);