package com.boying.job;
|
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.thread.ThreadUtil;
|
import cn.hutool.db.sql.Order;
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.TypeReference;
|
import com.alibaba.fastjson.serializer.SerializerFeature;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.boying.common.ReturnData;
|
import com.boying.common.SystemConfigProperties;
|
import com.boying.controller.phone.PayController;
|
import com.boying.entity.*;
|
import com.boying.service.FileInfoService;
|
import com.boying.service.OrderRecordService;
|
import com.boying.util.FileUtil;
|
import com.boying.util.HTTPEntityUtil;
|
import com.google.gson.Gson;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.http.ResponseEntity;
|
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.stereotype.Component;
|
import org.springframework.web.client.RestTemplate;
|
|
import java.io.BufferedWriter;
|
import java.io.FileWriter;
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
|
@Slf4j
|
@Component
|
public class EticketScheduled {
|
|
@Autowired
|
private OrderRecordService orderRecordService;
|
@Autowired
|
private PayController payController;
|
@Autowired
|
private SystemConfigProperties systemConfigProperties;
|
@Autowired
|
private FileInfoService fileInfoService;
|
private Boolean taskFlag = false;
|
|
@Scheduled(cron = "0/10 * * * * ?")
|
public void execute() throws Exception {
|
if(taskFlag == true){
|
System.out.println("正在运行,强制退出-------》");
|
return;
|
}
|
taskFlag = true;
|
QueryWrapper<OrderRecord> wrapper = new QueryWrapper<>();
|
wrapper.lambda()
|
.eq(OrderRecord::getStatus,1)
|
.eq(OrderRecord::getType,1)
|
.eq(OrderRecord::getTicketStatus,0)
|
.orderByDesc(OrderRecord::getCreateTime);
|
List<OrderRecord> list = orderRecordService.list(wrapper);
|
if(list.size() > 0){
|
if(list.size() > 50){
|
list = list.subList(0,49);
|
}
|
//开取发票
|
for (OrderRecord orderRecord : list) {
|
System.out.println("正在申请开票:"+orderRecord);
|
doTicket(orderRecord);
|
}
|
}
|
taskFlag = false;
|
}
|
|
public void doTicket(OrderRecord orderRecord){
|
String urlRoad = systemConfigProperties.getMKOTEINVOICE();
|
String urlIp = systemConfigProperties.getIp4();
|
try {
|
long l = DateUtil.currentSeconds();
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
SimpleDateFormat sdf2 = new SimpleDateFormat("hh:mm:ss");
|
String format = sdf.format(new Date());
|
String format2 = sdf2.format(new Date());
|
|
List< Mkoteinvoice.info> infos = new ArrayList<>();
|
//开票申请
|
Mkoteinvoice.info info = new Mkoteinvoice.info();
|
info.setOrdernum(1);
|
info.setAmt(orderRecord.getMoney());
|
info.setAmount(1);
|
info.setIncitemcode("072101");
|
info.setIncitemname("停车泊位及公共停车场等有偿使用收入");
|
infos.add(info);
|
//list转json
|
Gson gson = new Gson();
|
String json = gson.toJson(infos);
|
|
Mkoteinvoice mkoteinvoice = new Mkoteinvoice();
|
mkoteinvoice.setEticketnum(orderRecord.getPayCode());
|
mkoteinvoice.setIssuedate(format);
|
mkoteinvoice.setIssuetime(format2);
|
mkoteinvoice.setPayerpartytype("1");
|
mkoteinvoice.setPayer(orderRecord.getCarNo());
|
//mkoteinvoice.setPayer("峰峰智慧停车");
|
mkoteinvoice.setAmt(orderRecord.getMoney());
|
mkoteinvoice.setUsername("张娇");
|
mkoteinvoice.setChecker("乔宁");
|
mkoteinvoice.setPayinfo(json);
|
mkoteinvoice.setState(1);
|
|
String jsonStr = JSON.toJSONString(mkoteinvoice, SerializerFeature.WriteDateUseDateFormat);
|
Map<String, Object> map = JSON.parseObject(jsonStr, new TypeReference<Map<String, Object>>() {});
|
RestTemplate restTemplate = new RestTemplate();
|
ResponseEntity<ReturnData> entity = restTemplate.postForEntity(urlIp+urlRoad, HTTPEntityUtil.setEntity(map), ReturnData.class);
|
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd_HH_mm_ss");
|
String txt = sdf3.format(new Date())+"申请开票实体为:"+mkoteinvoice+",\n";
|
txt += map+",\n";
|
if(entity.getBody().getCode() ==1 ){
|
//申请成功,去获取开票文件
|
System.out.println(entity.getBody());
|
txt += entity.getBody()+",\n";
|
Object o = entity.getBody().getData().get(0);
|
String s = JSON.toJSONString(o);
|
Map<String,Object> mapTypes = (Map)JSON.parse(s);
|
orderRecord.setEinvoicecode((String) mapTypes.get("einvoicecode"));
|
orderRecord.setEinvoicenumber((String) mapTypes.get("einvoicenumber"));
|
orderRecord.setRandomnumber((String) mapTypes.get("randomnumber"));
|
orderRecord.setEinvoiceid((String) mapTypes.get("einvoiceid"));
|
orderRecord.setEinvoicefilename((String) mapTypes.get("einvoicefilename"));
|
orderRecord.setBillfiletype(1);
|
txt += orderRecord+",\n";
|
writeTxt(txt);
|
orderRecordService.saveOrUpdate(orderRecord);
|
}else {
|
System.out.println(entity.getBody());
|
txt += entity.getBody()+",\n";
|
writeTxt(txt);
|
}
|
}catch (Exception e){
|
System.out.println(orderRecord.getPayCode()+"开票异常");
|
e.printStackTrace();
|
}
|
}
|
|
|
private void writeTxt( String txt)
|
{
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
|
try
|
{
|
FileWriter f = new FileWriter(systemConfigProperties.getLogPath()+"申请开票日志"+sdf.format(new Date())+".txt",true);
|
BufferedWriter bw=new BufferedWriter(f);
|
bw.write(txt);
|
bw.newLine();
|
bw.close();
|
}
|
catch(Exception e)
|
{
|
System.out.println("打印错误");
|
}
|
}
|
|
|
|
|
}
|