Browse Source

fix:优化提交策略

master
wang 2 days ago
parent
commit
8e634c53ec
  1. 55
      yun-admin/src/main/java/net/lab1024/sa/admin/module/cost/service/FirmReportsService.java
  2. 13
      yun-admin/src/main/java/net/lab1024/sa/admin/module/service/service/ServiceApplicationsService.java
  3. 7
      yun-admin/src/main/resources/mapper/cost/FirmReportsMapper.xml
  4. 9
      yun-base/src/main/resources/dev/yun-base.yaml

55
yun-admin/src/main/java/net/lab1024/sa/admin/module/cost/service/FirmReportsService.java

@ -6,6 +6,7 @@ import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
import net.lab1024.sa.admin.common.enums.ReviewEnum; import net.lab1024.sa.admin.common.enums.ReviewEnum;
import net.lab1024.sa.admin.module.cost.dao.FirmReportsDao; import net.lab1024.sa.admin.module.cost.dao.FirmReportsDao;
@ -27,6 +28,7 @@ import net.lab1024.sa.base.common.code.UnexpectedErrorCode;
import net.lab1024.sa.base.common.code.UserErrorCode; import net.lab1024.sa.base.common.code.UserErrorCode;
import net.lab1024.sa.base.common.domain.ValidateList; import net.lab1024.sa.base.common.domain.ValidateList;
import net.lab1024.sa.base.common.enumeration.UserTypeEnum; import net.lab1024.sa.base.common.enumeration.UserTypeEnum;
import net.lab1024.sa.base.common.exception.BusinessException;
import net.lab1024.sa.base.common.util.SmartBeanUtil; import net.lab1024.sa.base.common.util.SmartBeanUtil;
import net.lab1024.sa.base.common.util.SmartPageUtil; import net.lab1024.sa.base.common.util.SmartPageUtil;
import net.lab1024.sa.base.common.domain.ResponseDTO; import net.lab1024.sa.base.common.domain.ResponseDTO;
@ -34,6 +36,7 @@ import net.lab1024.sa.base.common.domain.PageResult;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import net.lab1024.sa.base.module.support.dict.service.DictService; import net.lab1024.sa.base.module.support.dict.service.DictService;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -287,27 +290,47 @@ public class FirmReportsService {
/** /**
* 批量创建缺失季度记录(空白报表) * 批量创建缺失季度记录(空白报表)
*/ */
@Transactional(rollbackFor = Exception.class)
public ResponseDTO<String> batchCreateMissing(Integer firmId, Integer year, List<Integer> quarters) { public ResponseDTO<String> batchCreateMissing(Integer firmId, Integer year, List<Integer> quarters) {
if (firmId == null || year == null || quarters == null || quarters.isEmpty()) { if (firmId == null || year == null || quarters == null || quarters.isEmpty()) {
return ResponseDTO.userErrorParam("参数不能为空"); return ResponseDTO.userErrorParam("参数不能为空");
} }
List<Integer> distinctQuarters = quarters.stream().distinct().collect(Collectors.toList());
if (distinctQuarters.stream().anyMatch(quarter -> quarter == null || quarter < 1 || quarter > 4)) {
return ResponseDTO.userErrorParam("季度必须为1至4");
}
List<Integer> existingQuarters = distinctQuarters.stream()
.filter(quarter -> firmReportsDao.selectList(String.valueOf(quarter), year, firmId) != null)
.collect(Collectors.toList());
if (!existingQuarters.isEmpty()) {
String quarterNames = existingQuarters.stream()
.map(quarter -> "第" + quarter + "季度")
.collect(Collectors.joining("、"));
return ResponseDTO.userErrorParam(year + "年" + quarterNames + "报表已存在,请刷新列表后重试");
}
RequestEmployee requestUser = AdminRequestUtil.getRequestUser(); RequestEmployee requestUser = AdminRequestUtil.getRequestUser();
for (Integer quarter : quarters) { try {
FirmReportsEntity entity = new FirmReportsEntity(); for (Integer quarter : distinctQuarters) {
entity.setFirmId(firmId); FirmReportsEntity entity = new FirmReportsEntity();
entity.setDeclareYear(year); entity.setFirmId(firmId);
entity.setDeclareQuarter(String.valueOf(quarter)); entity.setDeclareYear(year);
entity.setUserId(requestUser.getEmployeeId()); entity.setDeclareQuarter(String.valueOf(quarter));
entity.setApprovalStatus(0); entity.setUserId(requestUser.getEmployeeId());
entity.setDelFlag(0); entity.setApprovalStatus(0);
entity.setRevenue(BigDecimal.ZERO); entity.setDelFlag(0);
entity.setTotalCost(BigDecimal.ZERO); entity.setRevenue(BigDecimal.ZERO);
entity.setPublicWelfareCost(BigDecimal.ZERO); entity.setTotalCost(BigDecimal.ZERO);
entity.setCostIncomeRatio(BigDecimal.ZERO); entity.setPublicWelfareCost(BigDecimal.ZERO);
entity.setActualPublicWelfareCost(BigDecimal.ZERO); entity.setCostIncomeRatio(BigDecimal.ZERO);
entity.setActualCostIncomeRatio(BigDecimal.ZERO); entity.setActualPublicWelfareCost(BigDecimal.ZERO);
firmReportsDao.insert(entity); entity.setActualCostIncomeRatio(BigDecimal.ZERO);
firmReportsDao.insert(entity);
}
} catch (DuplicateKeyException exception) {
throw new BusinessException("部分季度报表已被创建,请刷新列表后重试");
} }
return ResponseDTO.ok(); return ResponseDTO.ok();
} }

13
yun-admin/src/main/java/net/lab1024/sa/admin/module/service/service/ServiceApplicationsService.java

@ -370,7 +370,7 @@ public class ServiceApplicationsService {
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public ResponseDTO<String> add(ServiceApplicationsAddForm addForm) { public ResponseDTO<String> add(ServiceApplicationsAddForm addForm) {
validateActivityEnd(addForm.getServiceEnd()); validateActivityTime(addForm.getServiceStart(), addForm.getServiceEnd());
ServiceApplicationsEntity serviceApplicationsEntity = SmartBeanUtil.copy(addForm, ServiceApplicationsEntity serviceApplicationsEntity = SmartBeanUtil.copy(addForm,
ServiceApplicationsEntity.class); ServiceApplicationsEntity.class);
@ -418,7 +418,7 @@ public class ServiceApplicationsService {
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public ResponseDTO<String> update(ServiceApplicationsUpdateForm updateForm) { public ResponseDTO<String> update(ServiceApplicationsUpdateForm updateForm) {
validateActivityEnd(updateForm.getServiceEnd()); validateActivityTime(updateForm.getServiceStart(), updateForm.getServiceEnd());
ServiceApplicationsEntity currentEntity = serviceApplicationsDao.selectById(updateForm.getApplicationId()); ServiceApplicationsEntity currentEntity = serviceApplicationsDao.selectById(updateForm.getApplicationId());
if (currentEntity == null) { if (currentEntity == null) {
throw new BusinessException("申报记录不存在"); throw new BusinessException("申报记录不存在");
@ -1005,7 +1005,7 @@ public class ServiceApplicationsService {
} }
} }
validateActivityEnd(addForm.getServiceEnd()); validateActivityTime(addForm.getServiceStart(), addForm.getServiceEnd());
// 1. 强校验:主申报人必须签署承诺书 // 1. 强校验:主申报人必须签署承诺书
Long currentUserId = AdminRequestUtil.getRequestUser().getUserId(); Long currentUserId = AdminRequestUtil.getRequestUser().getUserId();
@ -1094,7 +1094,7 @@ public class ServiceApplicationsService {
} }
} }
} else { } else {
validateActivityEnd(addForm.getServiceEnd()); validateActivityTime(addForm.getServiceStart(), addForm.getServiceEnd());
// 编辑已有记录逻辑 // 编辑已有记录逻辑
if ("TIME".equals(addForm.getServiceType())) { if ("TIME".equals(addForm.getServiceType())) {
Long userId = AdminRequestUtil.getRequestUser().getEmployeeId(); Long userId = AdminRequestUtil.getRequestUser().getEmployeeId();
@ -1184,13 +1184,16 @@ public class ServiceApplicationsService {
return ResponseDTO.ok(); return ResponseDTO.ok();
} }
private void validateActivityEnd(LocalDateTime serviceEnd) { private void validateActivityTime(LocalDateTime serviceStart, LocalDateTime serviceEnd) {
if (serviceEnd == null) { if (serviceEnd == null) {
throw new BusinessException("活动结束时间不能为空"); throw new BusinessException("活动结束时间不能为空");
} }
if (serviceEnd.isAfter(LocalDateTime.now())) { if (serviceEnd.isAfter(LocalDateTime.now())) {
throw new BusinessException("活动结束时间不能晚于当前时间"); throw new BusinessException("活动结束时间不能晚于当前时间");
} }
if (serviceStart != null && !serviceEnd.isAfter(serviceStart)) {
throw new BusinessException("活动结束时间必须晚于开始时间");
}
} }
private String serializeParticipantIds(List<Long> participantIds) { private String serializeParticipantIds(List<Long> participantIds) {

7
yun-admin/src/main/resources/mapper/cost/FirmReportsMapper.xml

@ -25,7 +25,9 @@
</sql> </sql>
<update id="commit"> <update id="commit">
UPDATE t_firm_reports UPDATE t_firm_reports
SET approval_status = 3 SET approval_status = 3,
submission_time = NOW(),
update_time = NOW()
WHERE id IN WHERE id IN
<foreach item="item" collection="list" separator="," open="(" close=")" index=""> <foreach item="item" collection="list" separator="," open="(" close=")" index="">
#{item} #{item}
@ -74,7 +76,8 @@
AND t_firm_reports.approval_status = #{queryForm.approvalStatus} AND t_firm_reports.approval_status = #{queryForm.approvalStatus}
</if> </if>
</where> </where>
ORDER BY t_firm_reports.update_time DESC ORDER BY t_firm_reports.submission_time DESC,
t_firm_reports.update_time DESC
</select> </select>
<!-- 根据季度、年度和律所 ID 查询报表 --> <!-- 根据季度、年度和律所 ID 查询报表 -->

9
yun-base/src/main/resources/dev/yun-base.yaml

@ -1,10 +1,10 @@
spring: spring:
# 数据库连接信息 # 数据库连接信息
datasource: datasource:
url: jdbc:p6spy:mysql://8.148.67.92:3306/lawyer_welfare?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai url: jdbc:mysql://8.148.67.92:3306/lawyer_welfare?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai
username: root username: root
password: sdy@2025# password: sdy@2025#
driver-class-name: com.p6spy.engine.spy.P6SpyDriver driver-class-name: com.mysql.cj.jdbc.Driver
initial-size: 2 initial-size: 2
min-idle: 2 min-idle: 2
max-active: 10 max-active: 10
@ -106,7 +106,8 @@ file:
bucket-name: file bucket-name: file
access-key: minioadmin access-key: minioadmin
secret-key: 12345678 secret-key: 12345678
url-prefix: http://${file.storage.cloud.endpoint}/${file.storage.cloud.bucket-name}/ # Java SDK 仍通过 endpoint:9000 连接 MinIO;返回浏览器的地址统一走 Nginx HTTPS 代理。
url-prefix: https://8.148.67.92/minio/file/
private-url-expire-seconds: 3600 private-url-expire-seconds: 3600
# open api配置 # open api配置
@ -183,4 +184,4 @@ smart:
# 数据库配置检测-开关 默认开启 可选(作用是固定间隔读取数据库配置更新任务,关闭后只能重启服务或通过接口修改定时任务,建议开启) # 数据库配置检测-开关 默认开启 可选(作用是固定间隔读取数据库配置更新任务,关闭后只能重启服务或通过接口修改定时任务,建议开启)
db-refresh-enabled: true db-refresh-enabled: true
# 数据库配置检测-执行间隔 默认120秒 可选 # 数据库配置检测-执行间隔 默认120秒 可选
db-refresh-interval: 60 db-refresh-interval: 60

Loading…
Cancel
Save