Browse Source

feat: 多人积分包-联调结算

李学松 2 years ago
parent
commit
225cff7732

+ 25 - 7
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmTaskController.java

@@ -45,6 +45,7 @@ import com.qunzhixinxi.hnqz.admin.entity.WmDaDrugEnt;
 import com.qunzhixinxi.hnqz.admin.entity.WmDaHospital;
 import com.qunzhixinxi.hnqz.admin.entity.WmDaHospital;
 import com.qunzhixinxi.hnqz.admin.entity.WmReport;
 import com.qunzhixinxi.hnqz.admin.entity.WmReport;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
+import com.qunzhixinxi.hnqz.admin.entity.WmScorePackageSettleNote;
 import com.qunzhixinxi.hnqz.admin.entity.WmTask;
 import com.qunzhixinxi.hnqz.admin.entity.WmTask;
 import com.qunzhixinxi.hnqz.admin.entity.WmTaskContent;
 import com.qunzhixinxi.hnqz.admin.entity.WmTaskContent;
 import com.qunzhixinxi.hnqz.admin.entity.WmTaskRule;
 import com.qunzhixinxi.hnqz.admin.entity.WmTaskRule;
@@ -56,7 +57,6 @@ import com.qunzhixinxi.hnqz.admin.entity.model.excel.CommonTaskExcelModel;
 import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
 import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
 import com.qunzhixinxi.hnqz.admin.enums.TaskStatusEnum;
 import com.qunzhixinxi.hnqz.admin.enums.TaskStatusEnum;
 import com.qunzhixinxi.hnqz.admin.mapper.WmTaskMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmTaskMapper;
-import com.qunzhixinxi.hnqz.admin.service.ReportExportService;
 import com.qunzhixinxi.hnqz.admin.service.SysDeptService;
 import com.qunzhixinxi.hnqz.admin.service.SysDeptService;
 import com.qunzhixinxi.hnqz.admin.service.SysFileService;
 import com.qunzhixinxi.hnqz.admin.service.SysFileService;
 import com.qunzhixinxi.hnqz.admin.service.SysUserService;
 import com.qunzhixinxi.hnqz.admin.service.SysUserService;
@@ -64,8 +64,8 @@ import com.qunzhixinxi.hnqz.admin.service.WmDaAgentService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaDistributionService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaDistributionService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaDrugEntService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaDrugEntService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaHospitalService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaHospitalService;
-import com.qunzhixinxi.hnqz.admin.service.WmDaPharmacyService;
 import com.qunzhixinxi.hnqz.admin.service.WmScorePackageService;
 import com.qunzhixinxi.hnqz.admin.service.WmScorePackageService;
+import com.qunzhixinxi.hnqz.admin.service.WmScorePackageSettleNoteService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskContentService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskContentService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskRuleService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskRuleService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskService;
@@ -125,8 +125,8 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import java.util.Set;
 import java.util.Set;
-import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 
 
