智慧保安后台管理-外网项目备份
zhongrj
2023-12-01 6123a6593e9573c7b69f567746bd41a327a4ee6d
保安员信息导入修改
2 files modified
3 files added
377 ■■■■■ changed files
src/main/java/org/springblade/common/excel/ExcelDictConverter.java 93 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/common/excel/ExcelDictItem.java 25 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/common/excel/ExcelDictItemLabel.java 25 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/excel/SecurityExcel.java 47 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java 187 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/common/excel/ExcelDictConverter.java
New file
@@ -0,0 +1,93 @@
package org.springblade.common.excel;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import com.github.xiaoymin.knife4j.core.util.StrUtil;
import org.springblade.common.cache.DictBizCache;
import org.springblade.modules.system.entity.DictBiz;
import org.springframework.stereotype.Component;
import java.lang.reflect.Field;
import java.util.List;
/**
 * 字典映射
 *
 * @author zhongrj
 * @date 2023-11-17
 */
@Component
public class ExcelDictConverter implements Converter<String> {
    @Override
    public Class supportJavaTypeKey() {
        return Integer.class;
    }
    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }
    /**
     * 导入excel 解析到java 对象
     * @param cellData
     * @param excelContentProperty
     * @param globalConfiguration
     * @return
     * @throws Exception
     */
    @Override
    public String convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        // 获取字典类型
        Field field = excelContentProperty.getField();
        ExcelDictItemLabel excel = field.getAnnotation(ExcelDictItemLabel.class);
        String dictType = excel.type();
        // 为空返回
        String dictLabel = cellData.getStringValue();
        if (StrUtil.isBlank(dictLabel)) {
            return dictLabel;
        }
        // 查询字典
        List<DictBiz> list = DictBizCache.getList(dictType);
        //解析返回
        String key = "";
        for (DictBiz dictBiz : list) {
            if (dictBiz.getDictValue().equals(dictLabel)){
                key = dictBiz.getDictKey();
                break;
            }
        }
        // 返回key
        return key;
    }
    /**
     * java 导出到 excel
     * @param dictValue
     * @param excelContentProperty
     * @param globalConfiguration
     * @return
     * @throws Exception
     */
    @Override
    public CellData convertToExcelData(String dictValue, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        // 获取字典类型
        Field field = excelContentProperty.getField();
        ExcelDictItem excel = field.getAnnotation(ExcelDictItem.class);
        String dictType = excel.type();
        List<DictBiz> list = DictBizCache.getList(dictType);
        String value = "";
        //解析返回
        for (DictBiz dictBiz : list) {
            if (dictBiz.getDictKey().equals(dictValue)){
                value = dictBiz.getDictValue();
                break;
            }
        }
        return new CellData(value);
    }
}
src/main/java/org/springblade/common/excel/ExcelDictItem.java
New file
@@ -0,0 +1,25 @@
package org.springblade.common.excel;
import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
 * excel导出字典转换注解
 * <p>
 * 将excel导出的字典code自动转换为字典label
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@JacksonAnnotationsInside
public @interface ExcelDictItem {
    /**
     * 字典type
     */
    String type();
}
src/main/java/org/springblade/common/excel/ExcelDictItemLabel.java
New file
@@ -0,0 +1,25 @@
package org.springblade.common.excel;
import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
 * excel导入字典转换注解
 * <p>
 * 将excel导入的字典label自动转换为字典code
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@JacksonAnnotationsInside
public @interface ExcelDictItemLabel {
    /**
     * 字典type
     */
    String type();
}
src/main/java/org/springblade/modules/system/excel/SecurityExcel.java
@@ -4,7 +4,11 @@
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springblade.common.excel.ExcelDictConverter;
import org.springblade.common.excel.ExcelDictItemLabel;
import java.io.Serializable;
/**
@@ -31,8 +35,9 @@
    @ExcelProperty("联系电话*")
    private String phone;
    @ExcelProperty("性别*(男/女)")
    @ExcelProperty(value = "性别*(男/女)",converter = ExcelDictConverter.class)
    @ColumnWidth(10)
    @ExcelDictItemLabel(type = "sex")
    private String sex;
    @ExcelProperty("身份证号*")
@@ -50,8 +55,9 @@
    @ColumnWidth(20)
    private String unitName;
    @ExcelProperty("最高学历*(初中及以下/高中/中技/中专/大专/本科/博士/硕士)")
    @ExcelProperty(value = "最高学历*(初中及以下/高中/中技/中专/大专/本科/博士/硕士)",converter = ExcelDictConverter.class)
    @ColumnWidth(20)
    @ExcelDictItemLabel(type = "educationType")
    private String education;
    @ExcelProperty("政治面貌*")
@@ -60,6 +66,43 @@
    @ExcelProperty("联系地址*")
    private String address;
    /**
     * 婚姻状态
     */
    @ExcelProperty(value = "婚姻状态*(未婚/已婚/离异/丧偶)",converter = ExcelDictConverter.class)
    @ExcelDictItemLabel(type = "marriageStatusType")
    private String marriageStatus;
    /**
     * 报考等级
     */
    @ExcelProperty(value = "报考等级(初级/中级/高级/特级)",converter = ExcelDictConverter.class)
    @ExcelDictItemLabel(type = "signLevelType")
    private String signLevel;
    /**
     * 户籍地址
     */
    @ExcelProperty(value = "户籍地址")
    private String permanentResidenceAddress;
    /**
     * 居住地址
     */
    @ExcelProperty(value = "居住地址")
    private String dwellAddress;
    /**
     * 家庭主要成员及联系方式
     */
    @ExcelProperty(value = "家庭主要成员及联系方式")
    private String memberOfFamily;
    /**
     * 工作经历
     */
    @ExcelProperty(value = "工作经历")
    private String workExperience;
    /**
     * 教育经历
     */
    @ExcelProperty(value = "教育经历")
    private String educationExperience;
}
src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
@@ -18,6 +18,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.zxing.WriterException;
@@ -98,6 +99,7 @@
    private final IExperienceService experienceService;
    private final MyAsyncService myAsyncService;
    private final SecurityPaperService securityPaperService;
    private final IUserDetailService userDetailService;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -877,8 +879,8 @@
     * @param isCovered
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void importSecurity(List<SecurityExcel> data, Boolean isCovered, String deptId) {
        long time = System.currentTimeMillis();
        //将不能导入的保安员账号存起来
        List<String> errorList = new ArrayList<>();
        //年龄不符的保安员信息存入集合
@@ -938,42 +940,9 @@
            }
            //性别
            if (null != userExcel.getSex()) {
                if (userExcel.getSex().equals("男")) {
                    user.setSex(1);
                }
                if (userExcel.getSex().equals("女")) {
                    user.setSex(2);
                }
            }
            user.setSex(Integer.parseInt(userExcel.getSex()));
            // 学历
            if (null != userExcel.getEducation()) {
                if (userExcel.getEducation().equals("初中及以下")
                    || userExcel.getEducation().equals("初中")
                ) {
                    user.setEducation("1");
                }
                if (userExcel.getEducation().equals("高中/中技/中专")
                    || userExcel.getEducation().equals("高中")
                    || userExcel.getEducation().equals("中技")
                    || userExcel.getEducation().equals("中专")
                ) {
                    user.setEducation("2");
                }
                if (userExcel.getEducation().equals("大专")) {
                    user.setEducation("3");
                }
                if (userExcel.getEducation().equals("本科")) {
                    user.setEducation("4");
                }
                if (userExcel.getEducation().equals("博士")) {
                    user.setEducation("5");
                }
                if (userExcel.getEducation().equals("硕士")) {
                    user.setEducation("6");
                }
            }
            user.setEducation(userExcel.getEducation());
            //判断当前用户是否已在本单位,如果是的更新数据
            User user1 = new User();
