chengf
2025-07-22 b63f41b8a0cfce68770e5cb02c8dd3fd994f0c59
service-api/src/main/java/com/java110/api/importData/DefaultImportDataAdapt.java
@@ -1,11 +1,77 @@
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;
@@ -48,4 +114,31 @@
        return tDate;
    }
    /**
     * 生成批次号
     *
     * @param reqJson
     */
    protected 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());
    }
}