医疗互助系统:会员导入模板加身份证号码字段;会员台账新增身份证号码字段编辑;

This commit is contained in:
2026-09-20 17:20:05 +08:00
parent e558339dcc
commit f5095c72ad
12 changed files with 71 additions and 18 deletions
@@ -184,6 +184,7 @@ public class SickHelpListController {
SELECT SELECT
sick.loginName, sick.loginName,
sick.userName, sick.userName,
IFNULL(NULLIF(sfm.idcard, ''), u.idcard) AS idcard,
sick.unitName, sick.unitName,
sick.medicalFourTotalMoney, sick.medicalFourTotalMoney,
sick.selfPayMoney, sick.selfPayMoney,
@@ -243,6 +244,7 @@ public class SickHelpListController {
excelExportEntities.add(indexExcelExportEntity); excelExportEntities.add(indexExcelExportEntity);
excelExportEntities.add(new ExcelExportEntity("工资号", "loginName", 20)); excelExportEntities.add(new ExcelExportEntity("工资号", "loginName", 20));
excelExportEntities.add(new ExcelExportEntity("姓名", "userName", 20)); excelExportEntities.add(new ExcelExportEntity("姓名", "userName", 20));
excelExportEntities.add(new ExcelExportEntity("身份证号", "idcard", 30));
excelExportEntities.add(new ExcelExportEntity("单位", "unitName", 20)); excelExportEntities.add(new ExcelExportEntity("单位", "unitName", 20));
excelExportEntities.add(new ExcelExportEntity("状态", "userState", 20)); excelExportEntities.add(new ExcelExportEntity("状态", "userState", 20));
excelExportEntities.add(new ExcelExportEntity("是否会员", "isMember", 20)); excelExportEntities.add(new ExcelExportEntity("是否会员", "isMember", 20));
@@ -95,7 +95,7 @@ public class SickFundListController {
sfm.remark, sfm.remark,
u.unitid as unitId, u.unitid as unitId,
u.unitname as unitName, u.unitname as unitName,
u.idcard IFNULL(NULLIF(sfm.idcard, ''), u.idcard) AS idcard
from sick_fund_member sfm from sick_fund_member sfm
left join `user` u on u.loginname = sfm.loginName left join `user` u on u.loginname = sfm.loginName
$condition $condition
@@ -189,7 +189,7 @@ public class SickFundListController {
return Result.error("该记录已存在,请勿重复添加!"); return Result.error("该记录已存在,请勿重复添加!");
}*/ }*/
Trans.exec(() -> { Trans.exec(() -> {
dao.update(Sys_user.class, Chain.make("unitId", fundMember.getUnitId()), Cnd.where("loginname", "=", fundMember.getLoginName())); dao.update(Sys_user.class, Chain.make("unitId", fundMember.getUnitId()).add("idcard", fundMember.getIdcard()), Cnd.where("loginname", "=", fundMember.getLoginName()));
dao.update(fundMember); dao.update(fundMember);
}); });
return null; return null;
@@ -211,7 +211,10 @@ public class SickFundListController {
if (count > 0) { if (count > 0) {
return Result.error("该记录已存在,请勿重复添加!"); return Result.error("该记录已存在,请勿重复添加!");
}*/ }*/
dao.insert(fundMember); Trans.exec(() -> {
dao.update(Sys_user.class, Chain.make("unitId", fundMember.getUnitId()).add("idcard", fundMember.getIdcard()), Cnd.where("loginname", "=", fundMember.getLoginName()));
dao.insert(fundMember);
});
return null; return null;
} }
@@ -237,7 +240,7 @@ public class SickFundListController {
sfm.remark, sfm.remark,
u.unitid as unitId, u.unitid as unitId,
u.unitname as unitName, u.unitname as unitName,
u.idcard IFNULL(NULLIF(sfm.idcard, ''), u.idcard) AS idcard
from sick_fund_member sfm from sick_fund_member sfm
left join `user` u on u.loginname = sfm.loginName left join `user` u on u.loginname = sfm.loginName
$condition $condition
@@ -6,13 +6,16 @@ import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams; import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.hutool.core.collection.ListUtil; import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.StrUtil;
import io.v.nutz.annontation.ViReturn; import io.v.nutz.annontation.ViReturn;
import io.v.nutz.sickHelp.model.SickFundMember; import io.v.nutz.sickHelp.model.SickFundMember;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.util.ViTool; import io.v.nutz.util.ViTool;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
import org.nutz.dao.Dao; import org.nutz.dao.Dao;
import org.nutz.dao.Sqls; import org.nutz.dao.Sqls;
@@ -28,6 +31,7 @@ import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param; import org.nutz.mvc.annotation.Param;
import org.nutz.mvc.upload.TempFile; import org.nutz.mvc.upload.TempFile;
import org.nutz.mvc.upload.UploadAdaptor; import org.nutz.mvc.upload.UploadAdaptor;
import org.nutz.trans.Trans;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
@@ -71,7 +75,7 @@ public class SickHelpMemberController {
ImportParams importParams = new ImportParams(); ImportParams importParams = new ImportParams();
List<SickFundMember> list = ExcelImportUtil.importExcel(tempFile.getFile(), SickFundMember.class, importParams); List<SickFundMember> list = ExcelImportUtil.importExcel(tempFile.getFile(), SickFundMember.class, importParams);
List<String> loginNames = list.stream().map(v -> v.getLoginName()).collect(Collectors.toList()); List<String> loginNames = list.stream().map(v -> v.getLoginName()).collect(Collectors.toList());
Sql userSql = Sqls.create("select id,loginname,username,unitid,unitname,sex from user where loginname in (@loginNames)"); Sql userSql = Sqls.create("select u.id,u.loginname,u.username,u.unitid,u.unitname,u.sex,su.idcard from user u left join sys_user su on su.loginname = u.loginname where u.loginname in (@loginNames)");
userSql.setParam("loginNames", loginNames); userSql.setParam("loginNames", loginNames);
List<NutMap> users = (List<NutMap>) Daos.query(dao, userSql.toString(), Sqls.callback.maps()); List<NutMap> users = (List<NutMap>) Daos.query(dao, userSql.toString(), Sqls.callback.maps());
Map<String, NutMap> userMap = users.stream().collect(Collectors.toMap(v -> v.getString("loginname"), v -> v)); Map<String, NutMap> userMap = users.stream().collect(Collectors.toMap(v -> v.getString("loginname"), v -> v));
@@ -96,6 +100,9 @@ public class SickHelpMemberController {
fundMember.setUnitId(user.getString("unitid")); fundMember.setUnitId(user.getString("unitid"));
fundMember.setUnitName(user.getString("unitname")); fundMember.setUnitName(user.getString("unitname"));
fundMember.setSex(user.getString("sex")); fundMember.setSex(user.getString("sex"));
if (StrUtil.isBlank(fundMember.getIdcard())) {
fundMember.setIdcard(user.getString("idcard"));
}
// fundMember.setIsMember(true); // fundMember.setIsMember(true);
} }
fundMember.setIsMember("是".equals(fundMember.getMember())); fundMember.setIsMember("是".equals(fundMember.getMember()));
@@ -117,7 +124,14 @@ public class SickHelpMemberController {
List<List<SickFundMember>> splitFundMembers = ListUtil.split(Arrays.asList(fundMembers), 500); List<List<SickFundMember>> splitFundMembers = ListUtil.split(Arrays.asList(fundMembers), 500);
for (List<SickFundMember> splitFundMember : splitFundMembers) { for (List<SickFundMember> splitFundMember : splitFundMembers) {
new Thread(() -> { new Thread(() -> {
dao.insertOrUpdate(splitFundMember); Trans.exec(() -> {
for (SickFundMember fundMember : splitFundMember) {
if (StrUtil.isNotBlank(fundMember.getIdcard())) {
dao.update(Sys_user.class, Chain.make("idcard", fundMember.getIdcard()), Cnd.where("loginname", "=", fundMember.getLoginName()));
}
}
dao.insertOrUpdate(splitFundMember);
});
}).start(); }).start();
} }
return null; return null;
@@ -65,6 +65,12 @@ public class SickFundMember {
@ColDefine(type = ColType.VARCHAR, width = 1) @ColDefine(type = ColType.VARCHAR, width = 1)
private String sex; private String sex;
@Column
@Comment("身份证号")
@ColDefine(type = ColType.VARCHAR, width = 50)
@Excel(name = "身份证号", width = 30)
private String idcard;
@Column @Column
@Comment("是否会员") @Comment("是否会员")
@ColDefine(type = ColType.BOOLEAN) @ColDefine(type = ColType.BOOLEAN)
@@ -214,6 +214,11 @@ public class SickHelp {
*/ */
private String mutualGoldStartTime; private String mutualGoldStartTime;
/**
* 身份证号
*/
private String idcard;
public void setSubsidyMoney(BigDecimal subsidyMoney) { public void setSubsidyMoney(BigDecimal subsidyMoney) {
if (subsidyMoney != null) { if (subsidyMoney != null) {
subsidyMoney = subsidyMoney.setScale(2, BigDecimal.ROUND_HALF_UP); subsidyMoney = subsidyMoney.setScale(2, BigDecimal.ROUND_HALF_UP);
@@ -93,6 +93,8 @@ public class SickHelpImportServiceImpl extends ViServiceImpl<SickHelp> implement
if (fundMember != null) { if (fundMember != null) {
sick.setIdcard(StrUtil.isNotBlank(fundMember.getIdcard()) ? fundMember.getIdcard() : user == null ? null : user.getIdcard());
// sick.setUnitName(fundMember.getUnitName()); // sick.setUnitName(fundMember.getUnitName());
//本次导入的excel人员是否有重复数据 //本次导入的excel人员是否有重复数据
@@ -175,9 +177,10 @@ public class SickHelpImportServiceImpl extends ViServiceImpl<SickHelp> implement
@Override @Override
public List<SickFundMember> searchUser(String key) { public List<SickFundMember> searchUser(String key) {
Cnd cnd = Cnd.where(Cnd.likeEX("userName", key)).or(Cnd.likeEX("loginName", key)); Cnd cnd = Cnd.where(Cnd.likeEX("m.userName", key)).or(Cnd.likeEX("m.loginName", key));
cnd.or(Cnd.likeEX("m.idcard", key)).or(Cnd.likeEX("u.idcard", key));
Sql sql = Sqls.create("select * from sick_fund_member $condition"); Sql sql = Sqls.create("select m.*, IFNULL(NULLIF(m.idcard, ''), u.idcard) AS idcard from sick_fund_member m left join user u on u.loginname = m.loginName $condition");
sql.setCondition(cnd); sql.setCondition(cnd);
Pagination pagination = listPageMap(1, 10, sql); Pagination pagination = listPageMap(1, 10, sql);
return pagination.getList(); return pagination.getList();
@@ -51,7 +51,8 @@ public class SickHelpListServiceImpl extends ViServiceImpl<SickHelp> implements
SELECT SELECT
sick.*, sick.*,
u.unionname as unionName, u.unionname as unionName,
sfm.isMember sfm.isMember,
IFNULL(NULLIF(sfm.idcard, ''), u.idcard) AS idcard
FROM FROM
`sick_help` sick `sick_help` sick
LEFT JOIN sick_fund_member sfm on sfm.loginName = sick.loginName LEFT JOIN sick_fund_member sfm on sfm.loginName = sick.loginName
@@ -75,6 +76,8 @@ public class SickHelpListServiceImpl extends ViServiceImpl<SickHelp> implements
SqlExpressionGroup seg = new SqlExpressionGroup(); SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("sick.userName", subsidyUser); seg.orLike("sick.userName", subsidyUser);
seg.orLike("sick.loginName", subsidyUser); seg.orLike("sick.loginName", subsidyUser);
seg.orLike("sfm.idcard", subsidyUser);
seg.orLike("u.idcard", subsidyUser);
cnd.and(seg); cnd.and(seg);
} }
if (StrUtil.isNotBlank(pageForm.getPageOrderName()) && StrUtil.isNotBlank(pageForm.getPageOrderBy())) { if (StrUtil.isNotBlank(pageForm.getPageOrderName()) && StrUtil.isNotBlank(pageForm.getPageOrderBy())) {
@@ -92,6 +92,7 @@ layout("/layouts/platform.html"){
<!-- <el-input v-model="row.userName" maxlength="10" size="small"></el-input>--> <!-- <el-input v-model="row.userName" maxlength="10" size="small"></el-input>-->
<!-- </template>--> <!-- </template>-->
</el-table-column> </el-table-column>
<el-table-column label="身份证号" prop="idcard" width="200"></el-table-column>
<el-table-column label="单位" prop="unitName" show-overflow-tooltip width="150"> <el-table-column label="单位" prop="unitName" show-overflow-tooltip width="150">
<!-- <template scope="{row}">--> <!-- <template scope="{row}">-->
<!-- <el-input v-model="row.unitName" maxlength="10" size="small"></el-input>--> <!-- <el-input v-model="row.unitName" maxlength="10" size="small"></el-input>-->
@@ -76,41 +76,46 @@ layout("/layouts/platform.html"){
<vi-title2 title="填写补助数据"></vi-title2> <vi-title2 title="填写补助数据"></vi-title2>
<el-row> <el-row>
<el-col :lg="8" :xs="24"> <el-col :lg="6" :xs="24">
<el-form-item label="工号" prop="loginName"> <el-form-item label="工号" prop="loginName">
<el-select :disabled="formDisabled" <el-select :disabled="formDisabled"
:remote-method="searchUser" :remote-method="searchUser"
@change="userChange" @change="userChange"
clearable clearable
filterable filterable
placeholder="输入工号或者姓名查询" placeholder="输入工号、姓名或身份证号查询"
remote remote
reserve-keyword reserve-keyword
style="width: 100%" style="width: 100%"
v-model="formData.loginName"> v-model="formData.loginName">
<el-option <el-option
:key="item.loginName" :key="item.loginName"
:label="item.userName+'('+item.loginName+')'" :label="item.userName+'('+item.loginName+') '+(item.idcard || '')"
:value="item.loginName" :value="item.loginName"
v-for="item in userList" v-for="item in userList"
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :lg="8" :xs="24"> <el-col :lg="6" :xs="24">
<el-form-item label="姓名" prop="userName"> <el-form-item label="姓名" prop="userName">
<el-input :disabled="!this.formData.id" <el-input :disabled="!this.formData.id"
placeholder="输入工号之后自动显示" placeholder="输入工号之后自动显示"
v-model="formData.userName"></el-input> v-model="formData.userName"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :lg="8" :xs="24"> <el-col :lg="6" :xs="24">
<el-form-item label="身份证号" prop="idcard">
<el-input placeholder="选择工号之后自动显示" readonly
v-model="formData.idcard"></el-input>
</el-form-item>
</el-col>
<el-col :lg="6" :xs="24">
<el-form-item label="单位" prop="unitName"> <el-form-item label="单位" prop="unitName">
<el-input placeholder="输入工号之后自动显示" <el-input placeholder="输入工号之后自动显示"
v-model="formData.unitName"></el-input> v-model="formData.unitName"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
@@ -337,6 +342,7 @@ layout("/layouts/platform.html"){
this.$set(this.formData, 'subsidyDesc', resp_data.subsidyDesc) this.$set(this.formData, 'subsidyDesc', resp_data.subsidyDesc)
this.$set(this.formData, 'subsidyMoney', resp_data.subsidyMoney) this.$set(this.formData, 'subsidyMoney', resp_data.subsidyMoney)
this.$set(this.formData, 'unitName', resp_data.unitName) this.$set(this.formData, 'unitName', resp_data.unitName)
this.$set(this.formData, 'idcard', resp_data.idcard)
this.notifySuccess(resp_data.validMsg.join('、')) this.notifySuccess(resp_data.validMsg.join('、'))
} else { } else {
this.notifyWarning(resp_data.validMsg.join('、')) this.notifyWarning(resp_data.validMsg.join('、'))
@@ -376,6 +382,7 @@ layout("/layouts/platform.html"){
this.$set(this.formData, 'userName', user.userName) this.$set(this.formData, 'userName', user.userName)
this.$set(this.formData, 'unitName', user.unitName) this.$set(this.formData, 'unitName', user.unitName)
this.$set(this.formData, 'loginName', user.loginName) this.$set(this.formData, 'loginName', user.loginName)
this.$set(this.formData, 'idcard', user.idcard)
await this.getHistoryApplyRecords(user.loginName, this.formData.year) await this.getHistoryApplyRecords(user.loginName, this.formData.year)
}, },
async getHistoryApplyRecords(loginName, year) { async getHistoryApplyRecords(loginName, year) {
@@ -401,6 +408,8 @@ layout("/layouts/platform.html"){
await this.searchUser(loginName) await this.searchUser(loginName)
resp.data.year = resp.data.year.toString() resp.data.year = resp.data.year.toString()
this.formData = resp.data this.formData = resp.data
const user = this.userList.find(v => v.loginName === loginName)
this.$set(this.formData, 'idcard', user ? user.idcard : null)
await this.getHistoryApplyRecords(loginName, this.formData.year) await this.getHistoryApplyRecords(loginName, this.formData.year)
} }
}, },
@@ -412,4 +421,4 @@ layout("/layouts/platform.html"){
<!--# <!--#
} }
#--> #-->
@@ -45,7 +45,7 @@ layout("/layouts/platform.html"){
<div class="search-item"> <div class="search-item">
<div class="search-item-label">补助人:</div> <div class="search-item-label">补助人:</div>
<div class="search-item-option"> <div class="search-item-option">
<el-input clearable maxlength="10" placeholder="可输入补助人的工号或姓名进行查询" <el-input clearable maxlength="50" placeholder="可输入补助人的工号、姓名或身份证号进行查询"
v-model.trim="pageForm.subsidyUser"></el-input> v-model.trim="pageForm.subsidyUser"></el-input>
</div> </div>
</div> </div>
@@ -269,6 +269,7 @@ layout("/layouts/platform.html"){
{prop: 'year', label: '年度', sortable: true, fixed: 'left'}, {prop: 'year', label: '年度', sortable: true, fixed: 'left'},
{prop: 'userName', label: '姓名', fixed: 'left'}, {prop: 'userName', label: '姓名', fixed: 'left'},
{prop: 'loginName', label: '工号', fixed: 'left', width: 120}, {prop: 'loginName', label: '工号', fixed: 'left', width: 120},
{prop: 'idcard', label: '身份证号', fixed: 'left', width: 200},
{prop: 'unionName', label: '分工会', sortable: true, width: 150}, {prop: 'unionName', label: '分工会', sortable: true, width: 150},
{prop: 'unitName', label: '单位', sortable: true, width: 150}, {prop: 'unitName', label: '单位', sortable: true, width: 150},
@@ -100,6 +100,7 @@ layout("/layouts/platform.html"){
{prop: 'userName', label: '姓名'}, {prop: 'userName', label: '姓名'},
{prop: 'loginName', label: '工号'}, {prop: 'loginName', label: '工号'},
{prop: 'sex', label: '性别'}, {prop: 'sex', label: '性别'},
{prop: 'idcard', label: '身份证号'},
{prop: 'unitName', label: '单位'}, {prop: 'unitName', label: '单位'},
{prop: 'userState', label: '状态'}, {prop: 'userState', label: '状态'},
{prop: 'mutualGoldStartTime', label: '入会时间'}, {prop: 'mutualGoldStartTime', label: '入会时间'},
@@ -163,4 +164,4 @@ layout("/layouts/platform.html"){
<!--# <!--#
} }
#--> #-->
@@ -147,6 +147,9 @@ layout("/layouts/platform.html"){
<el-radio-button label="女"></el-radio-button> <el-radio-button label="女"></el-radio-button>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="身份证号" prop="idcard">
<el-input maxlength="50" v-model.trim="formData.idcard"></el-input>
</el-form-item>
<el-form-item label="单位" prop="unitId"> <el-form-item label="单位" prop="unitId">
<el-select clearable filterable style="width: 100%" <el-select clearable filterable style="width: 100%"
@@ -215,6 +218,7 @@ layout("/layouts/platform.html"){
loginName: [{required: true, message: '请输入工号', trigger: ['change', 'blur']}], loginName: [{required: true, message: '请输入工号', trigger: ['change', 'blur']}],
userName: [{required: true, message: '请输入姓名', trigger: ['change', 'blur']}], userName: [{required: true, message: '请输入姓名', trigger: ['change', 'blur']}],
// sex: [{required: true, message: '请选择性别', trigger: ['change', 'blur']}], // sex: [{required: true, message: '请选择性别', trigger: ['change', 'blur']}],
idcard: [{required: false, message: '请输入身份证号', trigger: ['change', 'blur']}],
unitName: [{required: false, message: '请输入单位', trigger: ['change', 'blur']}], unitName: [{required: false, message: '请输入单位', trigger: ['change', 'blur']}],
unitId: [{required: true, message: '请选择单位', trigger: ['change', 'blur']}], unitId: [{required: true, message: '请选择单位', trigger: ['change', 'blur']}],
isMember: [{required: true, message: '请选择是否会员', trigger: ['change', 'blur']}], isMember: [{required: true, message: '请选择是否会员', trigger: ['change', 'blur']}],
@@ -230,6 +234,7 @@ layout("/layouts/platform.html"){
userName: null, userName: null,
loginName: null, loginName: null,
sex: null, sex: null,
idcard: null,
unitName: null, unitName: null,
unitId: null, unitId: null,
isMember: null, isMember: null,