chengf
2026-01-30 b8bf2507bc7b23c90bc6dc71ea2460e277d3800a
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
package com.java110.api.importData;
 
import com.alibaba.fastjson.JSONObject;
import com.java110.core.factory.GenerateCodeFactory;
import com.java110.dto.payFee.PayFeeBatchDto;
import com.java110.dto.user.UserDto;
import com.java110.intf.fee.IPayFeeBatchV1InnerServiceSMO;
import com.java110.intf.user.IUserInnerServiceSMO;
import com.java110.po.payFee.PayFeeBatchPo;
import com.java110.utils.util.Assert;
import org.springframework.beans.factory.annotation.Autowired;
 
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
 
public class DefaultImportDataAdapt {
 
    @Autowired
    private IPayFeeBatchV1InnerServiceSMO payFeeBatchV1InnerServiceSMOImpl;
 
    private static final Date EXCEL_EPOCH;
 
    static {
        // 初始化Excel起始日期(1899-12-30,对应Excel的0天)
        Calendar cal = Calendar.getInstance();
        cal.set(1899, Calendar.DECEMBER, 30, 0, 0, 0);
        cal.set(Calendar.MILLISECOND, 0);
        EXCEL_EPOCH = cal.getTime();
    }
 
    /**
     * 将Excel日期数值(如45734.0)转换为Date对象
     * @param excelDate Excel日期数值
     * @return 对应的Date对象
     */
    public static Date doubleToDate(double excelDate) {
        // 处理Excel 1900年闰年错误(Excel错误地将1900年视为闰年)
        long days = (long) Math.floor(excelDate);
        if (days >= 60) { // 1900-03-01及之后的日期需要减1天
            days--;
        }
 
        // 计算总毫秒数(天数部分 + 时间部分)
        long totalMillis = (long)(days * 86400000L) // 1天 = 86400000毫秒
                + (long)((excelDate - days) * 86400000L);
 
        // 从基准日期开始累加毫秒数
        return new Date(EXCEL_EPOCH.getTime() + totalMillis);
    }
 
    /**
     * 处理Excel日期字符串(如"45734.0"),转换为"yyyy-MM-dd"格式
     * @param strDate Excel日期数值字符串
     * @return 格式化后的日期字符串
     * @throws ParseException 转换失败时抛出
     */
    public String handleExcelDateString(String strDate){
        // 1. 将字符串转换为double(如"45734.0" -> 45734.0)
        double excelDateValue = Double.parseDouble(strDate);
 
        // 2. 将Excel数值转换为Date对象
        Date tDate = doubleToDate(excelDateValue);
 
        // 3. 格式化为"yyyy-MM-dd"
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        return sdf.format(tDate);
    }
 
 
    @Autowired
    private IUserInnerServiceSMO userInnerServiceSMOImpl;
    protected boolean hasSpecialCharacters(String str) {
        if (str.contains("-") || str.contains("#") || str.contains("?") || str.contains("&")) {
            return true;
        }
 
        return false;
    }
 
    protected boolean hasRoomSpecialCharacters(String str) {
        if ( str.contains("#") || str.contains("?") || str.contains("&")) {
            return true;
        }
 
        return false;
    }
 
 
    //解析Excel日期格式
    public static String excelDoubleToDate(String strDate) {
        if (strDate.length() == 5) {
            try {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                Date tDate = DoubleToDate(Double.parseDouble(strDate));
                return sdf.format(tDate);
            } catch (Exception e) {
                e.printStackTrace();
                return strDate;
            }
        }
        return strDate;
    }
 
 
    //解析Excel日期格式
    public static Date DoubleToDate(Double dVal) {
        Date tDate = new Date();
        long localOffset = tDate.getTimezoneOffset() * 60000; //系统时区偏移 1900/1/1 到 1970/1/1 的 25569 天
        tDate.setTime((long) ((dVal - 25569) * 24 * 3600 * 1000 + localOffset));
 
        return tDate;
    }
 
    /**
     * 生成批次号
     *
     * @param reqJson
     */
    public void generatorBatch(JSONObject reqJson) {
        PayFeeBatchPo payFeeBatchPo = new PayFeeBatchPo();
        payFeeBatchPo.setBatchId(GenerateCodeFactory.getGeneratorId("12"));
        payFeeBatchPo.setCommunityId(reqJson.getString("communityId"));
        payFeeBatchPo.setCreateUserId(reqJson.getString("userId"));
        UserDto userDto = new UserDto();
        userDto.setUserId(reqJson.getString("userId"));
        List<UserDto> userDtos = userInnerServiceSMOImpl.getUsers(userDto);
 
        Assert.listOnlyOne(userDtos, "用户不存在");
        payFeeBatchPo.setCreateUserName(userDtos.get(0).getUserName());
        payFeeBatchPo.setState(PayFeeBatchDto.STATE_NORMAL);
        payFeeBatchPo.setMsg("正常");
        int flag = payFeeBatchV1InnerServiceSMOImpl.savePayFeeBatch(payFeeBatchPo);
 
        if (flag < 1) {
            throw new IllegalArgumentException("生成批次失败");
        }
 
        reqJson.put("batchId", payFeeBatchPo.getBatchId());
    }
 
}