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