소스 검색

Merge branch 'feat-batchpackage-20211118' into master

Qutong 3 년 전
부모
커밋
941c7de3d2

+ 4 - 0
hnqz-common/hnqz-common-core/pom.xml

@@ -72,5 +72,9 @@
 			<artifactId>commons-beanutils</artifactId>
 			<version>1.9.4</version>
 		</dependency>
+		<dependency>
+			<groupId>com.google.guava</groupId>
+			<artifactId>guava</artifactId>
+		</dependency>
 	</dependencies>
 </project>

+ 5 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/constant/CacheConstants.java

@@ -85,4 +85,9 @@ public interface CacheConstants {
 
 	Long DEF_REPORT_CREATING_TTL = 24L * 60 * 60 * 1000;
 
+	/**
+	 * 批量创建积分包缓存 package:history:#{deptId}:#{userId}
+	 */
+	String BATCH_PACKAGE_HISTORY = "package:history:%s:%s";
+
 }

+ 44 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/WmScorePackageStatusBatch.java

@@ -0,0 +1,44 @@
+package com.qunzhixinxi.hnqz.admin.api.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.Getter;
+
+import java.io.Serializable;
+
+/**
+ * {@code WmScorePackageStatusBatch}
+ * <p>
+ * 批量审核领包记录
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2021/11/22 15:11
+ */
+@Data
+public class WmScorePackageStatusBatch implements Serializable {
+
+	/**
+	 * 批量id
+	 */
+	private String batchIds;
+
+	/**
+	 * 审批状态
+	 */
+	private ApprovalStatus status;
+
+
+	@Getter
+	@AllArgsConstructor
+	public enum ApprovalStatus {
+
+		PASSED(1, "通过"),
+		REJECTED(2, "拒绝");
+
+		private final int code;
+
+		private final String message;
+	}
+
+}

+ 30 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/enums/TargetType.java

@@ -0,0 +1,30 @@
+package com.qunzhixinxi.hnqz.admin.api.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.Getter;
+
+/**
+ * {@code TargetType}
+ * <p>
+ * 接单对象枚举
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2021/11/18 15:23
+ */
+@Getter
+@AllArgsConstructor
+public enum TargetType {
+
+	PART_TIME(0, "兼职学术信息沟通专员"),
+	FULL_TIME(1, "全职学术信息沟通专员");
+
+	@EnumValue
+	private final int code;
+
+	private final String desc;
+
+
+}

+ 7 - 1
hnqz-upms/hnqz-upms-biz/pom.xml

@@ -261,8 +261,14 @@
 			<artifactId>aspectjweaver</artifactId>
 			<version>1.9.4</version>
 		</dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.7.7</version>
+            <scope>compile</scope>
+        </dependency>
 
-	</dependencies>
+    </dependencies>
 
 	<build>
 		<plugins>

+ 254 - 666
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmScorePackageController.java

@@ -17,30 +17,35 @@
 
 package com.qunzhixinxi.hnqz.admin.controller;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.lang.Validator;
+import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
 import com.alibaba.csp.sentinel.util.StringUtil;
 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.metadata.OrderItem;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ArrayListMultimap;
 import com.qunzhixinxi.hnqz.admin.api.constant.CacheConstants;
-import com.qunzhixinxi.hnqz.admin.api.dto.UserDTO;
+import com.google.common.collect.Multimap;
+import com.pig4cloud.plugin.excel.annotation.RequestExcel;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
-import com.qunzhixinxi.hnqz.admin.api.entity.WmReportOpt;
-import com.qunzhixinxi.hnqz.admin.api.vo.ErrorInfoVo;
-import com.qunzhixinxi.hnqz.admin.api.vo.UserVO;
+import com.qunzhixinxi.hnqz.admin.api.enums.TargetType;
 import com.qunzhixinxi.hnqz.admin.api.vo.WmScorePackageVO;
 import com.qunzhixinxi.hnqz.admin.entity.*;
+import com.qunzhixinxi.hnqz.admin.entity.model.excel.BatchPackageExcelModel;
 import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
 import com.qunzhixinxi.hnqz.admin.enums.EnableEnum;
-import com.qunzhixinxi.hnqz.admin.enums.WmScoreTaskTypeEnum;
 import com.qunzhixinxi.hnqz.admin.mapper.*;
 import com.qunzhixinxi.hnqz.admin.service.*;
+import com.qunzhixinxi.hnqz.common.core.constant.CommonConstants;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
 import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
@@ -52,20 +57,11 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang.ArrayUtils;
 import org.apache.commons.lang.StringUtils;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.ss.usermodel.CellType;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.ss.usermodel.Workbook;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.data.redis.core.StringRedisTemplate;
-import org.springframework.data.redis.core.ValueOperations;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
 
 import javax.validation.Valid;
