fix(oa):修复报工重复提交问题

- 限制同一用户当天只能提交一次报工
- 使用上海时区计算当日时间范围- 避免因数据库时区差异导致的跨天误判- 新增创建时间范围查询条件
- 移除旧的查询包装器逻辑
- 抛出运行时异常阻止重复报工提交
This commit is contained in:
2025-10-11 18:16:39 +08:00
parent 5c54e9e169
commit c676f238b8

View File

@@ -114,12 +114,18 @@ public class OaProjectReportServiceImpl implements IOaProjectReportService {
*/
@Override
public Boolean insertByBo(OaProjectReportBo bo) {
// 检查今日是否已报工
OaProjectReportBo checkBo = new OaProjectReportBo();
checkBo.setUserId(LoginHelper.getUserId());
checkBo.setCreateTime(new Date());
QueryWrapper<OaProjectReport> queryWrapper = ClearbuildQueryWrapper(checkBo);
// 检查今日是否已报工(同一用户当天只允许运一条)
Long userId = LoginHelper.getUserId();
// 以上海时区计算“今天”的起止时间,避免数据库时区差异导致跨天误判
ZoneId zone = ZoneId.of("Asia/Shanghai");
LocalDate today = LocalDate.now(zone);
Date start = Date.from(today.atStartOfDay(zone).toInstant());
Date end = Date.from(today.plusDays(1).atStartOfDay(zone).toInstant());
QueryWrapper<OaProjectReport> queryWrapper = Wrappers.<OaProjectReport>query()
.eq("del_flag", 0)
.eq("user_id", userId)
.ge("create_time", start)
.lt("create_time", end);
long count = baseMapper.selectCount(queryWrapper);
if (count > 0) {
throw new RuntimeException("今日已报工,不允许重复报工");