@@ -149,6 +149,8 @@ public class WmTaskController {
 
 
 	private final WmScorePackageService wmScorePackageService;
 	private final WmScorePackageService wmScorePackageService;
 
 
+	private final WmScorePackageSettleNoteService wmScorePackageSettleNoteService;
+
 	private final SysDeptService sysDeptService;
 	private final SysDeptService sysDeptService;
 
 
 	private final SysUserService sysUserService;
 	private final SysUserService sysUserService;
@@ -167,10 +169,6 @@ public class WmTaskController {
 
 
 	private final WmTaskContentService wmTaskContentService;
 	private final WmTaskContentService wmTaskContentService;
 
 
-	private final ReportExportService reportExportService;
-
-	private final WmDaPharmacyService wmDaPharmacyService;
-
 	private final SysFileService sysFileService;
 	private final SysFileService sysFileService;
 
 
 	private final RabbitMqClient rabbitMqClient;
 	private final RabbitMqClient rabbitMqClient;
@@ -1177,6 +1175,26 @@ public class WmTaskController {
 		queryWrapper.orderByDesc("t.lookinto_date");
 		queryWrapper.orderByDesc("t.lookinto_date");
 		IPage<WmTask> taskIPage = wmTaskMapper.listWmTaskByWrapper(new Page<>(page.getCurrent(), page.getSize()), queryWrapper);
 		IPage<WmTask> taskIPage = wmTaskMapper.listWmTaskByWrapper(new Page<>(page.getCurrent(), page.getSize()), queryWrapper);
 
 
+		// 结算列表加个结算状态
+		if (TaskStatusEnum.APPROVED.equals(taskStatus)) {
+			if (CollUtil.isNotEmpty(taskIPage.getRecords())) {
+				Set<String> packageIds = taskIPage.getRecords().stream().map(WmTask::getScorePackageId).collect(Collectors.toSet());
+				List<WmScorePackageSettleNote> settleNoteList = wmScorePackageSettleNoteService.list(Wrappers.<WmScorePackageSettleNote>lambdaQuery()
+						.in(WmScorePackageSettleNote::getPackageId, packageIds));
+				if (CollUtil.isNotEmpty(settleNoteList)) {
+					Map<String, WmScorePackageSettleNote> settleNoteMap = settleNoteList.stream()
+							.filter(note -> StrUtil.isNotBlank(note.getTaskId()))
+							.collect(Collectors.toMap(WmScorePackageSettleNote::getTaskId, Function.identity()));
+					taskIPage.getRecords().forEach(wmTask -> {
+						WmScorePackageSettleNote settleNote = settleNoteMap.get(wmTask.getId());
+						if (settleNote != null) {
+							wmTask.setSettleStatus(settleNote.getSettleNoteStatus());
+						}
+					});
+				}
+			}
+		}
+
 		return R.ok(taskIPage);
 		return R.ok(taskIPage);
 	}
 	}
 
 

+ 6 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmTask.java

@@ -261,4 +261,10 @@ public class WmTask extends Model<WmTask> {
 	 */
 	 */
 	@TableField(exist = false)
 	@TableField(exist = false)
 	private String username;
 	private String username;
+
+	/**
+	 * 结算状态
+	 */
+	@TableField(exist = false)
+	private Integer settleStatus;
 }
 }

+ 64 - 39
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmPayOffServiceImpl.java

@@ -258,11 +258,16 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 
 
 		// user-taskList map
 		// user-taskList map
 		Map<String, List<WmTask>> userTaskMap = taskList.stream().collect(Collectors.groupingBy(WmTask::getTaskUserId));
 		Map<String, List<WmTask>> userTaskMap = taskList.stream().collect(Collectors.groupingBy(WmTask::getTaskUserId));
+		// taskId-task Map
+		Map<String, WmTask> taskMap = taskList.stream().collect(Collectors.toMap(WmTask::getId, Function.identity()));
 
 
 		// 查询settleNote
 		// 查询settleNote
 		List<WmScorePackageSettleNote> notes = noteService.list(Wrappers.<WmScorePackageSettleNote>lambdaQuery()
 		List<WmScorePackageSettleNote> notes = noteService.list(Wrappers.<WmScorePackageSettleNote>lambdaQuery()
 				.in(WmScorePackageSettleNote::getTaskId, Arrays.asList(taskIds))
 				.in(WmScorePackageSettleNote::getTaskId, Arrays.asList(taskIds))
 				.eq(WmScorePackageSettleNote::getPackageId, scorePackageId));
 				.eq(WmScorePackageSettleNote::getPackageId, scorePackageId));
+		Map<String, WmScorePackageSettleNote> taskSettleNoteMap = notes.stream()
+				.filter(note -> StrUtil.isNotBlank(note.getTaskId()))
+				.collect(Collectors.toMap(WmScorePackageSettleNote::getTaskId, Function.identity()));
 
 
 		// 查询user
 		// 查询user
 		Set<String> allUserIdSet = new HashSet<>();
 		Set<String> allUserIdSet = new HashSet<>();
