src/main/java/com/boying/controller/phone/EticketController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/boying/entity/DirectTicket.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/boying/entity/OrderRecord.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/boying/job/YCEticketScheduled.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/boying/job/YCGetEticketScheduled.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/boying/controller/phone/EticketController.java
@@ -7,10 +7,7 @@ import com.alibaba.fastjson.serializer.SerializerFeature; import com.boying.common.ReturnData; import com.boying.common.SystemConfigProperties; import com.boying.entity.ApplyTicket; import com.boying.entity.EticketFile; import com.boying.entity.FileInfo; import com.boying.entity.Mkoteinvoice; import com.boying.entity.*; import com.boying.util.FileUtil; import com.boying.util.HTTPEntityUtil; import com.boying.util.ObjectToMapUtil; @@ -30,6 +27,93 @@ /** * 电子票据制作流程一 : 开具电子缴款书->发开具电子票据申请->获取电子票据文件 */ public static void main(String[] args) { //直接开票 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 = 111111+""; 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(3.0); 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("冀A0C5MA"); directTicket.setAmt(3.0); directTicket.setUsername("张娇"); directTicket.setChecker("乔宁"); directTicket.setPayinfo(json); directTicket.setState(1); String jsonStr = JSON.toJSONString(directTicket, SerializerFeature.WriteDateUseDateFormat); Map<String, Object> map = JSON.parseObject(jsonStr, new TypeReference<Map<String, Object>>() {}); RestTemplate restTemplate = new RestTemplate(); ResponseEntity<ReturnData> entity = restTemplate.postForEntity("http://10.255.200.204:7991/directmkoteinvoice", 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()); Object o = entity.getBody().getData().get(0); String s = JSON.toJSONString(o); Map<String,Object> mapTypes = (Map)JSON.parse(s); System.out.println("bizcode:"+l); System.out.println("einvoicecode:"+(String) mapTypes.get("einvoicecode")); System.out.println("einvoicenumber:"+(String) mapTypes.get("einvoicenumber")); System.out.println("randomnumber:"+(String) mapTypes.get("randomnumber")); System.out.println("einvoiceid:"+(String) mapTypes.get("einvoiceid")); System.out.println("einvoicefilename:"+(String) mapTypes.get("einvoicefilename")); }else { } } public static void main9(String[] args) { Map<String,Object> map1 = new HashMap<>(); map1.put("einvoicecode", ""); map1.put("einvoicenumber",""); map1.put("bizcode", ""); map1.put("randomnumber",""); map1.put("billfiletype",1); SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd_HH_mm_ss"); String txt = sdf3.format(new Date())+"申请票据文件:"+map1+",\n"; RestTemplate restTemplate = new RestTemplate(); ResponseEntity<ReturnData> entity = restTemplate.postForEntity("http://10.255.200.204:7991/geteinvoicebybizcode", HTTPEntityUtil.setEntity(map1), ReturnData.class); if(entity.getBody().getCode() == 1){ System.out.println(entity.getBody()); txt += entity.getBody()+",\n"; Object o1 = entity.getBody().getData().get(0); String s1 = JSON.toJSONString(o1); EticketFile eticketFile = JSONObject.parseObject(s1, EticketFile.class); System.out.println(eticketFile); FileInfo fileInfo = FileUtil.generateBase64StringToFile(eticketFile.getEinvoicefile(), 1,1); if(fileInfo != null){ System.out.println(fileInfo); } }else { } } public static void main4(String[] args) { long l = DateUtil.currentSeconds(); @@ -73,7 +157,7 @@ //ReturnData(code=1, msg=申请成功, total=0, data=[{filldate=2022-12-20, eticketnum=13040622000000000049, amt=0.1, payurl=, payinfo=[{"incitemname":"停车泊位及公共停车场等有偿使用收入","amount":1,"incitemcode":"072101","amt":0.1,"ordernum":1}], payer=峰峰智慧停车, payee=河北省财政厅, businum=1671548968, payerbank=, payeraccount=, writedate=2022-12-20 23:10:24, paybankname=农业银行、中国银行、建设银行、河北省农村信用社联合社、邮政储蓄银行, id=6de66ef8-8078-11ed-b059-52540035b66d, sn=e0a682dc-a95e-46ab-810f-850fc7fc9c41}], singleData=null) } public static void main(String[] args) throws IllegalAccessException { public static void main8(String[] args) throws IllegalAccessException { long l = DateUtil.currentSeconds(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdf2 = new SimpleDateFormat("hh:mm:ss"); src/main/java/com/boying/entity/DirectTicket.java
New file @@ -0,0 +1,38 @@ package com.boying.entity; import lombok.Data; /** * @author kdq * @version 1.0.0 * @ClassName DirectTicket.java * @Description TODO * @createTime 2023年04月23日 08:46:00 */ @Data public class DirectTicket { private String bizcode; private String issuedate; private String issuetime; private String payerpartytype; private String payerpartycode; private String payer; private String payeraccount; private String payerbank; private double amt; private String payinfo; private String username; private String checker; private String remark; private int state =1; private String billtypeid; @Data public static class info{ private int ordernum; private String incitemcode; private String incitemname; private int amount; private double amt; } } src/main/java/com/boying/entity/OrderRecord.java
@@ -71,8 +71,15 @@ @Column(columnDefinition = "varchar(100) comment 'code2'") private String code2; @ApiModelProperty(value = "randomnumber") @Column(columnDefinition = "varchar(100) comment 'randomnumber'") /** * 流水号 */ @ApiModelProperty(value = "业务流水号") @Column(columnDefinition = "varchar(100) comment '业务流水号'") private String bizCode; @ApiModelProperty(value = "校验码") @Column(columnDefinition = "varchar(100) comment '校验码'") private String randomnumber; @ApiModelProperty(value = "einvoicefilename") @@ -83,16 +90,16 @@ @Column(columnDefinition = "varchar(100) comment 'einvoiceid'") private String einvoiceid; @ApiModelProperty(value = "einvoicenumber") @Column(columnDefinition = "varchar(100) comment 'einvoicenumber'") @ApiModelProperty(value = "电子票据号码") @Column(columnDefinition = "varchar(100) comment '电子票据号码'") private String einvoicenumber; @ApiModelProperty(value = "einvoicecode") @Column(columnDefinition = "varchar(100) comment 'einvoicecode'") @ApiModelProperty(value = "电子票据代码") @Column(columnDefinition = "varchar(100) comment '电子票据代码'") private String einvoicecode; @ApiModelProperty(value = "billfiletype") @Column(columnDefinition = "int comment 'billfiletype'") @ApiModelProperty(value = "png") @Column(columnDefinition = "int comment 'png'") private Integer billfiletype; src/main/java/com/boying/job/YCEticketScheduled.java
New file @@ -0,0 +1,127 @@ package com.boying.job; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.boying.common.ReturnData; import com.boying.common.SystemConfigProperties; import com.boying.entity.EticketFile; import com.boying.entity.FileInfo; import com.boying.entity.OrderRecord; import com.boying.service.FileInfoService; import com.boying.service.OrderRecordService; import com.boying.util.FileUtil; import com.boying.util.HTTPEntityUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; 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.Date; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author kdq * @version 1.0.0 * @ClassName YCEticketScheduled.java * @Description TODO * @createTime 2023年04月23日 10:46:00 */ @Slf4j @Component public class YCEticketScheduled { @Autowired private OrderRecordService orderRecordService; @Autowired private FileInfoService fileInfoService; @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<OrderRecord> wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(OrderRecord::getTicketStatus, 2) .isNotNull(OrderRecord::getEinvoicecode) .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 urlIp = systemConfigProperties.getIp4(); String urlRoad = systemConfigProperties.getGETEINVOICEBYBIZCODE(); Map<String,Object> map1 = new HashMap<>(); map1.put("einvoicecode", orderRecord.getEinvoicecode()); map1.put("einvoicenumber",orderRecord.getEinvoicenumber()); map1.put("bizcode", orderRecord.getBizCode()); map1.put("randomnumber", orderRecord.getRandomnumber()); map1.put("billfiletype",1); SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd_HH_mm_ss"); String txt = sdf3.format(new Date())+"申请票据文件:"+map1+",\n"; RestTemplate restTemplate = new RestTemplate(); ResponseEntity<ReturnData> entity = restTemplate.postForEntity(urlIp+urlRoad, HTTPEntityUtil.setEntity(map1), ReturnData.class); if(entity.getBody().getCode() == 1){ System.out.println(entity.getBody()); txt += entity.getBody()+",\n"; Object o1 = entity.getBody().getData().get(0); String s1 = JSON.toJSONString(o1); EticketFile eticketFile = JSONObject.parseObject(s1, EticketFile.class); System.out.println(eticketFile); txt += eticketFile+"\n"; FileInfo fileInfo = FileUtil.generateBase64StringToFile(eticketFile.getEinvoicefile(), 1,1); if(fileInfo != null){ System.out.println(fileInfo); fileInfoService.saveOrUpdate(fileInfo); orderRecord.setFileId(fileInfo.getId()); orderRecord.setTicketStatus(1); orderRecordService.saveOrUpdate(orderRecord); txt += fileInfo+"\n"; writeTxt(txt); } }else { System.out.println(entity.getBody()); txt += "查询有误,"+entity.getBody()+",\n"; writeTxt(txt); } } 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("打印错误"); } } } src/main/java/com/boying/job/YCGetEticketScheduled.java
New file @@ -0,0 +1,156 @@ 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.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 FileInfoService fileInfoService; @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<OrderRecord> wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(OrderRecord::getTicketStatus, 2) .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 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); String jsonStr = JSON.toJSONString(directTicket, 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())+"申请开票实体为:"+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<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("打印错误"); } } }