diff --git a/so/src/public/nc/vo/so/m32/saleinvoice/operator/billSaveAction.java b/so/src/public/nc/vo/so/m32/saleinvoice/operator/billSaveAction.java index d563fcc..949f9f1 100644 --- a/so/src/public/nc/vo/so/m32/saleinvoice/operator/billSaveAction.java +++ b/so/src/public/nc/vo/so/m32/saleinvoice/operator/billSaveAction.java @@ -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);