-import java.io.InputStream;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
@@ -74,7 +70,6 @@ import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 
@@ -107,7 +102,6 @@ public class WmScorePackageController {
 	private final WmScoreTaskTypeMapper wmScoreTaskTypeMapper;
 	private final WmDaDrugEntMapper wmDaDrugEntMapper;
 	private final WmDaAgentMapper wmDaAgentMapper;
-	private final SysUserMapper sysUserMapper;
 	private final StringRedisTemplate redisTemplate;
 
 
@@ -116,7 +110,7 @@ public class WmScorePackageController {
 	 *
 	 * @param page           分页对象
 	 * @param wmScorePackage 积分包
-	 * @return
+	 * @return R
 	 */
 	@ApiOperation(value = "分页查询", notes = "分页查询")
 	@GetMapping("/page")
@@ -2525,6 +2519,8 @@ public class WmScorePackageController {
 		}
 
 		/**
+		 *
+		 *
 		 * 被领取的积分包 不能修改
 		 */
 		WmScorePackageStatus statusQuery = new WmScorePackageStatus();
@@ -2602,691 +2598,283 @@ public class WmScorePackageController {
 		return wmScorePackageService.selectRelationScoreIdList(wmScorePackage);
 	}
 
+	/**
+	 * 获取当前部门的基于所有积分包的相关信息
+	 *
+	 * @return 积分包的相关信息
+	 */
+	@ApiOperation(value = "获取当前部门的基于所有积分包的相关信息", notes = "获取当前部门的基于所有积分包的相关信息")
+	@GetMapping("/getDeptScorePackageInfo")
+	public R getDeptScorePackageInfo() {
+		Integer deptId = SecurityUtils.getUser().getDeptId();
+		Map<String, Object> result = wmScorePackageService.getDeptScorePackageInfo(deptId);
+		return R.ok(result);
+	}
+
+	/**
+	 * 获取积分包关联企业的药品列表
+	 *
+	 * @param page      分页信息
+	 * @param packageId 积分包id
+	 * @param drugName  药品名称
+	 * @return 药品列表
+	 */
+	@SysLog("获取积分包关联企业的药品列表")
+	@GetMapping(value = "/drugs")
+	public R listDrugsByPackageId(Page page, @RequestParam(value = "packageId") Integer packageId, @RequestParam(value = "name", required = false) String drugName) {
+		return R.ok(wmScorePackageService.listDrugsByPackageId(page, packageId, drugName.trim()));
+	}
+
+	// ~ 批量下发积分包 ===================================================================================================
+
+	/**
+	 * 获取最近的记录
+	 *
+	 * @return 最近记录
+	 */
+	@GetMapping(value = "/batch/history")
+	public R<?> getBatchHistory() {
+		HnqzUser user = SecurityUtils.getUser();
+
+		// 缓存记录key
+		String key = String.format(CacheConstants.BATCH_PACKAGE_HISTORY, user.getDeptId(), user.getId());
+
+		String result = redisTemplate.opsForValue().get(key);
+
+		if (StrUtil.isNotEmpty(result) && JSONUtil.isJson(result)) {
+			JSONObject jsonObject = JSONUtil.parseObj(result);
+			return R.ok(jsonObject);
+		}
+
+		return R.ok();
+	}
+
 	/**
 	 * 批量导入积分包
 	 *
-	 * @param file 积分包信息文件
+	 * @param batchPackageExcelModels 积分包信息文件
+	 * @param scorePackage            积分包创建信息
 	 * @return success/false
 	 */
 	@SysLog("批量导入积分包")
-	@PostMapping(value = "/batch")
 	@Transactional(rollbackFor = Exception.class)
-	public R batchScorePackage(@RequestPart("file") MultipartFile file) {
+	@PostMapping(value = "/batch")
+	public R<?> batchCreatePackage(@RequestExcel(fileName = "excel", ignoreEmptyRow = true) List<BatchPackageExcelModel> batchPackageExcelModels,
+								   @RequestPart(value = "history") WmScorePackage scorePackage) {
 
-		// 获取操作员和操作员所在的结算主体
-		HnqzUser operator = SecurityUtils.getUser();
-		SysDept sysDept = sysDeptService.getById(operator.getDeptId());
-		Map<String, Object> result = new HashMap<>(2);
+		HnqzUser user = SecurityUtils.getUser();
 
-		// 读取excel
-		try {
-			String fileName = file.getOriginalFilename().toLowerCase();
-			InputStream inputStream = file.getInputStream();
-
-			// 校验文件信息
-			Workbook wbs = null;
-			if (fileName.endsWith("xls")) {
-				//2003
-				wbs = new HSSFWorkbook(inputStream);
-			} else if (fileName.endsWith("xlsx")) {
-				//2007
-				wbs = new XSSFWorkbook(inputStream);
-			} else {
-				return R.failed("上传文件格式错误!");
-			}
-			if (wbs.isSheetHidden(0)) {
-				return R.failed("导入表中有隐藏列");
-			}
+		// 加锁防止多处理
 
-			// 校验页
-			Sheet sheet = wbs.getSheetAt(1);
+		String lock = "lock:package:batch:" + user.getDeptId();
 
-			// 校验模板
-			Row row0 = sheet.getRow(0);
-			if (row0 == null) {
-				return R.failed("导入模版错误!");
-			}
+		if (!redisTemplate.opsForValue().setIfAbsent(lock, IdUtil.fastUUID())) {
+			return R.failed("有在途的操作,请稍后");
+		}
 
-			// 校验记录数
-			int rowNum = sheet.getLastRowNum();
-			if (rowNum < 1) {
-				return R.failed("导入表中缺少数据!");
-			} else if (rowNum > 1000) {
-				return R.failed("单次批量导入最大支持1000行数据!");
-			}
+		try {
+			log.warn("==========================================批量导入积分包-插入redis:开始=====================================================");
+			// 获取操作人
+			// 记录历史信息
+			// 缓存记录key
+			String key = String.format(CacheConstants.BATCH_PACKAGE_HISTORY, user.getDeptId(), user.getId());
+			Map<String, Object> history = new HashMap<>(2);
+			scorePackage.setCreateTime(null);
+			scorePackage.setUpdateTime(null);
+			JSONObject jsonObject = JSONUtil.parseObj(scorePackage);
+			jsonObject.set("relatedService", Integer.parseInt(scorePackage.getRelatedService()));
+			history.put("history", jsonObject);
+			history.put("timestamp", DateTimeFormatter.ofPattern(DatePattern.CHINESE_DATE_TIME_PATTERN).format(LocalDateTime.now()));
+			redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(history));
+
+			log.warn("==========================================批量导入积分包-插入redis:结束=====================================================");
+
+			log.warn("==========================================批量导入积分包:开始=====================================================");
+
+
+			Multimap<String, Object> errorMap = ArrayListMultimap.create();
+
+			TargetType targetType = null;
+
+			// 全职
+			if (StrUtil.equals("3", scorePackage.getTypeid())) {
+				targetType = TargetType.FULL_TIME;
+			}
+			// 兼职
+			else if (StrUtil.equals("4", scorePackage.getTypeid())) {
+				targetType = TargetType.PART_TIME;
+			}
+
+			// 重复的模型
+			Map<String, List<BatchPackageExcelModel>> dupNameModel = batchPackageExcelModels.stream()
+					.collect(Collectors.groupingBy(BatchPackageExcelModel::getScorePackageName));
+			List<String> names = batchPackageExcelModels.stream().map(BatchPackageExcelModel::getScorePackageName).collect(Collectors.toList());
+
+			for (Map.Entry<String, List<BatchPackageExcelModel>> entry : dupNameModel.entrySet()) {
+				String name = entry.getKey();
+				int size = entry.getValue().size();
+				if (size > 1) {
+					List<Integer> index = new ArrayList<>(size);
+					List<String> temp = new ArrayList<>(names);
+					Iterator<String> iterator = temp.iterator();
+					while (iterator.hasNext()) {
+						int idx = temp.lastIndexOf(name);
+						if (idx != -1) {
+							index.add(idx + 1);
+							temp.remove(idx);
+						}
 
-			// 校验列信息
-			String scorePackageName = row0.getCell(0).getStringCellValue();
-			if (!"积分包名称".equals(scorePackageName)) {
-				return R.failed("导入模版第一列错误!");
-			}
-			String typeid = row0.getCell(1).getStringCellValue();
-			if (!"接单对象类型".equals(typeid)) {
-				return R.failed("导入模版第二列错误!");
-			}
-			String user = row0.getCell(2).getStringCellValue();
-			if (!"接单对象".equals(user)) {
-				return R.failed("导入模版第三列错误!");
-			}
-			String relatedService = row0.getCell(3).getStringCellValue();
-			if (!"积分包值".equals(relatedService)) {
-				return R.failed("导入模版第四列错误!");
-			}
-			String relationScoreId = row0.getCell(4).getStringCellValue();
-			if (!"关联服务企业".equals(relationScoreId)) {
-				return R.failed("导入模版第五列错误!");
-			}
-			String score = row0.getCell(5).getStringCellValue();
-			if (!"关联任务积分包".equals(score)) {
-				return R.failed("导入模版第六列错误!");
-			}
-			String packageUserScope = row0.getCell(6).getStringCellValue();
-			if (!"接单对象范围".equals(packageUserScope)) {
-				return R.failed("导入模版第七列错误!");
-			}
-			String taskTypes = row0.getCell(7).getStringCellValue();
-			if (!"有效任务类型".equals(taskTypes)) {
-				return R.failed("导入模版第八列错误!");
-			}
-			String description = row0.getCell(8).getStringCellValue();
-			if (!"描述".equals(description)) {
-				return R.failed("导入模版第九列错误!");
+					}
+
+					errorMap.put("模板内积分包名称重复", index.stream().sorted().collect(Collectors.toList()));
+				}
 			}
 
-			//数据
-			List<WmScorePackage> wmScorePackageList = new ArrayList<>();
-			List<ErrorInfoVo> errorList = new ArrayList<>();
-			List mapList = new ArrayList<>();
-			Map<String, Object> map = new HashMap<>();
-			log.info(">>> 通过excel批量创建用户开始 <<<");
-			// 行数据
-			for (int i = 1; i <= rowNum; i++) {
+			// 业务校验
+			for (int i = 0, batchScoreTotal = 0, rows = batchPackageExcelModels.size(); i < rows; i++) {
 
-				// 行编号
-				int rNum = i;
-				Row row = sheet.getRow(i);
-				log.info(">>>当前导入第{}行<<<", i);
+				batchScoreTotal += checkColumn(batchPackageExcelModels.get(i), targetType, errorMap, i + 1, user.getDeptId());
 
-				if (row == null) {
-					ErrorInfoVo errorInfoVo = new ErrorInfoVo();
-					errorInfoVo.setRowNum(rNum);
-					errorInfoVo.setColumnName(null);
-					errorInfoVo.setContent(null);
-					errorInfoVo.setReason("当前行没有数据信息");
-					errorList.add(errorInfoVo);
-					continue;
+				// 额外校验可分配积分包
+				if (!"-1".equals(scorePackage.getRelationScoreId()) && batchScoreTotal > (scorePackage.getKfpjf() == null ? 0 : scorePackage.getKfpjf())) {
+					errorMap.put("批量下发总值大于可分配值", i + 1);
 				}
 
-				int colNum = row.getLastCellNum();
-				WmScorePackage wmScorePackage = new WmScorePackage();
+			}
 
-				wmScorePackage.setDeptId(String.valueOf(sysDept.getDeptId()));
-				wmScorePackage.setCreateTime(LocalDateTime.now());
+			// 存在错误全表打回
+			if (!errorMap.isEmpty()) {
 
-				for (int j = 0; j < colNum; j++) {//列数据
+				List<Map<String, Object>> resultList = new ArrayList<>(errorMap.size());
+				Map<String, Collection<Object>> asMap = errorMap.asMap();
 
-					// 获取列名称
-					String columnName = row0.getCell(j).getStringCellValue();
-					int columnNum = j + 1;
+				for (Map.Entry<String, Collection<Object>> entry : asMap.entrySet()) {
 
-					if (null == row.getCell(j)) {
-						ErrorInfoVo errorInfoVo = new ErrorInfoVo();
-						errorInfoVo.setRowNum(rNum);
-						errorInfoVo.setColumnNum(columnNum);
-						errorInfoVo.setColumnName(columnName);
-						errorInfoVo.setContent(null);
-						errorInfoVo.setReason("列数据为空");
-						errorList.add(errorInfoVo);
-						continue;
-					}
-					// 格式化字符串
-					row.getCell(j).setCellType(CellType.STRING);
-					String value = row.getCell(j).getStringCellValue()
-							.replaceAll(" ", "")
-							.replaceAll(",", "")
-							.replaceAll("\\u00A0", "")
-							.replaceAll((char) 12288 + "", "")
-							.replace("+", "·");
-
-					// 校验value
-					if (!columnName.equals("有效任务类型") && !columnName.equals("接单对象") && !columnName.equals("描述")) {
-						if (StringUtil.isEmpty(value)) {
-							ErrorInfoVo errorInfoVo = new ErrorInfoVo();
-							errorInfoVo.setRowNum(rNum);
-							errorInfoVo.setColumnNum(columnNum);
-							errorInfoVo.setColumnName(columnName);
-							errorInfoVo.setContent(value);
-							errorInfoVo.setReason("未填写数据");
-							errorList.add(errorInfoVo);
-							continue;
-						}
-					}
+					Map<String, Object> m = new HashMap<>(2);
 
-					if (j == 0) {
-						//判单 积分包名称是否已被占用
-						WmScorePackage wmScorePackage1 = new WmScorePackage();
-						wmScorePackage1.setScorePackageName(value);
-						wmScorePackage1.setDeptId(String.valueOf(SecurityUtils.getUser().getDeptId()));
-						WmScorePackage wmScorePackage2 = wmScorePackageMapper.selectByName(wmScorePackage1);
-						if (wmScorePackage2 != null) {
-							ErrorInfoVo errorInfoVo = new ErrorInfoVo();
-							errorInfoVo.setRowNum(rNum);
-							errorInfoVo.setColumnNum(columnNum);
-							errorInfoVo.setColumnName(columnName);
-							errorInfoVo.setContent(value);
-							errorInfoVo.setReason(String.format("{%s }已被占用", value));
-							errorList.add(errorInfoVo);
-							continue;
-						} else {
-							wmScorePackage.setScorePackageName(value);
-						}
-					} else if (j == 1) {
-						if ("兼职学术信息沟通专员".equals(value)) {
-							wmScorePackage.setTypeid("4");
-							wmScorePackage.setScorePackageStatus(1 + "");
-						} else if ("全职学术信息沟通专员".equals(value)) {
-							wmScorePackage.setTypeid("3");
-							wmScorePackage.setScorePackageStatus(3 + "");
-						} else {
-							ErrorInfoVo errorInfoVo = new ErrorInfoVo();
-							errorInfoVo.setRowNum(rNum);
-							errorInfoVo.setColumnNum(columnNum);
-							errorInfoVo.setColumnName(columnName);
-							errorInfoVo.setContent(value);
-							errorInfoVo.setReason("接单对象类型错误");
-							errorList.add(errorInfoVo);
-							continue;
-						}
-					} else if (j == 2) {
-						if (wmScorePackage.getTypeid().equals("3")) {
-							if (!value.equals("") && !value.equals(null)) {
-								List list = new ArrayList();
-								UserDTO userDTO = new UserDTO();
-								userDTO.setDeptId(SecurityUtils.getUser().getDeptId());
-								List<UserVO> userList = sysUserMapper.selectByDeptId(userDTO);
-//								List<Stream<SysRole>> ids = userList.stream().filter(p->p.getRoleList().stream().filter(k->k.getRoleId().equals(5))).collect(Collectors.toList());
-								List<UserVO> list1 = userList.stream()
-										.filter(p -> CollectionUtils.isNotEmpty(p.getRoleList()
-												.stream()
-												.filter(k -> k.getRoleId().equals(5))
-												.collect(Collectors.toList())))
-										.collect(Collectors.toList());
-								if (CollectionUtils.isNotEmpty(list1)) {
-									List<String> list2 = list1.stream()
-											.map(p -> p.getUsername())
-											.collect(Collectors.toList());
-									if (list2.contains(value)) {
-										list.add(value);
-										wmScorePackage.setUserList(list);
-									}
-								} else {
-									ErrorInfoVo errorInfoVo = new ErrorInfoVo();
-									errorInfoVo.setRowNum(rNum);
-									errorInfoVo.setColumnNum(columnNum);
-									errorInfoVo.setColumnName(columnName);
-									errorInfoVo.setContent(value);
-									errorInfoVo.setReason("接单对象未在系统中");
-									errorList.add(errorInfoVo);
-									continue;
-								}
-							} else {
-								ErrorInfoVo errorInfoVo = new ErrorInfoVo();
-								errorInfoVo.setRowNum(rNum);
-								errorInfoVo.setColumnNum(columnNum);
-								errorInfoVo.setColumnName(columnName);
-								errorInfoVo.setContent(value);
-								errorInfoVo.setReason("接单对象错误");
-								errorList.add(errorInfoVo);
-								continue;
-							}
-						} else {
-							wmScorePackage.setUserList(null);
-							wmScorePackage.setScorePackageStatus("1");
-						}
-					} else if (j == 3) {
-						wmScorePackage.setScore(Integer.parseInt(value));
-					} else if (j == 4) {
-						SysDept sysDept2 = new SysDept();
-						sysDept2.setDeptId(SecurityUtils.getUser().getDeptId());
-						List<SysDept> list = sysDeptService.getAllParentDept(sysDept2);
-						boolean b = list.parallelStream().noneMatch(SysDept -> value.equals(SysDept.getName()));
-//						List<String> name = list.stream().map(p->p.getName()).collect(Collectors.toList());
-						if (!b) {
-							List<SysDept> sysDept3 = sysDeptService.selectByName(value);
-							wmScorePackage.setRelatedService(String.valueOf(sysDept3.get(0).getDeptId()));
-						} else {
-							ErrorInfoVo errorInfoVo = new ErrorInfoVo();
-							errorInfoVo.setRowNum(rNum);
-							errorInfoVo.setColumnNum(columnNum);
-							errorInfoVo.setColumnName(columnName);
-							errorInfoVo.setContent(value);
-							errorInfoVo.setReason("关联服务企业错误");
-							errorList.add(errorInfoVo);
-							continue;
-						}
-					} else if (j == 5) {
-						WmScorePackage wmScorePackage1 = new WmScorePackage();
-						wmScorePackage1.setScorePackageName(value);
-						wmScorePackage1.setDeptId(String.valueOf(SecurityUtils.getUser().getDeptId()));
-						WmScorePackage wmScorePackage2 = wmScorePackageMapper.selectByName(wmScorePackage1);
-						if (!wmScorePackage1.getScorePackageName().equals("无") && wmScorePackage2 != null) {
-							wmScorePackage.setRelationScoreId(wmScorePackage2.getId());
-							if (i != 1) {
-								map.put("id1", wmScorePackage.getRelationScoreId());
-								mapList.add(map.get("id1"));
-								map.put(wmScorePackage.getRelationScoreId(), wmScorePackage.getScore());
-							}
-							if (map.get("id") != null) {
-								if (mapList.contains(wmScorePackage.getRelationScoreId())) {
-									map.put(wmScorePackage.getRelationScoreId(), wmScorePackage.getScore() + (Integer) map
-											.get(wmScorePackage.getRelationScoreId()));
-								} else {
-									map.put(wmScorePackage.getRelationScoreId(), wmScorePackage.getScore());
-								}
-							} else {
-								map.put("id", wmScorePackage.getRelationScoreId());
-								mapList.add(map.get("id"));
-								map.put(wmScorePackage.getRelationScoreId(), wmScorePackage.getScore());
-							}
-							List<WmScoreTaskType> taskTypelist = wmScoreTaskTypeMapper.getScoreTaskTypeByScoreId(wmScorePackage2
-									.getId());
-							wmScorePackage.setTaskTypeList1(taskTypelist);
-						} else if (wmScorePackage1.getScorePackageName().equals("无")) {
-							wmScorePackage.setRelationScoreId(null);
-						} else {
-							ErrorInfoVo errorInfoVo = new ErrorInfoVo();
-							errorInfoVo.setRowNum(rNum);
-							errorInfoVo.setColumnNum(columnNum);
-							errorInfoVo.setColumnName(columnName);
-							errorInfoVo.setContent(value);
-							errorInfoVo.setReason("关联任务积分包错误");
-							errorList.add(errorInfoVo);
-							continue;
-						}
-					} else if (j == 6) {
-						if ("仅内部可见".equals(value)) {
-							wmScorePackage.setPackageUserScope("1");
-						} else if ("全部可见".equals(value)) {
-							wmScorePackage.setPackageUserScope("2");
-						} else {
-							ErrorInfoVo errorInfoVo = new ErrorInfoVo();
-							errorInfoVo.setRowNum(rNum);
-							errorInfoVo.setColumnNum(columnNum);
-							errorInfoVo.setColumnName(columnName);
-							errorInfoVo.setContent(value);
-							errorInfoVo.setReason("接单对象范围错误");
-							errorList.add(errorInfoVo);
-							continue;
-						}
-					} else if (j == 7) {
-						String types = value;
-						if (types.contains("&")) {
-							String[] strs = types.split("&");
-							Arrays.asList(strs);
-							List<WmTaskTypeTree> list2 = new ArrayList();
-							for (int k = 0; k < strs.length; k++) {
-								WmTaskTypeTree wmTaskTypeTree = new WmTaskTypeTree();
-								wmTaskTypeTree.setTaskTypeName(strs[k]);
-								list2.add(wmTaskTypeTree);
-							}
-							wmScorePackage.setTaskTypeList(list2);
-						} else {
-							List<WmTaskTypeTree> list2 = new ArrayList();
-							WmTaskTypeTree wmTaskTypeTree = new WmTaskTypeTree();
-							wmTaskTypeTree.setTaskTypeName(value);
-							list2.add(wmTaskTypeTree);
-							wmScorePackage.setTaskTypeList(list2);
-						}
+					m.put("reason", entry.getKey());
 
-					} else if (j == 8) {
-						wmScorePackage.setDescription(value);
-					}
-					wmScorePackage.setPackageType1("1");
-					wmScorePackage.setPackageType2("1");
-					wmScorePackage.setBelongDate(LocalDateTime.now()
-							.format(DateTimeFormatter.ofPattern("yyyy-MM")) + "");
+					m.put("line", entry.getValue());
+					resultList.add(m);
 				}
 
-				wmScorePackageList.add(wmScorePackage);
-			}
-
-			// 判断是否有错误的数据行,如果没有,执行入库操作
-			if (CollectionUtils.isEmpty(errorList)) {
-				for (WmScorePackage wmScorePackage : wmScorePackageList) {
-					if (wmScorePackage.getRelationScoreId() != null) {
-						if (mapList.contains(wmScorePackage.getRelationScoreId())) {
-							Map<String, Object> map1 = new HashMap<>();
-							map1.put("type", wmScorePackage.getTypeid());
-							String deptId = String.valueOf(SecurityUtils.getUser().getDeptId());
-							wmScorePackage.setDeptId(deptId);
-							wmScorePackage.setTypeid("0,1,2");
-							wmScorePackage.setSendPackageDeptId(wmScorePackage.getRelatedService());
-							List<WmScorePackage> packageList = wmScorePackageMapper.getScorePackagekfpjf(wmScorePackage);
-							wmScorePackage.setTypeid(String.valueOf(map1.get("type")));
-							wmScorePackage.setSendPackageDeptId(String.valueOf(SecurityUtils.getUser().getDeptId()));
-							List<String> list = packageList.stream().map(p -> p.getId()).collect(Collectors.toList());
-							for (String id : list) {
-								if (wmScorePackage.getRelationScoreId().equals(id)) {
-									WmScorePackage wmScorePackage1 = wmScorePackageService.getById(id);
-									if (wmScorePackage1.getKfpjf() < (Integer) map.get(wmScorePackage.getRelationScoreId())) {
-										ErrorInfoVo errorInfoVo = new ErrorInfoVo();
-										errorInfoVo.setReason("填写积分值总值大于关联积分包可分配积分值");
-										errorList.add(errorInfoVo);
-										return R.ok(errorList);
-									}
-								}
-							}
+				return R.ok(resultList);
+			}
 
-						}
-					}
-				}
-				wmScorePackageService.saveBatch(wmScorePackageList);
-				for (WmScorePackage wmScorePackage : wmScorePackageList) {
-
-					if (wmScorePackage.getUserList() != null && wmScorePackage.getUserList().size() > 0) {
-						WmScorePackageStatus wmScorePackageStatus = new WmScorePackageStatus();
-						SysUser sysUser = new SysUser();
-						sysUser.setUsername(wmScorePackage.getUserList().get(0));
-						sysUser.setDeptId(SecurityUtils.getUser().getDeptId());
-						SysUser sysUser1 = sysUserMapper.selectUserByName(sysUser);
-						wmScorePackageStatus.setUserId(sysUser1.getUserId() + "");
-						wmScorePackageStatus.setStatus("2");
-						wmScorePackageStatus.setPackageId(wmScorePackage.getId());
-						wmScorePackageStatus.setDeptId(SecurityUtils.getUser().getDeptId() + "");
-						wmScorePackageStatus.setUserScore(wmScorePackage.getScore() + "");
-						wmScorePackageStatus.setEnableFlag("0");
-						wmScorePackageStatus.setDelFlag("0");
-						wmScorePackageStatus.setCreateTime(LocalDateTime.now());
-						wmScorePackageStatus.setCreateUser(SecurityUtils.getUser().getId());
-						wmScorePackageStatusService.save(wmScorePackageStatus);
-					}
+			for (BatchPackageExcelModel model : batchPackageExcelModels) {
 
-					if (wmScorePackage.getRelationScoreId() != null) {
-						if (wmScorePackage.getRelationScoreId().equals(map.get("id"))) {
-							WmScorePackage wmScorePackage1 = wmScorePackageService.getById(wmScorePackage.getRelationScoreId());
-							wmScorePackage1.setKfpjf(wmScorePackage1.getKfpjf() - (Integer) map.get(wmScorePackage.getRelationScoreId()));
-							wmScorePackageService.updateById(wmScorePackage1);
-						}
-					}
+				scorePackage.setScore(Integer.parseInt(model.getScore()));
+				scorePackage.setScorePackageName(model.getScorePackageName());
+				scorePackage.setDescription(model.getDescription());
+				scorePackage.setUserList(StrUtil.isEmpty(model.getTargetId()) ? new ArrayList<>(1) :
+						Collections.singletonList(model.getTargetId()));
 
-					if (wmScorePackage.getRelationScoreId() != null && wmScorePackage.getRelationScoreId() != null) {
-						List<String> list = wmScorePackage.getTaskTypeList1()
-								.stream()
-								.map(p -> p.getTaskTypeId())
-								.collect(Collectors.toList());
-						for (String id : list) {
-							WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
-							wmScoreTaskType.setScoreId(wmScorePackage.getId());
-							wmScoreTaskType.setTaskTypeId(id);
-							wmScoreTaskTypeMapper.insert(wmScoreTaskType);
-						}
-					} else if (wmScorePackage.getTaskTypeList()
-							.get(0)
-							.getTaskTypeName()
-							.equals("全部") && wmScorePackage.getRelationScoreId() == null) {
-						WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
-						wmScoreTaskType.setScoreId(wmScorePackage.getId());
-						wmScoreTaskType.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM1.getType());
-						wmScoreTaskTypeMapper.insert(wmScoreTaskType);
-						WmScoreTaskType wmScoreTaskType1 = new WmScoreTaskType();
-						wmScoreTaskType1.setScoreId(wmScorePackage.getId());
-						wmScoreTaskType1.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM2.getType());
-						wmScoreTaskTypeMapper.insert(wmScoreTaskType1);
-						WmScoreTaskType wmScoreTaskType2 = new WmScoreTaskType();
-						wmScoreTaskType2.setScoreId(wmScorePackage.getId());
-						wmScoreTaskType2.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM3.getType());
-						wmScoreTaskTypeMapper.insert(wmScoreTaskType2);
-						WmScoreTaskType wmScoreTaskType3 = new WmScoreTaskType();
-						wmScoreTaskType3.setScoreId(wmScorePackage.getId());
-						wmScoreTaskType3.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM4.getType());
-						wmScoreTaskTypeMapper.insert(wmScoreTaskType3);
-						WmScoreTaskType wmScoreTaskType4 = new WmScoreTaskType();
-						wmScoreTaskType4.setScoreId(wmScorePackage.getId());
-						wmScoreTaskType4.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM5.getType());
-						wmScoreTaskTypeMapper.insert(wmScoreTaskType4);
-						WmScoreTaskType wmScoreTaskType5 = new WmScoreTaskType();
-						wmScoreTaskType5.setScoreId(wmScorePackage.getId());
-						wmScoreTaskType5.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM6.getType());
-						wmScoreTaskTypeMapper.insert(wmScoreTaskType5);
-						WmScoreTaskType wmScoreTaskType6 = new WmScoreTaskType();
-						wmScoreTaskType6.setScoreId(wmScorePackage.getId());
-						wmScoreTaskType6.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM7.getType());
-						wmScoreTaskTypeMapper.insert(wmScoreTaskType6);
-						WmScoreTaskType wmScoreTaskType7 = new WmScoreTaskType();
-						wmScoreTaskType7.setScoreId(wmScorePackage.getId());
-						wmScoreTaskType7.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM8.getType());
-						wmScoreTaskTypeMapper.insert(wmScoreTaskType7);
-						WmScoreTaskType wmScoreTaskType8 = new WmScoreTaskType();
-						wmScoreTaskType8.setScoreId(wmScorePackage.getId());
-						wmScoreTaskType8.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM9.getType());
-						wmScoreTaskTypeMapper.insert(wmScoreTaskType8);
-						WmScoreTaskType wmScoreTaskType9 = new WmScoreTaskType();
-						wmScoreTaskType9.setScoreId(wmScorePackage.getId());
-						wmScoreTaskType9.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM10.getType());
-						wmScoreTaskTypeMapper.insert(wmScoreTaskType9);
-						WmScoreTaskType wmScoreTaskType10 = new WmScoreTaskType();
-						wmScoreTaskType10.setScoreId(wmScorePackage.getId());
-						wmScoreTaskType10.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM11.getType());
-						wmScoreTaskTypeMapper.insert(wmScoreTaskType10);
-						WmScoreTaskType wmScoreTaskType11 = new WmScoreTaskType();
-						wmScoreTaskType11.setScoreId(wmScorePackage.getId());
-						wmScoreTaskType11.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM12.getType());
-						wmScoreTaskTypeMapper.insert(wmScoreTaskType11);
-						WmScoreTaskType wmScoreTaskType12 = new WmScoreTaskType();
-						wmScoreTaskType12.setScoreId(wmScorePackage.getId());
-						wmScoreTaskType12.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM13.getType());
-						wmScoreTaskTypeMapper.insert(wmScoreTaskType12);
-						WmScoreTaskType wmScoreTaskType13 = new WmScoreTaskType();
-						wmScoreTaskType13.setScoreId(wmScorePackage.getId());
-						wmScoreTaskType13.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM14.getType());
-						wmScoreTaskTypeMapper.insert(wmScoreTaskType13);
-						WmScoreTaskType wmScoreTaskType14 = new WmScoreTaskType();
-						wmScoreTaskType14.setScoreId(wmScorePackage.getId());
-						wmScoreTaskType14.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM15.getType());
-						wmScoreTaskTypeMapper.insert(wmScoreTaskType14);
-						WmScoreTaskType wmScoreTaskType15 = new WmScoreTaskType();
-						wmScoreTaskType15.setScoreId(wmScorePackage.getId());
-						wmScoreTaskType15.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM16.getType());
-						wmScoreTaskTypeMapper.insert(wmScoreTaskType15);
-						WmScoreTaskType wmScoreTaskType16 = new WmScoreTaskType();
-						wmScoreTaskType16.setScoreId(wmScorePackage.getId());
-						wmScoreTaskType16.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM19.getType());
-						wmScoreTaskTypeMapper.insert(wmScoreTaskType16);
-						WmScoreTaskType wmScoreTaskType17 = new WmScoreTaskType();
-						wmScoreTaskType17.setScoreId(wmScorePackage.getId());
-						wmScoreTaskType17.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM17.getType());
-						wmScoreTaskTypeMapper.insert(wmScoreTaskType17);
-						WmScoreTaskType wmScoreTaskType18 = new WmScoreTaskType();
-						wmScoreTaskType18.setScoreId(wmScorePackage.getId());
-						wmScoreTaskType18.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM18.getType());
-						wmScoreTaskTypeMapper.insert(wmScoreTaskType18);
-						WmScoreTaskType wmScoreTaskType19 = new WmScoreTaskType();
-						wmScoreTaskType19.setScoreId(wmScorePackage.getId());
-						wmScoreTaskType19.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM20.getType());
-						wmScoreTaskTypeMapper.insert(wmScoreTaskType19);
-						WmScoreTaskType wmScoreTaskType20 = new WmScoreTaskType();
-						wmScoreTaskType20.setScoreId(wmScorePackage.getId());
-						wmScoreTaskType20.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM21.getType());
-						wmScoreTaskTypeMapper.insert(wmScoreTaskType20);
-						WmScoreTaskType wmScoreTaskType21 = new WmScoreTaskType();
-						wmScoreTaskType21.setScoreId(wmScorePackage.getId());
-						wmScoreTaskType21.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM22.getType());
-						wmScoreTaskTypeMapper.insert(wmScoreTaskType21);
-					} else if (wmScorePackage.getRelationScoreId() == null && wmScorePackage.getTaskTypeList()
-							.size() > 0) {
-						List<String> stringList = wmScorePackage.getTaskTypeList()
-								.stream()
-								.map(p -> p.getTaskTypeName())
-								.collect(Collectors.toList());
-						for (String name : stringList) {
-							if (name.equals(WmScoreTaskTypeEnum.TASK_TYPE_ENUM1.getDescription())) {
-								WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
-								wmScoreTaskType.setScoreId(wmScorePackage.getId());
-								wmScoreTaskType.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM1.getType());
-								wmScoreTaskTypeMapper.insert(wmScoreTaskType);
-							}
-							if (name.equals(WmScoreTaskTypeEnum.TASK_TYPE_ENUM2.getDescription())) {
-								WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
-								wmScoreTaskType.setScoreId(wmScorePackage.getId());
-								wmScoreTaskType.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM2.getType());
-								wmScoreTaskTypeMapper.insert(wmScoreTaskType);
-							}
-							if (name.equals(WmScoreTaskTypeEnum.TASK_TYPE_ENUM3.getDescription())) {
-								WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
-								wmScoreTaskType.setScoreId(wmScorePackage.getId());
-								wmScoreTaskType.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM3.getType());
-								wmScoreTaskTypeMapper.insert(wmScoreTaskType);
-							}
-							if (name.equals(WmScoreTaskTypeEnum.TASK_TYPE_ENUM4.getDescription())) {
-								WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
-								wmScoreTaskType.setScoreId(wmScorePackage.getId());
-								wmScoreTaskType.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM4.getType());
-								wmScoreTaskTypeMapper.insert(wmScoreTaskType);
-							}
-							if (name.equals(WmScoreTaskTypeEnum.TASK_TYPE_ENUM5.getDescription())) {
-								WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
-								wmScoreTaskType.setScoreId(wmScorePackage.getId());
-								wmScoreTaskType.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM5.getType());
-								wmScoreTaskTypeMapper.insert(wmScoreTaskType);
-							}
-							if (name.equals(WmScoreTaskTypeEnum.TASK_TYPE_ENUM6.getDescription())) {
-								WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
-								wmScoreTaskType.setScoreId(wmScorePackage.getId());
-								wmScoreTaskType.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM6.getType());
-								wmScoreTaskTypeMapper.insert(wmScoreTaskType);
-							}
-							if (name.equals(WmScoreTaskTypeEnum.TASK_TYPE_ENUM7.getDescription())) {
-								WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
-								wmScoreTaskType.setScoreId(wmScorePackage.getId());
-								wmScoreTaskType.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM7.getType());
-								wmScoreTaskTypeMapper.insert(wmScoreTaskType);
-							}
-							if (name.equals(WmScoreTaskTypeEnum.TASK_TYPE_ENUM8.getDescription())) {
-								WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
-								wmScoreTaskType.setScoreId(wmScorePackage.getId());
-								wmScoreTaskType.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM8.getType());
-								wmScoreTaskTypeMapper.insert(wmScoreTaskType);
-							}
-							if (name.equals(WmScoreTaskTypeEnum.TASK_TYPE_ENUM9.getDescription())) {
-								WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
-								wmScoreTaskType.setScoreId(wmScorePackage.getId());
-								wmScoreTaskType.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM9.getType());
-								wmScoreTaskTypeMapper.insert(wmScoreTaskType);
-							}
-							if (name.equals(WmScoreTaskTypeEnum.TASK_TYPE_ENUM10.getDescription())) {
-								WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
-								wmScoreTaskType.setScoreId(wmScorePackage.getId());
-								wmScoreTaskType.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM10.getType());
-								wmScoreTaskTypeMapper.insert(wmScoreTaskType);
-							}
-							if (name.equals(WmScoreTaskTypeEnum.TASK_TYPE_ENUM11.getDescription())) {
-								WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
-								wmScoreTaskType.setScoreId(wmScorePackage.getId());
-								wmScoreTaskType.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM11.getType());
-								wmScoreTaskTypeMapper.insert(wmScoreTaskType);
-							}
-							if (name.equals(WmScoreTaskTypeEnum.TASK_TYPE_ENUM12.getDescription())) {
-								WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
-								wmScoreTaskType.setScoreId(wmScorePackage.getId());
-								wmScoreTaskType.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM12.getType());
-								wmScoreTaskTypeMapper.insert(wmScoreTaskType);
-							}
-							if (name.equals(WmScoreTaskTypeEnum.TASK_TYPE_ENUM13.getDescription())) {
-								WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
-								wmScoreTaskType.setScoreId(wmScorePackage.getId());
-								wmScoreTaskType.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM13.getType());
-								wmScoreTaskTypeMapper.insert(wmScoreTaskType);
-							}
-							if (name.equals(WmScoreTaskTypeEnum.TASK_TYPE_ENUM14.getDescription())) {
-								WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
-								wmScoreTaskType.setScoreId(wmScorePackage.getId());
-								wmScoreTaskType.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM14.getType());
-								wmScoreTaskTypeMapper.insert(wmScoreTaskType);
-							}
-							if (name.equals(WmScoreTaskTypeEnum.TASK_TYPE_ENUM15.getDescription())) {
-								WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
-								wmScoreTaskType.setScoreId(wmScorePackage.getId());
-								wmScoreTaskType.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM15.getType());
-								wmScoreTaskTypeMapper.insert(wmScoreTaskType);
-							}
-							if (name.equals(WmScoreTaskTypeEnum.TASK_TYPE_ENUM16.getDescription())) {
-								WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
-								wmScoreTaskType.setScoreId(wmScorePackage.getId());
-								wmScoreTaskType.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM16.getType());
-								wmScoreTaskTypeMapper.insert(wmScoreTaskType);
-							}
-							if (name.equals(WmScoreTaskTypeEnum.TASK_TYPE_ENUM19.getDescription())) {
-								WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
-								wmScoreTaskType.setScoreId(wmScorePackage.getId());
-								wmScoreTaskType.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM19.getType());
-								wmScoreTaskTypeMapper.insert(wmScoreTaskType);
-							}
-							if (name.equals(WmScoreTaskTypeEnum.TASK_TYPE_ENUM17.getDescription())) {
-								WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
-								wmScoreTaskType.setScoreId(wmScorePackage.getId());
-								wmScoreTaskType.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM17.getType());
-								wmScoreTaskTypeMapper.insert(wmScoreTaskType);
-							}
-							if (name.equals(WmScoreTaskTypeEnum.TASK_TYPE_ENUM18.getDescription())) {
-								WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
-								wmScoreTaskType.setScoreId(wmScorePackage.getId());
-								wmScoreTaskType.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM18.getType());
-								wmScoreTaskTypeMapper.insert(wmScoreTaskType);
-							}
-							if (name.equals(WmScoreTaskTypeEnum.TASK_TYPE_ENUM20.getDescription())) {
-								WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
-								wmScoreTaskType.setScoreId(wmScorePackage.getId());
-								wmScoreTaskType.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM20.getType());
-								wmScoreTaskTypeMapper.insert(wmScoreTaskType);
-							}
-							if (name.equals(WmScoreTaskTypeEnum.TASK_TYPE_ENUM21.getDescription())) {
-								WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
-								wmScoreTaskType.setScoreId(wmScorePackage.getId());
-								wmScoreTaskType.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM21.getType());
-								wmScoreTaskTypeMapper.insert(wmScoreTaskType);
-							}
-							if (name.equals(WmScoreTaskTypeEnum.TASK_TYPE_ENUM22.getDescription())) {
-								WmScoreTaskType wmScoreTaskType = new WmScoreTaskType();
-								wmScoreTaskType.setScoreId(wmScorePackage.getId());
-								wmScoreTaskType.setTaskTypeId(WmScoreTaskTypeEnum.TASK_TYPE_ENUM22.getType());
-								wmScoreTaskTypeMapper.insert(wmScoreTaskType);
-							}
-						}
-					}
-				}
-			}
-			return R.ok(errorList);
+				wmScorePackageService.addWmScorePackage(scorePackage);
 
