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