浏览代码

fix(service): 补全遥领批量上传证据链结算限额(每人每月和渠道结算)

shc 4 年之前
父节点
当前提交
f0a6b19a8e

+ 82 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmTaskServiceImpl.java

@@ -35,6 +35,8 @@ import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
 import com.qunzhixinxi.hnqz.admin.entity.*;
 import com.qunzhixinxi.hnqz.admin.entity.*;
 import com.qunzhixinxi.hnqz.admin.entity.dto.CommonEvidenceDTO;
 import com.qunzhixinxi.hnqz.admin.entity.dto.CommonEvidenceDTO;
+import com.qunzhixinxi.hnqz.admin.entity.input.SettleAmountMonitorInput;
+import com.qunzhixinxi.hnqz.admin.entity.output.SettleAmountMonitorOutput;
 import com.qunzhixinxi.hnqz.admin.enums.*;
 import com.qunzhixinxi.hnqz.admin.enums.*;
 import com.qunzhixinxi.hnqz.admin.mapper.WmReportMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmReportMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmScorePackageMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmScorePackageMapper;
@@ -63,7 +65,9 @@ import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 /**
 /**
@@ -80,6 +84,8 @@ public class WmTaskServiceImpl extends ServiceImpl<WmTaskMapper, WmTask> impleme
 	private final WmTaskMapper wmTaskMapper;
 	private final WmTaskMapper wmTaskMapper;
 	private final WmReportMapper wmReportMapper;
 	private final WmReportMapper wmReportMapper;
 	private final SysDeptService sysDeptService;
 	private final SysDeptService sysDeptService;
+	private final SysDeptSubService sysDeptSubService;
+	private final MonitoringIndicatorService monitoringIndicatorService;
 	private final WmScorePackageService wmScorePackageService;
 	private final WmScorePackageService wmScorePackageService;
 	private final WmScorePackageMapper wmScorePackageMapper;
 	private final WmScorePackageMapper wmScorePackageMapper;
 	private final WmTaskContentMapper wmTaskContentMapper;
 	private final WmTaskContentMapper wmTaskContentMapper;
@@ -1791,12 +1797,23 @@ public class WmTaskServiceImpl extends ServiceImpl<WmTaskMapper, WmTask> impleme
 			errorMap(errorMap, info, String.join(";", idList));
 			errorMap(errorMap, info, String.join(";", idList));
 
 
 		} else {
 		} else {
+			//校验创建人结算信息税邦云信息是否配置完全
+			SysDeptSub sysDeptSub = sysDeptSubService.getOne(Wrappers.<SysDeptSub>lambdaQuery()
+					.eq(SysDeptSub::getDeptId, creator.getDeptId())
+					.eq(SysDeptSub::getSubjectType, SubjectTypeEnum.TYPE_SHUIBANGYUN.getCode())
+					.eq(SysDeptSub::getEnableFlag, SubjectTypeEnum.ENABLE_FLAG_TRUE.getCode())
+			);
+			if (null == sysDeptSub || StringUtils.isBlank(sysDeptSub.getAppId())) {
+				List<String> idList = sourceList.stream().map(CommonEvidenceDTO::getId).collect(Collectors.toList());
+				errorMap(errorMap, "人员所在机构未配置结算信息", String.join(";", idList));
+			}
 
 
 			// 校验证据链信息,并封装正确的
 			// 校验证据链信息,并封装正确的
 			List<CommonEvidenceDTO> evidenceDTOS = sourceList;
 			List<CommonEvidenceDTO> evidenceDTOS = sourceList;
 			int outCapacity = evidenceDTOS.size() - scorePackage.getTaskNum();
 			int outCapacity = evidenceDTOS.size() - scorePackage.getTaskNum();
 			AtomicInteger index = new AtomicInteger(0);
 			AtomicInteger index = new AtomicInteger(0);
-			evidenceDTOS.stream().forEach(commonEvidenceDTO -> {
+			ConcurrentHashMap<SysUser, BigDecimal> preUserSettleAmountMap = new ConcurrentHashMap(sourceList.size());
+			evidenceDTOS.forEach(commonEvidenceDTO -> {
 				// 校验结算用户是否存在
 				// 校验结算用户是否存在
 				SysUser user = userService.getOne(Wrappers.<SysUser>lambdaQuery()
 				SysUser user = userService.getOne(Wrappers.<SysUser>lambdaQuery()
 						.eq(SysUser::getUsername, commonEvidenceDTO.getUsername())
 						.eq(SysUser::getUsername, commonEvidenceDTO.getUsername())
@@ -1865,6 +1882,20 @@ public class WmTaskServiceImpl extends ServiceImpl<WmTaskMapper, WmTask> impleme
 					return;
 					return;
 				}
 				}
 
 
+				// 校验结算限制
+				BigDecimal tmp = commonEvidenceDTO.getAmount();
+				if (preUserSettleAmountMap.containsKey(user)) {
+					tmp = tmp.add(preUserSettleAmountMap.get(user));
+				}
+				preUserSettleAmountMap.put(user, tmp);
+
+				errorInfo = checkoutSettleLimit(user, sysDeptSub.getLimitAmount(), tmp);
+				if (StringUtils.isNotEmpty(errorInfo)) {
+					log.error(errorInfo);
+					errorMap(errorMap, errorInfo, commonEvidenceDTO.getId());
+					return;
+				}
+
 				// 获取发票类目
 				// 获取发票类目
 				InvoiceInfo invoiceInfo = InvoiceInfo.resolveByCategory(commonEvidenceDTO.getInvoiceCategory());
 				InvoiceInfo invoiceInfo = InvoiceInfo.resolveByCategory(commonEvidenceDTO.getInvoiceCategory());
 
 
@@ -1885,6 +1916,56 @@ public class WmTaskServiceImpl extends ServiceImpl<WmTaskMapper, WmTask> impleme
 		}
 		}
 	}
 	}
 
 
+	/**
+	 * 校验结算限制
+	 *
+	 * @param user         被校验者
+	 * @param limitAmount  限制金额
+	 * @param settleAmount 本次上传证据链累计金额
+	 * @return 校验错误信息,如果没有错误返回{@code null}
+	 */
+	private String checkoutSettleLimit(SysUser user, BigDecimal limitAmount, BigDecimal settleAmount) {
+
+		String info = null;
+
+		SettleAmountMonitorInput monitorInput = SettleAmountMonitorInput.fromIdCard(Collections.singletonList(user
+				.getIdCardNumber()), null, SubjectTypeEnum.TYPE_SHUIBANGYUN.getCode());
+		List<SettleAmountMonitorOutput> monitorOutputList = sysDeptSubService.getSettleAmountMonitor(monitorInput);
+
+		SettleAmountMonitorInput deptMonitorInput = SettleAmountMonitorInput.fromUserId(Collections.singletonList(String
+				.valueOf(user.getUserId())), null, SubjectTypeEnum.TYPE_SHUIBANGYUN.getCode());
+		List<SettleAmountMonitorOutput> deptAmountMonitor = sysDeptSubService.getDeptAmountMonitor(deptMonitorInput);
+
+		SettleAmountMonitorOutput monitorOutput = monitorOutputList.stream().filter(item -> item.getIdCardNumber()
+				.equals(user.getIdCardNumber())).findFirst().orElse(null);
+
+		SettleAmountMonitorOutput deptMonitorOutput = deptAmountMonitor.stream().filter(item -> item.getUserId()
+				.equals(String.valueOf(user.getUserId()))).findFirst().orElse(null);
+
+		MonitoringIndicator monitoringIndicator = monitoringIndicatorService.getBySubType(SubjectTypeEnum.TYPE_SHUIBANGYUN
+				.getCode());
+		BigDecimal monitoringLimit = monitoringIndicator.getLimitAmount();
+		BigDecimal monitorAmount = settleAmount;
+		BigDecimal deptMonitorAmount = settleAmount;
+		if (null != monitorOutput) {
+			monitorAmount = monitorAmount.add(monitorOutput.getTotalAmount());
+		}
+		if (null != deptMonitorOutput) {
+			deptMonitorAmount = deptMonitorAmount.add(deptMonitorOutput.getTotalAmount());
+		}
+		if (null != limitAmount) {
+			if (deptMonitorAmount.compareTo(limitAmount) > 0) {
+				info = "超过当月限额";
+			}
+		}
+		if (null != monitoringLimit) {
+			if (monitorAmount.compareTo(monitoringLimit) > 0) {
+				info = "超过结算渠道限额";
+			}
+		}
+		return info;
+	}
+
 	/**
 	/**
 	 * 积分包信息校验
 	 * 积分包信息校验
 	 *
 	 *