Browse Source

feat: 医院批量导入接口(开发自提需求~)

lixuesong 1 year ago
parent
commit
fade2a7bac

+ 42 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmDaHospitalController.java

@@ -17,14 +17,19 @@
 
 package com.qunzhixinxi.hnqz.admin.controller;
 
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.OrderItem;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.pig4cloud.plugin.excel.annotation.RequestExcel;
 import com.qunzhixinxi.hnqz.admin.entity.WmDaHospital;
 import com.qunzhixinxi.hnqz.admin.entity.WmTask;
 import com.qunzhixinxi.hnqz.admin.entity.WmTaskContent;
+import com.qunzhixinxi.hnqz.admin.entity.model.excel.BatchHospitalExcelModel;
+import com.qunzhixinxi.hnqz.admin.entity.model.excel.BatchPharmacyExcelModel;
 import com.qunzhixinxi.hnqz.admin.service.WmDaHospitalService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskContentService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskService;
@@ -34,12 +39,14 @@ import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import java.time.LocalDateTime;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -50,6 +57,7 @@ import java.util.Map;
  * @author gaoyanng
  * @date 2020-06-25 23:35:42
  */
+@Slf4j
 @RestController
 @AllArgsConstructor
 @RequestMapping("/wmdahospital" )
@@ -293,4 +301,38 @@ public class WmDaHospitalController {
 		wmDaHospitalService.parseAddress();
 		return R.ok();
 	}
+
+	/**
+	 * 医院批量导入
+	 *
+	 * @param excelModelList 药店列表
+	 * @return {@link R}<{@link ?}> 结果
+	 */
+	@SysLog("医院批量导入")
+	@PostMapping(value = "/batch")
+	public R<?> batchImport(@RequestExcel List<BatchHospitalExcelModel> excelModelList) {
+		// 参数校验
+		if (CollectionUtils.isEmpty(excelModelList)) {
+			log.error("空报表,不能上传");
+			return R.failed("空报表,不能上传");
+		}
+
+		// 实际的处理业务
+		Map<String, String> errorMap = wmDaHospitalService.batchByExcel(excelModelList);
+
+		// 返回上传结果
+		Map<String, Object> result = new HashMap<>(3);
+		if (CollectionUtil.isEmpty(errorMap)) {
+			result.put("code", "SUCCESS");
+			result.put("message", "上传成功");
+			result.put("data", null);
+			return R.ok(result);
+		} else {
+			log.error("上传数据错误,{}", JSONUtil.toJsonStr(errorMap));
+			result.put("code", "FAILURE");
+			result.put("message", "上传数据错误");
+			result.put("data", errorMap);
+			return R.failed(result);
+		}
+	}
 }

+ 47 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/model/excel/BatchHospitalExcelModel.java

@@ -0,0 +1,47 @@
+package com.qunzhixinxi.hnqz.admin.entity.model.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 医院excel批量导入model
+ *
+ * @author lixuesong
+ * @date 2023/11/01
+ */
+@Data
+public class BatchHospitalExcelModel implements Serializable {
+	private static final long serialVersionUID = -8891226221432742335L;
+
+	/**
+	 * 行编号
+	 */
+	@ExcelProperty(index = 0)
+	private String number;
+
+	/**
+     * 名称
+	 */
+	@ExcelProperty(index = 1)
+	private String name;
+
+    /**
+     * 地址
+	 */
+	@ExcelProperty(index = 2)
+	private String address;
+
+	/**
+	 * 医院规模
+	 */
+	@ExcelProperty(index = 3)
+	private String grade;
+
+	/**
+	 * 医院性质
+	 */
+	@ExcelProperty(index = 4)
+	private String type;
+}

+ 10 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmDaHospitalService.java

@@ -20,6 +20,8 @@ package com.qunzhixinxi.hnqz.admin.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qunzhixinxi.hnqz.admin.entity.WmDaHospital;
 import com.qunzhixinxi.hnqz.admin.entity.WmTask;
+import com.qunzhixinxi.hnqz.admin.entity.model.excel.BatchHospitalExcelModel;
+import com.qunzhixinxi.hnqz.admin.entity.model.excel.BatchPharmacyExcelModel;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 
 import java.util.List;
@@ -58,4 +60,12 @@ public interface WmDaHospitalService extends IService<WmDaHospital> {
 	 */
 	void parseAddress();
 
+	/**
+	 * 批量导入
+	 *
+	 * @param excelModelList 医院列表
+	 * @return 结果
+	 */
+	Map<String, String> batchByExcel(List<BatchHospitalExcelModel> excelModelList);
+
 }

+ 115 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmDaHospitalServiceImpl.java

@@ -16,6 +16,8 @@
  */
 package com.qunzhixinxi.hnqz.admin.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.csp.sentinel.util.StringUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -24,10 +26,14 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDictItem;
 import com.qunzhixinxi.hnqz.admin.entity.WmDaHospital;
+import com.qunzhixinxi.hnqz.admin.entity.WmDaPharmacy;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackageStatus;
 import com.qunzhixinxi.hnqz.admin.entity.WmTask;
 import com.qunzhixinxi.hnqz.admin.entity.WmTaskContent;
