kongdeqiang
2023-06-05 a41b28d983f46f90a41ff7d2aa47179541c1be99
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
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("打印错误");
        }
    }
 
}