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"){ 否 +