+import com.qunzhixinxi.hnqz.admin.entity.model.excel.BatchHospitalExcelModel;
+import com.qunzhixinxi.hnqz.admin.entity.model.excel.BatchPharmacyExcelModel;
+import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
 import com.qunzhixinxi.hnqz.admin.mapper.WmDaHospitalMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmTaskContentMapper;
 import com.qunzhixinxi.hnqz.admin.service.SysDictItemService;
@@ -38,8 +44,10 @@ import com.qunzhixinxi.hnqz.admin.service.WmScorePackageStatusService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskService;
 import com.qunzhixinxi.hnqz.admin.util.MapUtil;
 import com.qunzhixinxi.hnqz.common.core.util.R;
+import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
 import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
 import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.stereotype.Service;
@@ -58,6 +66,7 @@ import java.util.stream.Collectors;
  * @author gaoyanng
  * @date 2020-06-25 23:35:42
  */
+@Slf4j
 @Service
 @AllArgsConstructor
 public class WmDaHospitalServiceImpl extends ServiceImpl<WmDaHospitalMapper, WmDaHospital> implements WmDaHospitalService {
@@ -761,4 +770,110 @@ public class WmDaHospitalServiceImpl extends ServiceImpl<WmDaHospitalMapper, WmD
 		return wmDaHospital;
 	}
 
+	/**
+	 * 批量导入
+	 *
+	 * @param excelModelList 医院列表
+	 * @return 结果
+	 */
+	@Override
+	public Map<String, String> batchByExcel(List<BatchHospitalExcelModel> excelModelList) {
+
+		// 变量
+		Map<String, String> errorMap = new HashMap<>();
+		List<WmDaHospital> currentList = new ArrayList<>();
+
+		// 获取操作员
+		HnqzUser creator = SecurityUtils.getUser();
+
+		log.info("开始校验数据:{}", excelModelList);
+		// 业务值校验
+		for (BatchHospitalExcelModel excelModel : excelModelList) {
+			WmDaHospital hospital = new WmDaHospital();
+			// 校验名称
+			String name = StrUtil.cleanBlank(excelModel.getName());
+			if (StrUtil.isBlank(name)) {
+				log.error("序号{} 姓名为空", excelModel.getNumber());
+				errorMap(errorMap, "名称为空", excelModel.getNumber());
+			} else {
+				hospital.setYymc(name);
+			}
+
+			// 校验地址
+			String address = StrUtil.cleanBlank(excelModel.getName());
+			if (StrUtil.isBlank(address)) {
+				log.error("{} 地址为空", name);
+				errorMap(errorMap, "地址为空", excelModel.getNumber());
+			} else {
+				hospital.setAddress(address);
+			}
+
+			// 校验医院规模
+			String grade = StrUtil.cleanBlank(excelModel.getGrade());
+			if (StrUtil.isBlank(grade)) {
+				log.error("{} 医院规模为空", name);
+				errorMap(errorMap, "医院规模为空", excelModel.getNumber());
+			} else {
+				hospital.setYygm(grade);
+			}
+
+			// 校验医院性质
+			String type = StrUtil.cleanBlank(excelModel.getType());
+			if (StrUtil.isBlank(type)) {
+				log.error("{} 医院性质为空", name);
+				errorMap(errorMap, "医院性质为空", excelModel.getNumber());
+			} else {
+				hospital.setYyxz(type);
+			}
+
+			// 重复校验
+			int count = this.count(Wrappers.<WmDaHospital>lambdaQuery()
+					.eq(WmDaHospital::getYymc, name)
+					.eq(WmDaHospital::getDelFlag, DelEnum.NOT_DEL.val()));
+			if (count > 0) {
+				log.error("{} 已存在", name);
+				errorMap(errorMap, "名称已存在", excelModel.getNumber());
+			}
+
+			// 记录正确的结果
+			//更新审核信息
+			LocalDateTime now = LocalDateTime.now();
+			hospital.setCreateTime(now);
+			hospital.setCreateUser(creator.getId());
+			// 根据地址转换经纬度
+			WmDaHospital latAndLng = this.getLatAndLng(address);
+			if (latAndLng == null) {
+				log.error("{} 经纬度转换失败", name);
+				errorMap(errorMap, "经纬度转换失败", excelModel.getNumber());
+			}
+
+			hospital.setProvince(latAndLng.getProvince());
+			hospital.setCity(latAndLng.getCity());
+			hospital.setArea(latAndLng.getArea());
+
+			currentList.add(hospital);
+		}
+
+		// 上传结果
+		if (CollUtil.isEmpty(errorMap)) {
+			this.saveBatch(currentList);
+		}
+
+		return errorMap;
+	}
+
+	/**
+	 * 封装错误信息
+	 *
+	 * @param errorMap 记录错误信息map
+	 * @param key      原因
+	 * @param idStr    错误id
+	 */
+	private void errorMap(Map<String, String> errorMap, String key, String idStr) {
+		if (errorMap.containsKey(key)) {
+			String val = errorMap.get(key);
+			idStr = String.join(";", val, idStr);
+		}
+		errorMap.put(key, idStr);
+	}
 }