feat(portal): 增加团队纪念日 SQL 接口并优化相关功能

- 新增 getTeamMemorialDaySql 接口,用于获取团队纪念日的 SQL 语句
- 优化 getTeamMemorialDay 接口,为 URL 添加 dataKey 参数
- 新增 StringUtil 工具类,用于 XML 转义字符处理和 SQL 条件构建
This commit is contained in:
dxfeng 2025-07-17 16:36:33 +08:00
parent c21e4bb9d8
commit a66e1b9073
4 changed files with 88 additions and 3 deletions

View File

@ -52,6 +52,10 @@ public class ManagerPortalController {
private WeaResult<Map<String, Object>> getTeamMemorialDay(@RequestBody Map<String, String> params) {
return managerPortalService.getTeamMemorialDay(params);
}
@PostMapping("/getTeamMemorialDaySql")
private WeaResult<String> getTeamMemorialDaySql(@RequestBody Map<String, String> params) {
return managerPortalService.getTeamMemorialDaySql(params);
}
@PostMapping("/getEducationInfo")
private WeaResult<Map<String, Object>> getEducationInfo(@RequestBody Map<String, String> params) {

View File

@ -56,6 +56,8 @@ public interface ManagerPortalService {
*/
WeaResult<Map<String, Object>> getTeamMemorialDay(Map<String, String> params);
WeaResult<String> getTeamMemorialDaySql(Map<String, String> params);
/**
* 数据看板

View File

@ -20,6 +20,7 @@ import com.weaver.seconddev.portal.mapper.ManagerPortalMapper;
import com.weaver.seconddev.portal.mapper.PortalMapper;
import com.weaver.seconddev.portal.service.ManagerPortalService;
import com.weaver.seconddev.portal.util.DateUtil;
import com.weaver.seconddev.portal.util.StringUtil;
import com.weaver.teams.security.context.UserContext;
import com.weaver.teams.security.user.User;
import com.weaver.workflow.common.cfg.org.service.DepartMentService;
@ -236,17 +237,59 @@ public class ManagerPortalServiceImpl implements ManagerPortalService {
Map<String, Object> returnMap = new HashMap<>();
// 生日提醒
returnMap.put("birthdayNum", birthdayNum);
returnMap.put("birthdayNumUrl", urlMap.get("birthdayNum"));
returnMap.put("birthdayNumUrl", urlMap.get("birthdayNum") + "?dataKey=birthdayNum");
// 转正日期
returnMap.put("regularEmployeeNum", regularEmployeeNum);
returnMap.put("regularEmployeeNumUrl", urlMap.get("regularEmployeeNum"));
returnMap.put("regularEmployeeNumUrl", urlMap.get("regularEmployeeNum") + "?dataKey=regularEmployeeNum");
// 入职周年提醒
returnMap.put("employmentAnniversary", employmentAnniversary);
returnMap.put("employmentAnniversaryUrl", urlMap.get("employmentAnniversary"));
returnMap.put("employmentAnniversaryUrl", urlMap.get("employmentAnniversary") + "?dataKey=employmentAnniversary");
return WeaResult.success(returnMap);
}
@Override
public WeaResult<String> getTeamMemorialDaySql(Map<String, String> params) {
String dataKey = params.get("dataKey");
log.error("params==={}", JSON.toJSONString(params));
User currentUser = UserContext.getCurrentUser();
BasicPersonnelParam basicPersonnelParam = new BasicPersonnelParam();
basicPersonnelParam.setTenantKey(currentUser.getTenantKey());
Set<Long> allDepartmentIdList = getAllDepartmentIdList(basicPersonnelParam, currentUser.getEmployeeId());
StringJoiner andCondition = new StringJoiner(" and ");
switch (dataKey) {
case "birthdayNum":
// 生日提醒
if (CollectionUtils.isNotEmpty(allDepartmentIdList)) {
andCondition.add(" t1.department in (" + StringUtils.join(allDepartmentIdList, ",") + ") ");
}
andCondition.add(" ( ( DATE_FORMAT(t1.birthday, '%m-%d') BETWEEN DATE_FORMAT(CURDATE(), '%m-%d') AND DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 7 DAY), '%m-%d') ) OR ( DATE_FORMAT(CURDATE(), '%m-%d') &gt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 7 DAY), '%m-%d') AND ( DATE_FORMAT(birthday, '%m-%d') &gt;= DATE_FORMAT(CURDATE(), '%m-%d') OR DATE_FORMAT(t1.birthday, '%m-%d') &lt;= DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 7 DAY), '%m-%d') ) ) ) ");
break;
case "regularEmployeeNum":
// 转正日期
if (CollectionUtils.isNotEmpty(allDepartmentIdList)) {
andCondition.add(" t1.department in (" + StringUtils.join(allDepartmentIdList, ",") + ") ");
}
andCondition.add(" t1.yjsyjsrq IS NOT NULL AND ( STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-', DATE_FORMAT(t1.yjsyjsrq, '%m-%d')), '%Y-%m-%d') BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 60 DAY) OR STR_TO_DATE(CONCAT(YEAR(CURDATE()) + 1, '-', DATE_FORMAT(t1.yjsyjsrq, '%m-%d')), '%Y-%m-%d') BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 60 DAY) ) ");
break;
case "employmentAnniversary":
// 入职周年提醒
if (CollectionUtils.isNotEmpty(allDepartmentIdList)) {
andCondition.add(" t1.department in (" + StringUtils.join(allDepartmentIdList, ",") + ") ");
}
andCondition.add(" ( ( DATE_FORMAT(t1.hiredate, '%m-%d') between DATE_FORMAT(CURDATE(), '%m-%d') and DATE_FORMAT(DATE_ADD(CURDATE(), interval 7 day), '%m-%d') ) or ( DATE_FORMAT(CURDATE(), '%m-%d') & gt; DATE_FORMAT(DATE_ADD(CURDATE(), interval 7 day), '%m-%d') and ( DATE_FORMAT(t1.hiredate, '%m-%d') & gt; = DATE_FORMAT(CURDATE(), '%m-%d') or DATE_FORMAT(t1.hiredate, '%m-%d') & lt; = DATE_FORMAT(DATE_ADD(CURDATE(), interval 7 day), '%m-%d') ) ) ) ");
break;
default:
break;
}
String replaceSql = StringUtil.buildSqlCondition(andCondition.toString());
log.error("replaceSql==={}", replaceSql);
return WeaResult.success(replaceSql);
}
@Override
public WeaResult<Map<String, Object>> getEducationInfo(Map<String, String> params) {

View File

@ -0,0 +1,36 @@
package com.weaver.seconddev.portal.util;
import org.apache.commons.lang.StringUtils;
/**
* @author:dxfeng
* @createTime: 2025/07/17
* @version: 1.0
*/
public class StringUtil {
/**
* XML转义字符处理
*
* @param input
* @return
*/
public static String unescapeXml(String input) {
if (input == null) {
return null;
}
// 替换常见的XML转义字符
return input.replace("&lt;", "<")
.replace("&gt;", ">")
.replace("&amp;", "&")
.replace("&quot;", "\"")
.replace("&apos;", "'");
}
public static String buildSqlCondition(String sql) {
if (StringUtils.isBlank(sql)) {
return "";
}
return unescapeXml(sql);
}
}