package com.boying.job; import cn.hutool.core.date.DateUtil; 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.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 YCGetEticketScheduled { @Autowired private OrderRecordService orderRecordService; @Autowired private SystemConfigProperties systemConfigProperties; private Boolean taskFlag = false; @Scheduled(cron = "0 0/1 * * * ?") public void execute() throws Exception { if (taskFlag == true) { System.out.println("正在运行,强制退出-------》"); return; } QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(OrderRecord::getTicketStatus, 2) .eq(OrderRecord::getType,1) .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 urlIp = systemConfigProperties.getIp4(); String urlRoad = systemConfigProperties.getDIRECTMKOTEINVOICE(); try { 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()); String idStr = orderRecord.getId()+""; String dateStr = DateUtil.currentSeconds()+""; String l = idStr + dateStr; List< DirectTicket.info> infos = new ArrayList<>(); //开票申请 DirectTicket.info info = new DirectTicket.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); DirectTicket directTicket = new DirectTicket(); directTicket.setBizcode(l); directTicket.setIssuedate(format); directTicket.setIssuetime(format2); directTicket.setPayerpartytype("1"); directTicket.setPayer(orderRecord.getCarNo()); directTicket.setAmt(orderRecord.getMoney()); directTicket.setUsername("张娇"); directTicket.setChecker("乔宁"); directTicket.setPayinfo(json); directTicket.setState(1); directTicket.setBilltypeid("1252"); String jsonStr = JSON.toJSONString(directTicket, 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())+"申请开票实体为:"+directTicket+",\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); orderRecord.setBizCode(l); txt += orderRecord+",\n"; writeTxt(txt); orderRecordService.saveOrUpdate(orderRecord); }else { 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("打印错误"); } } }