@@ -989,38 +958,6 @@
                user.setStatus(1);
                user.setIsDeleted(0);
                user.setHold("2");
                //判断是否持证
//                if (null != userExcel.getSecuritynumber() && userExcel.getSecuritynumber() != "") {
//                    user.setHold("1");
//                    //校验保安员证编号是否合规
//                    SecurityPaper securityPaper = new SecurityPaper();
//                    securityPaper.setIdCardNo(userExcel.getCardid());
//                    List<SecurityPaper> securityPaperList = securityPaperService.list(Condition.getQueryWrapper(securityPaper));
//                    if (securityPaperList.size()>0){
//                        boolean state = false;
//                        //遍历
//                        for (SecurityPaper paper : securityPaperList) {
//                            if (paper.getNumber().equals(user.getSecuritynumber())){
//                                state = true;
//                            }
//                        }
//                        if (!state){
//                            user.setHold("2");
//                            user.setSecuritynumber(null);
//                            securityInvalidList.add(userExcel.getCardid());
//                            securityInvalidStatus.set(false);
//                        }
//                    }else {
//                        user.setHold("2");
//                        user.setSecuritynumber(null);
//                        securityInvalidList.add(userExcel.getCardid());
//                        securityInvalidStatus.set(false);
//                    }
//                }else {
//                    user.setHold("2");
//                }
                //判断年龄,超过60岁的不入
