30教龄教职工管理:搜索新增截止日期,新增'即将满30年 周年满30年 超30年'查询和统计; 教职工汇总的查询范围:由cnd.and("u.isThirtyTeach", "=", 1)标记,改成会员cnd.and("u.member", "=", 1);

This commit is contained in:
dd3s_206
2026-06-08 15:05:33 +08:00
parent 87d126a035
commit e969db447c
6 changed files with 178 additions and 20 deletions
@@ -41,6 +41,8 @@ import org.nutz.mvc.upload.UploadAdaptor;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -84,14 +86,15 @@ public class ThirtyTeachController {
@ApiOperation("一键设置三十龄教工")
@SaCheckPermission("thirtyTeach.manage")
@SLog(type = "30龄教工-教职工管理", tag = "设置三十龄教工",msg = "设置三十龄教工设置教龄${args[0]}")
public Result setThirtyTeach(Integer setNum, boolean isFlag){
public Result setThirtyTeach(Integer setNum, String deadlineDate, boolean isFlag){
if (isFlag) {
sysUserService.update(Chain.make("isThirtyTeach", 0), Cnd.NEW());
}
String teachNumDate = getTeachNumDate(deadlineDate);
Cnd cnd = Cnd.NEW();
cnd.and("arrivalAtSchoolDate", "is not", null);
cnd.and("arrivalAtSchoolDate", "!=", "");
cnd.and("TIMESTAMPDIFF(YEAR, CONCAT(arrivalAtSchoolDate, '-01'), CURDATE())", ">", setNum);
cnd.and("TIMESTAMPDIFF(YEAR, CONCAT(arrivalAtSchoolDate, '-01'), " + teachNumDate + ")", ">=", setNum);
sysUserService.update(Chain.make("isThirtyTeach", 1), cnd);
return Result.success();
}
@@ -124,6 +127,7 @@ public class ThirtyTeachController {
entityList.add(new ExcelExportEntity("工号", "loginname", 20));
entityList.add(new ExcelExportEntity("姓名", "username", 20));
entityList.add(new ExcelExportEntity("性别", "sex", 20));
entityList.add(new ExcelExportEntity("入校时间", "arrivalAtSchoolDate", 20));
entityList.add(new ExcelExportEntity("教龄(年)", "teachNum", 20));
entityList.add(new ExcelExportEntity("电话", "mobile", 20));
entityList.add(new ExcelExportEntity("工会", "unionName", 20));
@@ -131,10 +135,12 @@ public class ThirtyTeachController {
entityList.add(new ExcelExportEntity("在职状态", "userState", 20));
entityList.add(new ExcelExportEntity("教职工类别", "personType", 20));
entityList.add(new ExcelExportEntity("荣誉证办理年月", "thirtyCertificateProcessingTime", 20));
String exportDeadlineDate = getExportDeadlineDate(pageForm.getDeadlineDate());
ExportParams exportParams = new ExportParams();
exportParams.setTitle("30教龄教职工名单(教龄计算截止日期:" + exportDeadlineDate + "");
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, list);
CommonDownloadUtil.download("30教龄教职工名单.xlsx", workbook, response);
CommonDownloadUtil.download("30教龄教职工名单(截止" + exportDeadlineDate + ".xlsx", workbook, response);
}
@At
@@ -232,5 +238,25 @@ public class ThirtyTeachController {
}
}
private String getTeachNumDate(String deadlineDate) {
if (StrUtil.isNotBlank(deadlineDate)) {
try {
return "'" + LocalDate.parse(deadlineDate, DateTimeFormatter.ISO_LOCAL_DATE) + "'";
} catch (Exception ignored) {
}
}
return "CURDATE()";
}
private String getExportDeadlineDate(String deadlineDate) {
if (StrUtil.isNotBlank(deadlineDate)) {
try {
return LocalDate.parse(deadlineDate, DateTimeFormatter.ISO_LOCAL_DATE).toString();
} catch (Exception ignored) {
}
}
return LocalDate.now().toString();
}
}
@@ -58,14 +58,18 @@ public class ThirtyTeachSummaryController {
Sql sql = Sqls.create("""
SELECT
su.*,
COUNT( u.id ) AS userNum
COUNT( u.id ) AS userNum,
SUM(CASE WHEN TIMESTAMPDIFF(YEAR, CONCAT(u.arrivalAtSchoolDate, '-01'), CURDATE()) = 29 THEN 1 ELSE 0 END) AS willThirtyNum,
SUM(CASE WHEN TIMESTAMPDIFF(YEAR, CONCAT(u.arrivalAtSchoolDate, '-01'), CURDATE()) = 30 THEN 1 ELSE 0 END) AS anniversaryThirtyNum,
SUM(CASE WHEN TIMESTAMPDIFF(YEAR, CONCAT(u.arrivalAtSchoolDate, '-01'), CURDATE()) > 30 THEN 1 ELSE 0 END) AS overThirtyNum
FROM
sys_union su
LEFT JOIN `vw_user` u ON u.unionid = su.id
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("u.isThirtyTeach", "=", 1);
//cnd.and("u.isThirtyTeach", "=", 1);
cnd.and("u.member", "=", 1);
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("u.unionId", "=", SecurityUtil.getUnionId());
}
@@ -87,14 +91,19 @@ public class ThirtyTeachSummaryController {
Sql sql = Sqls.create("""
SELECT
su.*,
COUNT( u.id ) AS userNum
COUNT( u.id ) AS userNum,
SUM(CASE WHEN TIMESTAMPDIFF(YEAR, CONCAT(u.arrivalAtSchoolDate, '-01'), CURDATE()) = 29 THEN 1 ELSE 0 END) AS willThirtyNum,
SUM(CASE WHEN TIMESTAMPDIFF(YEAR, CONCAT(u.arrivalAtSchoolDate, '-01'), CURDATE()) = 30 THEN 1 ELSE 0 END) AS anniversaryThirtyNum,
SUM(CASE WHEN TIMESTAMPDIFF(YEAR, CONCAT(u.arrivalAtSchoolDate, '-01'), CURDATE()) > 30 THEN 1 ELSE 0 END) AS overThirtyNum
FROM
sys_union su
LEFT JOIN `vw_user` u ON u.unionid = su.id
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("u.isThirtyTeach", "=", 1);
// cnd.and("u.isThirtyTeach", "=", 1);
//教职工汇总范围: 由标记用户改成全体会员
cnd.and("u.member", "=", 1);
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("u.unionId", "=", SecurityUtil.getUnionId());
}
@@ -110,7 +119,16 @@ public class ThirtyTeachSummaryController {
no.setFormat("isAddIndex");
entityList.add(no);
entityList.add(new ExcelExportEntity("分工会", "name", 20));
ExcelExportEntity entity = new ExcelExportEntity("在职人数", "userNum", 20);
ExcelExportEntity willThirtyNum = new ExcelExportEntity("即将满30年", "willThirtyNum", 20);
willThirtyNum.setType(10);
entityList.add(willThirtyNum);
ExcelExportEntity anniversaryThirtyNum = new ExcelExportEntity("周年满30年", "anniversaryThirtyNum", 20);
anniversaryThirtyNum.setType(10);
entityList.add(anniversaryThirtyNum);
ExcelExportEntity overThirtyNum = new ExcelExportEntity("超过30年", "overThirtyNum", 20);
overThirtyNum.setType(10);
entityList.add(overThirtyNum);
ExcelExportEntity entity = new ExcelExportEntity("人数", "userNum", 20);
entity.setType(10);
entityList.add(entity);
ExportParams exportParams = new ExportParams();
@@ -15,6 +15,10 @@ public class ThirtyTeachPageForm extends PageForm {
private String unitId;
//进校时长
private String teachNum;
//教龄标签
private String teachYearTag;
//截止日期
private String deadlineDate;
//办证年月
private String thirtyCertificateProcessingTime;
private String userState;
@@ -15,6 +15,9 @@ import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.ioc.loader.annotation.IocBean;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
/**
* @author zhf
* @date 2025/7/28 11:53
@@ -28,6 +31,8 @@ public class ThirtyTeachServiceImpl extends BaseServiceImpl implements ThirtyTea
@Override
public Sql getSql(ThirtyTeachPageForm pageForm) {
String teachNumDate = getTeachNumDate(pageForm.getDeadlineDate());
String teachNumSql = "TIMESTAMPDIFF(YEAR, CONCAT(arrivalAtSchoolDate, '-01'), " + teachNumDate + ")";
Sql sql = Sqls.create("""
SELECT
id,
@@ -41,13 +46,14 @@ public class ThirtyTeachServiceImpl extends BaseServiceImpl implements ThirtyTea
unitName,
mobile,
birthday,
arrivalAtSchoolDate,
thirtyCertificateProcessingTime,
false as isEditThirtyCertificateProcessingTime,
TIMESTAMPDIFF(YEAR, CONCAT(arrivalAtSchoolDate, '-01'), CURDATE()) AS teachNum
%s AS teachNum
FROM
`vw_user`
$condition
""");
""".formatted(teachNumSql));
Cnd cnd = Cnd.NEW();
cnd.and("isThirtyTeach", "=", 1);
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
@@ -60,7 +66,20 @@ public class ThirtyTeachServiceImpl extends BaseServiceImpl implements ThirtyTea
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("unionId", "=", SecurityUtil.getUnionId());
}
cnd.andEX("TIMESTAMPDIFF(YEAR, CONCAT(arrivalAtSchoolDate, '-01'), CURDATE())", "=", pageForm.getTeachNum());
if ("will30".equals(pageForm.getTeachYearTag())) {
cnd.and(teachNumSql, "=", 29);
} else if ("anniversary30".equals(pageForm.getTeachYearTag())) {
cnd.and(teachNumSql, "=", 30);
} else if ("over30".equals(pageForm.getTeachYearTag())) {
cnd.and(teachNumSql, ">", 30);
} else if ("ge30".equals(pageForm.getTeachYearTag())) {
cnd.and(teachNumSql, ">=", 30);
} else {
if (StrUtil.isNotBlank(pageForm.getDeadlineDate())) {
cnd.and(teachNumSql, ">=", 30);
}
cnd.andEX(teachNumSql, "=", pageForm.getTeachNum());
}
cnd.andEX("unionId", "=", pageForm.getUnionId());
cnd.andEX("unitId", "=", pageForm.getUnitId());
cnd.andEX("personType", "=", pageForm.getPersonType());
@@ -75,4 +94,14 @@ public class ThirtyTeachServiceImpl extends BaseServiceImpl implements ThirtyTea
sql.setCondition(cnd);
return sql;
}
private String getTeachNumDate(String deadlineDate) {
if (StrUtil.isNotBlank(deadlineDate)) {
try {
return "'" + LocalDate.parse(deadlineDate, DateTimeFormatter.ISO_LOCAL_DATE) + "'";
} catch (Exception ignored) {
}
}
return "CURDATE()";
}
}