-		} catch (Exception e) {
-			return R.failed("批量创建积分包失败");
+
+			}
+		} finally {
+			log.warn("==========================================批量导入积分包:结束=====================================================");
+			redisTemplate.delete(lock);
 		}
+		return R.ok();
 	}
 
-	/**
-	 * 获取当前部门的基于所有积分包的相关信息
-	 *
-	 * @return 积分包的相关信息
-	 */
-	@ApiOperation(value = "获取当前部门的基于所有积分包的相关信息", notes = "获取当前部门的基于所有积分包的相关信息")
-	@GetMapping("/getDeptScorePackageInfo")
-	public R getDeptScorePackageInfo() {
-		Integer deptId = SecurityUtils.getUser().getDeptId();
-		Map<String, Object> result = wmScorePackageService.getDeptScorePackageInfo(deptId);
-		return R.ok(result);
-	}
 
 	/**
-	 * 获取积分包关联企业的药品列表
+	 * 校验model
 	 *
-	 * @param page      分页信息
-	 * @param packageId 积分包id
-	 * @param drugName  药品名称
-	 * @return 药品列表
+	 * @param model      model
+	 * @param targetType 接包人类型
+	 * @param errorMap   收集错误map
+	 * @param row        所在行
+	 * @param deptId     所属企业
 	 */
