refactor(sql):优化仓库主表查询SQL别名命名

- 将oa_requirements表的别名从or改为req- 统一SQL查询中的表别名命名规范
- 避免与数据库关键字冲突的可能性
This commit is contained in:
2025-10-18 16:42:10 +08:00
parent 61c00bb4ec
commit 8b498405af
3 changed files with 50 additions and 10 deletions

View File

@@ -67,6 +67,11 @@
<artifactId>kfpt-sdk</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
</dependency>
</dependencies>

View File

@@ -1,7 +1,9 @@
package com.ruoyi.oa.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.core.page.TableDataInfo;
@@ -18,7 +20,10 @@ import com.ruoyi.oa.domain.vo.SysOaTaskVo;
import com.ruoyi.oa.service.IOaProgressService;
import com.ruoyi.oa.service.ISysOaProjectService;
import com.ruoyi.oa.service.ISysOaTaskService;
import com.ruoyi.system.mapper.SysUserMapper;
import com.xxl.job.core.util.DateUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import com.ruoyi.oa.domain.bo.SysOaRemindBo;
@@ -48,6 +53,8 @@ public class SysOaRemindServiceImpl implements ISysOaRemindService {
private final ISysOaProjectService projectService;
private final IOaProgressService progressService;
@Autowired
private SysUserMapper sysUserMapper;
/**
* 查询事件提醒
@@ -162,20 +169,33 @@ public class SysOaRemindServiceImpl implements ISysOaRemindService {
@Override
public List<SysOaRemindVo> queryRecentRemindList(SysOaRemindBo bo) {
// 过滤仅当天创建、到期在未来0~3天、未处理的任务/项目提醒
LambdaQueryWrapper<SysOaRemind> lqw = Wrappers.lambdaQuery();
lqw.in(SysOaRemind::getRemindType, Arrays.asList("task", "project"));
lqw.eq(SysOaRemind::getTaskStatus, "0");
// 只查当天
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd");
String today = sdf.format(new java.util.Date());
// 只查当天创建
lqw.apply("DATE_FORMAT(create_time, '%Y-%m-%d') = {0}", today);
lqw.orderByAsc(SysOaRemind::getEndTime);
// 到期在未来0~3天含当天、含第3天
lqw.apply("DATEDIFF(end_time, {0}) BETWEEN 0 AND 3", today);
if (bo != null && bo.getTargetUserId() != null) {
lqw.eq(SysOaRemind::getTargetUserId, bo.getTargetUserId());
}
// 为了后续按 (type, detailId) 去重保留最新,先按创建时间倒序
lqw.orderByDesc(SysOaRemind::getCreateTime);
List<SysOaRemind> remindList = baseMapper.selectList(lqw);
List<SysOaRemindVo> voList = new ArrayList<>();
// 按 (remind_type, detail_id) 去重:由于已按 create_time 倒序,只保留第一次出现(最新)
Map<String, SysOaRemindVo> latestMap = new LinkedHashMap<>();
for (SysOaRemind remind : remindList) {
String key = (remind.getRemindType() == null ? "" : remind.getRemindType()) + "_" + (remind.getDetailId() == null ? "" : remind.getDetailId());
if (latestMap.containsKey(key)) {
continue;
}
SysOaRemindVo vo = new SysOaRemindVo();
vo.setRemindId(remind.getRemindId());
vo.setTaskTitle(remind.getTaskTitle());
@@ -197,7 +217,6 @@ public class SysOaRemindServiceImpl implements ISysOaRemindService {
long diffMillis = remind.getEndTime().getTime() - System.currentTimeMillis();
long remainSeconds = diffMillis / 1000;
vo.setRemainTime(remainSeconds);
// 格式化为天时分秒
long days = remainSeconds / (60 * 60 * 24);
long hours = (remainSeconds / (60 * 60)) % 24;
long minutes = (remainSeconds / 60) % 60;
@@ -209,9 +228,9 @@ public class SysOaRemindServiceImpl implements ISysOaRemindService {
sb.append(seconds).append("");
vo.setRemark(sb.toString());
}
voList.add(vo);
latestMap.put(key, vo);
}
return voList;
return new ArrayList<>(latestMap.values());
}
private LambdaQueryWrapper<SysOaRemind> buildQueryWrapper(SysOaRemindBo bo) {
@@ -306,7 +325,7 @@ public class SysOaRemindServiceImpl implements ISysOaRemindService {
remind.setTargetUserId(task.getWorkerId());
remind.setTaskTitle(task.getTaskTitle());
remind.setContent(task.getContent());
remind.setTaskTime(now);
remind.setTaskTime(null);
remind.setTaskStatus("0");
remind.setEndTime(endTime);
remind.setCreateBy(task.getCreateBy());
@@ -339,11 +358,25 @@ public class SysOaRemindServiceImpl implements ISysOaRemindService {
remind.setUpdateBy(""); // 无updateBy
remind.setAccessory(project.getAccessory());
remind.setRemark(project.getRemark());
// 项目提醒targetUserId可为空或负责人id
remind.setTargetUserId(null);
// 项目提醒targetUserId可为空或负责人id 负责人id需要模糊查询sys_user表
LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
sysUserLambdaQueryWrapper.like(SysUser::getNickName, project.getFunctionary());
SysUser sysUser = sysUserMapper.selectOne(sysUserLambdaQueryWrapper);
if (sysUser != null ) {
// 如果找到用户设置第一个用户的ID或者根据实际需求选择合适的用户
remind.setTargetUserId(sysUser.getUserId());
} else {
// 如果没找到匹配的用户可以设置为null或者其他默认值
remind.setTargetUserId(null);
}
baseMapper.insert(remind);
}
}
}
// 把三天前的提醒任务状态改为已处理
LambdaUpdateWrapper<SysOaRemind> sysOaRemindLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
sysOaRemindLambdaUpdateWrapper.lt(SysOaRemind::getCreateTime, DateUtil.addDays(new Date(), -3));
sysOaRemindLambdaUpdateWrapper.set(SysOaRemind::getTaskStatus, "1");
baseMapper.update(null, sysOaRemindLambdaUpdateWrapper);
}
}

View File

@@ -65,6 +65,7 @@
<result property="laborCost" column="labor_cost"/>
<result property="projectCode" column="project_code"/>
<result property="signingCompany" column="signing_company"/>
<result property="remainTime" column="remainTime"/>
</resultMap>
@@ -587,7 +588,8 @@
postpone_time,
color,
trade_type,
pre_pay
pre_pay,
TIMESTAMPDIFF(DAY, NOW(), sop.postpone_time) AS remainTime
from sys_oa_project sop
where sop.project_id = #{projectId}
</select>