Jelajahi Sumber

feat: 团队管理-导入

lixuesong 3 tahun lalu
induk
melakukan
410a43d054

+ 25 - 3
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmTeamController.java

@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -39,6 +40,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import java.time.LocalDateTime;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -153,15 +155,35 @@ public class WmTeamController {
 	 * @return
 	 */
 	@SysLog("团队批量导入")
-	@PostMapping("/batch-import")
-	public R<?> batchImport(@RequestExcel List<WmTeamExcelModel> teamExcelModelList) {
+	@PostMapping("/batch-import/{teamId}")
+	public R<?> batchImport(@PathVariable("teamId") Integer teamId, @RequestExcel List<WmTeamExcelModel> teamExcelModelList) {
 		// 参数校验
 		if (CollectionUtils.isEmpty(teamExcelModelList)) {
 			log.error("空报表,不能上传");
 			return R.failed("空报表,不能上传");
 		}
 
-		return null;
+		Map<String, List<WmTeamExcelModel>> excelMap = teamExcelModelList.stream()
+				.collect(Collectors.groupingBy(WmTeamExcelModel::getUsername));
+
+		// 实际的处理业务
+		Map<String, String> errorMap = wmTeamService.batchImport(teamId, excelMap);
+
+		// 返回上传结果
+		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);
+
+		}
 	}
 
 	/**

+ 3 - 5
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/model/excel/WmTeamExcelModel.java

@@ -14,14 +14,12 @@ public class WmTeamExcelModel implements Serializable {
 	private static final long serialVersionUID = -4205832195490248095L;
 
 	@ExcelProperty(index = 0)
-	private Integer id;
+	private String id;
 
 	@ExcelProperty(index = 1)
-	private String name;
+	private String realname;
 
 	@ExcelProperty(index = 2)
-	private String leaderName;
+	private String username;
 
-	@ExcelProperty(index = 3)
-	private String memberName;
 }

+ 12 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmTeamService.java

@@ -2,7 +2,9 @@ package com.qunzhixinxi.hnqz.admin.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qunzhixinxi.hnqz.admin.entity.WmTeam;
+import com.qunzhixinxi.hnqz.admin.entity.model.excel.WmTeamExcelModel;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -21,4 +23,14 @@ public interface WmTeamService extends IService<WmTeam> {
 	 * @return
 	 */
 	Map<String, Object> listSelectableUser(Integer teamId, String userNameOrPhone);
+
+	/**
+	 * 团队批量导入成员
+	 *
+	 *
+	 * @param teamId
+	 * @param excelMap
+	 * @return
+	 */
+	Map<String, String> batchImport(Integer teamId, Map<String, List<WmTeamExcelModel>> excelMap);
 }

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

@@ -3,19 +3,27 @@ package com.qunzhixinxi.hnqz.admin.service.impl;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysUserRole;
 import com.qunzhixinxi.hnqz.admin.entity.WmTeam;
+import com.qunzhixinxi.hnqz.admin.entity.model.excel.WmTeamExcelModel;
 import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
 import com.qunzhixinxi.hnqz.admin.mapper.SysUserMapper;
+import com.qunzhixinxi.hnqz.admin.mapper.SysUserRoleMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmTeamMapper;
 import com.qunzhixinxi.hnqz.admin.service.WmTeamService;
+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.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -29,12 +37,15 @@ import java.util.stream.Stream;
  * @author lixuesong
  * @date 2021年12月08日 13:51
  */