-	@SysLog("获取积分包关联企业的药品列表")
-	@GetMapping(value = "/drugs")
-	public R listDrugsByPackageId(Page page, @RequestParam(value = "packageId") Integer packageId, @RequestParam(value = "name", required = false) String drugName) {
-		return R.ok(wmScorePackageService.listDrugsByPackageId(page, packageId, drugName.trim()));
+	private Integer checkColumn(BatchPackageExcelModel model, TargetType targetType,
+								Multimap<String, Object> errorMap, Integer row, Integer deptId) {
+
+		log.warn("==========================================校验批量下发积分包model:开始=====================================================");
+
+		// 校验类型
+		log.info("[{}]", model.getTargetType());
+		if (!targetType.getDesc().equals(model.getTargetType())) {
+			errorMap.put("接单对象类型不匹配", row);
+		}
+
+		// 校验是否同名
+		log.info("[{}]", model.getScorePackageName());
+		if (StrUtil.isNotEmpty(model.getScorePackageName())) {
+			int count = wmScorePackageService.count(Wrappers.<WmScorePackage>lambdaQuery()
+					.eq(WmScorePackage::getScorePackageName, model.getScorePackageName()));
+
+			if (count != 0) {
+				errorMap.put("积分包重名了", row);
+			}
+		}
+
+		// 校验积分制是否为空
+		log.info("[{}]", model.getScore());
+		if (StrUtil.isEmpty(model.getScore())) {
+			errorMap.put("积分值未填", row);
+		} else {
+			// 校验是否是数字
+			if (!Validator.isNumber(model.getScore())) {
+				errorMap.put("积分值不是数字", row);
+			} else if (model.getScore().contains(StrUtil.DOT) || Integer.parseInt(model.getScore()) <= 0) {
+				errorMap.put("积分值必须是正整数", row);
+				model.setScore("0");
+			}
+		}
+
+		// 全职校验
+		if (TargetType.FULL_TIME.equals(targetType)) {
+
+			// 校验名称是否为空
+			log.info("[{}]", model.getTargetName());
+			if (StrUtil.isEmpty(model.getTargetName())) {
+				errorMap.put("接单人姓名未填", row);
+			}
+
+			// 校验名称是否为空,是否是企业下的人
+			log.info("[{}]", model.getMobile());
+			if (StrUtil.isEmpty(model.getMobile())) {
+				errorMap.put("接单人手机号未填", row);
+			} else {
+				if (!Validator.isMobile(model.getMobile())) {
+					errorMap.put("手机号格式不争取", row);
+				}
+			}
+
+			// 校验是否是企业下的
+			List<SysUser> target = sysUserService.list(Wrappers.<SysUser>lambdaQuery()
+					.eq(SysUser::getRealname, model.getTargetName())
+					.eq(SysUser::getUsername, model.getMobile())
+					.eq(SysUser::getDeptId, deptId)
+					.eq(SysUser::getDelFlag, CommonConstants.STATUS_NORMAL)
+					.eq(SysUser::getLockFlag, CommonConstants.STATUS_NORMAL)
+			);
+
+			if (CollUtil.isEmpty(target) || target.size() > 1) {
+				errorMap.put("查无此人", row);
+			} else {
+				model.setTargetId(String.valueOf(target.get(0).getUserId()));
+			}
+		}
+		// 兼职校验
+		else {
+			// 校验名称是否为空
+			log.info("MOBILE: [{}], NAME: [{}]", model.getTargetName(), model.getTargetName());
+			if (StrUtil.isNotEmpty(model.getTargetName()) || StrUtil.isNotEmpty(model.getMobile())) {
+				errorMap.put("请勿使用全职模板", row);
+			}
+		}
+
+
+		log.warn("==========================================校验批量下发积分包model:开始=====================================================");
+		return Integer.parseInt(model.getScore());
 	}
 
+
+
+
 }