//                if (AgeUtil.idCardToAge(user.getCardid())<60) {
                //分配保安角色
                Role role = new Role();
                role.setRoleAlias("保安");
@@ -1043,20 +980,33 @@
                user.setDispatch("1");
                user.setExaminationType("0");
                //新增
//                this.save(user);
                boolean save = this.save(user);
                //并更新详情数据
                if(save){
                    UserDetailEntity detailEntity = new UserDetailEntity();
                    detailEntity.setUserId(user.getId());
                    detailEntity.setDwellAddress(userExcel.getDwellAddress());
                    detailEntity.setEducationExperience(userExcel.getEducationExperience());
                    detailEntity.setMemberOfFamily(userExcel.getMemberOfFamily());
                    detailEntity.setWorkExperience(userExcel.getWorkExperience());
                    detailEntity.setPermanentResidenceAddress(userExcel.getPermanentResidenceAddress());
                    detailEntity.setMarriageStatus(Integer.parseInt(userExcel.getMarriageStatus()));
                    detailEntity.setSignLevel(Integer.parseInt(userExcel.getSignLevel()));
                    userDetailService.save(detailEntity);
                }
                //加入集合
                userList.add(user);
//                userList.add(user);
                //从业记录新增
                Experience experience = new Experience();
                experience.setCardid(user.getCardid());
//                experience.setSecurityid(user.getId().toString());
                experience.setCompanyname(userExcel.getDeptId());
                experience.setName(user.getRealName());
                experience.setPost("保安员");
                experience.setEntrytime(new Date());
//                experienceService.save(experience);
                // 新增
                experienceService.save(experience);
                //加入集合
                experienceList.add(experience);
//                experienceList.add(experience);
            }else {
                //匹配组织机构是否一致,如果不一致
@@ -1069,38 +1019,6 @@
                    continue;
                }else {
                    //如果是一致,则更新用户数据
                    //判断是否持证
//                    if (null != userExcel.getSecuritynumber() && userExcel.getSecuritynumber() != "") {
//                        user2.setHold("1");
//                        user2.setSecuritynumber(user.getSecuritynumber());
//                        //校验保安员证编号是否合规
//                        SecurityPaper securityPaper = new SecurityPaper();
//                        securityPaper.setIdCardNo(userExcel.getCardid());
//                        List<SecurityPaper> securityPaperList = securityPaperService.list(Condition.getQueryWrapper(securityPaper));
//                        if (securityPaperList.size()>0){
//                            boolean state = false;
//                            //遍历
//                            for (SecurityPaper paper : securityPaperList) {
//                                if (paper.getNumber().equals(user.getSecuritynumber())){
//                                    state = true;
//                                }
//                            }
//                            if (!state){
//                                user2.setHold("2");
//                                user2.setSecuritynumber(null);
//                                securityInvalidList.add(userExcel.getCardid());
//                                securityInvalidStatus.set(false);
//                            }
//                        }else {
//                            user2.setHold("2");
//                            user2.setSecuritynumber(null);
//                            securityInvalidList.add(userExcel.getCardid());
//                            securityInvalidStatus.set(false);
//                        }
//                    }else {
//                        user2.setHold("2");
//                    }
//                    user2.setHold("2");
                    if (null!=userExcel.getRegistered()){
                        user2.setRegistered(userExcel.getRegistered());
                    }else {
@@ -1137,27 +1055,54 @@
                    user2.setUpdateTime(new Date());
                    //更新用户数据
                    this.updateById(user2);
                    boolean update = this.updateById(user2);
                    //并更新详情数据
                    if(update){
                        // 通过用户id 查询,如果存在则更新,不存在则更新
                        QueryWrapper<UserDetailEntity> wrapper = new QueryWrapper<>();
                        wrapper.eq("is_deleted",0).eq("user_id",user2.getId());
                        UserDetailEntity one = userDetailService.getOne(wrapper);
                        if (null!=one){
                            one.setDwellAddress(userExcel.getDwellAddress());
                            one.setEducationExperience(userExcel.getEducationExperience());
                            one.setMemberOfFamily(userExcel.getMemberOfFamily());
                            one.setWorkExperience(userExcel.getWorkExperience());
                            one.setPermanentResidenceAddress(userExcel.getPermanentResidenceAddress());
                            one.setMarriageStatus(Integer.parseInt(userExcel.getMarriageStatus()));
                            one.setSignLevel(Integer.parseInt(userExcel.getSignLevel()));
                            userDetailService.updateById(one);
                        }else {
                            UserDetailEntity detailEntity = new UserDetailEntity();
                            detailEntity.setUserId(user2.getId());
                            detailEntity.setDwellAddress(userExcel.getDwellAddress());
                            detailEntity.setEducationExperience(userExcel.getEducationExperience());
                            detailEntity.setMemberOfFamily(userExcel.getMemberOfFamily());
                            detailEntity.setWorkExperience(userExcel.getWorkExperience());
                            detailEntity.setPermanentResidenceAddress(userExcel.getPermanentResidenceAddress());
                            detailEntity.setMarriageStatus(Integer.parseInt(userExcel.getMarriageStatus()));
                            detailEntity.setSignLevel(Integer.parseInt(userExcel.getSignLevel()));
                            userDetailService.save(detailEntity);
                        }
                    }
                }
            }
        }
        //批量插入
        //用户批量插入
        if (userList.size()>0) {
            baseMapper.batchUserList(userList);
            //装换成map
            Map<String, User> userMap = userList.stream().collect(Collectors.toMap(user -> user.getCardid(), user -> user));
            //匹配
            experienceList = experienceList.stream().map(experience -> {
                if (experience.getCardid().equals(userMap.get(experience.getCardid()).getCardid())) {
                    experience.setSecurityid(userMap.get(experience.getCardid()).getId().toString());
                }
                return experience;
            }).collect(Collectors.toList());
            //批量插入从业记录
            baseMapper.batchExperienceList(experienceList);
        }
//        System.out.println("导入时间: = " + (System.currentTimeMillis()-time));
//        if (userList.size()>0) {
//            baseMapper.batchUserList(userList);
//            //装换成map
//            Map<String, User> userMap = userList.stream().collect(Collectors.toMap(user -> user.getCardid(), user -> user));
//            //匹配
//            experienceList = experienceList.stream().map(experience -> {
//                if (experience.getCardid().equals(userMap.get(experience.getCardid()).getCardid())) {
//                    experience.setSecurityid(userMap.get(experience.getCardid()).getId().toString());
//                }
//                return experience;
//            }).collect(Collectors.toList());
//            //批量插入从业记录
//            baseMapper.batchExperienceList(experienceList);
//        }
        //如果所有数据导入有一个异常
        StringBuilder errorBuilder = new StringBuilder();