fix(oa):修复报工重复提交问题
- 限制同一用户当天只能提交一次报工 - 使用上海时区计算当日时间范围- 避免因数据库时区差异导致的跨天误判- 新增创建时间范围查询条件 - 移除旧的查询包装器逻辑 - 抛出运行时异常阻止重复报工提交
This commit is contained in:
@@ -114,12 +114,18 @@ public class OaProjectReportServiceImpl implements IOaProjectReportService {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Boolean insertByBo(OaProjectReportBo bo) {
|
public Boolean insertByBo(OaProjectReportBo bo) {
|
||||||
// 检查今日是否已报工
|
// 检查今日是否已报工(同一用户当天只允许运一条)
|
||||||
OaProjectReportBo checkBo = new OaProjectReportBo();
|
Long userId = LoginHelper.getUserId();
|
||||||
checkBo.setUserId(LoginHelper.getUserId());
|
// 以上海时区计算“今天”的起止时间,避免数据库时区差异导致跨天误判
|
||||||
checkBo.setCreateTime(new Date());
|
ZoneId zone = ZoneId.of("Asia/Shanghai");
|
||||||
|
LocalDate today = LocalDate.now(zone);
|
||||||
QueryWrapper<OaProjectReport> queryWrapper = ClearbuildQueryWrapper(checkBo);
|
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);
|
long count = baseMapper.selectCount(queryWrapper);
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
throw new RuntimeException("今日已报工,不允许重复报工");
|
throw new RuntimeException("今日已报工,不允许重复报工");
|
||||||
|
|||||||
Reference in New Issue
Block a user