+ 87 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmScorePackageStatusController.java

@@ -17,9 +17,12 @@
 
 package com.qunzhixinxi.hnqz.admin.controller;
 
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.csp.sentinel.util.StringUtil;
 import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qunzhixinxi.hnqz.admin.api.entity.WmScorePackageStatusBatch;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackageStatus;
 import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
@@ -35,8 +38,12 @@ import lombok.AllArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
 import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 
 /**
@@ -170,6 +177,86 @@ public class WmScorePackageStatusController {
 		return wmScorePackageStatusService.approvalStatus( wmScorePackageStatus);
 	}
 
+	/**
+	 * 批量接单审核
+	 * @param statusBatch 批量审批信息
+	 */
+	@PutMapping("/approvalStatus/batch")
+	public R approvalStatusBatch(@RequestBody WmScorePackageStatusBatch statusBatch){
+		if(StrUtil.isEmpty(statusBatch.getBatchIds())){
+			return R.failed("缺少参数ID");
+		}
+		if(statusBatch.getStatus() == null){
+			return R.failed("缺少参数:审批意见");
+		}
+		return R.ok(wmScorePackageStatusService.approvalStatusBatch(statusBatch));
+	}
+
+	/**
+	 * 获取批量审核的校验信息
+	 * @param ids
+	 * @return
+	 */
+	@GetMapping(value = "/approvalStatus/checkout")
+	public R approvalStatusCheckout(@RequestParam(value = "ids") String ids){
+
+		// 获取id
+		List<String> idList = StrUtil.split(ids, StrUtil.COMMA);
+		List<Integer> idListInt = idList.stream().mapToInt(Integer::valueOf).boxed().collect(Collectors.toList());
+
+		// 获取待审核的记录
+		List<WmScorePackageStatus> wmScorePackageStatuses = wmScorePackageStatusService.list(Wrappers.<WmScorePackageStatus>lambdaQuery()
+				.in(WmScorePackageStatus::getId, idList));
+
+		// 过滤出待审核的积分包id
+		Set<String> packageIds = wmScorePackageStatuses.stream()
+				.map(WmScorePackageStatus::getPackageId)
+				.collect(Collectors.toSet());
+
+		// 获取积分包信息,主要是为了获取接单对象
+		List<WmScorePackage> packageList = wmScorePackageService.list(Wrappers.<WmScorePackage>lambdaQuery()
+				.in(WmScorePackage::getId, packageIds));
+
+		// 封装每个积分包对应的接单人数
+		Map<String, Integer> userNumMap = packageList.stream()
+				.collect(Collectors.toMap(WmScorePackage::getId, WmScorePackage::getUserNum));
+
+		// 查询所有积分包的领包记录(过滤掉领包不通过的, 审核状态:1.审核中,2.审核通过,3.审核不通过), 只包含审核通过和待审核
+		List<WmScorePackageStatus> packageStatuses = wmScorePackageStatusService.list(Wrappers.<WmScorePackageStatus>lambdaQuery()
+				.in(WmScorePackageStatus::getPackageId, packageIds)).stream().filter(ps -> !StrUtil.equals("3", ps.getStatus())).collect(Collectors.toList());
+
+		// 按照积分包id分组, 审核记录
+		Map<String, List<WmScorePackageStatus>> map = packageStatuses.stream()
+				.collect(Collectors.groupingBy(WmScorePackageStatus::getPackageId));
+
+		int operation = 0;
+		int remain = 0;
+		for (Map.Entry<String,List<WmScorePackageStatus>>entry : map.entrySet()){
+
+			String packageId = entry.getKey();
+			Set<Integer> tempIds = entry.getValue().stream().mapToInt(WmScorePackageStatus::getId).boxed().collect(Collectors.toSet());
+			Set<Integer> idSet = new HashSet<>(idListInt);
+			tempIds.retainAll(idSet);
+			Integer userNum = userNumMap.get(packageId) == null ? 1 : userNumMap.get(packageId);
+
+			if (entry.getValue().size() <= userNum){
+
+				operation += tempIds.size();
+
+			} else {
+				remain += tempIds.size();
+			}
+		}
+
+
+		Map<String, Integer> result = new HashMap<>(2);
+		result.put("operation", operation);
+		result.put("remain",remain);
+
+		return R.ok(result);
+
+	}
+
 	/**
 	 * 终止接单--区分全部收回,和部分收回
 	 *

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

@@ -0,0 +1,67 @@
+package com.qunzhixinxi.hnqz.admin.entity.model.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * {@code BatchPackageExcelModel}
+ * <p>
+ * 批量下发积分包
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2021/11/18 15:07
+ */
+@Data
+public class BatchPackageExcelModel implements Serializable {
+
+	private static final long serialVersionUID = 311997134231676639L;
+
+
+	/**
+	 * 接单对象类型
+	 */
+	@ExcelProperty(index = 0, value = "接单对象类型")
+	private String targetType;
+
+	/**
+	 * 积分包名称
+	 */
+	@ExcelProperty(index = 1, value = "积分包名称")
+	private String scorePackageName;
+
+
+	/**
+	 * 积分包值,单位:元
+	 */
+	@ExcelProperty(index = 2, value = "积分包值")
+	private String score;
+
+	/**
+	 * 描述
+	 */
+	@ExcelProperty(index = 3, value = "描述")
+	private String description;
+
+
+	/**
+	 * 接包对象
+	 */
+	@ExcelProperty(index = 4, value = "接包对象")
+	private String targetName;
+
+	/**
+	 * 手机号
+	 */
+	@ExcelProperty(index = 5, value = "手机号")
+	private String mobile;
+
+
+	/**
+	 * 用户id
+	 */
+	private String targetId;
+
+}

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

