|
@@ -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;
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 积分包信息校验
|
|
* 积分包信息校验
|
|
*
|
|
*
|