From 3985795952c997a3cf67660f8109a66c26a4b0b3 Mon Sep 17 00:00:00 2001 From: mzr Date: Fri, 18 Apr 2025 10:43:29 +0800 Subject: [PATCH] =?UTF-8?q?=E9=94=80=E5=94=AE=E5=8F=91=E7=A5=A8=E7=BA=A2?= =?UTF-8?q?=E5=86=B2=E6=8E=A5=E5=8F=A3-=E4=BB=A3=E7=A0=81=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=8F=8A=E5=BC=80=E7=A5=A8=E7=94=B3=E8=AF=B7=E7=9A=84?= =?UTF-8?q?=E4=BA=A4=E6=98=93=E7=B1=BB=E5=9E=8B=E8=B5=8B=E5=80=BC=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../operator/IAPISaleInvMaitainImpl.java | 141 ++++++++++-------- 1 file changed, 81 insertions(+), 60 deletions(-) diff --git a/so/src/public/nccloud/api/so/saleinvoice/operator/IAPISaleInvMaitainImpl.java b/so/src/public/nccloud/api/so/saleinvoice/operator/IAPISaleInvMaitainImpl.java index 855ee71..a4a0ee0 100644 --- a/so/src/public/nccloud/api/so/saleinvoice/operator/IAPISaleInvMaitainImpl.java +++ b/so/src/public/nccloud/api/so/saleinvoice/operator/IAPISaleInvMaitainImpl.java @@ -102,8 +102,7 @@ public class IAPISaleInvMaitainImpl { : ResultMessageUtil.exceptionToJSON(new NullPointerException("未知异常")); } String[] ids = {content}; - SaleInvoiceVO[] saleInvoiceVO = NCLocator.getInstance().lookup(ISaleinvoiceQueryAPI.class) - .queryVOByIDs(ids); + SaleInvoiceVO[] saleInvoiceVO = querySaleInvoiceByIds(ids); SaleInvoiceVO saleInvoiceVO22 = saleInvoiceVO[0]; SaleInvoiceHVO saleInvoiceHVO = saleInvoiceVO22.getParentVO(); // 销售发票审核开始 @@ -156,63 +155,79 @@ public class IAPISaleInvMaitainImpl { String csaleinvoiceid = bject.getString("vdef40"); // 根据销售发票主实体id查询销售发票 String[] ids = {csaleinvoiceid}; - SaleInvoiceVO[] saleInvoiceVOs = NCLocator.getInstance().lookup(ISaleinvoiceQueryAPI.class) - .queryVOByIDs(ids); + SaleInvoiceVO[] saleInvoiceVOs = querySaleInvoiceByIds(ids); if (saleInvoiceVOs == null || saleInvoiceVOs.length <= 0) { return ResultMessageUtil.exceptionToJSON(new NullPointerException("未在系统中查询到对应的销售发票")); } // 调用函数根据原销售发票组装新红冲发票 SaleInvoiceVO saleInvoiceRedRushVO = makeNewRedRushSaleInvoice(saleInvoiceVOs[0], bject); // 生成红冲发票 + Logger.error("====================inv-red-save-start==============="); 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); - Logger.error("=========================inv-save============== "); - if (returnSaveSaleInvoiceVOs != null && returnSaveSaleInvoiceVOs.length > 0) { - Logger.error("inv-save = " + JSONArray.toJSONString(returnSaveSaleInvoiceVOs)); - // 生成红冲发票成功后,执行销售发票审批动作 - context.setBillType("32"); - context.setBillVos(returnSaveSaleInvoiceVOs); - context.setActionName("APPROVE"); - SaleInvoiceVO[] returnApproveSaleInvoiceVOs = (SaleInvoiceVO[]) flowService.exeScriptPFlow(context); - if (returnApproveSaleInvoiceVOs == null || returnApproveSaleInvoiceVOs.length <= 0) { - throw new BusinessException("生成销售发票审核失败"); - } - Logger.error("=========================inv-audit============== "); - Logger.error("inv-audit = " + JSONArray.toJSONString(returnApproveSaleInvoiceVOs)); - /** - * 开票申请红冲逻辑: - * 1.根据销售发票号查询下游开票申请 - * 2.根据原开票申请生成新红冲 - */ - String vBillcode = saleInvoiceVOs[0].getParentVO().getVbillcode(); - HYSuperDMO dmo = new HYSuperDMO(); - // 开票申请单主表 - IVApplicationHeadVO[] iVApplicationHeadVO = (IVApplicationHeadVO[]) dmo.queryByWhereClause(IVApplicationHeadVO.class, "src_billno='" + vBillcode + "' and dr=0 "); - String pk_ivapplication = iVApplicationHeadVO[0].getPk_ivapplication(); // 开票申请id - // 开票申请单子表 - IVApplicationBodyVO[] iVApplicationBodyVOs = (IVApplicationBodyVO[]) dmo.queryByWhereClause(IVApplicationBodyVO.class, "pk_ivapplication='" + pk_ivapplication + "' and dr=0 "); - // 调用函数封装开票申请红冲VO - IVApplicationAggVO iVApplicationAggVO = makeNewRedRushIVApplicationAggVO(iVApplicationHeadVO[0], iVApplicationBodyVOs, bject, returnApproveSaleInvoiceVOs); - // 生成红冲的开票申请 - IVApplicationServiceImpl serviceImpl = new IVApplicationServiceImpl(); - IVApplicationAggVO returnSaveIVApplicationAggVO = serviceImpl.save(iVApplicationAggVO); - if (returnSaveIVApplicationAggVO != null) { - return ResultMessageUtil.toJSON(returnApproveSaleInvoiceVOs, "接口调用成功"); - } else { - Exception e = new Exception("接口调用失败"); - return ResultMessageUtil.exceptionToJSON(e); - } + if (returnSaveSaleInvoiceVOs == null || returnSaveSaleInvoiceVOs.length <= 0) { + Exception e = new Exception("销售红冲发票保存失败"); + return ResultMessageUtil.exceptionToJSON(e); + } + Logger.error("inv-red-save = " + JSONArray.toJSONString(returnSaveSaleInvoiceVOs)); + Logger.error("=====================inv-red-save-end==============="); + + Logger.error("=====================inv-red-audit-start==============="); + // 生成红冲发票成功后,执行销售发票审批动作 + context.setBillType("32"); + context.setBillVos(returnSaveSaleInvoiceVOs); + context.setActionName("APPROVE"); + SaleInvoiceVO[] returnApproveSaleInvoiceVOs = (SaleInvoiceVO[]) flowService.exeScriptPFlow(context); + if (returnApproveSaleInvoiceVOs == null || returnApproveSaleInvoiceVOs.length <= 0) { + throw new BusinessException("生成销售发票审核失败"); + } + Logger.error("inv-red-audit = " + JSONArray.toJSONString(returnApproveSaleInvoiceVOs)); + Logger.error("=====================inv-red-audit-end==============="); + + // 查询新生成红冲发票的信息 + String newPk = returnApproveSaleInvoiceVOs[0].getParentVO().getCsaleinvoiceid(); + String[] idsNew = {newPk}; + // String[] idsNew = {"1001A11000000FREYYLE"}; + SaleInvoiceVO[] redVos = querySaleInvoiceByIds(idsNew); + + /** + * 开票申请红冲逻辑: + * 1.根据销售发票号查询下游开票申请 + * 2.根据原开票申请生成新红冲 + */ + String vBillcode = saleInvoiceVOs[0].getParentVO().getVbillcode(); + HYSuperDMO dmo = new HYSuperDMO(); + // 开票申请单主表 + IVApplicationHeadVO[] iVApplicationHeadVO = (IVApplicationHeadVO[]) dmo.queryByWhereClause(IVApplicationHeadVO.class, "src_billno='" + vBillcode + "' and dr=0 "); + String pk_ivapplication = iVApplicationHeadVO[0].getPk_ivapplication(); // 开票申请id + // 开票申请单子表 + IVApplicationBodyVO[] iVApplicationBodyVOs = (IVApplicationBodyVO[]) dmo.queryByWhereClause(IVApplicationBodyVO.class, "pk_ivapplication='" + pk_ivapplication + "' and dr=0 "); + // 调用函数封装开票申请红冲VO + IVApplicationAggVO iVApplicationAggVO = makeNewRedRushIVApplicationAggVO(iVApplicationHeadVO[0], iVApplicationBodyVOs, bject, redVos); + // 生成红冲的开票申请 + IVApplicationServiceImpl serviceImpl = new IVApplicationServiceImpl(); + IVApplicationAggVO returnSaveIVApplicationAggVO = serviceImpl.save(iVApplicationAggVO); + if (returnSaveIVApplicationAggVO != null) { + // 查询红冲发票信息返回给调用方 + return ResultMessageUtil.toJSON(redVos, "接口调用成功"); } else { - Exception e = new Exception("接口调用失败"); + Exception e = new Exception("销售红冲发票保存审核成功,开票申请保存失败"); return ResultMessageUtil.exceptionToJSON(e); } } - public static JSONObject jsonObjectAss(JSONObject originalJson) throws Exception { + /** + * 蓝字发票封装给交换平台的传参 + * + * @param originalJson + * @return + * @throws Exception + */ + public JSONObject jsonObjectAss(JSONObject originalJson) throws Exception { try { // 构建目标 JSON 格式 JSONObject resultJson = new JSONObject(); @@ -384,7 +399,7 @@ public class IAPISaleInvMaitainImpl { } } - private static String getTaxcode(String taxrateStr) throws BusinessException { + private String getTaxcode(String taxrateStr) throws BusinessException { IUAPQueryBS queryBS = NCLocator.getInstance().lookup(IUAPQueryBS.class); String sql = " select code FROM bd_taxrate tt inner join bd_taxcode tc on tt.pk_taxcode=tc.pk_taxcode where taxrate='" + taxrateStr + "' AND ROWNUM = 1 "; @@ -392,7 +407,7 @@ public class IAPISaleInvMaitainImpl { return taxcodeStr; } - private static Map getSaleorderVo(String csourcebillbidStr) throws BusinessException { + private Map getSaleorderVo(String csourcebillbidStr) throws BusinessException { IUAPQueryBS queryBS = NCLocator.getInstance().lookup(IUAPQueryBS.class); String sql = " select s.vbillcode,s.csaleorderid, s.corigcurrencyid," + " sb.csaleorderbid,sb.crowno,sb.blargessflag,sb.nexchangerate,sb.vchangerate," + @@ -405,14 +420,14 @@ public class IAPISaleInvMaitainImpl { return value2; } - private static String getString_TrimAsNull(Object value) { + private String getString_TrimAsNull(Object value) { if ((value == null) || (value.toString().trim().isEmpty())) { return ""; } return value.toString().trim(); } - private static UFDouble getUFDouble_NullAsZero(Object value) { + private UFDouble getUFDouble_NullAsZero(Object value) { if ((value == null) || (value.toString().trim().isEmpty()) || (value.toString().trim().equals("~"))) return UFDouble.ONE_DBL; if ((value instanceof UFDouble)) @@ -423,6 +438,17 @@ public class IAPISaleInvMaitainImpl { return new UFDouble(value.toString().trim()); } + /** + * 根据主键查询销售发票 + * + * @param ids + * @return + * @throws BusinessException + */ + private SaleInvoiceVO[] querySaleInvoiceByIds(String[] ids) throws BusinessException { + return NCLocator.getInstance().lookup(ISaleinvoiceQueryAPI.class).queryVOByIDs(ids); + } + /** * 构造红冲发票VO * @@ -431,7 +457,7 @@ public class IAPISaleInvMaitainImpl { * @return * @throws Exception */ - public static SaleInvoiceVO makeNewRedRushSaleInvoice(SaleInvoiceVO originalVO, JSONObject bject) throws Exception { + public SaleInvoiceVO makeNewRedRushSaleInvoice(SaleInvoiceVO originalVO, JSONObject bject) throws Exception { try { SaleInvoiceVO saleInvoiceVO = new SaleInvoiceVO(); // 发票主实体 @@ -555,24 +581,20 @@ public class IAPISaleInvMaitainImpl { /** * 构造红冲开票申请VO * - * @param applyHeadVO 原开票申请主实体 - * @param ivApplicationBodyVOS 原开票申请子实体 - * @param bject bip参数 - * @param returnApproveSaleInvoiceVOs 新生成的红冲销售发票实体 + * @param applyHeadVO 原开票申请主实体 + * @param ivApplicationBodyVOS 原开票申请子实体 + * @param bject bip参数 + * @param redVos 新生成的红冲销售发票实体 * @return * @throws Exception */ - public static IVApplicationAggVO makeNewRedRushIVApplicationAggVO(IVApplicationHeadVO applyHeadVO, IVApplicationBodyVO[] ivApplicationBodyVOS, JSONObject bject, SaleInvoiceVO[] returnApproveSaleInvoiceVOs) throws Exception { + public IVApplicationAggVO makeNewRedRushIVApplicationAggVO(IVApplicationHeadVO applyHeadVO, IVApplicationBodyVO[] ivApplicationBodyVOS, JSONObject bject, SaleInvoiceVO[] redVos) throws Exception { try { IVApplicationAggVO applicationAggVO = 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(); + SaleInvoiceHVO rpSaleInvoiceHVO = redVos[0].getParentVO(); // 主实体属性赋值 // 克隆取值原子表开票申请 @@ -608,7 +630,6 @@ public class IAPISaleInvMaitainImpl { } JSONObject bipBvoJson = newBvoArr.get(0); // 参数子表 IVApplicationBodyVO newivApplicationBodyVO = new IVApplicationBodyVO(); -// BeanUtil.copyProperties(ivApplicationBodyVO,newivApplicationBodyVO, CopyOptions.create().setIgnoreNullValue(true)); // 克隆取值原子表开票申请 newivApplicationBodyVO = (IVApplicationBodyVO) getCloneTool().deepClone(ivApplicationBodyVO); // 赋值之后修改子实体红冲时字段 @@ -636,9 +657,9 @@ public class IAPISaleInvMaitainImpl { newivApplicationHeadVO.setHjse(sumSe); // 合计税额 newivApplicationHeadVO.setBchcje(sumBchcje); // 本次红冲金额 newivApplicationHeadVO.setHzfp(UFBoolean.TRUE); // 红字发票 + newivApplicationHeadVO.setTranstypecode("SSCIVA-kpsq"); // 交易类型编码-填充默认值 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(开票有误) @@ -652,7 +673,7 @@ public class IAPISaleInvMaitainImpl { } } - private static Map getSaleOrderInfo(String csaleorderbid) throws BusinessException { + private Map getSaleOrderInfo(String csaleorderbid) throws BusinessException { IUAPQueryBS queryBS = NCLocator.getInstance().lookup(IUAPQueryBS.class); String sql = " select s.vbillcode,s.csaleorderid, s.corigcurrencyid," + " sb.csaleorderbid,sb.crowno,sb.blargessflag,sb.nexchangerate," +