@@ -0,0 +1,62 @@
+package com.qunzhixinxi.hnqz.admin.entity.model.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.Getter;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * {@code BatchPackageFullTimeExcelModel}
+ * <p>
+ * 批量下发积分包(全职)
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2021/11/18 15:12
+ */
+@Data
+public class BatchPackageFullTimeExcelModel implements Serializable {
+
+	private static final long serialVersionUID = 2053830075650614516L;
+
+	/**
+	 * 接单对象类型
+	 */
+	@ExcelProperty(index = 0, value = "接单对象类型")
+	private String targetType;
+
+	/**
+	 * 积分包名称
+	 */
+	@ExcelProperty(index = 1, value = "积分包名称")
+	private String scorePackageName;
+
+	/**
+	 * 接包对象
+	 */
+	@ExcelProperty(index = 2, value = "接包对象")
+	private String targetName;
+
+	/**
+	 * 手机号
+	 */
+	@ExcelProperty(index = 3, value = "手机号")
+	private String mobile;
+
+	/**
+	 * 积分包值,单位:元
+	 */
+	@ExcelProperty(index = 4, value = "积分包值")
+	private Integer score;
+
+	/**
+	 * 描述
+	 */
+	@ExcelProperty(index = 5, value = "描述")
+	private String description;
+}

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

