From e969db447c0bb71622d2d7adfe4f8516151d3afc Mon Sep 17 00:00:00 2001 From: dd3s_206 Date: Mon, 8 Jun 2026 15:05:33 +0800 Subject: [PATCH] =?UTF-8?q?30=E6=95=99=E9=BE=84=E6=95=99=E8=81=8C=E5=B7=A5?= =?UTF-8?q?=E7=AE=A1=E7=90=86=EF=BC=9A=E6=90=9C=E7=B4=A2=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E6=88=AA=E6=AD=A2=E6=97=A5=E6=9C=9F,=E6=96=B0=E5=A2=9E'?= =?UTF-8?q?=E5=8D=B3=E5=B0=86=E6=BB=A130=E5=B9=B4=20=E5=91=A8=E5=B9=B4?= =?UTF-8?q?=E6=BB=A130=E5=B9=B4=20=E8=B6=8530=E5=B9=B4'=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E5=92=8C=E7=BB=9F=E8=AE=A1;=20=E6=95=99=E8=81=8C=E5=B7=A5?= =?UTF-8?q?=E6=B1=87=E6=80=BB=E7=9A=84=E6=9F=A5=E8=AF=A2=E8=8C=83=E5=9B=B4?= =?UTF-8?q?:=E7=94=B1cnd.and("u.isThirtyTeach",=20"=3D",=201)=E6=A0=87?= =?UTF-8?q?=E8=AE=B0,=E6=94=B9=E6=88=90=E4=BC=9A=E5=91=98cnd.and("u.member?= =?UTF-8?q?",=20"=3D",=201);?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ThirtyTeachController.java | 32 ++++++- .../ThirtyTeachSummaryController.java | 28 +++++- .../param/ThirtyTeachPageForm.java | 4 + .../service/impl/ThirtyTeachServiceImpl.java | 35 ++++++- .../staffmanage/thirtyTeach/manage/index.html | 94 +++++++++++++++++-- .../thirtyTeach/summary/index.html | 5 +- 6 files changed, 178 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/thirtyTeach/controller/ThirtyTeachController.java b/src/main/java/com/budwk/app/zhgh/staffmanage/thirtyTeach/controller/ThirtyTeachController.java index 9f51a38a..1d4ea6d1 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/thirtyTeach/controller/ThirtyTeachController.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/thirtyTeach/controller/ThirtyTeachController.java @@ -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(); + } + } diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/thirtyTeach/controller/ThirtyTeachSummaryController.java b/src/main/java/com/budwk/app/zhgh/staffmanage/thirtyTeach/controller/ThirtyTeachSummaryController.java index 6ee98697..895a0984 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/thirtyTeach/controller/ThirtyTeachSummaryController.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/thirtyTeach/controller/ThirtyTeachSummaryController.java @@ -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(); diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/thirtyTeach/param/ThirtyTeachPageForm.java b/src/main/java/com/budwk/app/zhgh/staffmanage/thirtyTeach/param/ThirtyTeachPageForm.java index 7e0f41e9..f4b95b8d 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/thirtyTeach/param/ThirtyTeachPageForm.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/thirtyTeach/param/ThirtyTeachPageForm.java @@ -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; diff --git a/src/main/java/com/budwk/app/zhgh/staffmanage/thirtyTeach/service/impl/ThirtyTeachServiceImpl.java b/src/main/java/com/budwk/app/zhgh/staffmanage/thirtyTeach/service/impl/ThirtyTeachServiceImpl.java index 1ca70fb6..54de6eb1 100644 --- a/src/main/java/com/budwk/app/zhgh/staffmanage/thirtyTeach/service/impl/ThirtyTeachServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/staffmanage/thirtyTeach/service/impl/ThirtyTeachServiceImpl.java @@ -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()"; + } } diff --git a/src/main/resources/views/platform/zhgh/staffmanage/thirtyTeach/manage/index.html b/src/main/resources/views/platform/zhgh/staffmanage/thirtyTeach/manage/index.html index 38a82e97..d6320f5f 100644 --- a/src/main/resources/views/platform/zhgh/staffmanage/thirtyTeach/manage/index.html +++ b/src/main/resources/views/platform/zhgh/staffmanage/thirtyTeach/manage/index.html @@ -32,9 +32,24 @@ layout("/layouts/platform.html"){ + + + +
+ 当前按所选截止日期计算进校时长 +
+
- + + + 批量删除 @@ -107,6 +141,9 @@ layout("/layouts/platform.html"){ 否 +