医疗互助系统-医保报销数据导入和补助台账:新增身份证号匹配类型查询(方便搜索身份证号码匹配异常的数据);
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -21,7 +21,7 @@ public interface SickHelpListService extends ViService<SickHelp> {
|
||||
* @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);
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -46,38 +46,82 @@ public class SickHelpListServiceImpl extends ViServiceImpl<SickHelp> 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<SickHelp> implements
|
||||
case "ascending" -> cnd.asc(pageForm.getPageOrderName());
|
||||
}
|
||||
}
|
||||
cnd.desc("sick.year");
|
||||
cnd.desc("risk_data.year");
|
||||
sql.setCondition(cnd);
|
||||
return list(pageForm, sql);
|
||||
}
|
||||
|
||||
@@ -111,6 +111,16 @@ layout("/layouts/platform.html"){
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">身份证号匹配:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select clearable style="width: 100%" v-model="pageForm.riskType">
|
||||
<el-option label="全部风险数据" :value="3"></el-option>
|
||||
<el-option label="工号身份证与医保身份证不一致" :value="1"></el-option>
|
||||
<el-option label="同名且身份证缺失无法确认" :value="2"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-query">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
|
||||
</div>
|
||||
@@ -180,6 +190,10 @@ layout("/layouts/platform.html"){
|
||||
<span v-if="row.isMember==false" class="text-danger">否</span>
|
||||
<span v-if="row.isMember==null"></span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='relationRisk'">
|
||||
<el-tag size="mini" type="danger" v-if="row.idcardMismatchRisk==1">身份证不一致</el-tag>
|
||||
<el-tag size="mini" type="warning" v-if="row.duplicateMissingIdRisk==1">重名且身份证缺失</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" label="操作" width="300">
|
||||
<template scope="{row}">
|
||||
@@ -276,7 +290,9 @@ layout("/layouts/platform.html"){
|
||||
{prop: 'year', label: '年度', sortable: true, fixed: 'left'},
|
||||
{prop: 'userName', label: '姓名', fixed: 'left'},
|
||||
{prop: 'loginName', label: '工号', fixed: 'left', width: 120},
|
||||
{prop: 'idcard', label: '身份证号', fixed: 'left', width: 200},
|
||||
{prop: 'systemIdcard', label: '工号身份证号', fixed: 'left', width: 200},
|
||||
{prop: 'medicalIdcard', label: '医保身份证号', width: 200},
|
||||
{prop: 'relationRisk', label: '关联风险', width: 180},
|
||||
{prop: 'unionName', label: '分工会', sortable: true, width: 150},
|
||||
{prop: 'unitName', label: '单位', sortable: true, width: 150},
|
||||
|
||||
@@ -312,7 +328,8 @@ layout("/layouts/platform.html"){
|
||||
isMember: null,
|
||||
unitName: '',
|
||||
isMeetRequirements: null,
|
||||
isAccept: null
|
||||
isAccept: null,
|
||||
riskType: null
|
||||
},
|
||||
unions: [],
|
||||
units: [],
|
||||
|
||||
@@ -158,6 +158,16 @@ layout("/layouts/platform.html"){
|
||||
</div>
|
||||
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">身份证号匹配:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select clearable style="width: 100%" v-model="pageForm.riskType">
|
||||
<el-option label="全部风险数据" :value="3"></el-option>
|
||||
<el-option label="工号身份证与医保身份证不一致" :value="1"></el-option>
|
||||
<el-option label="同名且身份证缺失无法确认" :value="2"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-query">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
|
||||
</div>
|
||||
@@ -198,6 +208,12 @@ layout("/layouts/platform.html"){
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column label="关联风险" align="center" header-align="center" width="180">
|
||||
<template scope="{row}">
|
||||
<el-tag size="mini" type="danger" v-if="row.idcardMismatchRisk==1">身份证不一致</el-tag>
|
||||
<el-tag size="mini" type="warning" v-if="row.duplicateMissingIdRisk==1">重名且身份证缺失</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" header-align="center" fixed="right" width="300">
|
||||
<template scope="scope">
|
||||
<el-button @click="onRebind(scope.row)" size="mini" type="warning">重新关联人员</el-button>
|
||||
@@ -235,7 +251,8 @@ layout("/layouts/platform.html"){
|
||||
tableColumns: [
|
||||
{prop: 'userName', label: '姓名'},
|
||||
{prop: 'loginName', label: '工号'},
|
||||
{prop: 'idCard', label: '身份证号', width: 200},
|
||||
{prop: 'systemIdcard', label: '工号身份证号', width: 200},
|
||||
{prop: 'idCard', label: '医保身份证号', width: 200},
|
||||
{prop: 'zhzl', label: '账户自理'},
|
||||
{prop: 'zhzf', label: '账户自付'},
|
||||
{prop: 'xjzl', label: '现金自理'},
|
||||
@@ -246,7 +263,8 @@ layout("/layouts/platform.html"){
|
||||
{prop: 'calc', label: '补助计算金额'},
|
||||
],
|
||||
pageForm: {
|
||||
year: (new Date().getFullYear() - 1).toString()
|
||||
year: (new Date().getFullYear() - 1).toString(),
|
||||
riskType: null
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -151,6 +151,8 @@ const rebindForm = {
|
||||
}
|
||||
this.source = resp.data
|
||||
this.form.medicalInsId = resp.data.id
|
||||
this.form.ecbx = resp.data.ecbx === null || resp.data.ecbx === undefined || resp.data.ecbx === ''
|
||||
? 0 : Number(resp.data.ecbx)
|
||||
},
|
||||
async remoteMethod(query) {
|
||||
if (!query) {
|
||||
|
||||
Reference in New Issue
Block a user