kongdeqiang
2023-01-17 fb1a96ec056ee660ff3c264cdd64cdb8ac5d7540
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
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("打印错误");
        }
    }
 
 
 
 
}