批量开票重复开票校验调整

beta-prop-all^2
kk 2 years ago
parent ff5c5e1cfd
commit ce927b23c1
  1. 5
      jianshui-admin/src/main/java/com/jianshui/api/controller/http/invoice/v1/InvoiceController.java
  2. 2
      jianshui-invoice/src/main/java/com/jianshui/invoice/service/IInvoiceApiService.java
  3. 8
      jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/adapter/request/AisinoInvoiceRequestAdapterImpl.java
  4. 2
      jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/AisinoConsoleInvoiceApiServiceImpl.java
  5. 77
      jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/AisinoConsoleInvoiceApiZhongQiServiceImpl.java
  6. 2
      jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/ElephantInvoiceApiServiceImpl.java
  7. 2
      jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/ElephantInvoiceApiV6ServiceImpl.java
  8. 2
      jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/JcskInvoiceApiServiceImpl.java
  9. 10
      jianshui-invoice/src/main/java/com/jianshui/invoice/task/AddInvoiceBatchTask.java
  10. 11
      jianshui-invoice/src/main/java/com/jianshui/invoice/task/InvoiceBackTask.java

@ -1829,7 +1829,7 @@ public class InvoiceController {
@ApiImplicitParam(name = "identity", value = "身份认证", dataType = "java.lang.Void", example = "1130", required = true),
@ApiImplicitParam(name = "order", value = "请求体", dataType = "java.lang.Void", required = true)})
@PostMapping({"/api/invoice/v1/addInvoiceBatch", "/api/invoice/v1/addInvoiceBatch/{identity}", "/invoice/addInvoiceBatch"})
public AjaxResult addInvoiceBatch(HttpServletRequest request, String identity) throws Exception {
public void addInvoiceBatch(HttpServletRequest request, String identity) throws Exception {
log.info("[重汽批量开票接口]{},请求开票接口!", identity);
// 前置处理
@ -1844,7 +1844,7 @@ public class InvoiceController {
}
if (StringUtils.isEmpty(rawJson)) {
log.info("[重汽批量开票接口]未获取到请求参数!identity={},e={}", identity);
return AjaxResult.error("未获取到请求参数!");
return;
}
String order = rawJson.getString("order");
@ -1854,7 +1854,6 @@ public class InvoiceController {
log.info("[重汽批量开票接口]{},执行完成!", identity);
return AjaxResult.success("数据接受成功!");
}

@ -350,5 +350,5 @@ public interface IInvoiceApiService {
HXResponse qrcodeResult(JSONObject decryptResult, Companyservice companyservice);
/** 回调方法*/
void callBackAisino(InvoiceBack invoiceBack, String callBackUrl, Long id);
void callBackAisino(InvoiceBack invoiceBack, String callBackUrl, String identity,Long id);
}

@ -331,7 +331,7 @@ public class AisinoInvoiceRequestAdapterImpl implements IInvoiceRequestService {
// 平台解密
try {
// TODO: 2023/9/20
order = AisinoInvoiceDecryptUtil.decrypt(order, JKey);
// order = AisinoInvoiceDecryptUtil.decrypt(order, JKey);
} catch (Exception e) {
e.printStackTrace();
throw new JianshuiParamErrorException(ErrorCode.DECRYPT_ERROR, companyservice, "invoice");
@ -411,6 +411,12 @@ public class AisinoInvoiceRequestAdapterImpl implements IInvoiceRequestService {
if (StringUtils.equals(serviceKey, "addBatch") ) {
JSONArray billInfoList = JSONUtil.parseArray(json.get("billInfo"));
//开票条数限制
/*if(billInfoList.size() > 2000){
throw new JianshuiParamErrorException("最大支持开票条数2000条", companyservice, "invoice");
}*/
JSONArray billInfoResult = new JSONArray();
for (Object billInfoTemp : billInfoList) {

@ -1040,7 +1040,7 @@ public class AisinoConsoleInvoiceApiServiceImpl implements IInvoiceApiService {
}
@Override
public void callBackAisino(InvoiceBack invoiceBack, String callBackUrl, Long id) {
public void callBackAisino(InvoiceBack invoiceBack, String callBackUrl,String identity,Long id) {
}

@ -100,9 +100,8 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer
@Override
public HXResponse addInvoice(BillInfo billInfo, Companyservice companyservice) throws IllegalAccessException, InstantiationException {
return new HXResponse("单票接口已关闭!请调用批量接口!");
/* // 1.订单唯一校验。新增历史订单部分(删除)。
// 1.订单唯一校验。新增历史订单部分(删除)。
// 订单号唯一校验 start
String outNO = billInfo.getOutTradeOrderno() != null ? billInfo.getOutTradeOrderno() : "";
if (StrUtil.isEmpty(outNO)) {
@ -111,22 +110,47 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer
// update_by 0未删除 1已删除
Invoice invoiceValidateTemp = new Invoice();
List<Invoice> invoicesValidate = invoiceMapper.selectByOutTradeOrdernoList(companyservice.getCompanyid(), outNO, "0");
// 这里去直接跳出,更新推送关系表去重新推送一下看看。
if (CollectionUtils.isEmpty(invoicesValidate)) {
// 开票回调失败防重复处理 start
if (!CollectionUtils.isEmpty(invoicesValidate)) {
for (Invoice invoice : invoicesValidate) {
QueryWrapper<InvoiceBack> invoiceBackQueryWrapper = new QueryWrapper<>();
invoiceBackQueryWrapper.eq("system_orderno", invoice.getOutTradeOrderno());
List<InvoiceBack> invoiceBackList = invoiceBackMapper.selectList(invoiceBackQueryWrapper);
for (InvoiceBack invoiceBack : invoiceBackList) {
if ("0000".equals(invoiceBack.getResultCode())) {
invoiceBack.setStatus("0");
invoiceBackMapper.updateInvoiceBack(invoiceBack);
log.error("【销项】【总部控制台发票】开票接口,重复订单启动推送,订单号={}", invoice.getOutTradeOrderno());
return new HXResponse("0000", "重复订单已推送!");
}
InvoiceBack invoiceBackVali = invoiceBackMapper.selectOne(invoiceBackQueryWrapper);
if(BeanUtil.isEmpty(invoiceBackVali)){
invoiceBackVali = new InvoiceBack();
invoiceBackVali.setSystemOrderno(invoice.getOutTradeOrderno());
invoiceBackVali.setCreateTime(new Date());
invoiceBackVali.setId(IdUtils.randomUUID());
invoiceBackVali.setIdentity(companyservice.getIdentity());
invoiceBackVali.setBackUrl("");
invoiceBackVali.setStatus("0");
invoiceBackVali.setCreateTime(new Date());
invoiceBackVali.setSystemOrderno(invoice.getOutTradeOrderno());
invoiceBackVali.setBackMsg("");
invoiceBackVali.setResultCode("0000");
invoiceBackVali.setResultMsg("开票成功!");
invoiceBackVali.setUpdateTime(new Date());
invoiceBackMapper.insertInvoiceBack(invoiceBackVali);
}else{
invoiceBackVali.setResultCode("0000");
invoiceBackVali.setResultMsg("开票成功!");
invoiceBackVali.setStatus("0");
invoiceBackVali.setUpdateTime(new Date());
invoiceBackMapper.updateInvoiceBack(invoiceBackVali);
}
// 再次推送
try {
callBackAisino(invoiceBackVali, "", companyservice.getIdentity(),invoice.getId());
} catch (Exception e) {
log.info("【重汽批量开票】发票回调失败!invoiceId={}", invoice.getId());
}
}
return new HXResponse("0000", "重复订单已推送!");
}
// end
@ -178,12 +202,12 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer
// 销方地址电话
// 2022/12/21 中举说浪潮的地址和电话都放到 sellerAddress字段里了
*//*String sellerAddress = billInfo.getSellerAddress();
/*String sellerAddress = billInfo.getSellerAddress();
String sellerTelephone = billInfo.getSellerTelephone();
if (StrUtil.isEmpty(sellerAddress) || StrUtil.isEmpty(sellerTelephone)) {
return new HXResponse("销方地址电话不存在!");
}
aisinoConsoleInvoiceAddDTO.setSellerAddressTel(sellerAddress + sellerTelephone);*//*
aisinoConsoleInvoiceAddDTO.setSellerAddressTel(sellerAddress + sellerTelephone);*/
String sellerAddress = billInfo.getSellerAddress();
if (StrUtil.isEmpty(sellerAddress)) {
return new HXResponse("销方地址电话不存在!");
@ -381,7 +405,7 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer
invoiceMapper.batchInvoiceDetail(invoiceDetailList);
// TODO: 2023/9/26 增加主动回调方式,可配置
// 增加主动回调方式,可配置
ICompanyservicePropService companyserviceProp = SpringUtils.getBean(ICompanyservicePropService.class);
CompanyserviceProp secretIdProp = companyserviceProp.selectPropByKey(companyservice.getCompanyid(), "aisino_callback_url");
if (BeanUtil.isNotEmpty(secretIdProp) && secretIdProp.getValue() != null && !"".equals(secretIdProp.getValue())) {
@ -399,24 +423,30 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer
queryInvoiceBack.setCreateTime(new Date());
queryInvoiceBack.setSystemOrderno(billInfo.getOutTradeOrderno());
queryInvoiceBack.setBackMsg("");
queryInvoiceBack.setResultCode("0000");
queryInvoiceBack.setResultMsg("开票成功!");
queryInvoiceBack.setUpdateTime(new Date());
invoiceBackMapper.insertInvoiceBack(queryInvoiceBack);
} else {
queryInvoiceBack = invoiceBackList.get(0);
queryInvoiceBack.setResultCode("0000");
queryInvoiceBack.setResultMsg("开票成功!");
queryInvoiceBack.setUpdateTime(new Date());
}
// 回调,失败的交给定时任务
InvoiceBack finalQueryInvoiceBack = queryInvoiceBack;
try {
callBackAisino(finalQueryInvoiceBack, callBackUrl, invoice.getId());
callBackAisino(finalQueryInvoiceBack, callBackUrl, "",invoice.getId());
} catch (Exception e) {
log.info("【重汽批量开票】发票回调失败!invoiceId={}", invoice.getId());
}
*//*AsyncManager.me().execute(new TimerTask() {
/*AsyncManager.me().execute(new TimerTask() {
@Override
public void run() {
}
});*//*
});*/
}
HXResponse response = new HXResponse("0000", "同步成功");
@ -424,7 +454,7 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer
return response;
} else {
return new HXResponse(retmsg);
}*/
}
}
/**
@ -435,7 +465,7 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer
* @param id
*/
@Override
public void callBackAisino(InvoiceBack invoiceBack, String callBackUrl, Long id) {
public void callBackAisino(InvoiceBack invoiceBack, String callBackUrl, String identity,Long id) {
// TODO: 2023/10/27 回调处理
@ -447,7 +477,7 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer
// 回调地址获取
if (StrUtil.isEmpty(callBackUrl)) {
ICompanyservicePropService companyserviceProp = SpringUtils.getBean(ICompanyservicePropService.class);
CompanyserviceProp secretIdProp = companyserviceProp.selectPropByKey(id, "aisino_callback_url");
CompanyserviceProp secretIdProp = companyserviceProp.selectPropByKey(Long.valueOf(identity), "aisino_callback_url");
if (BeanUtil.isNotEmpty(secretIdProp) && secretIdProp.getValue() != null && !"".equals(secretIdProp.getValue())) {
callBackUrl = secretIdProp.getValue();
}
@ -480,13 +510,16 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer
if ("0000".equals(status)) {
invoiceBack.setStatus("1");
invoiceBack.setBackMsg(message);
invoiceBack.setUpdateTime(new Date());
invoiceBackMapper.updateInvoiceBack(invoiceBack);
} else if ("9999".equals(status)) {
invoiceBack.setStatus("3");
invoiceBack.setBackMsg(message);
invoiceBack.setUpdateTime(new Date());
invoiceBackMapper.updateInvoiceBack(invoiceBack);
} else {
invoiceBack.setStatus("2");
invoiceBack.setUpdateTime(new Date());
invoiceBack.setBackMsg(status + message);
invoiceBackMapper.updateInvoiceBack(invoiceBack);
}

@ -864,7 +864,7 @@ public class ElephantInvoiceApiServiceImpl implements IInvoiceApiService {
}
@Override
public void callBackAisino(InvoiceBack invoiceBack, String callBackUrl, Long id) {
public void callBackAisino(InvoiceBack invoiceBack, String callBackUrl, String identity,Long id) {
}

@ -885,7 +885,7 @@ public class ElephantInvoiceApiV6ServiceImpl implements IInvoiceApiService {
}
@Override
public void callBackAisino(InvoiceBack invoiceBack, String callBackUrl, Long id) {
public void callBackAisino(InvoiceBack invoiceBack, String callBackUrl, String identity,Long id) {
}

@ -1650,7 +1650,7 @@ public class JcskInvoiceApiServiceImpl implements IInvoiceApiService {
}
@Override
public void callBackAisino(InvoiceBack invoiceBack, String callBackUrl, Long id) {
public void callBackAisino(InvoiceBack invoiceBack, String callBackUrl, String identity,Long id) {
}

@ -99,7 +99,7 @@ public class AddInvoiceBatchTask extends TimerTask {
try {
String requestAdapterKey = serviceManageService.getRequestAdapterKey("invoice", companyservice.getCompanyid());
IInvoiceRequestService invoiceRequestService = invoiceRequestFactory.getService(requestAdapterKey);
decryptResult = invoiceRequestService.decryptZq(order,identity, companyservice, "addBatch");
decryptResult = invoiceRequestService.decryptZq(identity,order, companyservice, "addBatch");
} catch (Exception e) {
log.info("[重汽批量开票接口]请求解密失败!identity={},e={}", identity, e);
return;
@ -183,7 +183,7 @@ public class AddInvoiceBatchTask extends TimerTask {
invoiceBackTemp.setUpdateTime(new Date());
invoiceBackMapper.updateInvoiceBack(invoiceBackTemp);
invoiceService.callBackAisino(invoiceBackTemp, "", Long.valueOf(identity));
invoiceService.callBackAisino(invoiceBackTemp, "", identity,0L);
} else {
invoiceBack.setResultCode("9999");
invoiceBack.setResultMsg(resultHx.getMessage());
@ -192,7 +192,7 @@ public class AddInvoiceBatchTask extends TimerTask {
invoiceBack.setCreateTime(new Date());
invoiceBackMapper.insertInvoiceBack(invoiceBack);
invoiceService.callBackAisino(invoiceBack, "", Long.valueOf(identity));
invoiceService.callBackAisino(invoiceBack, "", identity,0L);
}
log.info("[重汽批量开票接口]提交开票异常,开票失败!identity={},msg={}", identity, resultHx.getMessage());
continue;
@ -211,7 +211,7 @@ public class AddInvoiceBatchTask extends TimerTask {
invoiceBackTemp.setUpdateTime(new Date());
invoiceBackMapper.updateInvoiceBack(invoiceBackTemp);
invoiceService.callBackAisino(invoiceBackTemp, "", Long.valueOf(identity));
invoiceService.callBackAisino(invoiceBackTemp, "", identity,0L);
} else {
invoiceBack.setResultCode("9999");
invoiceBack.setResultMsg("开票失败!");
@ -220,7 +220,7 @@ public class AddInvoiceBatchTask extends TimerTask {
invoiceBack.setCreateTime(new Date());
invoiceBackMapper.insertInvoiceBack(invoiceBack);
invoiceService.callBackAisino(invoiceBack, "", Long.valueOf(identity));
invoiceService.callBackAisino(invoiceBack, "", identity,0L);
}
log.info("[重汽批量开票接口]提交开票异常,开票失败!identity={},e={}", identity, e);

@ -18,6 +18,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
/**
@ -40,8 +41,8 @@ public class InvoiceBackTask
public void bkParams(String params)
{
// TODO: 2023/11/9 回调次数处理
// 默认10
int j = params == null ? 10: Integer.parseInt(params) ;
// 默认1次 定时任务控制,补偿机制
int j = params == null ? 1: Integer.parseInt(params) ;
log.info("[重汽回调定时任务开始执行]---{}次",params);
@ -65,6 +66,7 @@ public class InvoiceBackTask
log.info("【控制台】发票回调,未配置回调地址{}"+identity);
invoiceBack.setStatus("3");
invoiceBack.setBackMsg("未配置回调地址");
invoiceBack.setUpdateTime(new Date());
invoiceBackMapper.updateInvoiceBack(invoiceBack);
break;
}
@ -76,6 +78,7 @@ public class InvoiceBackTask
log.info("【控制台】发票回调,id为空");
invoiceBack.setStatus("3");
invoiceBack.setBackMsg("id为空");
invoiceBack.setUpdateTime(new Date());
invoiceBackMapper.updateInvoiceBack(invoiceBack);
break;
}
@ -106,14 +109,17 @@ public class InvoiceBackTask
if("0000".equals(status)){
invoiceBack.setStatus("1");
invoiceBack.setBackMsg(message);
invoiceBack.setUpdateTime(new Date());
invoiceBackMapper.updateInvoiceBack(invoiceBack);
}else if("9999".equals(status)){
invoiceBack.setStatus("3");
invoiceBack.setBackMsg(message);
invoiceBack.setUpdateTime(new Date());
invoiceBackMapper.updateInvoiceBack(invoiceBack);
}else {
invoiceBack.setStatus("3");
invoiceBack.setBackMsg(status+message);
invoiceBack.setUpdateTime(new Date());
invoiceBackMapper.updateInvoiceBack(invoiceBack);
}
break;
@ -122,6 +128,7 @@ public class InvoiceBackTask
log.info("【控制台】发票回调接口,发送数据异常,id={}", id);
invoiceBack.setStatus("2");
invoiceBack.setBackMsg("发送数据异常");
invoiceBack.setUpdateTime(new Date());
invoiceBackMapper.updateInvoiceBack(invoiceBack);
}
i++;