@@ -0,0 +1,52 @@
+package com.qunzhixinxi.hnqz.admin.entity.model.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.Getter;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * {@code BatchPackagePartTimeExcelModel}
+ * <p>
+ * 批量下发积分包(兼职)
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2021/11/18 15:07
+ */
+@Data
+public class BatchPackagePartTimeExcelModel implements Serializable {
+
+	private static final long serialVersionUID = 311997134231676639L;
+
+
+	/**
+	 * 接单对象类型
+	 */
+	@ExcelProperty(index = 0, value = "接单对象类型")
+	private String targetType;
+
+	/**
+	 * 积分包名称
+	 */
+	@ExcelProperty(index = 1, value = "积分包名称")
+	private String scorePackageName;
+
+	/**
+	 * 积分包值,单位:元
+	 */
+	@ExcelProperty(index = 2, value = "积分包值")
+	private Integer score;
+
+	/**
+	 * 描述
+	 */
+	@ExcelProperty(index = 3, value = "描述")
+	private String description;
+
+}

+ 2 - 2
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/WmScoreTaskTypeEnum.java

@@ -53,11 +53,11 @@ public enum WmScoreTaskTypeEnum {
 	/**
 	 * 类型
 	 */
-	private String type;
+	private final String type;
 
 	/**
 	 * 描述
 	 */
-	private String description;
+	private final String description;
 
 }

+ 8 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmScorePackageStatusService.java

@@ -20,6 +20,7 @@ package com.qunzhixinxi.hnqz.admin.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qunzhixinxi.hnqz.admin.api.entity.WmScorePackageStatusBatch;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackageStatus;
 import com.qunzhixinxi.hnqz.admin.entity.WmTask;