+@Slf4j
 @Service
 @AllArgsConstructor
 public class WmTeamServiceImpl extends ServiceImpl<WmTeamMapper, WmTeam> implements WmTeamService {
 
 	private final SysUserMapper sysUserMapper;
 
+	private final SysUserRoleMapper sysUserRoleMapper;
+
 	/**
 	 * 查询可选择的人员
 	 *
@@ -122,9 +133,11 @@ public class WmTeamServiceImpl extends ServiceImpl<WmTeamMapper, WmTeam> impleme
 					}).collect(Collectors.toList());
 			resultMap.put("selectedLeaders", selectedLeaders);
 			resultMap.put("selectedMembers", selectedMembers);
+			resultMap.put("teamName", team.getName());
 		} else {
 			resultMap.put("selectedLeaders", new ArrayList<>());
 			resultMap.put("selectedMembers", new ArrayList<>());
+			resultMap.put("teamName", "");
 		}
 		resultMap.put("leaders", leaderList);
 		resultMap.put("notAssignedMembers", notAssignedUserList);
@@ -132,4 +145,111 @@ public class WmTeamServiceImpl extends ServiceImpl<WmTeamMapper, WmTeam> impleme
 
 		return resultMap;
 	}
+
+	/**
+	 * 团队批量导入成员
+	 *
+	 * @param teamId
+	 * @param excelMap
+	 * @return
+	 */
+	@Override
+	public Map<String, String> batchImport(Integer teamId, Map<String, List<WmTeamExcelModel>> excelMap) {
+		// 变量
+		Map<String, String> errorMap = new HashMap<>();
+		List<SysUser> currentList = new ArrayList<>();
+
+		// 获取操作员
+		HnqzUser creator = SecurityUtils.getUser();
+		
+		// 业务值校验
+		for (Map.Entry<String, List<WmTeamExcelModel>> entry : excelMap.entrySet()) {
+			checkoutUserInfo(entry.getValue(), creator, errorMap, currentList);
+		}
+
+		// 上传结果
+		if (CollectionUtil.isEmpty(errorMap)) {
+			String[] userIdArr = currentList.stream()
+					.map(sysUser -> String.valueOf(sysUser.getUserId()))
+					.toArray(String[]::new);
+			WmTeam team = new WmTeam();
+			team.setId(teamId);
+			team.setMember(userIdArr);
+			team.setUpdateTime(LocalDateTime.now());
+			team.setUpdateUser(creator.getId());
+			this.updateById(team);
+		}
+
+		return errorMap;
+	}
+
+	/**
+	 * 校验用户信息
+	 *
+	 * @param errorMap
+	 * @param currentList
+	 */
+	private void checkoutUserInfo(List<WmTeamExcelModel> userList, HnqzUser creator, Map<String, String> errorMap, List<SysUser> currentList) {
+		log.info("开始校验数据:{}", userList);
+
+		if (userList.size() != 1){
+			log.error("表中手机号重复");
+			Set<String> idSet = userList.stream().map(WmTeamExcelModel::getId).collect(Collectors.toSet());
+			errorMap(errorMap, "表中手机号重复", JSONUtil.toJsonStr(idSet));
+		}
+
+		WmTeamExcelModel user = userList.get(0);
+
+		SysUser insertUser = new SysUser();
+		// 校验用户是否存在
+		List<SysUser> sysUsers = sysUserMapper.selectList(Wrappers.<SysUser>lambdaQuery()
+				.eq(SysUser::getDeptId, SecurityUtils.getUser().getDeptId())
+				.eq(SysUser::getRealname, user.getRealname())
+				.eq(SysUser::getUsername, user.getUsername())
+				.eq(SysUser::getDelFlag, DelEnum.NOT_DEL.val()));
+		SysUser sysUser = null;
+		if (CollectionUtil.isEmpty(sysUsers)) {
+			log.error("用户不存在");
+			errorMap(errorMap, "用户不存在", user.getId());
+		} else {
+			sysUser = sysUsers.get(0);
+			insertUser.setUserId(sysUser.getUserId());
+			insertUser.setRealname(sysUser.getRealname());
+			insertUser.setUsername(sysUser.getUsername());
+		}
+
+		// 校验用户角色是否正确
+		if (sysUser != null) {
+			List<SysUserRole> sysUserRoles = sysUserRoleMapper.selectList(Wrappers.<SysUserRole>lambdaQuery()
+					.eq(SysUserRole::getUserId, sysUser.getUserId()));
+			if (CollectionUtil.isNotEmpty(sysUserRoles)) {
+				List<Integer> roleList = sysUserRoles.stream().map(SysUserRole::getRoleId).collect(Collectors.toList());
+				if (!roleList.contains(6)) {
+					log.error("用户角色不正确");
+					errorMap(errorMap, "用户角色不正确", user.getId());
+				}
+			} else {
+				log.error("用户角色异常");
+				errorMap(errorMap, "用户角色异常", user.getId());
+			}
+		}
+
+		// 记录正确的结果
+		currentList.add(insertUser);
+	}
+
+	/**
+	 * 封装错误信息
+	 *
+	 * @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);
+	}
 }