Merge remote-tracking branch 'origin/main'

This commit is contained in:
lihao 2025-04-18 10:58:32 +08:00
commit 784a3a17c9
1 changed files with 81 additions and 60 deletions

View File

@ -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," +