fix
songhuangfeng123
2022-07-27 a2c3c7a3032ac93bbcfd83f055b036f7e8b6c20b
fix
已重命名2个文件
已修改1个文件
已添加14个文件
1767 ■■■■■ 文件已修改
emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/controller/EmergencyWorkApproveController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/baseService/impl/EmergencyWorkApproveServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/impl/EmergencyWorkApproveServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/EmergencyDrillEvaluationFileInfo.java 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/enums/EquipmentResultCodes.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/model/dto/req/ExcApprove.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/model/dto/req/TargetMngImportExcel.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/model/dto/resp/TargetDutySummaryExcel.java 174 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/model/dto/resp/TargetMngExcel.java 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/utils/DateUtils.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/utils/poihelper/ExcelCell.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/utils/poihelper/ExcelLog.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/utils/poihelper/ExcelLogs.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/utils/poihelper/ExcelSheet.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/utils/poihelper/ExcelUtil.java 758 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/utils/poihelper/FieldForSortting.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tmlog.lck 补丁 | 查看 | 原始文档 | blame | 历史
emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/controller/EmergencyWorkApproveController.java
@@ -16,7 +16,7 @@
import java.util.List;
@RestController
@RequestMapping("/WorkApprove")
@RequestMapping("/emergencyWorkApprove")
public class EmergencyWorkApproveController {
    @Autowired
emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/baseService/impl/EmergencyWorkApproveServiceImpl.java
文件名从 emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/baseService/impl/EmergencyEmergencyWorkApproveServiceImpl.java 修改
@@ -13,8 +13,8 @@
import java.util.List;
@Service("workApproveInfoService")
public class EmergencyEmergencyWorkApproveServiceImpl extends ServiceImpl<EmergencyWorkApproveInfoRepository, EmergencyWorkApproveInfo> implements EmergencyWorkApproveInfoService {
@Service("emergencyWorkApproveInfoService")
public class EmergencyWorkApproveServiceImpl extends ServiceImpl<EmergencyWorkApproveInfoRepository, EmergencyWorkApproveInfo> implements EmergencyWorkApproveInfoService {
    @Autowired
    private EmergencyWorkApproveInfoRepository EmergencyWorkApproveInfoRepository;
emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/impl/EmergencyWorkApproveServiceImpl.java
文件名从 emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/impl/EmergencyEmergencyWorkApproveServiceImpl.java 修改
@@ -25,8 +25,8 @@
import java.util.Date;
import java.util.List;
@Service("workApproveService")
public class EmergencyEmergencyWorkApproveServiceImpl implements EmergencyWorkApproveService {
@Service("emergencyWorkApproveService")
public class EmergencyWorkApproveServiceImpl implements EmergencyWorkApproveService {
    @Autowired
    private EmergencyWorkApproveInfoService workApproveInfoService;
equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/EmergencyDrillEvaluationFileInfo.java
对比新文件
@@ -0,0 +1,117 @@
package com.gkhy.safePlatform.equipment.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.util.Date;
@TableName("emergency_drill_evaluation_file")
public class EmergencyDrillEvaluationFileInfo {
    @TableId(type = IdType.AUTO)
    private Long id;
    private Boolean delFlag;
    private Date gmtCreate;
    private Date gmtModitify;
    private Long createUid;
    private Long updateUid;
    private Long drillEvaluationId;
    private String fileUrl;
    private String fileName;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public Boolean getDelFlag() {
        return delFlag;
    }
    public void setDelFlag(Boolean delFlag) {
        this.delFlag = delFlag;
    }
    public Date getGmtCreate() {
        return gmtCreate;
    }
    public void setGmtCreate(Date gmtCreate) {
        this.gmtCreate = gmtCreate;
    }
    public Date getGmtModitify() {
        return gmtModitify;
    }
    public void setGmtModitify(Date gmtModitify) {
        this.gmtModitify = gmtModitify;
    }
    public Long getCreateUid() {
        return createUid;
    }
    public void setCreateUid(Long createUid) {
        this.createUid = createUid;
    }
    public Long getUpdateUid() {
        return updateUid;
    }
    public void setUpdateUid(Long updateUid) {
        this.updateUid = updateUid;
    }
    public Long getDrillEvaluationId() {
        return drillEvaluationId;
    }
    public void setDrillEvaluationId(Long drillEvaluationId) {
        this.drillEvaluationId = drillEvaluationId;
    }
    public String getFileUrl() {
        return fileUrl;
    }
    public void setFileUrl(String fileUrl) {
        this.fileUrl = fileUrl;
    }
    public String getFileName() {
        return fileName;
    }
    public void setFileName(String fileName) {
        this.fileName = fileName;
    }
    @Override
    public String toString() {
        return "EmergencyDrillEvaluationFileInfo{" +
                "id=" + id +
                ", delFlag=" + delFlag +
                ", gmtCreate=" + gmtCreate +
                ", gmtModitify=" + gmtModitify +
                ", createUid=" + createUid +
                ", updateUid=" + updateUid +
                ", drillEvaluationId=" + drillEvaluationId +
                ", fileUrl='" + fileUrl + '\'' +
                ", fileName='" + fileName + '\'' +
                '}';
    }
}
equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/enums/EquipmentResultCodes.java
对比新文件
@@ -0,0 +1,31 @@
package com.gkhy.safePlatform.equipment.enums;
public enum EquipmentResultCodes {
    ERROR("A3000", "未知错误");
    private String code;
    private String desc;
    private EquipmentResultCodes(String code, String desc) {
        this.code = code;
        this.desc = desc;
    }
    public String getCode() {
        return this.code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getDesc() {
        return this.desc;
    }
    public void setDesc(String desc) {
        this.desc = desc;
    }
}
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/model/dto/req/ExcApprove.java
对比新文件
@@ -0,0 +1,33 @@
package com.gkhy.safePlatform.targetDuty.model.dto.req;
import com.gkhy.safePlatform.targetDuty.entity.BaseDomain;
/**
 * (WorkApprove)表实体类
 *
 * @author xurui
 * @since 2022-07-22 10:46:11
 */
@SuppressWarnings("serial")
public class ExcApprove extends BaseDomain {
    private Long id;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    //审批意见
    private String approveMemo;
    public String getApproveMemo() {
        return approveMemo;
    }
    public void setApproveMemo(String approveMemo) {
        this.approveMemo = approveMemo;
    }
}
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/model/dto/req/TargetMngImportExcel.java
对比新文件
@@ -0,0 +1,100 @@
package com.gkhy.safePlatform.targetDuty.model.dto.req;
import com.gkhy.safePlatform.targetDuty.utils.poihelper.ExcelCell;
import java.io.Serializable;
import java.sql.Timestamp;
public class TargetMngImportExcel implements Serializable {
    //安全目标指标
    @ExcelCell(index = 1)
    private String qName;
    //目标指标编号
    @ExcelCell(index = 2)
    private String indexNum;
    //年度
    @ExcelCell(index = 3)
    private String year;
    //指标值
    @ExcelCell(index = 4)
    private String value;
    //指标级别 1:公司级 2:部门分厂级 3:工段班组级
    @ExcelCell(index = 5)
    private Integer level;
    //完成期限
    @ExcelCell(index = 7)
    private Timestamp completeDate;
    //备注信息
    @ExcelCell(index = 8)
    private String memo;
    //指标类型 1:年指标 2:月指标
    @ExcelCell(index = 6)
    private Integer targetType;
    public String getqName() {
        return qName;
    }
    public void setqName(String qName) {
        this.qName = qName;
    }
    //目标指标编号
    public String getIndexNum() {
        return indexNum;
    }
    public void setIndexNum(String indexNum) {
        this.indexNum = indexNum;
    }
    //年度
    public String getYear() {
        return year;
    }
    public void setYear(String year) {
        this.year = year;
    }
    //指标值
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
    //指标级别 1:公司级 2:部门分厂级 3:工段班组级
    public Integer getLevel() {
        return level;
    }
    public void setLevel(Integer level) {
        this.level = level;
    }
    //完成期限
    public Timestamp getCompleteDate() {
        return completeDate;
    }
    public void setCompleteDate(Timestamp completeDate) {
        this.completeDate = completeDate;
    }
    //备注信息
    public String getMemo() {
        return memo;
    }
    public void setMemo(String memo) {
        this.memo = memo;
    }
    //指标类型 1:年指标 2:月指标
    public Integer getTargetType() {
        return targetType;
    }
    public void setTargetType(Integer targetType) {
        this.targetType = targetType;
    }
}
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/model/dto/resp/TargetDutySummaryExcel.java
对比新文件
@@ -0,0 +1,174 @@
package com.gkhy.safePlatform.targetDuty.model.dto.resp;
import com.gkhy.safePlatform.targetDuty.utils.poihelper.ExcelCell;
import java.io.Serializable;
import java.sql.Timestamp;
public class TargetDutySummaryExcel implements Serializable {
    //责任部门名
    @ExcelCell(index = 1)
    private String departmentName;
    //安全目标指标
    @ExcelCell(index = 2)
    private String targetValue;
    //考核指标
    @ExcelCell(index = 3)
    private String examineValue;
    //月份
    @ExcelCell(index = 4)
    private String yiYue;
    @ExcelCell(index = 5)
    private String erYue;
    @ExcelCell(index = 6)
    private String sanYue;
    @ExcelCell(index = 7)
    private String siYue;
    @ExcelCell(index = 8)
    private String wuYue;
    @ExcelCell(index = 9)
    private String liuYue;
    @ExcelCell(index = 10)
    private String qiYue;
    @ExcelCell(index = 11)
    private String baYue;
    @ExcelCell(index = 12)
    private String jiuYue;
    @ExcelCell(index = 13)
    private String shiYue;
    @ExcelCell(index = 14)
    private String shiyiYue;
    @ExcelCell(index = 15)
    private String shierYue;
    //考核指标 1:合格 2:不合格
    @ExcelCell(index = 16)
    private Integer examineResult;
    public String getDepartmentName() {
        return departmentName;
    }
    public void setDepartmentName(String departmentName) {
        this.departmentName = departmentName;
    }
    public String getTargetValue() {
        return targetValue;
    }
    public void setTargetValue(String targetValue) {
        this.targetValue = targetValue;
    }
    public String getExamineValue() {
        return examineValue;
    }
    public void setExamineValue(String examineValue) {
        this.examineValue = examineValue;
    }
    public String getYiYue() {
        return yiYue;
    }
    public void setYiYue(String yiYue) {
        this.yiYue = yiYue;
    }
    public String getErYue() {
        return erYue;
    }
    public void setErYue(String erYue) {
        this.erYue = erYue;
    }
    public String getSanYue() {
        return sanYue;
    }
    public void setSanYue(String sanYue) {
        this.sanYue = sanYue;
    }
    public String getSiYue() {
        return siYue;
    }
    public void setSiYue(String siYue) {
        this.siYue = siYue;
    }
    public String getWuYue() {
        return wuYue;
    }
    public void setWuYue(String wuYue) {
        this.wuYue = wuYue;
    }
    public String getLiuYue() {
        return liuYue;
    }
    public void setLiuYue(String liuYue) {
        this.liuYue = liuYue;
    }
    public String getQiYue() {
        return qiYue;
    }
    public void setQiYue(String qiYue) {
        this.qiYue = qiYue;
    }
    public String getBaYue() {
        return baYue;
    }
    public void setBaYue(String baYue) {
        this.baYue = baYue;
    }
    public String getJiuYue() {
        return jiuYue;
    }
    public void setJiuYue(String jiuYue) {
        this.jiuYue = jiuYue;
    }
    public String getShiYue() {
        return shiYue;
    }
    public void setShiYue(String shiYue) {
        this.shiYue = shiYue;
    }
    public String getShiyiYue() {
        return shiyiYue;
    }
    public void setShiyiYue(String shiyiYue) {
        this.shiyiYue = shiyiYue;
    }
    public String getShierYue() {
        return shierYue;
    }
    public void setShierYue(String shierYue) {
        this.shierYue = shierYue;
    }
    public Integer getExamineResult() {
        return examineResult;
    }
    public void setExamineResult(Integer examineResult) {
        this.examineResult = examineResult;
    }
}
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/model/dto/resp/TargetMngExcel.java
对比新文件
@@ -0,0 +1,114 @@
package com.gkhy.safePlatform.targetDuty.model.dto.resp;
import com.gkhy.safePlatform.targetDuty.entity.TargetDivideDetail;
import com.gkhy.safePlatform.targetDuty.utils.poihelper.ExcelCell;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
public class TargetMngExcel implements Serializable {
    //安全目标指标
    @ExcelCell(index = 1)
    private String qName;
    //目标指标编号
    @ExcelCell(index = 2)
    private String indexNum;
    //年度
    @ExcelCell(index = 3)
    private String year;
    //指标值
    @ExcelCell(index = 4)
    private String value;
    //指标级别 1:公司级 2:部门分厂级 3:工段班组级
    @ExcelCell(index = 5)
    private Integer level;
    //指标类型 1:年指标 2:月指标
    @ExcelCell(index = 6)
    private Integer targetType;
    //完成期限
    @ExcelCell(index = 7)
    private Timestamp completeDate;
    //分解状态 1:已分解 2:未分解
    @ExcelCell(index = 8)
    private Integer divideStatus;
    //备注信息
    @ExcelCell(index = 9)
    private String memo;
    public Integer getDivideStatus() {
        return divideStatus;
    }
    public void setDivideStatus(Integer divideStatus) {
        this.divideStatus = divideStatus;
    }
    public String getqName() {
        return qName;
    }
    public void setqName(String qName) {
        this.qName = qName;
    }
    //目标指标编号
    public String getIndexNum() {
        return indexNum;
    }
    public void setIndexNum(String indexNum) {
        this.indexNum = indexNum;
    }
    //年度
    public String getYear() {
        return year;
    }
    public void setYear(String year) {
        this.year = year;
    }
    //指标值
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
    //指标级别 1:公司级 2:部门分厂级 3:工段班组级
    public Integer getLevel() {
        return level;
    }
    public void setLevel(Integer level) {
        this.level = level;
    }
    //完成期限
    public Timestamp getCompleteDate() {
        return completeDate;
    }
    public void setCompleteDate(Timestamp completeDate) {
        this.completeDate = completeDate;
    }
    //备注信息
    public String getMemo() {
        return memo;
    }
    public void setMemo(String memo) {
        this.memo = memo;
    }
    //指标类型 1:年指标 2:月指标
    public Integer getTargetType() {
        return targetType;
    }
    public void setTargetType(Integer targetType) {
        this.targetType = targetType;
    }
}
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/utils/DateUtils.java
对比新文件
@@ -0,0 +1,81 @@
package com.gkhy.safePlatform.targetDuty.utils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.Assert;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class DateUtils {
    public static final String PATTERN_STANDARD = "yyyy-MM-dd HH:mm:ss";
    public static final String PATTERN_DATE = "yyyy-MM-dd";
    public static final String PATTERN_DATE_MIN="yyyy-MM-dd HH:mm";
    // 小时分钟格式 (分笔成交时间)
    public static final String PATTERN_HOUR_MIN = "HH:mm";
    public static final String PATTERN_DATE_HOUR="yyyy-MM-dd HH";
    public static final String PATTERN_DATE_DATE_CHS="yyyy年MM月dd日";
    public static final String PATTERN1_DATE = "yyyy/MM/dd";
    public static final String PATTERN_CONNECT_DATE="yyyyMMddHHmmss";
    public static final String PATTERN_CONNECT_DATE_YYYYMMDD="yyyyMMdd";
    public static final String PATTERN_CONNECT_DATE_YYMMDD="yyMMdd";
    public static final String PATTERN_ALLTIME_NOSIGN = "yyyyMMddHHmmssSSS";
    public static final String PATTERN_MONTH = "yyyy-MM";
    public static final String PATTERN_MONTH1 = "yyyyMM";
    public static final String PATTERN2_STANDARD = "yyyy-MM-dd HH:mm:ss.SSS";
    public static final String PATTERN_UTC = "yyyy-MM-dd'T'HH:mm:ss'Z'";
    public static String date2String(Date date, String pattern) {
        if (date == null) {
            throw new IllegalArgumentException("timestamp null illegal");
        }
        if (pattern == null || pattern.equals("")) {
            pattern = PATTERN_STANDARD;
            ;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        return sdf.format(date);
    }
    public static Timestamp string2Timestamp(String strDateTime, String pattern) {
        if (strDateTime == null || strDateTime.equals("")) {
            throw new IllegalArgumentException("Date Time Null Illegal");
        }
        if (pattern == null || pattern.equals("")) {
            pattern = PATTERN_STANDARD;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        Date date = null;
        try {
            date = sdf.parse(strDateTime);
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
        return new Timestamp(date.getTime());
    }
}
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/utils/poihelper/ExcelCell.java
对比新文件
@@ -0,0 +1,81 @@
package com.gkhy.safePlatform.targetDuty.utils.poihelper;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
 * The <code>ExcelCell</code><br>
 * 数值型的栏位只能使用Double
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ExcelCell {
    /**
     * 顺序 default 100
     *
     * @return index
     */
    int index();
    /**
     * 当值为null时要显示的值 default StringUtils.EMPTY
     *
     * @return defaultValue
     */
    String defaultValue() default "";
    /**
     * 用于验证
     *
     * @return valid
     */
    Valid valid() default @Valid();
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.FIELD)
    @interface Valid {
        /**
         * 必须与in中String相符,目前仅支持String类型
         *
         * @return e.g. {"key","value"}
         */
        String[] in() default {};
        /**
         * 是否允许为空,用于验证数据 default true
         *
         * @return allowNull
         */
        boolean allowNull() default true;
        /**
         * Apply a "greater than" constraint to the named property
         *
         * @return gt
         */
        double gt() default Double.NaN;
        /**
         * Apply a "less than" constraint to the named property
         * @return lt
         */
        double lt() default Double.NaN;
        /**
         * Apply a "greater than or equal" constraint to the named property
         *
         * @return ge
         */
        double ge() default Double.NaN;
        /**
         * Apply a "less than or equal" constraint to the named property
         *
         * @return le
         */
        double le() default Double.NaN;
    }
}
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/utils/poihelper/ExcelLog.java
对比新文件
@@ -0,0 +1,79 @@
package com.gkhy.safePlatform.targetDuty.utils.poihelper;
/**
 * The <code>ExcelLog</code>
 *
 */
public class ExcelLog {
    private Integer rowNum;
    private Object object;
    private String log;
    /**
     * @return the rowNum
     */
    public Integer getRowNum() {
        return rowNum;
    }
    /**
     * @param rowNum
     *            the rowNum to set
     */
    public void setRowNum(Integer rowNum) {
        this.rowNum = rowNum;
    }
    /**
     * @return the object
     */
    public Object getObject() {
        return object;
    }
    /**
     * @param object
     *            the object to set
     */
    public void setObject(Object object) {
        this.object = object;
    }
    /**
     * @return the log
     */
    public String getLog() {
        return log;
    }
    /**
     * @param object
     * @param log
     */
    public ExcelLog(Object object, String log) {
        super();
        this.object = object;
        this.log = log;
    }
    /**
     * @param rowNum
     * @param object
     * @param log
     */
    public ExcelLog(Object object, String log, Integer rowNum) {
        super();
        this.rowNum = rowNum;
        this.object = object;
        this.log = log;
    }
    /**
     * @param log
     *            the log to set
     */
    public void setLog(String log) {
        this.log = log;
    }
}
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/utils/poihelper/ExcelLogs.java
对比新文件
@@ -0,0 +1,62 @@
package com.gkhy.safePlatform.targetDuty.utils.poihelper;
import java.util.ArrayList;
import java.util.List;
/**
 * The <code>ExcelLogs</code>
 *
 */
public class ExcelLogs {
    private Boolean hasError;
    private List<ExcelLog> logList;
    /**
     *
     */
    public ExcelLogs() {
        super();
        hasError = false;
    }
    /**
     * @return the hasError
     */
    public Boolean getHasError() {
        return hasError;
    }
    /**
     * @param hasError
     *            the hasError to set
     */
    public void setHasError(Boolean hasError) {
        this.hasError = hasError;
    }
    /**
     * @return the logList
     */
    public List<ExcelLog> getLogList() {
        return logList;
    }
    public List<ExcelLog> getErrorLogList() {
        List<ExcelLog> errList = new ArrayList<>();
        for (ExcelLog log : this.logList) {
            if (log != null && ExcelUtil.isNotBlank(log.getLog())) {
                errList.add(log);
            }
        }
        return errList;
    }
    /**
     * @param logList
     *            the logList to set
     */
    public void setLogList(List<ExcelLog> logList) {
        this.logList = logList;
    }
}
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/utils/poihelper/ExcelSheet.java
对比新文件
@@ -0,0 +1,66 @@
package com.gkhy.safePlatform.targetDuty.utils.poihelper;
import java.util.Collection;
import java.util.Map;
/**
 * 用于汇出多个sheet的Vo The <code>ExcelSheet</code>
 *
 */
public class ExcelSheet<T> {
    private String sheetName;
    private Map<String,String> headers;
    private Collection<T> dataset;
    /**
     * @return the sheetName
     */
    public String getSheetName() {
        return sheetName;
    }
    /**
     * Excel页签名称
     *
     * @param sheetName
     *            the sheetName to set
     */
    public void setSheetName(String sheetName) {
        this.sheetName = sheetName;
    }
    /**
     * Excel表头
     *
     * @return the headers
     */
    public Map<String,String> getHeaders() {
        return headers;
    }
    /**
     * @param headers
     *            the headers to set
     */
    public void setHeaders(Map<String,String> headers) {
        this.headers = headers;
    }
    /**
     * Excel数据集合
     *
     * @return the dataset
     */
    public Collection<T> getDataset() {
        return dataset;
    }
    /**
     * @param dataset
     *            the dataset to set
     */
    public void setDataset(Collection<T> dataset) {
        this.dataset = dataset;
    }
}
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/utils/poihelper/ExcelUtil.java
对比新文件
@@ -0,0 +1,758 @@
package com.gkhy.safePlatform.targetDuty.utils.poihelper;
import com.gkhy.safePlatform.targetDuty.utils.DateUtils;
import org.apache.commons.beanutils.BeanComparator;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.ComparatorUtils;
import org.apache.commons.collections.comparators.ComparableComparator;
import org.apache.commons.collections.comparators.ComparatorChain;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellReference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.sql.Timestamp;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.*;
/**
 * The <code>ExcelUtil</code> 与 {@link ExcelCell}搭配使用
 *
 */
public class ExcelUtil {
    private static Logger LG = LoggerFactory.getLogger(ExcelUtil.class);
    /**
     * 用来验证excel与Vo中的类型是否一致 <br>
     * Map<栏位类型,只能是哪些Cell类型>
     */
    private static Map<Class<?>, CellType[]> validateMap = new HashMap<>();
    static {
        validateMap.put(String[].class, new CellType[]{CellType.STRING});
        validateMap.put(Double[].class, new CellType[]{CellType.NUMERIC});
        validateMap.put(String.class, new CellType[]{CellType.STRING});
        validateMap.put(Double.class, new CellType[]{CellType.NUMERIC});
        validateMap.put(Timestamp.class, new CellType[]{CellType.NUMERIC, CellType.STRING});
        validateMap.put(Date.class, new CellType[]{CellType.NUMERIC, CellType.STRING});
        validateMap.put(Integer.class, new CellType[]{CellType.NUMERIC});
        validateMap.put(Float.class, new CellType[]{CellType.NUMERIC});
        validateMap.put(Long.class, new CellType[]{CellType.NUMERIC});
        validateMap.put(Boolean.class, new CellType[]{CellType.BOOLEAN});
    }
    /**
     * 获取cell类型的文字描述
     *
     * @param cellType <pre>
     *                 CellType.BLANK
     *                 CellType.BOOLEAN
     *                 CellType.ERROR
     *                 CellType.FORMULA
     *                 CellType.NUMERIC
     *                 CellType.STRING
     *                 </pre>
     * @return
     */
    private static String getCellTypeByInt(CellType cellType) {
        if(cellType == CellType.BLANK)
            return "Null type";
        else if(cellType == CellType.BOOLEAN)
            return "Boolean type";
        else if(cellType == CellType.ERROR)
            return "Error type";
        else if(cellType == CellType.FORMULA)
            return "Formula type";
        else if(cellType == CellType.NUMERIC)
            return "Numeric type";
        else if(cellType == CellType.STRING)
            return "String type";
        else
            return "Unknown type";
    }
    /**
     * 获取单元格值
     *
     * @param cell
     * @return
     */
    private static Object getCellValue(Cell cell) {
        if (cell == null
                || (cell.getCellTypeEnum() == CellType.STRING && isBlank(cell
                .getStringCellValue()))) {
            return null;
        }
        DataFormatter dataFormatter = new DataFormatter();
        String s = dataFormatter.formatCellValue(cell);
        return s;
//        CellType cellType = cell.getCellTypeEnum();
//            if(cellType == CellType.BLANK)
//                return null;
//            else if(cellType == CellType.BOOLEAN)
//                return cell.getBooleanCellValue();
//            else if(cellType == CellType.ERROR)
//                return cell.getErrorCellValue();
//            else if(cellType == CellType.FORMULA) {
//                try {
//                    if (HSSFDateUtil.isCellDateFormatted(cell)) {
//                        return cell.getDateCellValue();
//                    } else {
//                        return cell.getNumericCellValue();
//                    }
//                } catch (IllegalStateException e) {
//                    return cell.getRichStringCellValue();
//                }
//            }
//            else if(cellType == CellType.NUMERIC){
//                if (DateUtil.isCellDateFormatted(cell)) {
//                    return cell.getDateCellValue();
//                } else {
//                    return cell.getNumericCellValue();
//                }
//            }
//            else if(cellType == CellType.STRING)
//                return cell.getStringCellValue();
//            else
//                return null;
    }
    /**
     * 利用JAVA的反射机制,将放置在JAVA集合中并且符号一定条件的数据以EXCEL 的形式输出到指定IO设备上<br>
     * 用于单个sheet
     *
     * @param <T>
     * @param headers 表格属性列名数组
     * @param dataset 需要显示的数据集合,集合中一定要放置符合javabean风格的类的对象。此方法支持的
     *                javabean属性的数据类型有基本数据类型及String,Date,String[],Double[]
     * @param out     与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中
     */
    public static <T> void exportExcel(Map<String,String> headers, Collection<T> dataset, OutputStream out) {
        exportExcel(headers, dataset, out, null);
    }
    /**
     * 利用JAVA的反射机制,将放置在JAVA集合中并且符号一定条件的数据以EXCEL 的形式输出到指定IO设备上<br>
     * 用于单个sheet
     *
     * @param <T>
     * @param headers 表格属性列名数组
     * @param dataset 需要显示的数据集合,集合中一定要放置符合javabean风格的类的对象。此方法支持的
     *                javabean属性的数据类型有基本数据类型及String,Date,String[],Double[]
     * @param out     与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中
     * @param pattern 如果有时间数据,设定输出格式。默认为"yyy-MM-dd"
     */
    public static <T> void exportExcel(Map<String,String> headers, Collection<T> dataset, OutputStream out,
                                       String pattern) {
        // 声明一个工作薄
        HSSFWorkbook workbook = new HSSFWorkbook();
        // 生成一个表格
        HSSFSheet sheet = workbook.createSheet();
        write2Sheet(workbook,sheet, headers, dataset, pattern);
        try {
            workbook.write(out);
        } catch (IOException e) {
            LG.error(e.toString(), e);
        }
    }
    public static void exportExcel(String[][] datalist, OutputStream out,boolean autoColumnWidth) {
        try {
            // 声明一个工作薄
            HSSFWorkbook workbook = new HSSFWorkbook();
            // 生成一个表格
            HSSFSheet sheet = workbook.createSheet();
            for (int i = 0; i < datalist.length; i++) {
                String[] r = datalist[i];
                HSSFRow row = sheet.createRow(i);
                for (int j = 0; j < r.length; j++) {
                    HSSFCell cell = row.createCell(j);
                    //cell max length 32767
                    if (r[j] != null && r[j].length() > 32767) {
                        r[j] = "--此字段过长(超过32767),已被截断--" + r[j];
                        r[j] = r[j].substring(0, 32766);
                    }
                    cell.setCellValue(r[j]);
                }
            }
            //自动列宽
            if(autoColumnWidth) {
                if (datalist.length > 0) {
                    int colcount = datalist[0].length;
                    for (int i = 0; i < colcount; i++) {
                        sheet.autoSizeColumn(i);
                    }
                }
            }
            workbook.write(out);
        } catch (IOException e) {
            LG.error(e.toString(), e);
        }
    }
    public static void exportExcel(String[][] datalist, OutputStream out) {
        exportExcel(datalist,out,true);
    }
    /**
     * 利用JAVA的反射机制,将放置在JAVA集合中并且符号一定条件的数据以EXCEL 的形式输出到指定IO设备上<br>
     * 用于多个sheet
     *
     * @param <T>
     * @param sheets {@link ExcelSheet}的集合
     * @param out    与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中
     */
    public static <T> void exportExcel(List<ExcelSheet<T>> sheets, OutputStream out) {
        exportExcel(sheets, out, null);
    }
    /**
     * 利用JAVA的反射机制,将放置在JAVA集合中并且符号一定条件的数据以EXCEL 的形式输出到指定IO设备上<br>
     * 用于多个sheet
     *
     * @param <T>
     * @param sheets  {@link ExcelSheet}的集合
     * @param out     与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中
     * @param pattern 如果有时间数据,设定输出格式。默认为"yyy-MM-dd"
     */
    public static <T> void exportExcel(List<ExcelSheet<T>> sheets, OutputStream out, String pattern) {
        if (CollectionUtils.isEmpty(sheets)) {
            return;
        }
        // 声明一个工作薄
        HSSFWorkbook workbook = new HSSFWorkbook();
        for (ExcelSheet<T> sheet : sheets) {
            // 生成一个表格
            HSSFSheet hssfSheet = workbook.createSheet(sheet.getSheetName());
            write2Sheet(workbook,hssfSheet, sheet.getHeaders(), sheet.getDataset(), pattern);
        }
        try {
            workbook.write(out);
        } catch (IOException e) {
            LG.error(e.toString(), e);
        }
    }
    /**
     * 每个sheet的写入
     *
     * @param sheet   页签
     * @param headers 表头
     * @param dataset 数据集合
     * @param pattern 日期格式
     */
    private static <T> void write2Sheet(HSSFWorkbook workbook,HSSFSheet sheet, Map<String,String> headers, Collection<T> dataset,
                                        String pattern) {
        //时间格式默认"yyyy-MM-dd"
        if (isBlank(pattern)){
            pattern = "yyyy-MM-dd";
        }
        // 产生表格标题行
        HSSFRow row = sheet.createRow(0);
        // 标题行转中文
        Set<String> keys = headers.keySet();
        Iterator<String> it1 = keys.iterator();
        String key = "";    //存放临时键变量
        int c= 0;   //标题列数
        while (it1.hasNext()){
            key = it1.next();
            if (headers.containsKey(key)) {
                HSSFCell cell = row.createCell(c);
                cell.setCellStyle(getTopColumnStyle(workbook));
                HSSFRichTextString text = new HSSFRichTextString(headers.get(key));
                cell.setCellValue(text);
                c++;
            }
        }
        // 遍历集合数据,产生数据行
        Iterator<T> it = dataset.iterator();
        int index = 0;
        while (it.hasNext()) {
            index++;
            row = sheet.createRow(index);
            T t = it.next();
            try {
                if (t instanceof Map) {
                    @SuppressWarnings("unchecked")
                    Map<String, Object> map = (Map<String, Object>) t;
                    int cellNum = 0;
                    //遍历列名
                    Iterator<String> it2 = keys.iterator();
                    while (it2.hasNext()){
                        key = it2.next();
                        if (!headers.containsKey(key)) {
                            LG.error("Map 中 不存在 key [" + key + "]");
                            continue;
                        }
                        Object value = map.get(key);
                        HSSFCell cell = row.createCell(cellNum);
                        cell.setCellStyle(getColumnStyle(workbook));
                        cellNum = setCellValue(cell,value,pattern,cellNum,null,row);
                        cellNum++;
                    }
                } else {
                    List<FieldForSortting> fields = sortFieldByAnno(t.getClass());
                    int cellNum = 0;
                    for (int i = 0; i < fields.size(); i++) {
                        HSSFCell cell = row.createCell(cellNum);
                        cell.setCellStyle(getColumnStyle(workbook));
                        Field field = fields.get(i).getField();
                        field.setAccessible(true);
                        Object value = field.get(t);
                        cellNum = setCellValue(cell,value,pattern,cellNum,field,row);
                        cellNum++;
                    }
                }
            } catch (Exception e) {
                LG.error(e.toString(), e);
            }
        }
        // 设定自动宽度
        for (int i = 0; i < headers.size(); i++) {
            sheet.autoSizeColumn(i);
            int cw = (int) (sheet.getColumnWidth(i) * 0.8);
            // increase width to accommodate drop-down arrow in the header
            sheet.setColumnWidth(i, sheet.getColumnWidth(i) * 20 / 10);
        }
    }
    private static int setCellValue(HSSFCell cell,Object value,String pattern,int cellNum,Field field,HSSFRow row){
        String textValue = null;
        if (value instanceof Integer) {
            int intValue = (Integer) value;
            cell.setCellValue(intValue);
        } else if (value instanceof Float) {
            float fValue = (Float) value;
            cell.setCellValue(fValue);
        } else if (value instanceof Double) {
            double dValue = (Double) value;
            cell.setCellValue(dValue);
        } else if (value instanceof Long) {
            long longValue = (Long) value;
            cell.setCellValue(longValue);
        } else if (value instanceof Boolean) {
            boolean bValue = (Boolean) value;
            cell.setCellValue(bValue);
        } else if (value instanceof Date) {
            Date date = (Date) value;
            SimpleDateFormat sdf = new SimpleDateFormat(pattern);
            textValue = sdf.format(date);
        } else if (value instanceof String[]) {
            String[] strArr = (String[]) value;
            for (int j = 0; j < strArr.length; j++) {
                String str = strArr[j];
                cell.setCellValue(str);
                if (j != strArr.length - 1) {
                    cellNum++;
                    cell = row.createCell(cellNum);
                }
            }
        } else if (value instanceof Double[]) {
            Double[] douArr = (Double[]) value;
            for (int j = 0; j < douArr.length; j++) {
                Double val = douArr[j];
                // 值不为空则set Value
                if (val != null) {
                    cell.setCellValue(val);
                }
                if (j != douArr.length - 1) {
                    cellNum++;
                    cell = row.createCell(cellNum);
                }
            }
        } else {
            // 其它数据类型都当作字符串简单处理
            String empty = "";
            if(field != null) {
                ExcelCell anno = field.getAnnotation(ExcelCell.class);
                if (anno != null) {
                    empty = anno.defaultValue();
                }
            }
            textValue = value == null ? empty : value.toString();
        }
        if (textValue != null) {
            HSSFRichTextString richString = new HSSFRichTextString(textValue);
            cell.setCellValue(richString);
        }
        return cellNum;
    }
    /*
     * 设置单元格样式
     */
    private static HSSFCellStyle getColumnStyle(HSSFWorkbook workbook) {
        //设置样式;
        HSSFCellStyle style = workbook.createCellStyle();
        //设置自动换行;
        style.setWrapText(false);
        //设置水平对齐的样式为居中对齐;
        style.setAlignment(HorizontalAlignment.CENTER);
        //设置垂直对齐的样式为居中对齐;
        style.setVerticalAlignment(VerticalAlignment.CENTER);
        return style;
    }
    /*
     * 设置单元格样式
     */
    private static HSSFCellStyle getTopColumnStyle(HSSFWorkbook workbook) {
        //设置样式;
        HSSFCellStyle style = workbook.createCellStyle();
        //设置自动换行;
        style.setWrapText(true);
        //设置水平对齐的样式为居中对齐;
        style.setAlignment(HorizontalAlignment.CENTER);
        //设置垂直对齐的样式为居中对齐;
        style.setVerticalAlignment(VerticalAlignment.CENTER);
        style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex());// 设置背景色
        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        // 设置字体
        HSSFFont font = workbook.createFont();
        //字体加粗
        font.setBold(true);
        font.setFontHeightInPoints((short) 14);//设置字体大小
        font.setColor(IndexedColors.WHITE.index);
        style.setFont(font);
        return style;
    }
    /**
     * 把Excel的数据封装成voList
     *
     * @param clazz       vo的Class
     * @param inputStream excel输入流
     * @param pattern     如果有时间数据,设定输入格式。默认为"yyy-MM-dd"
     * @param logs        错误log集合
     * @param arrayCount  如果vo中有数组类型,那就按照index顺序,把数组应该有几个值写上.
     * @return voList
     * @throws RuntimeException
     */
    public static <T> Collection<T> importExcel(Class<T> clazz, InputStream inputStream,
                                                String pattern, ExcelLogs logs, Integer... arrayCount) {
        Workbook workBook;
        try {
            workBook = WorkbookFactory.create(inputStream);
        } catch (Exception e) {
            LG.error("load excel file error",e);
            return null;
        }
        List<T> list = new ArrayList<>();
        Sheet sheet = workBook.getSheetAt(0);
        Iterator<Row> rowIterator = sheet.rowIterator();
        try {
            List<ExcelLog> logList = new ArrayList<>();
            // Map<title,index>
            Map<String, Integer> titleMap = new HashMap<>();
            while (rowIterator.hasNext()) {
                Row row = rowIterator.next();
                if (row.getRowNum() == 0) {
                    if (clazz == Map.class) {
                        // 解析map用的key,就是excel标题行
                        Iterator<Cell> cellIterator = row.cellIterator();
                        Integer index = 0;
                        while (cellIterator.hasNext()) {
                            String value = cellIterator.next().getStringCellValue();
                            titleMap.put(value, index);
                            index++;
                        }
                    }
                    continue;
                }
                // 整行都空,就跳过
                boolean allRowIsNull = true;
                Iterator<Cell> cellIterator = row.cellIterator();
                while (cellIterator.hasNext()) {
                    Object cellValue = getCellValue(cellIterator.next());
                    if (cellValue != null) {
                        allRowIsNull = false;
                        break;
                    }
                }
                if (allRowIsNull) {
                    LG.warn("Excel row " + row.getRowNum() + " all row value is null!");
                    continue;
                }
                StringBuilder log = new StringBuilder();
                if (clazz == Map.class) {
                    Map<String, Object> map = new HashMap<>();
                    for (String k : titleMap.keySet()) {
                        Integer index = titleMap.get(k);
                        Cell cell = row.getCell(index);
                        // 判空
                        if (cell == null) {
                            map.put(k, null);
                        } else {
                            cell.setCellType(CellType.STRING);
                            String value = cell.getStringCellValue();
                            map.put(k, value);
                        }
                    }
                    list.add((T) map);
                } else {
                    T t = clazz.newInstance();
                    int arrayIndex = 0;// 标识当前第几个数组了
                    int cellIndex = 0;// 标识当前读到这一行的第几个cell了
                    List<FieldForSortting> fields = sortFieldByAnno(clazz);
                    for (FieldForSortting ffs : fields) {
                        Field field = ffs.getField();
                        field.setAccessible(true);
                        if (field.getType().isArray()) {
                            Integer count = arrayCount[arrayIndex];
                            Object[] value;
                            if (field.getType().equals(String[].class)) {
                                value = new String[count];
                            } else {
                                // 目前只支持String[]和Double[]
                                value = new Double[count];
                            }
                            for (int i = 0; i < count; i++) {
                                Cell cell = row.getCell(cellIndex);
                                String errMsg = validateCell(cell, field, cellIndex);
                                if (isBlank(errMsg)) {
                                    value[i] = getCellValue(cell);
                                } else {
                                    log.append(errMsg);
                                    log.append(";");
                                    logs.setHasError(true);
                                }
                                cellIndex++;
                            }
                            field.set(t, value);
                            arrayIndex++;
                        } else {
                            Cell cell = row.getCell(cellIndex);
                            String errMsg = validateCell(cell, field, cellIndex);
                            if (isBlank(errMsg)) {
                                Object value = null;
                                // 处理特殊情况,Excel中的String,转换成Bean的Date
                                if (field.getType().equals(Timestamp.class)) {
                                    Object strDate = getCellValue(cell);
                                    value = DateUtils.string2Timestamp(strDate.toString(),pattern);
                                }else if (field.getType().equals(Integer.class)) {
                                    Object data = getCellValue(cell);
                                    if(data != null){
                                        value = Integer.parseInt(String.valueOf(data));
                                    }
                                } else {
                                    value = getCellValue(cell);
                                    // 处理特殊情况,excel的value为String,且bean中为其他,且defaultValue不为空,那就=defaultValue
                                    ExcelCell annoCell = field.getAnnotation(ExcelCell.class);
                                    if (value instanceof String && !field.getType().equals(String.class)
                                            && isNotBlank(annoCell.defaultValue())) {
                                        value = annoCell.defaultValue();
                                    }
                                }
                                field.set(t, value);
                            }
                            if (isNotBlank(errMsg)) {
                                log.append(errMsg);
                                log.append(";");
                                logs.setHasError(true);
                            }
                            cellIndex++;
                        }
                    }
                    list.add(t);
                    logList.add(new ExcelLog(t, log.toString(), row.getRowNum() + 1));
                }
            }
            logs.setLogList(logList);
        } catch (InstantiationException e) {
            throw new RuntimeException(MessageFormat.format("can not instance class:{0}",
                    clazz.getSimpleName()), e);
        } catch (IllegalAccessException e) {
            throw new RuntimeException(MessageFormat.format("can not instance class:{0}",
                    clazz.getSimpleName()), e);
        }
        return list;
    }
    /**
     * 驗證Cell類型是否正確
     *
     * @param cell    cell單元格
     * @param field   欄位
     * @param cellNum 第幾個欄位,用於errMsg
     * @return
     */
    private static String validateCell(Cell cell, Field field, int cellNum) {
        String columnName = CellReference.convertNumToColString(cellNum);
        String result = null;
        CellType[] cellTypeArr = validateMap.get(field.getType());
        if (cellTypeArr == null) {
            result = MessageFormat.format("Unsupported type [{0}]", field.getType().getSimpleName());
            return result;
        }
        ExcelCell annoCell = field.getAnnotation(ExcelCell.class);
        if (cell == null
                || (cell.getCellTypeEnum() == CellType.STRING && isBlank(cell
                .getStringCellValue()))) {
            if (annoCell != null && annoCell.valid().allowNull() == false) {
                result = MessageFormat.format("the cell [{0}] can not null", columnName);
            }
            ;
        }
//        else if (cell.getCellTypeEnum() == CellType.BLANK && annoCell.valid().allowNull()) {
//            return result;
//        }
//        else {
//            List<CellType> cellTypes = Arrays.asList(cellTypeArr);
//
//            // 如果類型不在指定範圍內,並且沒有默認值
//            if (!(cellTypes.contains(cell.getCellTypeEnum()))
//                    || isNotBlank(annoCell.defaultValue())
//                    && cell.getCellTypeEnum() == CellType.STRING) {
//                StringBuilder strType = new StringBuilder();
//                for (int i = 0; i < cellTypes.size(); i++) {
//                    CellType cellType = cellTypes.get(i);
//                    strType.append(getCellTypeByInt(cellType));
//                    if (i != cellTypes.size() - 1) {
//                        strType.append(",");
//                    }
//                }
//                result =
//                        MessageFormat.format("the cell [{0}] type must [{1}]", columnName, strType.toString());
//            } else {
//                // 类型符合验证,但值不在要求范围内的
//                // String in
//                if (annoCell.valid().in().length != 0 && cell.getCellTypeEnum() == CellType.STRING) {
//                    String[] in = annoCell.valid().in();
//                    String cellValue = cell.getStringCellValue();
//                    boolean isIn = false;
//                    for (String str : in) {
//                        if (str.equals(cellValue)) {
//                            isIn = true;
//                        }
//                    }
//                    if (!isIn) {
//                        result = MessageFormat.format("the cell [{0}] value must in {1}", columnName, in);
//                    }
//                }
//                // 数字型
//                if (cell.getCellTypeEnum() == CellType.NUMERIC) {
//                    double cellValue = cell.getNumericCellValue();
//                    // 小于
//                    if (!Double.isNaN(annoCell.valid().lt())) {
//                        if (!(cellValue < annoCell.valid().lt())) {
//                            result =
//                                    MessageFormat.format("the cell [{0}] value must less than [{1}]", columnName,
//                                            annoCell.valid().lt());
//                        }
//                    }
//                    // 大于
//                    if (!Double.isNaN(annoCell.valid().gt())) {
//                        if (!(cellValue > annoCell.valid().gt())) {
//                            result =
//                                    MessageFormat.format("the cell [{0}] value must greater than [{1}]", columnName,
//                                            annoCell.valid().gt());
//                        }
//                    }
//                    // 小于等于
//                    if (!Double.isNaN(annoCell.valid().le())) {
//                        if (!(cellValue <= annoCell.valid().le())) {
//                            result =
//                                    MessageFormat.format("the cell [{0}] value must less than or equal [{1}]",
//                                            columnName, annoCell.valid().le());
//                        }
//                    }
//                    // 大于等于
//                    if (!Double.isNaN(annoCell.valid().ge())) {
//                        if (!(cellValue >= annoCell.valid().ge())) {
//                            result =
//                                    MessageFormat.format("the cell [{0}] value must greater than or equal [{1}]",
//                                            columnName, annoCell.valid().ge());
//                        }
//                    }
//                }
//            }
//        }
        return result;
    }
    /**
     * 根据annotation的seq排序后的栏位
     *
     * @param clazz
     * @return
     */
    private static List<FieldForSortting> sortFieldByAnno(Class<?> clazz) {
        Field[] fieldsArr = clazz.getDeclaredFields();
        List<FieldForSortting> fields = new ArrayList<>();
        List<FieldForSortting> annoNullFields = new ArrayList<>();
        for (Field field : fieldsArr) {
            ExcelCell ec = field.getAnnotation(ExcelCell.class);
            if (ec == null) {
                // 没有ExcelCell Annotation 视为不汇入
                continue;
            }
            int id = ec.index();
            fields.add(new FieldForSortting(field, id));
        }
        fields.addAll(annoNullFields);
        sortByProperties(fields, true, false, "index");
        return fields;
    }
    private static void sortByProperties(List<? extends Object> list, boolean isNullHigh,
                                         boolean isReversed, String... props) {
        if (CollectionUtils.isNotEmpty(list)) {
            Comparator<?> typeComp = ComparableComparator.getInstance();
            if (isNullHigh == true) {
                typeComp = ComparatorUtils.nullHighComparator(typeComp);
            } else {
                typeComp = ComparatorUtils.nullLowComparator(typeComp);
            }
            if (isReversed) {
                typeComp = ComparatorUtils.reversedComparator(typeComp);
            }
            List<Object> sortCols = new ArrayList<Object>();
            if (props != null) {
                for (String prop : props) {
                    sortCols.add(new BeanComparator(prop, typeComp));
                }
            }
            if (sortCols.size() > 0) {
                Comparator<Object> sortChain = new ComparatorChain(sortCols);
                Collections.sort(list, sortChain);
            }
        }
    }
    private static boolean isBlank(String str){
        if(str == null){
            return true;
        }
        return str.length() == 0;
    }
    protected static boolean isNotBlank(String str){
        return !isBlank(str);
    }
}
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/utils/poihelper/FieldForSortting.java
对比新文件
@@ -0,0 +1,61 @@
package com.gkhy.safePlatform.targetDuty.utils.poihelper;
import java.lang.reflect.Field;
/**
 * The <code>FieldForSortting</code>
 *
 */
public class FieldForSortting {
    private Field field;
    private int index;
    /**
     * @param field
     */
    public FieldForSortting(Field field) {
        super();
        this.field = field;
    }
    /**
     * @param field
     * @param index
     */
    public FieldForSortting(Field field, int index) {
        super();
        this.field = field;
        this.index = index;
    }
    /**
     * @return the field
     */
    public Field getField() {
        return field;
    }
    /**
     * @param field
     *            the field to set
     */
    public void setField(Field field) {
        this.field = field;
    }
    /**
     * @return the index
     */
    public int getIndex() {
        return index;
    }
    /**
     * @param index
     *            the index to set
     */
    public void setIndex(int index) {
        this.index = index;
    }
}
tmlog.lck