songhuangfeng123
2022-07-29 f4b7ba5ab9850b45e969ff5967b1214f708f1f70
导入/导出模块
已添加14个文件
2994 ■■■■■ 文件已修改
equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/EquipmentInfoImportExcel.java 530 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/KeypointEquipmentInfoImportExcel.java 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/EquipmentInfoExcel.java 541 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/KeypointEquipmentInfoExcel.java 345 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/utils/DateUtils.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/utils/poihelper/ExcelCell.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/utils/poihelper/ExcelLog.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/utils/poihelper/ExcelLogs.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/utils/poihelper/ExcelSheet.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/utils/poihelper/ExcelUtil.java 762 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/utils/poihelper/FieldForSortting.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/model/dto/req/RewardPunishmentStandardImportExcel.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/model/dto/resp/RewardPunishmentDetailExcel.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/model/dto/resp/RewardPunishmentStandardExcel.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/EquipmentInfoImportExcel.java
对比新文件
@@ -0,0 +1,530 @@
package com.gkhy.safePlatform.equipment.model.dto.req;
import com.gkhy.safePlatform.equipment.utils.poihelper.ExcelCell;
import java.io.Serializable;
import java.sql.Timestamp;
public class EquipmentInfoImportExcel implements Serializable {
    //类型/类别外键
    @ExcelCell(index = 1)
    private Long equipmentTypeId;
    //具体类型(页面左侧的导航栏使用) 0:仪器仪表信息 1:生产设备设施 2:安全设备设施
    @ExcelCell(index = 2)
    private Integer infoType;
    //名称
    @ExcelCell(index = 3)
    private String qName;
    //位号
    @ExcelCell(index = 4)
    private String positionNum;
    //用途
    @ExcelCell(index = 5)
    private String qUsage;
    //型号
    @ExcelCell(index = 6)
    private String model;
    //单位部门外键
    @ExcelCell(index = 7)
    private Long departmentId;
    //设置部位
    @ExcelCell(index = 8)
    private String setPart;
    //生产日期
    @ExcelCell(index = 9)
    private Timestamp produceTime;
    //使用期限(天)
    @ExcelCell(index = 10)
    private String useEndDay;
    //生命周期 1:已使用 2:库存中 3:报废
    @ExcelCell(index = 11)
    private Integer lifeCycle;
    //投用日期
    @ExcelCell(index = 12)
    private Timestamp useDate;
    //维修状态 1:维修中 2:已修好
    @ExcelCell(index = 13)
    private Integer repairStatus;
    //停用状态 1:停用 2.在用 3.维修 4.报废
    @ExcelCell(index = 14)
    private Integer stopStatus;
    //上次检查日期
    @ExcelCell(index = 15)
    private Timestamp previousCheckDate;
    //上次检测日期
    @ExcelCell(index = 16)
    private Timestamp previousTestDate;
    //上次保养日期
    @ExcelCell(index = 17)
    private Timestamp previousTakecareDate;
    //下次检查日期
    @ExcelCell(index = 18)
    private Timestamp nextCheckDate;
    //下次检测日期
    @ExcelCell(index = 19)
    private Timestamp nextTestDate;
    //下次保养日期
    @ExcelCell(index = 20)
    private Timestamp nextTakecareDate;
    //负责人ID外键
    @ExcelCell(index = 21)
    private Long leadingPersonId;
    //负责人部门外键
    @ExcelCell(index = 22)
    private Long leadingPersonDepartmentId;
    //供应商
    @ExcelCell(index = 23)
    private String supplyName;
    //使用说明
    @ExcelCell(index = 24)
    private String useMemo;
    //是否检查 1:是 2:否
    @ExcelCell(index = 25)
    private Integer isNeedCheck;
    //检查周期
    @ExcelCell(index = 26)
    private String checkCycle;
    //检查提前提醒
    @ExcelCell(index = 27)
    private String checkWarn;
    //是否检测 1:是 2:否
    @ExcelCell(index = 28)
    private Integer isNeedTest;
    //检测周期
    @ExcelCell(index = 29)
    private String testCycle;
    //检测提前提醒
    @ExcelCell(index = 30)
    private String testWarn;
    //是否保养 1:是 2:否
    @ExcelCell(index = 31)
    private Integer isNeedTakecare;
    //检查内容
    @ExcelCell(index = 32)
    private String checkContent;
    //负责部门/外键
    @ExcelCell(index = 33)
    private Long leadingDepartmentId;
    //检查指标
    @ExcelCell(index = 34)
    private String checkPoint;
    //预警值
    @ExcelCell(index = 35)
    private String alertNum;
    //联锁值
    @ExcelCell(index = 36)
    private String lockNum;
    //停用理由
    @ExcelCell(index = 37)
    private String stopReason;
    //停用后措施
    @ExcelCell(index = 38)
    private String afterStopStep;
    //实际停用日期
    @ExcelCell(index = 39)
    private Timestamp actualStopDate;
    //停用提交人/外键
    @ExcelCell(index = 40)
    private Long stopSubmitPersonId;
    //停用提交日期
    @ExcelCell(index = 41)
    private Timestamp stopSubmitDate;
    //恢复理由
    @ExcelCell(index = 42)
    private String recoveryReason;
    //恢复填报日期
    @ExcelCell(index = 43)
    private Timestamp recoverySubmitDate;
    //实际恢复日期
    @ExcelCell(index = 44)
    private Timestamp actualRecoveryDate;
    //报废理由
    @ExcelCell(index = 45)
    private String destoryReason;
    //报废填报日期
    @ExcelCell(index = 46)
    private Timestamp destorySubmitDate;
    //实际报废日期
    @ExcelCell(index = 47)
    private Timestamp actualDestoryDate;
    //类型/类别外键
    public Long getEquipmentTypeId() {
        return equipmentTypeId;
    }
    public void setEquipmentTypeId(Long equipmentTypeId) {
        this.equipmentTypeId = equipmentTypeId;
    }
    //具体类型(页面左侧的导航栏使用) 0:仪器仪表信息 1:生产设备设施 2:安全设备设施
    public Integer getInfoType() {
        return infoType;
    }
    public void setInfoType(Integer infoType) {
        this.infoType = infoType;
    }
    //位号
    public String getPositionNum() {
        return positionNum;
    }
    public void setPositionNum(String positionNum) {
        this.positionNum = positionNum;
    }
    public String getqName() {
        return qName;
    }
    public void setqName(String qName) {
        this.qName = qName;
    }
    public String getqUsage() {
        return qUsage;
    }
    public void setqUsage(String qUsage) {
        this.qUsage = qUsage;
    }
    //型号
    public String getModel() {
        return model;
    }
    public void setModel(String model) {
        this.model = model;
    }
    //单位部门外键
    public Long getDepartmentId() {
        return departmentId;
    }
    public void setDepartmentId(Long departmentId) {
        this.departmentId = departmentId;
    }
    //设置部位
    public String getSetPart() {
        return setPart;
    }
    public void setSetPart(String setPart) {
        this.setPart = setPart;
    }
    //生产日期
    public Timestamp getProduceTime() {
        return produceTime;
    }
    public void setProduceTime(Timestamp produceTime) {
        this.produceTime = produceTime;
    }
    //使用期限(天)
    public String getUseEndDay() {
        return useEndDay;
    }
    public void setUseEndDay(String useEndDay) {
        this.useEndDay = useEndDay;
    }
    //生命周期 1:已使用 2:库存中 3:报废
    public Integer getLifeCycle() {
        return lifeCycle;
    }
    public void setLifeCycle(Integer lifeCycle) {
        this.lifeCycle = lifeCycle;
    }
    //投用日期
    public Timestamp getUseDate() {
        return useDate;
    }
    public void setUseDate(Timestamp useDate) {
        this.useDate = useDate;
    }
    //维修状态 1:维修中 2:已修好
    public Integer getRepairStatus() {
        return repairStatus;
    }
    public void setRepairStatus(Integer repairStatus) {
        this.repairStatus = repairStatus;
    }
    //停用状态 1:停用 2.在用 3.维修 4.报废
    public Integer getStopStatus() {
        return stopStatus;
    }
    public void setStopStatus(Integer stopStatus) {
        this.stopStatus = stopStatus;
    }
    //上次检查日期
    public Timestamp getPreviousCheckDate() {
        return previousCheckDate;
    }
    public void setPreviousCheckDate(Timestamp previousCheckDate) {
        this.previousCheckDate = previousCheckDate;
    }
    //上次检测日期
    public Timestamp getPreviousTestDate() {
        return previousTestDate;
    }
    public void setPreviousTestDate(Timestamp previousTestDate) {
        this.previousTestDate = previousTestDate;
    }
    //上次保养日期
    public Timestamp getPreviousTakecareDate() {
        return previousTakecareDate;
    }
    public void setPreviousTakecareDate(Timestamp previousTakecareDate) {
        this.previousTakecareDate = previousTakecareDate;
    }
    //下次检查日期
    public Timestamp getNextCheckDate() {
        return nextCheckDate;
    }
    public void setNextCheckDate(Timestamp nextCheckDate) {
        this.nextCheckDate = nextCheckDate;
    }
    //下次检测日期
    public Timestamp getNextTestDate() {
        return nextTestDate;
    }
    public void setNextTestDate(Timestamp nextTestDate) {
        this.nextTestDate = nextTestDate;
    }
    //下次保养日期
    public Timestamp getNextTakecareDate() {
        return nextTakecareDate;
    }
    public void setNextTakecareDate(Timestamp nextTakecareDate) {
        this.nextTakecareDate = nextTakecareDate;
    }
    //负责人ID外键
    public Long getLeadingPersonId() {
        return leadingPersonId;
    }
    public void setLeadingPersonId(Long leadingPersonId) {
        this.leadingPersonId = leadingPersonId;
    }
    //负责人部门外键
    public Long getLeadingPersonDepartmentId() {
        return leadingPersonDepartmentId;
    }
    public void setLeadingPersonDepartmentId(Long leadingPersonDepartmentId) {
        this.leadingPersonDepartmentId = leadingPersonDepartmentId;
    }
    //供应商
    public String getSupplyName() {
        return supplyName;
    }
    public void setSupplyName(String supplyName) {
        this.supplyName = supplyName;
    }
    //使用说明
    public String getUseMemo() {
        return useMemo;
    }
    public void setUseMemo(String useMemo) {
        this.useMemo = useMemo;
    }
    //是否检查 1:是 2:否
    public Integer getIsNeedCheck() {
        return isNeedCheck;
    }
    public void setIsNeedCheck(Integer isNeedCheck) {
        this.isNeedCheck = isNeedCheck;
    }
    //检查周期
    public String getCheckCycle() {
        return checkCycle;
    }
    public void setCheckCycle(String checkCycle) {
        this.checkCycle = checkCycle;
    }
    //检查提前提醒
    public String getCheckWarn() {
        return checkWarn;
    }
    public void setCheckWarn(String checkWarn) {
        this.checkWarn = checkWarn;
    }
    //是否检测 1:是 2:否
    public Integer getIsNeedTest() {
        return isNeedTest;
    }
    public void setIsNeedTest(Integer isNeedTest) {
        this.isNeedTest = isNeedTest;
    }
    //检测周期
    public String getTestCycle() {
        return testCycle;
    }
    public void setTestCycle(String testCycle) {
        this.testCycle = testCycle;
    }
    //检测提前提醒
    public String getTestWarn() {
        return testWarn;
    }
    public void setTestWarn(String testWarn) {
        this.testWarn = testWarn;
    }
    //是否保养 1:是 2:否
    public Integer getIsNeedTakecare() {
        return isNeedTakecare;
    }
    public void setIsNeedTakecare(Integer isNeedTakecare) {
        this.isNeedTakecare = isNeedTakecare;
    }
    //检查内容
    public String getCheckContent() {
        return checkContent;
    }
    public void setCheckContent(String checkContent) {
        this.checkContent = checkContent;
    }
    //负责部门/外键
    public Long getLeadingDepartmentId() {
        return leadingDepartmentId;
    }
    public void setLeadingDepartmentId(Long leadingDepartmentId) {
        this.leadingDepartmentId = leadingDepartmentId;
    }
    //检查指标
    public String getCheckPoint() {
        return checkPoint;
    }
    public void setCheckPoint(String checkPoint) {
        this.checkPoint = checkPoint;
    }
    //预警值
    public String getAlertNum() {
        return alertNum;
    }
    public void setAlertNum(String alertNum) {
        this.alertNum = alertNum;
    }
    //联锁值
    public String getLockNum() {
        return lockNum;
    }
    public void setLockNum(String lockNum) {
        this.lockNum = lockNum;
    }
    //停用理由
    public String getStopReason() {
        return stopReason;
    }
    public void setStopReason(String stopReason) {
        this.stopReason = stopReason;
    }
    //停用后措施
    public String getAfterStopStep() {
        return afterStopStep;
    }
    public void setAfterStopStep(String afterStopStep) {
        this.afterStopStep = afterStopStep;
    }
    //实际停用日期
    public Timestamp getActualStopDate() {
        return actualStopDate;
    }
    public void setActualStopDate(Timestamp actualStopDate) {
        this.actualStopDate = actualStopDate;
    }
    //停用提交人/外键
    public Long getStopSubmitPersonId() {
        return stopSubmitPersonId;
    }
    public void setStopSubmitPersonId(Long stopSubmitPersonId) {
        this.stopSubmitPersonId = stopSubmitPersonId;
    }
    //停用提交日期
    public Timestamp getStopSubmitDate() {
        return stopSubmitDate;
    }
    public void setStopSubmitDate(Timestamp stopSubmitDate) {
        this.stopSubmitDate = stopSubmitDate;
    }
    //恢复理由
    public String getRecoveryReason() {
        return recoveryReason;
    }
    public void setRecoveryReason(String recoveryReason) {
        this.recoveryReason = recoveryReason;
    }
    //恢复填报日期
    public Timestamp getRecoverySubmitDate() {
        return recoverySubmitDate;
    }
    public void setRecoverySubmitDate(Timestamp recoverySubmitDate) {
        this.recoverySubmitDate = recoverySubmitDate;
    }
    //实际恢复日期
    public Timestamp getActualRecoveryDate() {
        return actualRecoveryDate;
    }
    public void setActualRecoveryDate(Timestamp actualRecoveryDate) {
        this.actualRecoveryDate = actualRecoveryDate;
    }
    //报废理由
    public String getDestoryReason() {
        return destoryReason;
    }
    public void setDestoryReason(String destoryReason) {
        this.destoryReason = destoryReason;
    }
    //报废填报日期
    public Timestamp getDestorySubmitDate() {
        return destorySubmitDate;
    }
    public void setDestorySubmitDate(Timestamp destorySubmitDate) {
        this.destorySubmitDate = destorySubmitDate;
    }
    //实际报废日期
    public Timestamp getActualDestoryDate() {
        return actualDestoryDate;
    }
    public void setActualDestoryDate(Timestamp actualDestoryDate) {
        this.actualDestoryDate = actualDestoryDate;
    }
}
equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/KeypointEquipmentInfoImportExcel.java
对比新文件
@@ -0,0 +1,184 @@
package com.gkhy.safePlatform.equipment.model.dto.req;
import com.gkhy.safePlatform.equipment.utils.poihelper.ExcelCell;
import java.io.Serializable;
public class KeypointEquipmentInfoImportExcel implements Serializable {
    //类型/类别外键
    @ExcelCell(index = 1)
    private Long equipmentTypeId;
    //名称
    @ExcelCell(index = 2)
    private String name;
    //单位部门外键
    @ExcelCell(index = 3)
    private Long departmentId;
    //所属部门名称
    private String departmentName;
    //具体位置
    @ExcelCell(index = 4)
    private String position;
    //负责人姓名
    @ExcelCell(index = 5)
    private String leadingPersonName;
    //联系人/外键
    @ExcelCell(index = 6)
    private Long connectPersonId;
    //录入人/外键
    @ExcelCell(index = 7)
    private Long inputPersonId;
    //责任人/外键
    @ExcelCell(index = 8)
    private Long responsibilityPersonId;
    //装置部位分类 1:关键装置 2:重点部位
    @ExcelCell(index = 9)
    private Integer partType;
    //检查周期
    @ExcelCell(index = 10)
    private String checkCycle;
    //应急预案/外键
    @ExcelCell(index = 11)
    private Long emergencePlanId;
    //主要危险有害因素
    @ExcelCell(index = 12)
    private String dangerousElement;
    //易导致风险
    @ExcelCell(index = 13)
    private String toDangerous;
    //应急处置措施
    @ExcelCell(index = 14)
    private String treatment;
    //现场图片
    @ExcelCell(index = 15)
    private String scenePic;
    public String getDepartmentName() {
        return departmentName;
    }
    public void setDepartmentName(String departmentName) {
        this.departmentName = departmentName;
    }
    //类型/类别外键
    public Long getEquipmentTypeId() {
        return equipmentTypeId;
    }
    public void setEquipmentTypeId(Long equipmentTypeId) {
        this.equipmentTypeId = equipmentTypeId;
    }
    //名称
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    //单位部门外键
    public Long getDepartmentId() {
        return departmentId;
    }
    public void setDepartmentId(Long departmentId) {
        this.departmentId = departmentId;
    }
    //具体位置
    public String getPosition() {
        return position;
    }
    public void setPosition(String position) {
        this.position = position;
    }
    //负责人姓名
    public String getLeadingPersonName() {
        return leadingPersonName;
    }
    public void setLeadingPersonName(String leadingPersonName) {
        this.leadingPersonName = leadingPersonName;
    }
    //联系人/外键
    public Long getConnectPersonId() {
        return connectPersonId;
    }
    public void setConnectPersonId(Long connectPersonId) {
        this.connectPersonId = connectPersonId;
    }
    //录入人/外键
    public Long getInputPersonId() {
        return inputPersonId;
    }
    public void setInputPersonId(Long inputPersonId) {
        this.inputPersonId = inputPersonId;
    }
    //责任人/外键
    public Long getResponsibilityPersonId() {
        return responsibilityPersonId;
    }
    public void setResponsibilityPersonId(Long responsibilityPersonId) {
        this.responsibilityPersonId = responsibilityPersonId;
    }
    //装置部位分类 1:关键装置 2:重点部位
    public Integer getPartType() {
        return partType;
    }
    public void setPartType(Integer partType) {
        this.partType = partType;
    }
    //检查周期
    public String getCheckCycle() {
        return checkCycle;
    }
    public void setCheckCycle(String checkCycle) {
        this.checkCycle = checkCycle;
    }
    //应急预案/外键
    public Long getEmergencePlanId() {
        return emergencePlanId;
    }
    public void setEmergencePlanId(Long emergencePlanId) {
        this.emergencePlanId = emergencePlanId;
    }
    //主要危险有害因素
    public String getDangerousElement() {
        return dangerousElement;
    }
    public void setDangerousElement(String dangerousElement) {
        this.dangerousElement = dangerousElement;
    }
    //易导致风险
    public String getToDangerous() {
        return toDangerous;
    }
    public void setToDangerous(String toDangerous) {
        this.toDangerous = toDangerous;
    }
    //应急处置措施
    public String getTreatment() {
        return treatment;
    }
    public void setTreatment(String treatment) {
        this.treatment = treatment;
    }
    //现场图片
    public String getScenePic() {
        return scenePic;
    }
    public void setScenePic(String scenePic) {
        this.scenePic = scenePic;
    }
}
equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/EquipmentInfoExcel.java
对比新文件
@@ -0,0 +1,541 @@
package com.gkhy.safePlatform.equipment.model.dto.resp;
import com.gkhy.safePlatform.equipment.utils.poihelper.ExcelCell;
import java.io.Serializable;
import java.sql.Timestamp;
public class EquipmentInfoExcel implements Serializable {
    //ID
    @ExcelCell(index = 0)
    private Long id;
    //类型/类别外键
    @ExcelCell(index = 1)
    private Long equipmentTypeId;
    //具体类型(页面左侧的导航栏使用) 0:仪器仪表信息 1:生产设备设施 2:安全设备设施
    @ExcelCell(index = 2)
    private Integer infoType;
    //名称
    @ExcelCell(index = 3)
    private String qName;
    //位号
    @ExcelCell(index = 4)
    private String positionNum;
    //用途
    @ExcelCell(index = 5)
    private String qUsage;
    //型号
    @ExcelCell(index = 6)
    private String model;
    //单位部门外键
    @ExcelCell(index = 7)
    private Long departmentId;
    //设置部位
    @ExcelCell(index = 8)
    private String setPart;
    //生产日期
    @ExcelCell(index = 9)
    private Timestamp produceTime;
    //使用期限(天)
    @ExcelCell(index = 10)
    private String useEndDay;
    //生命周期 1:已使用 2:库存中 3:报废
    @ExcelCell(index = 11)
    private Integer lifeCycle;
    //投用日期
    @ExcelCell(index = 12)
    private Timestamp useDate;
    //维修状态 1:维修中 2:已修好
    @ExcelCell(index = 13)
    private Integer repairStatus;
    //停用状态 1:停用 2.在用 3.维修 4.报废
    @ExcelCell(index = 14)
    private Integer stopStatus;
    //上次检查日期
    @ExcelCell(index = 15)
    private Timestamp previousCheckDate;
    //上次检测日期
    @ExcelCell(index = 16)
    private Timestamp previousTestDate;
    //上次保养日期
    @ExcelCell(index = 17)
    private Timestamp previousTakecareDate;
    //下次检查日期
    @ExcelCell(index = 18)
    private Timestamp nextCheckDate;
    //下次检测日期
    @ExcelCell(index = 19)
    private Timestamp nextTestDate;
    //下次保养日期
    @ExcelCell(index = 20)
    private Timestamp nextTakecareDate;
    //负责人ID外键
    @ExcelCell(index = 21)
    private Long leadingPersonId;
    //负责人部门外键
    @ExcelCell(index = 22)
    private Long leadingPersonDepartmentId;
    //供应商
    @ExcelCell(index = 23)
    private String supplyName;
    //使用说明
    @ExcelCell(index = 24)
    private String useMemo;
    //是否检查 1:是 2:否
    @ExcelCell(index = 25)
    private Integer isNeedCheck;
    //检查周期
    @ExcelCell(index = 26)
    private String checkCycle;
    //检查提前提醒
    @ExcelCell(index = 27)
    private String checkWarn;
    //是否检测 1:是 2:否
    @ExcelCell(index = 28)
    private Integer isNeedTest;
    //检测周期
    @ExcelCell(index = 29)
    private String testCycle;
    //检测提前提醒
    @ExcelCell(index = 30)
    private String testWarn;
    //是否保养 1:是 2:否
    @ExcelCell(index = 31)
    private Integer isNeedTakecare;
    //检查内容
    @ExcelCell(index = 32)
    private String checkContent;
    //负责部门/外键
    @ExcelCell(index = 33)
    private Long leadingDepartmentId;
    //检查指标
    @ExcelCell(index = 34)
    private String checkPoint;
    //预警值
    @ExcelCell(index = 35)
    private String alertNum;
    //联锁值
    @ExcelCell(index = 36)
    private String lockNum;
    //停用理由
    @ExcelCell(index = 37)
    private String stopReason;
    //停用后措施
    @ExcelCell(index = 38)
    private String afterStopStep;
    //实际停用日期
    @ExcelCell(index = 39)
    private Timestamp actualStopDate;
    //停用提交人/外键
    @ExcelCell(index = 40)
    private Long stopSubmitPersonId;
    //停用提交日期
    @ExcelCell(index = 41)
    private Timestamp stopSubmitDate;
    //恢复理由
    @ExcelCell(index = 42)
    private String recoveryReason;
    //恢复填报日期
    @ExcelCell(index = 43)
    private Timestamp recoverySubmitDate;
    //实际恢复日期
    @ExcelCell(index = 44)
    private Timestamp actualRecoveryDate;
    //报废理由
    @ExcelCell(index = 45)
    private String destoryReason;
    //报废填报日期
    @ExcelCell(index = 46)
    private Timestamp destorySubmitDate;
    //实际报废日期
    @ExcelCell(index = 47)
    private Timestamp actualDestoryDate;
    //ID
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    //类型/类别外键
    public Long getEquipmentTypeId() {
        return equipmentTypeId;
    }
    public void setEquipmentTypeId(Long equipmentTypeId) {
        this.equipmentTypeId = equipmentTypeId;
    }
    //具体类型(页面左侧的导航栏使用) 0:仪器仪表信息 1:生产设备设施 2:安全设备设施
    public Integer getInfoType() {
        return infoType;
    }
    public void setInfoType(Integer infoType) {
        this.infoType = infoType;
    }
    //位号
    public String getPositionNum() {
        return positionNum;
    }
    public void setPositionNum(String positionNum) {
        this.positionNum = positionNum;
    }
    public String getqName() {
        return qName;
    }
    public void setqName(String qName) {
        this.qName = qName;
    }
    public String getqUsage() {
        return qUsage;
    }
    public void setqUsage(String qUsage) {
        this.qUsage = qUsage;
    }
    //型号
    public String getModel() {
        return model;
    }
    public void setModel(String model) {
        this.model = model;
    }
    //单位部门外键
    public Long getDepartmentId() {
        return departmentId;
    }
    public void setDepartmentId(Long departmentId) {
        this.departmentId = departmentId;
    }
    //设置部位
    public String getSetPart() {
        return setPart;
    }
    public void setSetPart(String setPart) {
        this.setPart = setPart;
    }
    //生产日期
    public Timestamp getProduceTime() {
        return produceTime;
    }
    public void setProduceTime(Timestamp produceTime) {
        this.produceTime = produceTime;
    }
    //使用期限(天)
    public String getUseEndDay() {
        return useEndDay;
    }
    public void setUseEndDay(String useEndDay) {
        this.useEndDay = useEndDay;
    }
    //生命周期 1:已使用 2:库存中 3:报废
    public Integer getLifeCycle() {
        return lifeCycle;
    }
    public void setLifeCycle(Integer lifeCycle) {
        this.lifeCycle = lifeCycle;
    }
    //投用日期
    public Timestamp getUseDate() {
        return useDate;
    }
    public void setUseDate(Timestamp useDate) {
        this.useDate = useDate;
    }
    //维修状态 1:维修中 2:已修好
    public Integer getRepairStatus() {
        return repairStatus;
    }
    public void setRepairStatus(Integer repairStatus) {
        this.repairStatus = repairStatus;
    }
    //停用状态 1:停用 2.在用 3.维修 4.报废
    public Integer getStopStatus() {
        return stopStatus;
    }
    public void setStopStatus(Integer stopStatus) {
        this.stopStatus = stopStatus;
    }
    //上次检查日期
    public Timestamp getPreviousCheckDate() {
        return previousCheckDate;
    }
    public void setPreviousCheckDate(Timestamp previousCheckDate) {
        this.previousCheckDate = previousCheckDate;
    }
    //上次检测日期
    public Timestamp getPreviousTestDate() {
        return previousTestDate;
    }
    public void setPreviousTestDate(Timestamp previousTestDate) {
        this.previousTestDate = previousTestDate;
    }
    //上次保养日期
    public Timestamp getPreviousTakecareDate() {
        return previousTakecareDate;
    }
    public void setPreviousTakecareDate(Timestamp previousTakecareDate) {
        this.previousTakecareDate = previousTakecareDate;
    }
    //下次检查日期
    public Timestamp getNextCheckDate() {
        return nextCheckDate;
    }
    public void setNextCheckDate(Timestamp nextCheckDate) {
        this.nextCheckDate = nextCheckDate;
    }
    //下次检测日期
    public Timestamp getNextTestDate() {
        return nextTestDate;
    }
    public void setNextTestDate(Timestamp nextTestDate) {
        this.nextTestDate = nextTestDate;
    }
    //下次保养日期
    public Timestamp getNextTakecareDate() {
        return nextTakecareDate;
    }
    public void setNextTakecareDate(Timestamp nextTakecareDate) {
        this.nextTakecareDate = nextTakecareDate;
    }
    //负责人ID外键
    public Long getLeadingPersonId() {
        return leadingPersonId;
    }
    public void setLeadingPersonId(Long leadingPersonId) {
        this.leadingPersonId = leadingPersonId;
    }
    //负责人部门外键
    public Long getLeadingPersonDepartmentId() {
        return leadingPersonDepartmentId;
    }
    public void setLeadingPersonDepartmentId(Long leadingPersonDepartmentId) {
        this.leadingPersonDepartmentId = leadingPersonDepartmentId;
    }
    //供应商
    public String getSupplyName() {
        return supplyName;
    }
    public void setSupplyName(String supplyName) {
        this.supplyName = supplyName;
    }
    //使用说明
    public String getUseMemo() {
        return useMemo;
    }
    public void setUseMemo(String useMemo) {
        this.useMemo = useMemo;
    }
    //是否检查 1:是 2:否
    public Integer getIsNeedCheck() {
        return isNeedCheck;
    }
    public void setIsNeedCheck(Integer isNeedCheck) {
        this.isNeedCheck = isNeedCheck;
    }
    //检查周期
    public String getCheckCycle() {
        return checkCycle;
    }
    public void setCheckCycle(String checkCycle) {
        this.checkCycle = checkCycle;
    }
    //检查提前提醒
    public String getCheckWarn() {
        return checkWarn;
    }
    public void setCheckWarn(String checkWarn) {
        this.checkWarn = checkWarn;
    }
    //是否检测 1:是 2:否
    public Integer getIsNeedTest() {
        return isNeedTest;
    }
    public void setIsNeedTest(Integer isNeedTest) {
        this.isNeedTest = isNeedTest;
    }
    //检测周期
    public String getTestCycle() {
        return testCycle;
    }
    public void setTestCycle(String testCycle) {
        this.testCycle = testCycle;
    }
    //检测提前提醒
    public String getTestWarn() {
        return testWarn;
    }
    public void setTestWarn(String testWarn) {
        this.testWarn = testWarn;
    }
    //是否保养 1:是 2:否
    public Integer getIsNeedTakecare() {
        return isNeedTakecare;
    }
    public void setIsNeedTakecare(Integer isNeedTakecare) {
        this.isNeedTakecare = isNeedTakecare;
    }
    //检查内容
    public String getCheckContent() {
        return checkContent;
    }
    public void setCheckContent(String checkContent) {
        this.checkContent = checkContent;
    }
    //负责部门/外键
    public Long getLeadingDepartmentId() {
        return leadingDepartmentId;
    }
    public void setLeadingDepartmentId(Long leadingDepartmentId) {
        this.leadingDepartmentId = leadingDepartmentId;
    }
    //检查指标
    public String getCheckPoint() {
        return checkPoint;
    }
    public void setCheckPoint(String checkPoint) {
        this.checkPoint = checkPoint;
    }
    //预警值
    public String getAlertNum() {
        return alertNum;
    }
    public void setAlertNum(String alertNum) {
        this.alertNum = alertNum;
    }
    //联锁值
    public String getLockNum() {
        return lockNum;
    }
    public void setLockNum(String lockNum) {
        this.lockNum = lockNum;
    }
    //停用理由
    public String getStopReason() {
        return stopReason;
    }
    public void setStopReason(String stopReason) {
        this.stopReason = stopReason;
    }
    //停用后措施
    public String getAfterStopStep() {
        return afterStopStep;
    }
    public void setAfterStopStep(String afterStopStep) {
        this.afterStopStep = afterStopStep;
    }
    //实际停用日期
    public Timestamp getActualStopDate() {
        return actualStopDate;
    }
    public void setActualStopDate(Timestamp actualStopDate) {
        this.actualStopDate = actualStopDate;
    }
    //停用提交人/外键
    public Long getStopSubmitPersonId() {
        return stopSubmitPersonId;
    }
    public void setStopSubmitPersonId(Long stopSubmitPersonId) {
        this.stopSubmitPersonId = stopSubmitPersonId;
    }
    //停用提交日期
    public Timestamp getStopSubmitDate() {
        return stopSubmitDate;
    }
    public void setStopSubmitDate(Timestamp stopSubmitDate) {
        this.stopSubmitDate = stopSubmitDate;
    }
    //恢复理由
    public String getRecoveryReason() {
        return recoveryReason;
    }
    public void setRecoveryReason(String recoveryReason) {
        this.recoveryReason = recoveryReason;
    }
    //恢复填报日期
    public Timestamp getRecoverySubmitDate() {
        return recoverySubmitDate;
    }
    public void setRecoverySubmitDate(Timestamp recoverySubmitDate) {
        this.recoverySubmitDate = recoverySubmitDate;
    }
    //实际恢复日期
    public Timestamp getActualRecoveryDate() {
        return actualRecoveryDate;
    }
    public void setActualRecoveryDate(Timestamp actualRecoveryDate) {
        this.actualRecoveryDate = actualRecoveryDate;
    }
    //报废理由
    public String getDestoryReason() {
        return destoryReason;
    }
    public void setDestoryReason(String destoryReason) {
        this.destoryReason = destoryReason;
    }
    //报废填报日期
    public Timestamp getDestorySubmitDate() {
        return destorySubmitDate;
    }
    public void setDestorySubmitDate(Timestamp destorySubmitDate) {
        this.destorySubmitDate = destorySubmitDate;
    }
    //实际报废日期
    public Timestamp getActualDestoryDate() {
        return actualDestoryDate;
    }
    public void setActualDestoryDate(Timestamp actualDestoryDate) {
        this.actualDestoryDate = actualDestoryDate;
    }
}
equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/KeypointEquipmentInfoExcel.java
对比新文件
@@ -0,0 +1,345 @@
package com.gkhy.safePlatform.equipment.model.dto.resp;
import com.gkhy.safePlatform.equipment.entity.*;
import com.gkhy.safePlatform.equipment.utils.poihelper.ExcelCell;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class KeypointEquipmentInfoExcel implements Serializable {
    //ID
    @ExcelCell(index = 0)
    private Long id;
    //类型/类别外键
    @ExcelCell(index = 1)
    private Long equipmentTypeId;
    //名称
    @ExcelCell(index = 2)
    private String name;
    //单位部门外键
    @ExcelCell(index = 3)
    private Long departmentId;
    //所属部门名称
    private String departmentName;
    //具体位置
    @ExcelCell(index = 4)
    private String position;
    //负责人姓名
    @ExcelCell(index = 5)
    private String leadingPersonName;
    //联系人/外键
    @ExcelCell(index = 6)
    private Long connectPersonId;
    //录入人/外键
    @ExcelCell(index = 7)
    private Long inputPersonId;
    //责任人/外键
    @ExcelCell(index = 8)
    private Long responsibilityPersonId;
    //装置部位分类 1:关键装置 2:重点部位
    @ExcelCell(index = 9)
    private Integer partType;
    //检查周期
    @ExcelCell(index = 10)
    private String checkCycle;
    //应急预案/外键
    @ExcelCell(index = 11)
    private Long emergencePlanId;
    //主要危险有害因素
    @ExcelCell(index = 12)
    private String dangerousElement;
    //易导致风险
    @ExcelCell(index = 13)
    private String toDangerous;
    //应急处置措施
    @ExcelCell(index = 14)
    private String treatment;
    //现场图片
    @ExcelCell(index = 15)
    private String scenePic;
    private Date createTime;
    private Date updateTime;
    public String getDepartmentName() {
        return departmentName;
    }
    public void setDepartmentName(String departmentName) {
        this.departmentName = departmentName;
    }
    //设备保养
    private List<EquipmentTakecareDetail> takecareDetailList = new ArrayList<>();
    //设备检测
    private List<EquipmentTestDetail> testDetailList = new ArrayList<>();
    //设备检查
    private List checkDetailList = new ArrayList<>();
    //设备维修
    private List<EquipmentRepairDetail> repaireDetailList = new ArrayList<>();
    //保养标准
    private List<EquipmentTakecareStardardDetail> takecareStardardeDetailList = new ArrayList<>();
    //检查标准
    private List<EquipmentCheckStandardDetail> checkStandardeDetailList = new ArrayList<>();
    //要删除的设备保养
    private String delTakecareDetails;
    //要删除的设备检测
    private String delTestDetails;
    //要删除的设备维修
    private String delRepaireDetails;
    //要删除的保养标准
    private String delTakecareStardardeDetails;
    //要删除的检查标准
    private String delCheckStandardeDetails;
    public String getDelTakecareDetails() {
        return delTakecareDetails;
    }
    public void setDelTakecareDetails(String delTakecareDetails) {
        this.delTakecareDetails = delTakecareDetails;
    }
    public String getDelTestDetails() {
        return delTestDetails;
    }
    public void setDelTestDetails(String delTestDetails) {
        this.delTestDetails = delTestDetails;
    }
    public String getDelRepaireDetails() {
        return delRepaireDetails;
    }
    public void setDelRepaireDetails(String delRepaireDetails) {
        this.delRepaireDetails = delRepaireDetails;
    }
    public String getDelTakecareStardardeDetails() {
        return delTakecareStardardeDetails;
    }
    public void setDelTakecareStardardeDetails(String delTakecareStardardeDetails) {
        this.delTakecareStardardeDetails = delTakecareStardardeDetails;
    }
    public String getDelCheckStandardeDetails() {
        return delCheckStandardeDetails;
    }
    public void setDelCheckStandardeDetails(String delCheckStandardeDetails) {
        this.delCheckStandardeDetails = delCheckStandardeDetails;
    }
    public List<EquipmentTakecareDetail> getTakecareDetailList() {
        return takecareDetailList;
    }
    public void setTakecareDetailList(List<EquipmentTakecareDetail> takecareDetailList) {
        this.takecareDetailList = takecareDetailList;
    }
    public List<EquipmentTestDetail> getTestDetailList() {
        return testDetailList;
    }
    public void setTestDetailList(List<EquipmentTestDetail> testDetailList) {
        this.testDetailList = testDetailList;
    }
    public List getCheckDetailList() {
        return checkDetailList;
    }
    public void setCheckDetailList(List checkDetailList) {
        this.checkDetailList = checkDetailList;
    }
    public List<EquipmentRepairDetail> getRepaireDetailList() {
        return repaireDetailList;
    }
    public void setRepaireDetailList(List<EquipmentRepairDetail> repaireDetailList) {
        this.repaireDetailList = repaireDetailList;
    }
    public List<EquipmentTakecareStardardDetail> getTakecareStardardeDetailList() {
        return takecareStardardeDetailList;
    }
    public void setTakecareStardardeDetailList(List<EquipmentTakecareStardardDetail> takecareStardardeDetailList) {
        this.takecareStardardeDetailList = takecareStardardeDetailList;
    }
    public List<EquipmentCheckStandardDetail> getCheckStandardeDetailList() {
        return checkStandardeDetailList;
    }
    public void setCheckStandardeDetailList(List<EquipmentCheckStandardDetail> checkStandardeDetailList) {
        this.checkStandardeDetailList = checkStandardeDetailList;
    }
    //ID
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    //类型/类别外键
    public Long getEquipmentTypeId() {
        return equipmentTypeId;
    }
    public void setEquipmentTypeId(Long equipmentTypeId) {
        this.equipmentTypeId = equipmentTypeId;
    }
    //名称
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    //单位部门外键
    public Long getDepartmentId() {
        return departmentId;
    }
    public void setDepartmentId(Long departmentId) {
        this.departmentId = departmentId;
    }
    //具体位置
    public String getPosition() {
        return position;
    }
    public void setPosition(String position) {
        this.position = position;
    }
    //负责人姓名
    public String getLeadingPersonName() {
        return leadingPersonName;
    }
    public void setLeadingPersonName(String leadingPersonName) {
        this.leadingPersonName = leadingPersonName;
    }
    //联系人/外键
    public Long getConnectPersonId() {
        return connectPersonId;
    }
    public void setConnectPersonId(Long connectPersonId) {
        this.connectPersonId = connectPersonId;
    }
    //录入人/外键
    public Long getInputPersonId() {
        return inputPersonId;
    }
    public void setInputPersonId(Long inputPersonId) {
        this.inputPersonId = inputPersonId;
    }
    //责任人/外键
    public Long getResponsibilityPersonId() {
        return responsibilityPersonId;
    }
    public void setResponsibilityPersonId(Long responsibilityPersonId) {
        this.responsibilityPersonId = responsibilityPersonId;
    }
    //装置部位分类 1:关键装置 2:重点部位
    public Integer getPartType() {
        return partType;
    }
    public void setPartType(Integer partType) {
        this.partType = partType;
    }
    //检查周期
    public String getCheckCycle() {
        return checkCycle;
    }
    public void setCheckCycle(String checkCycle) {
        this.checkCycle = checkCycle;
    }
    //应急预案/外键
    public Long getEmergencePlanId() {
        return emergencePlanId;
    }
    public void setEmergencePlanId(Long emergencePlanId) {
        this.emergencePlanId = emergencePlanId;
    }
    //主要危险有害因素
    public String getDangerousElement() {
        return dangerousElement;
    }
    public void setDangerousElement(String dangerousElement) {
        this.dangerousElement = dangerousElement;
    }
    //易导致风险
    public String getToDangerous() {
        return toDangerous;
    }
    public void setToDangerous(String toDangerous) {
        this.toDangerous = toDangerous;
    }
    //应急处置措施
    public String getTreatment() {
        return treatment;
    }
    public void setTreatment(String treatment) {
        this.treatment = treatment;
    }
    //现场图片
    public String getScenePic() {
        return scenePic;
    }
    public void setScenePic(String scenePic) {
        this.scenePic = scenePic;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
}
equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/utils/DateUtils.java
对比新文件
@@ -0,0 +1,70 @@
package com.gkhy.safePlatform.equipment.utils;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
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());
    }
}
equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/utils/poihelper/ExcelCell.java
对比新文件
@@ -0,0 +1,81 @@
package com.gkhy.safePlatform.equipment.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;
    }
}
equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/utils/poihelper/ExcelLog.java
对比新文件
@@ -0,0 +1,79 @@
package com.gkhy.safePlatform.equipment.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;
    }
}
equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/utils/poihelper/ExcelLogs.java
对比新文件
@@ -0,0 +1,62 @@
package com.gkhy.safePlatform.equipment.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;
    }
}
equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/utils/poihelper/ExcelSheet.java
对比新文件
@@ -0,0 +1,66 @@
package com.gkhy.safePlatform.equipment.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;
    }
}
equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/utils/poihelper/ExcelUtil.java
对比新文件
@@ -0,0 +1,762 @@
package com.gkhy.safePlatform.equipment.utils.poihelper;
import com.gkhy.safePlatform.equipment.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.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 if (field.getType().equals(Long.class)) {
                                    Object data = getCellValue(cell);
                                    if(data != null){
                                        value = Long.parseLong(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);
    }
}
equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/utils/poihelper/FieldForSortting.java
对比新文件
@@ -0,0 +1,61 @@
package com.gkhy.safePlatform.equipment.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;
    }
}
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/model/dto/req/RewardPunishmentStandardImportExcel.java
对比新文件
@@ -0,0 +1,65 @@
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 RewardPunishmentStandardImportExcel implements Serializable {
    //奖惩名称
    @ExcelCell(index = 1)
    private String qName;
    //奖惩类型 1:奖励 2:惩罚
    @ExcelCell(index = 2)
    private Integer standardType;
    //奖惩内容
    @ExcelCell(index = 3)
    private String content;
    //依据
    @ExcelCell(index = 4)
    private String reason;
    //备注信息
    @ExcelCell(index = 5)
    private String memo;
    //奖惩类型 1:奖励 2:惩罚
    public Integer getStandardType() {
        return standardType;
    }
    public void setStandardType(Integer standardType) {
        this.standardType = standardType;
    }
    //奖惩内容
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    //奖惩名称
    public String getQName() {
        return qName;
    }
    public void setQName(String qName) {
        this.qName = qName;
    }
    //依据
    public String getReason() {
        return reason;
    }
    public void setReason(String reason) {
        this.reason = reason;
    }
    //备注信息
    public String getMemo() {
        return memo;
    }
    public void setMemo(String memo) {
        this.memo = memo;
    }
}
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/model/dto/resp/RewardPunishmentDetailExcel.java
对比新文件
@@ -0,0 +1,82 @@
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 RewardPunishmentDetailExcel implements Serializable {
    //员工(多个用逗号隔开)
    private String personId;
    @ExcelCell(index = 1)
    private Timestamp createTime;
    //奖惩类型 1:奖励 2:惩罚
    @ExcelCell(index = 2)
    private Integer standardType;
    //被奖惩者
    @ExcelCell(index = 3)
    private String personName;
    //奖惩内容
    @ExcelCell(index = 4)
    private String content;
    //依据
    @ExcelCell(index = 5)
    private String reason;
    public Integer getStandardType() {
        return standardType;
    }
    public void setStandardType(Integer standardType) {
        this.standardType = standardType;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public String getReason() {
        return reason;
    }
    public void setReason(String reason) {
        this.reason = reason;
    }
    public String getPersonId() {
        return personId;
    }
    public void setPersonId(String personId) {
        this.personId = personId;
    }
    public String getPersonName() {
        return personName;
    }
    public void setPersonName(String personName) {
        this.personName = personName;
    }
    public Timestamp getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Timestamp createTime) {
        this.createTime = createTime;
    }
}
goal-manage/goal-manage-service/src/main/java/com/gkhy/safePlatform/targetDuty/model/dto/resp/RewardPunishmentStandardExcel.java
对比新文件
@@ -0,0 +1,66 @@
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 RewardPunishmentStandardExcel implements Serializable {
    //奖惩名称
    @ExcelCell(index = 1)
    private String qName;
    //奖惩类型 1:奖励 2:惩罚
    @ExcelCell(index = 2)
    private Integer standardType;
    //奖惩内容
    @ExcelCell(index = 3)
    private String content;
    //依据
    @ExcelCell(index = 4)
    private String reason;
    //备注信息
    @ExcelCell(index = 5)
    private String memo;
    //奖惩类型 1:奖励 2:惩罚
    public Integer getStandardType() {
        return standardType;
    }
    public void setStandardType(Integer standardType) {
        this.standardType = standardType;
    }
    //奖惩内容
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    //奖惩名称
    public String getQName() {
        return qName;
    }
    public void setQName(String qName) {
        this.qName = qName;
    }
    //依据
    public String getReason() {
        return reason;
    }
    public void setReason(String reason) {
        this.reason = reason;
    }
    //备注信息
    public String getMemo() {
        return memo;
    }
    public void setMemo(String memo) {
        this.memo = memo;
    }
}