@@ -271,56 +276,76 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 		List<SysUser> sysUsers = sysUserMapper.selectBatchIds(allUserIdSet);
 		List<SysUser> sysUsers = sysUserMapper.selectBatchIds(allUserIdSet);
 		Map<Integer, SysUser> userMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity()));
 		Map<Integer, SysUser> userMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity()));
 
 
-		if (CollectionUtils.isEmpty(notes) || notes.size() < taskIds.length) {
-			// 查询领包记录
-			List<WmScorePackageStatus> statusList = wmScorePackageStatusService.list(Wrappers.<WmScorePackageStatus>lambdaQuery()
-					.eq(WmScorePackageStatus::getPackageId, scorePackageId)
-					.in(WmScorePackageStatus::getUserId, userTaskMap.keySet())
-					.eq(WmScorePackageStatus::getStatus, PackageStatusEnum.APPROVED.val()));
-			Map<String, WmScorePackageStatus> userPackageStatusMap = statusList.stream()
-					.collect(Collectors.toMap(WmScorePackageStatus::getUserId, Function.identity()));
-
-			for (String userId : userPackageStatusMap.keySet()) {
-				WmScorePackageSettleNote note = new WmScorePackageSettleNote();
-				note.setSettleNo(IdUtil.fastSimpleUUID());
-				note.setPackageId(scorePackageId);
+		// 页面回显的结算对象列表
+		List<WmScorePackageSettleNote> userNotes = new ArrayList<>();
+		// 用于结算的note参数
+		List<WmScorePackageSettleNote> toSettleNotes = new ArrayList<>();
 
 
-				// 计算每个人的总任务积分
-				List<WmTask> userTasks = userTaskMap.get(userId);
-				Integer userTotalScore = userTasks.stream().map(WmTask::getScore).reduce(0, Integer::sum);
-				note.setSettleAmount(BigDecimal.valueOf(userTotalScore));
-				note.setDiscount(BigDecimal.ONE);
-				note.setUserId(userId);
-				note.setSettleNoteStatus(Integer.valueOf(SettleStatusEnum.SETTLE_STATUS_NOTSETTLE.getVal()));
+		if (wmScorePackage.getLocation() != null) {
+			wmScorePackage.setSubjectLocation(wmScorePackage.getLocation().name());
+		}
+		if (StrUtil.isBlank(wmScorePackage.getSubjectLocation())){
+			return R.failed("结算积分包未勾选税源地");
+		}
 
 
-				SysUser noteUser = userMap.get(Integer.parseInt(userId));
-				note.setRealName(noteUser.getRealname());
-				note.setIdCardNumber(noteUser.getIdCardNumber());
-				notes.add(note);
-			}
-			if (wmScorePackage.getLocation() != null) {
-				wmScorePackage.setSubjectLocation(wmScorePackage.getLocation().name());
+		// 按结算对象分组,统计分别对应的结算信息
+		for (String userId : userTaskMap.keySet()) {
+			WmScorePackageSettleNote oneUserNote = new WmScorePackageSettleNote();
+			List<WmTask> userTasks = userTaskMap.get(userId);
+
+			// 计算每个人的总任务积分
+			BigDecimal userTotalSettleAmount = BigDecimal.ZERO;
+			for (WmTask task : userTasks) {
+				WmScorePackageSettleNote settleNote = taskSettleNoteMap.get(task.getId());
+				// 存在note,则取note金额,否则取task的积分
+				if (settleNote != null) {
+					userTotalSettleAmount = userTotalSettleAmount.add(settleNote.getSettleAmount());
+				} else {
+					userTotalSettleAmount = userTotalSettleAmount.add(BigDecimal.valueOf(task.getScore()));
+				}
 			}
 			}
-		} else {
 
 
-			notes.forEach(item -> {
-				SysUser user = userMap.get(Integer.parseInt(item.getUserId()));
-				item.setRealName(user.getRealname());
-				item.setIdCardNumber(user.getIdCardNumber());
-				if (item.getSubjectLocation() != null){
-					wmScorePackage.setSubjectLocation(item.getSubjectLocation().name());
-				}
-			});
+			oneUserNote.setPackageId(scorePackageId);
+			oneUserNote.setSettleAmount(userTotalSettleAmount);
+			oneUserNote.setDiscount(BigDecimal.ONE);
+			oneUserNote.setUserId(userId);
+			oneUserNote.setSettleNoteStatus(Integer.valueOf(SettleStatusEnum.SETTLE_STATUS_NOTSETTLE.getVal()));
 
 
-			if (StrUtil.isBlank(wmScorePackage.getSubjectLocation())){
-				return R.failed("结算积分包未勾选税源地");
+			SysUser noteUser = userMap.get(Integer.parseInt(userId));
+			oneUserNote.setRealName(noteUser.getRealname());
+			oneUserNote.setIdCardNumber(noteUser.getIdCardNumber());
+			userNotes.add(oneUserNote);
+		}
+
+		// 添加用于结算的note参数
+		for (String taskId : taskIds) {
+			WmScorePackageSettleNote note = new WmScorePackageSettleNote();
+			// note存在则直接获取
+			WmScorePackageSettleNote settleNote = taskSettleNoteMap.get(taskId);
+			if (settleNote != null) {
+				toSettleNotes.add(note);
+				continue;
 			}
 			}
 
 
+			// note不存在,取task中的信息作为结算信息
+			WmTask task = taskMap.get(taskId);
+			note.setSettleAmount(BigDecimal.valueOf(task.getScore()));
+			note.setSettleNo(IdUtil.fastSimpleUUID());
+			note.setPackageId(scorePackageId);
+			note.setDiscount(BigDecimal.ONE);
+			note.setUserId(task.getTaskUserId());
+			note.setSettleNoteStatus(Integer.valueOf(SettleStatusEnum.SETTLE_STATUS_NOTSETTLE.getVal()));
+			// user信息
+			SysUser noteUser = userMap.get(Integer.parseInt(task.getTaskUserId()));
+			note.setRealName(noteUser.getRealname());
+			note.setIdCardNumber(noteUser.getIdCardNumber());
+			toSettleNotes.add(note);
 		}
 		}
 
 
 		Map<String, Object> resultMap = new HashMap<>(3);
 		Map<String, Object> resultMap = new HashMap<>(3);
 		resultMap.put("wsp", wmScorePackage);
 		resultMap.put("wsp", wmScorePackage);