@@ -63,4 +64,11 @@ public interface WmScorePackageStatusService extends IService<WmScorePackageStat
 	 * @return
 	 */
 	List<Map<String, String>> getDeptReceiveUserList(String deptId, String packageType1, String packageType2);
+
+	/**
+	 * 批量审核
+	 * @param statusBatch 批量审核
+	 * @return 批量审核结果
+	 */
+	Map<String,Integer> approvalStatusBatch(WmScorePackageStatusBatch statusBatch);
 }

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

@@ -16,6 +16,7 @@
  */
 package com.qunzhixinxi.hnqz.admin.service.impl;
 
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.csp.sentinel.util.StringUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -24,6 +25,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qunzhixinxi.hnqz.admin.api.entity.WmScorePackageStatusBatch;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackageStatus;
 import com.qunzhixinxi.hnqz.admin.entity.WmTask;
@@ -34,14 +36,17 @@ import com.qunzhixinxi.hnqz.admin.mapper.WmScorePackageMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmScorePackageStatusMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmTaskMapper;
 import com.qunzhixinxi.hnqz.admin.service.WmScorePackageStatusService;
+import com.qunzhixinxi.hnqz.common.core.constant.CommonConstants;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -52,6 +57,7 @@ import java.util.stream.Collectors;
  * @author pigx code generator
  * @date 2020-07-17 23:32:01
  */
+@Slf4j
 @Service
 @AllArgsConstructor
 public class WmScorePackageStatusServiceImpl extends ServiceImpl<WmScorePackageStatusMapper, WmScorePackageStatus> implements WmScorePackageStatusService {
@@ -415,4 +421,153 @@ public class WmScorePackageStatusServiceImpl extends ServiceImpl<WmScorePackageS
 	public List<Map<String, String>> getDeptReceiveUserList(String deptId, String packageType1, String packageType2) {
 		return wmScorePackageStatusMapper.getDeptReceiveUserList(deptId, packageType1, packageType2);
 	}
+
+	/**
+	 * 批量审核
+	 * @param statusBatch 批量审核
+	 * @return 审核结果
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public Map<String, Integer> approvalStatusBatch(WmScorePackageStatusBatch statusBatch) {
+
+
+		// 获取批量操作id集合
+		List<Integer> idList =
+				StrUtil.split(statusBatch.getBatchIds(), StrUtil.COMMA)
+						.stream()
+						.map(Integer::parseInt)
+						.collect(Collectors.toList());
+
+		Map<String, List<WmScorePackageStatus>> collect = this.listByIds(idList).stream().collect(Collectors.groupingBy(WmScorePackageStatus::getPackageId));
+
+		int operation = 0;
+		int remain = 0;
+		for (Map.Entry<String, List<WmScorePackageStatus>> entity : collect.entrySet()){
+
+			List<WmScorePackageStatus> val = entity.getValue();
+
+			if (val.size() > 1){
+				remain++;
+				if (WmScorePackageStatusBatch.ApprovalStatus.REJECTED.equals(statusBatch.getStatus())){
+					for (WmScorePackageStatus status : val){
+						oneByOne(status, statusBatch.getStatus());
+					}
+				}
+			} else {
+				oneByOne(val.get(0), statusBatch.getStatus());
+				operation++;
+			}
+
+
+		}
+
+		// 封装结果实体
+		Map<String, Integer> result = new HashMap<>(2);
+		result.put("operation", operation);
+		result.put("remain", remain);
+		return result;
+	}
+
+	private Integer oneByOne(WmScorePackageStatus status, WmScorePackageStatusBatch.ApprovalStatus approvalStatus) {
+
+		int res = 0;
+
+		// 获取积分包
+		WmScorePackage wmScorePackage = wmScorePackageMapper.selectById(status.getPackageId());
+
+
+		log.warn("开始审批,id:[{}], packageId:[{}]", status, wmScorePackage.getId());
+		//定额
+		if (StrUtil.equals("1", wmScorePackage.getPackageType1())) {
+			//定额包一人一包,所以score=userscore
+			status.setUserScore(String.valueOf(wmScorePackage.getScore()));
+			status.setTaskNum(0);
+		} else {
+			status.setTaskNum(wmScorePackage.getTaskNum());
+			status.setUserScore(String.valueOf(wmScorePackage.getUserScore()));
+		}
+
+		status.setUpdateTime(LocalDateTime.now());
+		status.setUserId(null);
+
+		switch (approvalStatus) {
+			case PASSED:
+				status.setStatus("2");
+				status.setTaskAddFlag("1");
+				//进行中
+				wmScorePackage.setScorePackageStatus("3");
+				// 获取全部的领包记录
+				List<WmScorePackageStatus> sList =
+						this.list(Wrappers.<WmScorePackageStatus>lambdaQuery()
+								.eq(WmScorePackageStatus::getPackageId, wmScorePackage.getId())
+								.eq(WmScorePackageStatus::getDelFlag, CommonConstants.STATUS_NORMAL)
+								.eq(WmScorePackageStatus::getEnableFlag, CommonConstants.STATUS_NORMAL)
+						);
+
+				int targetNum = wmScorePackage.getUserNum() == null ? 1 : wmScorePackage.getUserNum();
+				// 如果领取记录不大于可领取数
+				if (sList.size() <= targetNum) {
+					this.update(Wrappers.<WmScorePackageStatus>lambdaUpdate()
+							.set(WmScorePackageStatus::getStatus, "3")//审核不通过
+							.set(WmScorePackageStatus::getTaskAddFlag, "0")//不允许新增任务
+							.eq(WmScorePackageStatus::getPackageId, status.getPackageId())
+							.eq(WmScorePackageStatus::getStatus, "1")
+							.eq(WmScorePackageStatus::getDelFlag, CommonConstants.STATUS_NORMAL)
+							.eq(WmScorePackageStatus::getEnableFlag, CommonConstants.STATUS_NORMAL)
+					);
+					wmScorePackage.setUpdateTime(LocalDateTime.now());
+					wmScorePackage.setReceiveDate(LocalDateTime.now());
+					wmScorePackage.setIsReceive("1");//不允许接单
+					wmScorePackageMapper.updateById(wmScorePackage);
+				}
+				break;
+			case REJECTED:
+				status.setStatus("3");
+				status.setTaskAddFlag("0");//不可以新增任务
+				status.setUserId(null);
+				break;
+			default:
+				res = -1;
+
+		}
+
+		this.updateById(status);
+
+
+		int total = this.count(Wrappers.<WmScorePackageStatus>lambdaQuery()
+				.eq(WmScorePackageStatus::getPackageId, status.getPackageId())
+				.eq(WmScorePackageStatus::getStatus, "2")
+				.eq(WmScorePackageStatus::getDelFlag, CommonConstants.STATUS_NORMAL)
+				.eq(WmScorePackageStatus::getEnableFlag, CommonConstants.STATUS_NORMAL)
+		);
+
+		//有人接单成功
+		if (total >= 1) {
+			wmScorePackage.setScorePackageStatus("3");//进行中
+			if (total >= wmScorePackage.getUserNum()) {//人数已满
+				wmScorePackage.setIsReceive("1");//不允许接单
+			}
+		}
+		//没有人接单成功
+		else {
+
+			int total1 =
+					this.count(Wrappers.<WmScorePackageStatus>lambdaQuery().eq(WmScorePackageStatus::getPackageId,
+							status.getPackageId()
+					).eq(WmScorePackageStatus::getStatus, "1"));
+			if (total1 == 0) {
+				wmScorePackage.setScorePackageStatus("1");//已分派待申领
+			} else {
+				wmScorePackage.setScorePackageStatus("2");//已申领待审批
+			}
+
+		}
+
+		wmScorePackageMapper.updateById(wmScorePackage);
+
+		return res;
+	}
+
+
 }

+ 11 - 0
pom.xml

@@ -311,5 +311,16 @@
 				<profiles.daemon.quartz.port>5007</profiles.daemon.quartz.port>
 			</properties>
 		</profile>
+		<profile>
+			<id>local</id>
+			<properties>
+				<profiles.active>local</profiles.active>
+				<profiles.namespace>4f0d7def-4521-48aa-9357-fc970756c195</profiles.namespace>
+				<profiles.auth.port>3000</profiles.auth.port>
+				<profiles.gateway.port>9999</profiles.gateway.port>
+				<prefiles.upms.biz.port>4000</prefiles.upms.biz.port>
+				<profiles.daemon.quartz.port>5007</profiles.daemon.quartz.port>
+			</properties>
+		</profile>
 	</profiles>
 </project>