|
@@ -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.entity.*;
|
|
|
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.mapper.WmReportMapper;
|
|
|
import com.qunzhixinxi.hnqz.admin.mapper.WmScorePackageMapper;
|
|
@@ -63,7 +65,9 @@ import java.time.LocalDateTime;
|
|
|
import java.time.LocalTime;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.ConcurrentHashMap;
|
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
+import java.util.concurrent.atomic.AtomicReference;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -80,6 +84,8 @@ public class WmTaskServiceImpl extends ServiceImpl<WmTaskMapper, WmTask> impleme
|
|
|
private final WmTaskMapper wmTaskMapper;
|
|
|
private final WmReportMapper wmReportMapper;
|
|
|
private final SysDeptService sysDeptService;
|
|
|
+ private final SysDeptSubService sysDeptSubService;
|
|
|
+ private final MonitoringIndicatorService monitoringIndicatorService;
|
|
|
private final WmScorePackageService wmScorePackageService;
|
|
|
private final WmScorePackageMapper wmScorePackageMapper;
|
|
|
private final WmTaskContentMapper wmTaskContentMapper;
|
|
@@ -1791,12 +1797,23 @@ public class WmTaskServiceImpl extends ServiceImpl<WmTaskMapper, WmTask> impleme
|
|
|
errorMap(errorMap, info, String.join(";", idList));
|
|
|
|
|
|
} 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;
|
|
|
int outCapacity = evidenceDTOS.size() - scorePackage.getTaskNum();
|
|
|
- AtomicInteger index = new AtomicInteger(0);
|
|
|
- evidenceDTOS.stream().forEach(commonEvidenceDTO -> {
|
|
|
+ ConcurrentHashMap<SysUser, Integer> indexMap = new ConcurrentHashMap(sourceList.size());
|
|
|
+ ConcurrentHashMap<SysUser, BigDecimal> preUserSettleAmountMap = new ConcurrentHashMap(sourceList.size());
|
|
|
+ evidenceDTOS.forEach(commonEvidenceDTO -> {
|
|
|
// 校验结算用户是否存在
|
|
|
SysUser user = userService.getOne(Wrappers.<SysUser>lambdaQuery()
|
|
|
.eq(SysUser::getUsername, commonEvidenceDTO.getUsername())
|
|
@@ -1810,29 +1827,28 @@ public class WmTaskServiceImpl extends ServiceImpl<WmTaskMapper, WmTask> impleme
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- if (outCapacity > 0) {
|
|
|
- if (index.getAndIncrement() >= outCapacity) {
|
|
|
- log.error("超出设定任务数");
|
|
|
- errorMap(errorMap, "超出设定任务数", commonEvidenceDTO.getId());
|
|
|
- return;
|
|
|
- }
|
|
|
- } else {
|
|
|
- // 校验任务数
|
|
|
- List<WmTask> wmTasks = wmTaskMapper.selectList(Wrappers.<WmTask>lambdaQuery()
|
|
|
- .eq(WmTask::getScorePackageId, scorePackage.getId())
|
|
|
- .eq(WmTask::getTaskUserId, user.getUserId())
|
|
|
- .eq(WmTask::getDelFlag, DelEnum.NOT_DEL.val())
|
|
|
- .eq(WmTask::getEnableFlag, EnableEnum.ENABLE.val())
|
|
|
- // 审核通过
|
|
|
- .eq(WmTask::getTaskStatus, "3")
|
|
|
- );
|
|
|
- if (CollectionUtils.isNotEmpty(wmTasks) && (scorePackage.getTaskNum() - wmTasks.size() <= index.getAndIncrement())) {
|
|
|
- log.error("超出设定任务数");
|
|
|
- errorMap(errorMap, "超出设定任务数", commonEvidenceDTO.getId());
|
|
|
- return;
|
|
|
- }
|
|
|
+ // 校验任务数
|
|
|
+ int index = 1;
|
|
|
+ if (indexMap.containsKey(user)) {
|
|
|
+ index = indexMap.get(user) + 1;
|
|
|
+ }
|
|
|
+ indexMap.put(user, index);
|
|
|
+ List<WmTask> wmTasks = wmTaskMapper.selectList(Wrappers.<WmTask>lambdaQuery()
|
|
|
+ .eq(WmTask::getScorePackageId, scorePackage.getId())
|
|
|
+ .eq(WmTask::getTaskUserId, user.getUserId())
|
|
|
+ .eq(WmTask::getDelFlag, DelEnum.NOT_DEL.val())
|
|
|
+ .eq(WmTask::getEnableFlag, EnableEnum.ENABLE.val())
|
|
|
+ // 审核通过
|
|
|
+ .eq(WmTask::getTaskStatus, "3")
|
|
|
+ );
|
|
|
+
|
|
|
+ if (scorePackage.getTaskNum() - wmTasks.size() < index ){
|
|
|
+ log.error("超出设定任务数");
|
|
|
+ errorMap(errorMap, "超出设定任务数", commonEvidenceDTO.getId());
|
|
|
+ return;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
// 校验用户是否存在领包记录
|
|
|
WmScorePackageStatus scorePackageStatus =
|
|
|
wmScorePackageStatusService.getOne(Wrappers.<WmScorePackageStatus>lambdaQuery()
|
|
@@ -1865,6 +1881,20 @@ public class WmTaskServiceImpl extends ServiceImpl<WmTaskMapper, WmTask> impleme
|
|
|
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());
|
|
|
|
|
@@ -1885,6 +1915,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;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 积分包信息校验
|
|
|
*
|