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 wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(OrderRecord::getStatus,1) .eq(OrderRecord::getType,1) .eq(OrderRecord::getTicketStatus,0) .orderByDesc(OrderRecord::getCreateTime); List 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 map = JSON.parseObject(jsonStr, new TypeReference>() {}); RestTemplate restTemplate = new RestTemplate(); ResponseEntity 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 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("打印错误"); } } }