From 1cd0552a26bd9d6000fb1a5ed9b3d57722235ed9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=9C=E5=AD=A6=E6=88=90?= <1274337408@qq.com> Date: Mon, 12 Oct 2026 14:23:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8C=BB=E7=96=97=E4=BA=92=E5=8A=A9=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F-=E5=8C=BB=E4=BF=9D=E6=8A=A5=E9=94=80=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=AF=BC=E5=85=A5=E5=92=8C=E8=A1=A5=E5=8A=A9=E5=8F=B0?= =?UTF-8?q?=E8=B4=A6=EF=BC=9A=E6=96=B0=E5=A2=9E=E8=BA=AB=E4=BB=BD=E8=AF=81?= =?UTF-8?q?=E5=8F=B7=E5=8C=B9=E9=85=8D=E7=B1=BB=E5=9E=8B=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=EF=BC=88=E6=96=B9=E4=BE=BF=E6=90=9C=E7=B4=A2=E8=BA=AB=E4=BB=BD?= =?UTF-8?q?=E8=AF=81=E5=8F=B7=E7=A0=81=E5=8C=B9=E9=85=8D=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E7=9A=84=E6=95=B0=E6=8D=AE=EF=BC=89=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SickHelpListController.java | 4 +- .../SickHelpMedicalInsController.java | 68 ++++++++++++--- .../sickHelp/service/SickHelpListService.java | 2 +- .../service/impl/SickHelpListServiceImpl.java | 84 ++++++++++++++----- .../views/platform/sickHelp/list/index.html | 21 ++++- .../platform/sickHelp/medicalIns/index.html | 22 ++++- .../sickHelp/medicalIns/rebindForm.js | 2 + 7 files changed, 164 insertions(+), 39 deletions(-) diff --git a/src/main/java/io/v/nutz/sickHelp/controller/SickHelpListController.java b/src/main/java/io/v/nutz/sickHelp/controller/SickHelpListController.java index 3f6bcbd..6b324b4 100644 --- a/src/main/java/io/v/nutz/sickHelp/controller/SickHelpListController.java +++ b/src/main/java/io/v/nutz/sickHelp/controller/SickHelpListController.java @@ -81,8 +81,8 @@ public class SickHelpListController { @Ok("json:full") @ViReturn @RequiresPermissions("sickHelp.list") - public Object pageData(PageForm pageForm, Integer year, String subsidyUser, String unionId, String unitId, Integer isMember, Integer isMeetRequirements, Integer isAccept) { - return sickHelpListService.pageData(pageForm, year, subsidyUser, unionId, unitId, isMember, isMeetRequirements, isAccept); + public Object pageData(PageForm pageForm, Integer year, String subsidyUser, String unionId, String unitId, Integer isMember, Integer isMeetRequirements, Integer isAccept, Integer riskType) { + return sickHelpListService.pageData(pageForm, year, subsidyUser, unionId, unitId, isMember, isMeetRequirements, isAccept, riskType); } @At diff --git a/src/main/java/io/v/nutz/sickHelp/controller/SickHelpMedicalInsController.java b/src/main/java/io/v/nutz/sickHelp/controller/SickHelpMedicalInsController.java index a3e0fec..9d688f9 100644 --- a/src/main/java/io/v/nutz/sickHelp/controller/SickHelpMedicalInsController.java +++ b/src/main/java/io/v/nutz/sickHelp/controller/SickHelpMedicalInsController.java @@ -315,33 +315,77 @@ public class SickHelpMedicalInsController { @At @RequiresPermissions("sickHelp.medicalIns") - public Result pageData(PageForm pageForm, Integer year, String dataCheck) { - Sql sql = Sqls.create("select * from sick_help_medical_ins $condition"); + public Result pageData(PageForm pageForm, Integer year, String dataCheck, Integer riskType) { + Sql sql = Sqls.create(""" + SELECT + risk_data.* + FROM ( + SELECT + medical.*, + COALESCE(NULLIF(TRIM(u.idcard), ''), NULLIF(TRIM(sfm.idcard), '')) AS systemIdcard, + IFNULL(same_name.sameNameCount, 0) AS sameNameCount, + CASE + WHEN NULLIF(TRIM(medical.idCard), '') IS NOT NULL + AND COALESCE(NULLIF(TRIM(u.idcard), ''), NULLIF(TRIM(sfm.idcard), '')) IS NOT NULL + AND UPPER(REPLACE(TRIM(medical.idCard), ' ', '')) != UPPER(REPLACE(COALESCE(NULLIF(TRIM(u.idcard), ''), NULLIF(TRIM(sfm.idcard), '')), ' ', '')) + THEN 1 ELSE 0 + END AS idcardMismatchRisk, + CASE + WHEN IFNULL(same_name.sameNameCount, 0) > 1 + AND (NULLIF(TRIM(medical.idCard), '') IS NULL + OR COALESCE(NULLIF(TRIM(u.idcard), ''), NULLIF(TRIM(sfm.idcard), '')) IS NULL) + THEN 1 ELSE 0 + END AS duplicateMissingIdRisk + FROM sick_help_medical_ins medical + LEFT JOIN `user` u ON u.loginname = medical.loginName + LEFT JOIN sick_fund_member sfm ON sfm.loginName = medical.loginName + LEFT JOIN ( + SELECT TRIM(userName) AS userName, COUNT(DISTINCT loginName) AS sameNameCount + FROM sick_fund_member + WHERE NULLIF(TRIM(userName), '') IS NOT NULL + GROUP BY TRIM(userName) + HAVING COUNT(DISTINCT loginName) > 1 + ) same_name ON same_name.userName = TRIM(medical.userName) + ) risk_data + $condition + """); Cnd cnd = Cnd.NEW(); - cnd.asc("ecbx"); - cnd.asc("loginName"); - cnd.andEX("year", "=", year); + cnd.asc("risk_data.ecbx"); + cnd.asc("risk_data.loginName"); + cnd.andEX("risk_data.year", "=", year); if (StrUtil.isNotBlank(dataCheck)) { if (dataCheck.equals("1")) { SqlExpressionGroup seg = new SqlExpressionGroup(); - seg.or("loginName", "is", null); - seg.or("loginName", "=", ""); + seg.or("risk_data.loginName", "is", null); + seg.or("risk_data.loginName", "=", ""); cnd.and(seg); } if (dataCheck.equals("2")) { SqlExpressionGroup seg = new SqlExpressionGroup(); - seg.or("ecbx", "is", null); - seg.or("ecbx", "=", ""); + seg.or("risk_data.ecbx", "is", null); + seg.or("risk_data.ecbx", "=", ""); cnd.and(seg); } } + if (riskType != null && riskType == 1) { + cnd.and("risk_data.idcardMismatchRisk", "=", 1); + } else if (riskType != null && riskType == 2) { + cnd.and("risk_data.duplicateMissingIdRisk", "=", 1); + } else if (riskType != null && riskType == 3) { + SqlExpressionGroup riskSeg = new SqlExpressionGroup(); + riskSeg.or("risk_data.idcardMismatchRisk", "=", 1); + riskSeg.or("risk_data.duplicateMissingIdRisk", "=", 1); + cnd.and(riskSeg); + } + if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) { SqlExpressionGroup seg = new SqlExpressionGroup(); - seg.orLike("loginName", pageForm.getSearchKeyword()); - seg.orLike("userName", pageForm.getSearchKeyword()); - seg.orLike("idCard", pageForm.getSearchKeyword()); + seg.orLike("risk_data.loginName", pageForm.getSearchKeyword()); + seg.orLike("risk_data.userName", pageForm.getSearchKeyword()); + seg.orLike("risk_data.idCard", pageForm.getSearchKeyword()); + seg.orLike("risk_data.systemIdcard", pageForm.getSearchKeyword()); cnd.and(seg); } sql.setCondition(cnd); diff --git a/src/main/java/io/v/nutz/sickHelp/service/SickHelpListService.java b/src/main/java/io/v/nutz/sickHelp/service/SickHelpListService.java index 708837f..c92fc9b 100644 --- a/src/main/java/io/v/nutz/sickHelp/service/SickHelpListService.java +++ b/src/main/java/io/v/nutz/sickHelp/service/SickHelpListService.java @@ -21,7 +21,7 @@ public interface SickHelpListService extends ViService { * @param isMember 是成员 * @return {@link Pagination} */ - Pagination pageData(PageForm pageForm, Integer year, String subsidyUser, String unionId, String unitId, Integer isMember, Integer isMeetRequirements, Integer isAccept); + Pagination pageData(PageForm pageForm, Integer year, String subsidyUser, String unionId, String unitId, Integer isMember, Integer isMeetRequirements, Integer isAccept, Integer riskType); /** diff --git a/src/main/java/io/v/nutz/sickHelp/service/impl/SickHelpListServiceImpl.java b/src/main/java/io/v/nutz/sickHelp/service/impl/SickHelpListServiceImpl.java index f3e3cb8..c691bce 100644 --- a/src/main/java/io/v/nutz/sickHelp/service/impl/SickHelpListServiceImpl.java +++ b/src/main/java/io/v/nutz/sickHelp/service/impl/SickHelpListServiceImpl.java @@ -46,38 +46,82 @@ public class SickHelpListServiceImpl extends ViServiceImpl implements } @Override - public Pagination pageData(PageForm pageForm, Integer year, String subsidyUser, String unionId, String unitId, Integer isMember, Integer isMeetRequirements, Integer isAccept) { + public Pagination pageData(PageForm pageForm, Integer year, String subsidyUser, String unionId, String unitId, Integer isMember, Integer isMeetRequirements, Integer isAccept, Integer riskType) { Sql sql = Sqls.create(""" SELECT - sick.*, - u.unionname as unionName, - sfm.isMember, - IFNULL(NULLIF(sfm.idcard, ''), u.idcard) AS idcard - FROM - `sick_help` sick - LEFT JOIN sick_fund_member sfm on sfm.loginName = sick.loginName - LEFT JOIN `user` u ON u.loginname = sick.loginName + risk_data.* + FROM ( + SELECT + sick.*, + u.unionname AS unionName, + u.unionId AS queryUnionId, + u.unitId AS queryUnitId, + sfm.isMember, + IFNULL(NULLIF(sfm.idcard, ''), u.idcard) AS idcard, + COALESCE(NULLIF(TRIM(u.idcard), ''), NULLIF(TRIM(sfm.idcard), '')) AS systemIdcard, + medical.idcard AS medicalIdcard, + IFNULL(same_name.sameNameCount, 0) AS sameNameCount, + CASE + WHEN medical.idcard IS NOT NULL + AND COALESCE(NULLIF(TRIM(u.idcard), ''), NULLIF(TRIM(sfm.idcard), '')) IS NOT NULL + AND UPPER(REPLACE(TRIM(medical.idcard), ' ', '')) != UPPER(REPLACE(COALESCE(NULLIF(TRIM(u.idcard), ''), NULLIF(TRIM(sfm.idcard), '')), ' ', '')) + THEN 1 ELSE 0 + END AS idcardMismatchRisk, + CASE + WHEN medical.loginName IS NOT NULL + AND IFNULL(same_name.sameNameCount, 0) > 1 + AND (medical.idcard IS NULL OR COALESCE(NULLIF(TRIM(u.idcard), ''), NULLIF(TRIM(sfm.idcard), '')) IS NULL) + THEN 1 ELSE 0 + END AS duplicateMissingIdRisk + FROM `sick_help` sick + LEFT JOIN sick_fund_member sfm ON sfm.loginName = sick.loginName + LEFT JOIN `user` u ON u.loginname = sick.loginName + LEFT JOIN ( + SELECT `year`, loginName, MAX(NULLIF(TRIM(idCard), '')) AS idcard + FROM sick_help_medical_ins + GROUP BY `year`, loginName + ) medical ON medical.loginName = sick.loginName AND medical.`year` = sick.`year` + LEFT JOIN ( + SELECT TRIM(userName) AS userName, COUNT(DISTINCT loginName) AS sameNameCount + FROM sick_fund_member + WHERE NULLIF(TRIM(userName), '') IS NOT NULL + GROUP BY TRIM(userName) + HAVING COUNT(DISTINCT loginName) > 1 + ) same_name ON same_name.userName = TRIM(sick.userName) + ) risk_data $condition """); Cnd cnd = Cnd.NEW(); - cnd.andEX("sick.year", "=", year); - cnd.andEX("u.unionId", "=", unionId); - cnd.andEX("u.unitId", "=", unitId); + cnd.andEX("risk_data.year", "=", year); + cnd.andEX("risk_data.queryUnionId", "=", unionId); + cnd.andEX("risk_data.queryUnitId", "=", unitId); - cnd.andEX("sfm.isMember", "=", isMember); + cnd.andEX("risk_data.isMember", "=", isMember); - cnd.andEX("sick.isMeetRequirements", "=", isMeetRequirements); + cnd.andEX("risk_data.isMeetRequirements", "=", isMeetRequirements); if (isMeetRequirements != null && isMeetRequirements != 0) { - cnd.andEX("isAccept", "=", isAccept); + cnd.andEX("risk_data.isAccept", "=", isAccept); + } + + if (riskType != null && riskType == 1) { + cnd.and("risk_data.idcardMismatchRisk", "=", 1); + } else if (riskType != null && riskType == 2) { + cnd.and("risk_data.duplicateMissingIdRisk", "=", 1); + } else if (riskType != null && riskType == 3) { + SqlExpressionGroup riskSeg = new SqlExpressionGroup(); + riskSeg.or("risk_data.idcardMismatchRisk", "=", 1); + riskSeg.or("risk_data.duplicateMissingIdRisk", "=", 1); + cnd.and(riskSeg); } if (StrUtil.isNotBlank(subsidyUser)) { SqlExpressionGroup seg = new SqlExpressionGroup(); - seg.orLike("sick.userName", subsidyUser); - seg.orLike("sick.loginName", subsidyUser); - seg.orLike("sfm.idcard", subsidyUser); - seg.orLike("u.idcard", subsidyUser); + seg.orLike("risk_data.userName", subsidyUser); + seg.orLike("risk_data.loginName", subsidyUser); + seg.orLike("risk_data.idcard", subsidyUser); + seg.orLike("risk_data.systemIdcard", subsidyUser); + seg.orLike("risk_data.medicalIdcard", subsidyUser); cnd.and(seg); } if (StrUtil.isNotBlank(pageForm.getPageOrderName()) && StrUtil.isNotBlank(pageForm.getPageOrderBy())) { @@ -86,7 +130,7 @@ public class SickHelpListServiceImpl extends ViServiceImpl implements case "ascending" -> cnd.asc(pageForm.getPageOrderName()); } } - cnd.desc("sick.year"); + cnd.desc("risk_data.year"); sql.setCondition(cnd); return list(pageForm, sql); } diff --git a/src/main/resources/views/platform/sickHelp/list/index.html b/src/main/resources/views/platform/sickHelp/list/index.html index 674c3d7..d24bf3b 100644 --- a/src/main/resources/views/platform/sickHelp/list/index.html +++ b/src/main/resources/views/platform/sickHelp/list/index.html @@ -111,6 +111,16 @@ layout("/layouts/platform.html"){ +
+
身份证号匹配:
+
+ + + + + +
+
搜索
@@ -180,6 +190,10 @@ layout("/layouts/platform.html"){ 否 +