-		resultMap.put("notes", notes);
+		resultMap.put("notes", toSettleNotes);
+		resultMap.put("userNotes", userNotes);
 		// 显示实际完成积分值
 		// 显示实际完成积分值
 //		resultMap.put("finishScore", "0");
 //		resultMap.put("finishScore", "0");
 
 

+ 9 - 5
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmScorePackageSettleNoteServiceImpl.java

@@ -291,9 +291,11 @@ public class WmScorePackageSettleNoteServiceImpl extends ServiceImpl<WmScorePack
 			this.baseMapper.insert(entity);
 			this.baseMapper.insert(entity);
 		} else {
 		} else {
 			WmScorePackageSettleNote oldData = this.baseMapper.selectById(note.getId());
 			WmScorePackageSettleNote oldData = this.baseMapper.selectById(note.getId());
+			if (oldData == null) {
+				return R.failed("结算数据不存在,不能修改");
+			}
 
 
 			if (0 != oldData.getSettleNoteStatus()) {
 			if (0 != oldData.getSettleNoteStatus()) {
-
 				return R.failed("状态异常,不能修改");
 				return R.failed("状态异常,不能修改");
 			}
 			}
 			WmScorePackageSettleNote updateEntity = new WmScorePackageSettleNote();
 			WmScorePackageSettleNote updateEntity = new WmScorePackageSettleNote();
@@ -537,13 +539,13 @@ public class WmScorePackageSettleNoteServiceImpl extends ServiceImpl<WmScorePack
 
 
 		SysUser sysUser = sysUserService.getById(note.getUserId());
 		SysUser sysUser = sysUserService.getById(note.getUserId());
 
 
-		if (input.getSubjectLocation() == null) {
+		if (note.getSubjectLocation() == null) {
 			return R.failed(sysUser.getRealname() + "人员结算渠道不存在,不能结算");
 			return R.failed(sysUser.getRealname() + "人员结算渠道不存在,不能结算");
 		}
 		}
 
 
 		// 获取结算零工
 		// 获取结算零工
-		GigTypeEnum gigTypeEnum = input.getSubjectLocation().getGigType();
-		String subType = String.valueOf(input.getSubjectLocation().getGigType().getCode());
+		GigTypeEnum gigTypeEnum = note.getSubjectLocation().getGigType();
+		String subType = String.valueOf(note.getSubjectLocation().getGigType().getCode());
 
 
 		/**
 		/**
 		 * 结算配置信息
 		 * 结算配置信息
@@ -551,6 +553,7 @@ public class WmScorePackageSettleNoteServiceImpl extends ServiceImpl<WmScorePack
 		SysDeptSub condition = new SysDeptSub();
 		SysDeptSub condition = new SysDeptSub();
 		condition.setDeptId(sysDept.getDeptId());
 		condition.setDeptId(sysDept.getDeptId());
 		condition.setSubjectType(subType);
 		condition.setSubjectType(subType);
+		condition.setSubjectLocation(note.getSubjectLocation());
 		condition.setEnableFlag(SubjectTypeEnum.ENABLE_FLAG_TRUE.getCode());
 		condition.setEnableFlag(SubjectTypeEnum.ENABLE_FLAG_TRUE.getCode());
 		SysDeptSub sysDeptSub = sysDeptSubService.getOne(Wrappers.query(condition));
 		SysDeptSub sysDeptSub = sysDeptSubService.getOne(Wrappers.query(condition));
 
 
@@ -559,7 +562,7 @@ public class WmScorePackageSettleNoteServiceImpl extends ServiceImpl<WmScorePack
 		}
 		}
 
 
 		SysUserSub userSub = sysUserSubMapper.selectOne(Wrappers.<SysUserSub>lambdaQuery()
 		SysUserSub userSub = sysUserSubMapper.selectOne(Wrappers.<SysUserSub>lambdaQuery()
-				.eq(SysUserSub::getSubjectLocation, input.getSubjectLocation())
+				.eq(SysUserSub::getSubjectLocation, note.getSubjectLocation())
 				.eq(SysUserSub::getDeptId, sysUser.getDeptId())
 				.eq(SysUserSub::getDeptId, sysUser.getDeptId())
 				.eq(SysUserSub::getUserId, sysUser.getUserId())
 				.eq(SysUserSub::getUserId, sysUser.getUserId())
 		);
 		);
@@ -2534,6 +2537,7 @@ public class WmScorePackageSettleNoteServiceImpl extends ServiceImpl<WmScorePack
 			}
 			}
 		} catch (Exception e) {
 		} catch (Exception e) {
 			log.warn("自由职家结算提交失败: {}", note.getSettleNo());
 			log.warn("自由职家结算提交失败: {}", note.getSettleNo());
+			log.error("自由职家结算异常", e);
 			note.setUpdateTime(LocalDateTime.now());
 			note.setUpdateTime(LocalDateTime.now());
 			note.setSettleNoteStatus(DingEnum.NOTE_STATUS_FAIL.getType());
 			note.setSettleNoteStatus(DingEnum.NOTE_STATUS_FAIL.getType());