From 2a934daeb805d64a60100eb6697c32cb7a50aedb Mon Sep 17 00:00:00 2001
From: linwe <872216996@qq.com>
Date: Fri, 24 May 2024 17:17:44 +0800
Subject: [PATCH] 从业人员导入优化

---
 src/main/java/org/springblade/modules/place/service/impl/PlacePractitionerServiceImpl.java |   58 ++++++++-
 src/main/java/org/springblade/modules/eCallEventTwo/entity/ECallEventTwoEntity.java        |    4 
 src/main/java/org/springblade/modules/place/excel/ImportPractitionerExcel.java             |   95 +++++++++++++++
 src/main/java/org/springblade/modules/place/service/IPlacePractitionerService.java         |    5 
 src/main/java/org/springblade/modules/place/excel/PractitionerExcel.java                   |  106 +++++++++++++++++
 src/main/java/org/springblade/modules/place/controller/PlacePractitionerController.java    |   58 +++++++-
 6 files changed, 309 insertions(+), 17 deletions(-)

diff --git a/src/main/java/org/springblade/modules/eCallEventTwo/entity/ECallEventTwoEntity.java b/src/main/java/org/springblade/modules/eCallEventTwo/entity/ECallEventTwoEntity.java
index bb5f8f3..d322a2f 100644
--- a/src/main/java/org/springblade/modules/eCallEventTwo/entity/ECallEventTwoEntity.java
+++ b/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;
diff --git a/src/main/java/org/springblade/modules/place/controller/PlacePractitionerController.java b/src/main/java/org/springblade/modules/place/controller/PlacePractitionerController.java
index 4ac200c..5044057 100644
--- a/src/main/java/org/springblade/modules/place/controller/PlacePractitionerController.java
+++ b/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);
+	}
 
 }
diff --git a/src/main/java/org/springblade/modules/place/excel/ImportPractitionerExcel.java b/src/main/java/org/springblade/modules/place/excel/ImportPractitionerExcel.java
new file mode 100644
index 0000000..dc6b188
--- /dev/null
+++ b/src/main/java/org/springblade/modules/place/excel/ImportPractitionerExcel.java
@@ -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;
+
+
+}
diff --git a/src/main/java/org/springblade/modules/place/excel/PractitionerExcel.java b/src/main/java/org/springblade/modules/place/excel/PractitionerExcel.java
new file mode 100644
index 0000000..dde0339
--- /dev/null
+++ b/src/main/java/org/springblade/modules/place/excel/PractitionerExcel.java
@@ -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;
+
+}
diff --git a/src/main/java/org/springblade/modules/place/service/IPlacePractitionerService.java b/src/main/java/org/springblade/modules/place/service/IPlacePractitionerService.java
index 3944100..f0582c9 100644
--- a/src/main/java/org/springblade/modules/place/service/IPlacePractitionerService.java
+++ b/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);
 }
diff --git a/src/main/java/org/springblade/modules/place/service/impl/PlacePractitionerServiceImpl.java b/src/main/java/org/springblade/modules/place/service/impl/PlacePractitionerServiceImpl.java
index d2a0b38..cb63fa9 100644
--- a/src/main/java/org/springblade/modules/place/service/impl/PlacePractitionerServiceImpl.java
+++ 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();
+	}
 }

--
Gitblit v1.9.3