parent
0f4e34100d
commit
65aaab6dc2
@ -0,0 +1,200 @@ |
||||
package com.jianshui.invoice.task; |
||||
|
||||
import cn.hutool.core.util.IdUtil; |
||||
import cn.hutool.http.HttpUtil; |
||||
import cn.hutool.json.JSONUtil; |
||||
import com.alibaba.fastjson.JSON; |
||||
import com.alibaba.fastjson.JSONArray; |
||||
import com.alibaba.fastjson.JSONObject; |
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.jianshui.common.core.domain.AjaxResult; |
||||
import com.jianshui.common.core.domain.entity.Companyservice; |
||||
import com.jianshui.common.exception.jianshui.JianshuiServiceException; |
||||
import com.jianshui.common.utils.spring.SpringUtils; |
||||
import com.jianshui.invoice.constant.elephant.ElephantConstantsV6; |
||||
import com.jianshui.invoice.domain.BillInfo; |
||||
import com.jianshui.invoice.domain.Invoice; |
||||
import com.jianshui.invoice.domain.InvoiceBack; |
||||
import com.jianshui.invoice.domain.InvoiceDetail; |
||||
import com.jianshui.invoice.mapper.BillInfoMapper; |
||||
import com.jianshui.invoice.mapper.InvoiceBackMapper; |
||||
import com.jianshui.invoice.utils.elephant.ElephantUtils; |
||||
import com.jianshui.system.domain.CompanyserviceProp; |
||||
import com.jianshui.system.service.ICompanyservicePropService; |
||||
import com.jianshui.system.service.ICompanyserviceService; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springframework.beans.factory.annotation.Autowired; |
||||
import org.springframework.stereotype.Component; |
||||
import java.text.SimpleDateFormat; |
||||
import java.util.Date; |
||||
import java.util.List; |
||||
import java.util.Random; |
||||
|
||||
/** |
||||
* 定时任务-红票推送 |
||||
*/ |
||||
@Component("redInvoiceBackTask") |
||||
@Slf4j |
||||
public class RedInvoiceBackTask { |
||||
|
||||
@Autowired |
||||
private ICompanyserviceService iCompanyserviceService; |
||||
|
||||
@Autowired |
||||
private ICompanyservicePropService propService; |
||||
|
||||
@Autowired |
||||
private BillInfoMapper billInfoMapper; |
||||
|
||||
@Autowired |
||||
private InvoiceBackMapper invoiceBackMapper; |
||||
|
||||
private SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
||||
|
||||
private Random random = new Random(); |
||||
|
||||
public void getRedInvoiceAndBack() { |
||||
//查询需要推送的identity
|
||||
CompanyserviceProp companyservicePropParam = new CompanyserviceProp(); |
||||
companyservicePropParam.setKey("red_invoice_back_service"); |
||||
List<CompanyserviceProp> companyserviceProps = propService.selectCompanyservicePropList(companyservicePropParam); |
||||
//判断是否为空
|
||||
if (companyserviceProps != null && companyserviceProps.size() > 0) { |
||||
//遍历处理每一个公司
|
||||
for (CompanyserviceProp companyserviceProp : companyserviceProps) { |
||||
try { |
||||
Companyservice companyservice = iCompanyserviceService.selectCompanyserviceByCompanyid(companyserviceProp.getCompanyid()); |
||||
JSONObject param = new JSONObject(); |
||||
param.put("nsrsbh", companyservice.getSellertax()); |
||||
param.put("startTime", companyserviceProp.getValue()); |
||||
//调用itax获取发票
|
||||
AjaxResult queryResult = ElephantUtils.sendRequestWithoutTokenV6New(ElephantConstantsV6.QD_GET_RED_INVOICE_BACK, "", JSONUtil.parse(param), companyservice); |
||||
log.info("【销项发票】【大象发票】获取重汽红票请求结果{}", queryResult.toString()); |
||||
|
||||
// 判断外层报文是否成功
|
||||
if (queryResult.isError()) { |
||||
throw new JianshuiServiceException(queryResult.getMsg()); |
||||
} |
||||
|
||||
//报文格式转化
|
||||
List<Invoice> invoices = JSONArray.parseArray((String) queryResult.getData(), Invoice.class); |
||||
|
||||
if (invoices != null && invoices.size() > 0) { |
||||
for (Invoice invoice : invoices) { |
||||
try { |
||||
//判断发票是否重复
|
||||
QueryWrapper<InvoiceBack> queryWrapper = new QueryWrapper<>(); |
||||
queryWrapper.eq("status", "1"); |
||||
queryWrapper.eq("back_msg", invoice.getFphm()); |
||||
InvoiceBack invoiceBackSuccess = invoiceBackMapper.selectOne(queryWrapper); |
||||
if (invoiceBackSuccess != null) { |
||||
continue; |
||||
} |
||||
//获取蓝字发票
|
||||
BillInfo billInfo = billInfoMapper.findBillInfoByFphm(invoice.getOriginFphm()); |
||||
//处理大象没有返回的值
|
||||
invoice.setOutTradeOrderno(IdUtil.randomUUID()); |
||||
invoice.setId(billInfo.getId()+random.nextLong()); |
||||
invoice.setBillInfoId(billInfo.getId()+random.nextLong()); |
||||
invoice.setSystemOrderno(billInfo.getSystemOrderno()); |
||||
invoice.setCompanyId(companyserviceProp.getCompanyid()); |
||||
//转换发票类型
|
||||
if ("01".equals(invoice.getInvoiceType()) || "001".equals(invoice.getInvoiceType())) { |
||||
invoice.setInvoiceType("81"); |
||||
} else { |
||||
invoice.setInvoiceType("82"); |
||||
} |
||||
invoice.setState(2); |
||||
for (InvoiceDetail invoiceDetail : invoice.getInvoiceDetailList()) { |
||||
invoiceDetail.setId(random.nextLong()); |
||||
invoiceDetail.setInvoiceId(random.nextLong()); |
||||
} |
||||
//获取回调地址
|
||||
CompanyserviceProp secretIdProp = propService.selectPropByKey(Long.valueOf(companyserviceProp.getCompanyid()), "aisino_callback_url"); |
||||
//执行回调
|
||||
JSONObject invoiceJson = JSON.parseObject(JSON.toJSONString(invoice)); |
||||
invoiceJson.put("url",invoice.getInvoicePdfUrl()); |
||||
String result = HttpUtil.post(secretIdProp.getValue(),invoiceJson.toJSONString()); |
||||
//处理返回结果
|
||||
InvoiceBack invoiceBack = new InvoiceBack(); |
||||
invoiceBack.setId(IdUtil.randomUUID()); |
||||
invoiceBack.setSystemOrderno(invoice.getOutTradeOrderno()); |
||||
invoiceBack.setBackUrl(secretIdProp.getValue()); |
||||
invoiceBack.setIdentity(String.valueOf(companyserviceProp.getCompanyid())); |
||||
invoiceBack.setCreateTime(new Date()); |
||||
invoiceBack.setBackMsg(JSONUtil.toJsonStr(invoice)); |
||||
invoiceBack.setNum(1); |
||||
cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(result); |
||||
if (jsonObject != null) { |
||||
String status = jsonObject.get("status") != null ? jsonObject.get("status").toString() : ""; |
||||
String message = jsonObject.get("message") != null ? jsonObject.get("message").toString() : ""; |
||||
invoiceBack.setResultCode(status); |
||||
invoiceBack.setResultMsg(message); |
||||
if ("0000".equals(status)) { |
||||
invoiceBack.setStatus("1"); |
||||
invoiceBack.setBackMsg(invoice.getFphm()); |
||||
invoiceBack.setUpdateTime(new Date()); |
||||
invoiceBackMapper.insertInvoiceBack(invoiceBack); |
||||
} else if ("9999".equals(status)) { |
||||
invoiceBack.setStatus("4"); |
||||
invoiceBack.setUpdateTime(new Date()); |
||||
invoiceBackMapper.insertInvoiceBack(invoiceBack); |
||||
} else { |
||||
invoiceBack.setStatus("4"); |
||||
invoiceBack.setUpdateTime(new Date()); |
||||
invoiceBackMapper.insertInvoiceBack(invoiceBack); |
||||
} |
||||
} |
||||
}catch (Exception e){ |
||||
log.error("处理发票和回调失败{}",e); |
||||
} |
||||
} |
||||
invoices.sort((e1, e2) -> |
||||
Long.valueOf(e1.getStartTime()) > Long.valueOf(e2.getStartTime()) ? 1 : -1 |
||||
); |
||||
Date date = new Date(Long.valueOf(invoices.get(0).getStartTime())); |
||||
companyserviceProp.setValue(formatter.format(date)); |
||||
propService.updateCompanyserviceProp(companyserviceProp); |
||||
} |
||||
} catch (Exception e) { |
||||
log.error("回调前获取发票信息失败{}",e); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
public void failRetryRedInvoiceBack(){ |
||||
QueryWrapper<InvoiceBack> queryWrapper = new QueryWrapper<>(); |
||||
queryWrapper.eq("status", "4"); |
||||
List<InvoiceBack> invoiceBacks = invoiceBackMapper.selectList(queryWrapper); |
||||
|
||||
if (invoiceBacks != null && invoiceBacks.size() > 0){ |
||||
|
||||
ICompanyservicePropService companyserviceProp = SpringUtils.getBean(ICompanyservicePropService.class); |
||||
|
||||
for (InvoiceBack invoiceBack : invoiceBacks) { |
||||
try { |
||||
String identity = invoiceBack.getIdentity(); |
||||
CompanyserviceProp secretIdProp = companyserviceProp.selectPropByKey(Long.valueOf(identity), "aisino_callback_url"); |
||||
String result = HttpUtil.post(secretIdProp.getValue(), invoiceBack.getBackMsg()); |
||||
cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(result); |
||||
if(jsonObject != null){ |
||||
String status = jsonObject.get("status") != null ? jsonObject.get("status").toString():""; |
||||
String message = jsonObject.get("message")!= null ? jsonObject.get("message").toString():""; |
||||
|
||||
if("0000".equals(status)){ |
||||
JSONObject param = JSONObject.parseObject(invoiceBack.getBackMsg()); |
||||
invoiceBack.setStatus("1"); |
||||
invoiceBack.setBackMsg(param.getString("fphm")); |
||||
invoiceBack.setUpdateTime(new Date()); |
||||
invoiceBackMapper.updateInvoiceBack(invoiceBack); |
||||
} |
||||
} |
||||
}catch (Exception e){ |
||||
log.error("重汽红票回推重试失败{}",e); |
||||
} |
||||
} |
||||
} |
||||
|
||||
} |
||||
} |
Loading…
Reference in new issue