销售发票红冲接口-代码优化及开票申请的交易类型赋值调整
This commit is contained in:
		
							parent
							
								
									15535254f6
								
							
						
					
					
						commit
						3985795952
					
				|  | @ -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<String, Object> getSaleorderVo(String csourcebillbidStr) throws BusinessException { | ||||
|     private Map<String, Object> 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<String, Object> getSaleOrderInfo(String csaleorderbid) throws BusinessException { | ||||
|     private Map<String, Object> 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," + | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue