linwe
2024-05-24 2a934daeb805d64a60100eb6697c32cb7a50aedb
从业人员导入优化
4 files modified
2 files added
326 ■■■■■ changed files
src/main/java/org/springblade/modules/eCallEventTwo/entity/ECallEventTwoEntity.java 4 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/place/controller/PlacePractitionerController.java 58 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/place/excel/ImportPractitionerExcel.java 95 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/place/excel/PractitionerExcel.java 106 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/place/service/IPlacePractitionerService.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/place/service/impl/PlacePractitionerServiceImpl.java 58 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/eCallEventTwo/entity/ECallEventTwoEntity.java
@@ -261,6 +261,10 @@
    @TableField("tag_redo")
    private String tagRedo;
    @ApiModelProperty(value = "定位地址", example = "")
    @TableField("location")
    private String location;
    @ApiModelProperty(value = "创建人", example = "")
    @TableField("create_user_id")
    private Long createUserId;
src/main/java/org/springblade/modules/place/controller/PlacePractitionerController.java
@@ -16,33 +16,36 @@
 */
package org.springblade.modules.place.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import lombok.AllArgsConstructor;
import javax.validation.Valid;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.log.annotation.ApiLog;
import org.springblade.core.log.logger.BladeLogger;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.jackson.JsonUtil;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.modules.place.entity.PlacePractitionerEntity;
import org.springblade.modules.place.excel.ImportPractitionerExcel;
import org.springblade.modules.place.excel.PractitionerExcel;
import org.springblade.modules.place.service.IPlacePractitionerService;
import org.springblade.modules.place.vo.PlacePractitionerVO;
import org.springblade.modules.place.wrapper.PlacePractitionerWrapper;
import org.springblade.modules.place.service.IPlacePractitionerService;
import org.springblade.core.boot.ctrl.BladeController;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.Date;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
/**
 * 场所从业人员 控制器
@@ -55,6 +58,9 @@
@RequestMapping("blade-placePractitioner/placePractitioner")
@Api(value = "场所从业人员", tags = "场所从业人员接口")
public class PlacePractitionerController {
    private static Logger logger = LoggerFactory.getLogger(PlacePractitionerController.class);
    private final IPlacePractitionerService placePractitionerService;
    private final BladeLogger bladeLogger;
@@ -160,5 +166,35 @@
        return R.data(placePractitionerService.countByType(placePractitioner));
    }
    /**
     * 导入场所数据
     */
    @PostMapping("/import-practitioner")
    public R importPractitioner(MultipartFile file, @RequestParam(value = "isCovered",defaultValue = "0") Integer isCovered) {
        bladeLogger.info("从业人员信息批量导入", JsonUtil.toJson(isCovered));
        String data = null;
        try {
            List<ImportPractitionerExcel> read = ExcelUtil.read(file, ImportPractitionerExcel.class);
            data = placePractitionerService.importPractitioner(read, isCovered == 1);
        } catch (Exception e) {
            logger.error("导入失败!", e);
        }
        return R.data(200, data, "");
    }
    /**
     * 导出模板
     */
    @GetMapping("export-practitioner-template")
    @ApiOperationSupport(order = 13)
    @ApiLog("从业人员导出模板")
    @ApiOperation(value = "从业人员导出模板", notes = "传入place")
    public void exportPractitionerTemplate(HttpServletResponse response) {
        List<PractitionerExcel> list = new ArrayList<>();
        PractitionerExcel importPlaceExcel = new PractitionerExcel();
        list.add(importPlaceExcel);
        ExcelUtil.export(response, "从业人员数据" + DateUtil.time(), "从业人员数据表", list, PractitionerExcel.class);
    }
}
src/main/java/org/springblade/modules/place/excel/ImportPractitionerExcel.java
New file
@@ -0,0 +1,95 @@
package org.springblade.modules.place.excel;
import com.alibaba.excel.annotation.ExcelProperty;
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 lombok.Data;
import org.springblade.common.excel.ExcelDictConverter;
import org.springblade.common.excel.ExcelDictItem;
import org.springblade.common.excel.ExcelDictItemLabel;
import java.io.Serializable;
/**
 * 场所从业人员 实体类
 *
 * @author BladeX
 * @since 2023-10-28
 */
@Data
@ColumnWidth(25)
@HeadRowHeight(20)
@ContentRowHeight(18)
public class ImportPractitionerExcel implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 场所ID
     */
    @ExcelProperty("地址编码")
    private String houseCode;
    /**
     * 姓名
     */
    @ExcelProperty("姓名")
    private String name;
    /**
     * 电话
     */
    @ExcelProperty("电话")
    private String telephone;
    /**
     * 暂住地
     */
    @ExcelProperty("暂住地")
    private String tempAddress;
    /**
     * 身份证
     */
    @ExcelProperty("身份证")
    private String idCard;
    /**
     * 岗位
     */
    @ExcelProperty("岗位")
    private String jobNature;
    /**
     * 民族
     */
    @ColumnWidth(15)
    @ExcelProperty(value = "民族", converter = ExcelDictConverter.class)
    @ExcelDictItemLabel(type = "nationType")
    @ExcelDictItem(type = "nationType")
    private String ethnicity;
    /**
     * 入职时间
     */
    // @ExcelProperty("入职时间")
    // @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    // @DateTimeFormat("yyyy-MM-dd")
    // private String employmentTime;
    /**
     * 离职时间
     */
    // @ExcelProperty("离职时间")
    // @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    // @DateTimeFormat("yyyy-MM-dd")
    // private String resignationTime;
    /**
     * 是离职 1:否 2:是
     */
    @ExcelProperty("是离职 1:否 2:是")
    private String resignationFlag;
}
src/main/java/org/springblade/modules/place/excel/PractitionerExcel.java
New file
@@ -0,0 +1,106 @@
package org.springblade.modules.place.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
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 com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import org.springblade.common.excel.ExcelDictConverter;
import org.springblade.common.excel.ExcelDictItem;
import org.springblade.common.excel.ExcelDictItemLabel;
import java.io.Serializable;
import java.util.Date;
/**
 * 场所从业人员 实体类
 *
 * @author BladeX
 * @since 2023-10-28
 */
@Data
@ColumnWidth(25)
@HeadRowHeight(20)
@ContentRowHeight(18)
public class PractitionerExcel implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 场所ID
     */
    @ColumnWidth(15)
    @ExcelProperty(value = "地址编码")
    private String houseCode;
    /**
     * 姓名
     */
    @ColumnWidth(15)
    @ExcelProperty(value = "姓名")
    private String name;
    /**
     * 电话
     */
    @ColumnWidth(15)
    @ExcelProperty(value = "电话")
    private String telephone;
    /**
     * 暂住地
     */
    @ColumnWidth(15)
    @ExcelProperty(value = "暂住地")
    private String tempAddress;
    /**
     * 身份证
     */
    @ColumnWidth(15)
    @ExcelProperty(value = "身份证")
    private String idCard;
    /**
     * 岗位
     */
    @ExcelProperty(value = "岗位")
    private String jobNature;
    /**
     * 民族
     */
    @ColumnWidth(15)
    @ExcelProperty(value = "民族", converter = ExcelDictConverter.class)
    @ExcelDictItemLabel(type = "nationType")
    @ExcelDictItem(type = "nationType")
    private String ethnicity;
    /**
     * 入职时间
     */
    // @ColumnWidth(15)
    // @ExcelProperty(value = "入职时间")
    // @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    // @DateTimeFormat("yyyy-MM-dd")
    // private String employmentTime;
    /**
     * 离职时间
     */
    // @ColumnWidth(15)
    // @ExcelProperty(value = "离职时间")
    // @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    // @DateTimeFormat("yyyy-MM-dd")
    // private String resignationTime;
    /**
     * 是离职 1:否 2:是
     */
    @ColumnWidth(15)
    @ExcelProperty(value = "是离职 1:否 2:是")
    private String resignationFlag;
}
src/main/java/org/springblade/modules/place/service/IPlacePractitionerService.java
@@ -18,9 +18,12 @@
import com.baomidou.mybatisplus.extension.service.IService;
import org.springblade.modules.place.entity.PlacePractitionerEntity;
import org.springblade.modules.place.excel.ImportPractitionerExcel;
import org.springblade.modules.place.vo.PlacePractitionerVO;
import org.springblade.core.mp.base.BaseService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import java.util.List;
/**
 * 场所从业人员 服务类
@@ -48,4 +51,6 @@
     * @return
     */
    Boolean auditing(PlacePractitionerEntity placePractitioner);
    String importPractitioner(List<ImportPractitionerExcel> read, boolean b);
}
src/main/java/org/springblade/modules/place/service/impl/PlacePractitionerServiceImpl.java
@@ -19,19 +19,22 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.logging.log4j.util.Strings;
import org.springblade.common.constant.CommonConstant;
import org.springblade.common.param.CommonParamSet;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.modules.place.entity.PlaceEntity;
import org.springblade.modules.place.entity.PlacePractitionerEntity;
import org.springblade.modules.place.excel.ImportPractitionerExcel;
import org.springblade.modules.place.mapper.PlacePractitionerMapper;
import org.springblade.modules.place.service.IPlacePractitionerService;
import org.springblade.modules.place.service.IPlaceService;
import org.springblade.modules.place.vo.PlacePractitionerVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
 * 场所从业人员 服务实现类
@@ -42,10 +45,13 @@
@Service
public class PlacePractitionerServiceImpl extends ServiceImpl<PlacePractitionerMapper, PlacePractitionerEntity> implements IPlacePractitionerService {
    @Autowired
    private IPlaceService placeService;
    @Override
    public IPage<PlacePractitionerVO> selectPlacePractitionerPage(IPage<PlacePractitionerVO> page, PlacePractitionerVO placePractitioner) {
        CommonParamSet commonParamSet = new CommonParamSet().invoke(PlacePractitionerVO.class, placePractitioner);
        List<PlacePractitionerVO> placePractitionerVOS = baseMapper.selectPlacePractitionerPage(page, placePractitioner,commonParamSet.getGridCodeList(),
        List<PlacePractitionerVO> placePractitionerVOS = baseMapper.selectPlacePractitionerPage(page, placePractitioner, commonParamSet.getGridCodeList(),
            commonParamSet.getRegionChildCodesList(),
            commonParamSet.getIsAdministrator());
        return page.setRecords(placePractitionerVOS);
@@ -81,7 +87,47 @@
            .set(PlacePractitionerEntity::getConfirmUserId, placePractitioner.getConfirmUserId())
            .eq(PlacePractitionerEntity::getPlaceId, placePractitioner.getPlaceId())
            .eq(PlacePractitionerEntity::getResignationFlag, 1)
            .eq(PlacePractitionerEntity::getIsDeleted,0));
            .eq(PlacePractitionerEntity::getIsDeleted, 0));
        return update;
    }
    @Override
    public String importPractitioner(List<ImportPractitionerExcel> data, boolean b) {
        int totalNum = data.size();
        int importNum = 0;
        int updateNum = 0;
        int errorNum = 0;
        for (ImportPractitionerExcel placeExcel : data) {
            if (Strings.isBlank(placeExcel.getHouseCode()) || Strings.isBlank(placeExcel.getHouseCode())) {
                errorNum++;
                continue;
            }
            PlacePractitionerEntity placeEntity = Objects.requireNonNull(BeanUtil.copy(placeExcel, PlacePractitionerEntity.class));
            // 查询场所是否存在
            PlaceEntity placeServiceOne = placeService.getOne(Wrappers.<PlaceEntity>lambdaQuery()
                .eq(PlaceEntity::getHouseCode, placeExcel.getHouseCode()));
            if (placeServiceOne != null) {
                placeEntity.setPlaceId(placeServiceOne.getId());
                boolean save = save(placeEntity);
                if (save) {
                    importNum++;
                } else {
                    errorNum++;
                }
            } else {
                errorNum++;
                continue;
            }
        }
        StringBuilder builder = new StringBuilder("导入完成!");
        builder.append("其中本次表格共有 ").append(totalNum).append(" 条数据,")
            .append("成功导入 ").append(importNum).append(" 条数据。");
        if (updateNum > 0) {
            builder.append("其中有 ").append(updateNum).append(" 条数据已存在。");
        }
        if (errorNum > 0) {
            builder.append("共有 ").append(errorNum).append(" 条数据由于无企业(店铺)名称信息或无地址编号未导入!");
        }
        return builder.toString();
    }
}