kongdeqiang
2023-04-23 f990f7e352782c74a5af3b54651cf1a21fc0d099
修改开票
2个文件已修改
3个文件已添加
438 ■■■■■ 已修改文件
src/main/java/com/boying/controller/phone/EticketController.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/boying/entity/DirectTicket.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/boying/entity/OrderRecord.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/boying/job/YCEticketScheduled.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/boying/job/YCGetEticketScheduled.java 156 ●●●●● 补丁 | 查看 | 原始文档 | 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("打印错误");
        }
    }
}