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

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
sick.loginName,
sick.userName,
IFNULL(NULLIF(sfm.idcard, ''), u.idcard) AS idcard,
sick.unitName,
sick.medicalFourTotalMoney,
sick.selfPayMoney,
@@ -243,6 +244,7 @@ public class SickHelpListController {
excelExportEntities.add(indexExcelExportEntity);
excelExportEntities.add(new ExcelExportEntity("工资号", "loginName", 20));
excelExportEntities.add(new ExcelExportEntity("姓名", "userName", 20));
excelExportEntities.add(new ExcelExportEntity("身份证号", "idcard", 30));
excelExportEntities.add(new ExcelExportEntity("单位", "unitName", 20));
excelExportEntities.add(new ExcelExportEntity("状态", "userState", 20));
excelExportEntities.add(new ExcelExportEntity("是否会员", "isMember", 20));
@@ -95,7 +95,7 @@ public class SickFundListController {
sfm.remark,
u.unitid as unitId,
u.unitname as unitName,
u.idcard
IFNULL(NULLIF(sfm.idcard, ''), u.idcard) AS idcard
from sick_fund_member sfm
left join `user` u on u.loginname = sfm.loginName
$condition
@@ -189,7 +189,7 @@ public class SickFundListController {
return Result.error("该记录已存在,请勿重复添加!");
}*/
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);
});
return null;
@@ -211,7 +211,10 @@ public class SickFundListController {
if (count > 0) {
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;
}
@@ -237,7 +240,7 @@ public class SickFundListController {
sfm.remark,
u.unitid as unitId,
u.unitname as unitName,
u.idcard
IFNULL(NULLIF(sfm.idcard, ''), u.idcard) AS idcard
from sick_fund_member sfm
left join `user` u on u.loginname = sfm.loginName
$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.enmus.ExcelType;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.StrUtil;
import io.v.nutz.annontation.ViReturn;
import io.v.nutz.sickHelp.model.SickFundMember;
import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.util.ViTool;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
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.upload.TempFile;
import org.nutz.mvc.upload.UploadAdaptor;
import org.nutz.trans.Trans;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@@ -71,7 +75,7 @@ public class SickHelpMemberController {
ImportParams importParams = new ImportParams();
List<SickFundMember> list = ExcelImportUtil.importExcel(tempFile.getFile(), SickFundMember.class, importParams);
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);
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));
@@ -96,6 +100,9 @@ public class SickHelpMemberController {
fundMember.setUnitId(user.getString("unitid"));
fundMember.setUnitName(user.getString("unitname"));
fundMember.setSex(user.getString("sex"));
if (StrUtil.isBlank(fundMember.getIdcard())) {
fundMember.setIdcard(user.getString("idcard"));
}
// fundMember.setIsMember(true);
}
fundMember.setIsMember("是".equals(fundMember.getMember()));
@@ -117,7 +124,14 @@ public class SickHelpMemberController {
List<List<SickFundMember>> splitFundMembers = ListUtil.split(Arrays.asList(fundMembers), 500);
for (List<SickFundMember> splitFundMember : splitFundMembers) {
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();
}
return null;
@@ -65,6 +65,12 @@ public class SickFundMember {
@ColDefine(type = ColType.VARCHAR, width = 1)
private String sex;
@Column
@Comment("身份证号")
@ColDefine(type = ColType.VARCHAR, width = 50)
@Excel(name = "身份证号", width = 30)
private String idcard;
@Column
@Comment("是否会员")
@ColDefine(type = ColType.BOOLEAN)
@@ -214,6 +214,11 @@ public class SickHelp {
*/
private String mutualGoldStartTime;
/**
* 身份证号
*/
private String idcard;
public void setSubsidyMoney(BigDecimal subsidyMoney) {
if (subsidyMoney != null) {
subsidyMoney = subsidyMoney.setScale(2, BigDecimal.ROUND_HALF_UP);
@@ -93,6 +93,8 @@ public class SickHelpImportServiceImpl extends ViServiceImpl<SickHelp> implement
if (fundMember != null) {
sick.setIdcard(StrUtil.isNotBlank(fundMember.getIdcard()) ? fundMember.getIdcard() : user == null ? null : user.getIdcard());
// sick.setUnitName(fundMember.getUnitName());
//本次导入的excel人员是否有重复数据
@@ -175,9 +177,10 @@ public class SickHelpImportServiceImpl extends ViServiceImpl<SickHelp> implement
@Override
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);
Pagination pagination = listPageMap(1, 10, sql);
return pagination.getList();
@@ -51,7 +51,8 @@ public class SickHelpListServiceImpl extends ViServiceImpl<SickHelp> implements
SELECT
sick.*,
u.unionname as unionName,
sfm.isMember
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
@@ -75,6 +76,8 @@ public class SickHelpListServiceImpl extends ViServiceImpl<SickHelp> implements
SqlExpressionGroup seg = new SqlExpressionGroup();
seg.orLike("sick.userName", subsidyUser);
seg.orLike("sick.loginName", subsidyUser);
seg.orLike("sfm.idcard", subsidyUser);
seg.orLike("u.idcard", subsidyUser);
cnd.and(seg);
}
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>-->
<!-- </template>-->
</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">
<!-- <template scope="{row}">-->
<!-- <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>
<el-row>
<el-col :lg="8" :xs="24">
<el-col :lg="6" :xs="24">
<el-form-item label="工号" prop="loginName">
<el-select :disabled="formDisabled"
:remote-method="searchUser"
@change="userChange"
clearable
filterable
placeholder="输入工号或者姓名查询"
placeholder="输入工号、姓名或身份证号查询"
remote
reserve-keyword
style="width: 100%"
v-model="formData.loginName">
<el-option
:key="item.loginName"
:label="item.userName+'('+item.loginName+')'"
:label="item.userName+'('+item.loginName+') '+(item.idcard || '')"
:value="item.loginName"
v-for="item in userList"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :lg="8" :xs="24">
<el-col :lg="6" :xs="24">
<el-form-item label="姓名" prop="userName">
<el-input :disabled="!this.formData.id"
placeholder="输入工号之后自动显示"
v-model="formData.userName"></el-input>
</el-form-item>
</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-input placeholder="输入工号之后自动显示"
v-model="formData.unitName"></el-input>
</el-form-item>
</el-col>
</el-col>
</el-row>
<el-row :gutter="20">
@@ -337,6 +342,7 @@ layout("/layouts/platform.html"){
this.$set(this.formData, 'subsidyDesc', resp_data.subsidyDesc)
this.$set(this.formData, 'subsidyMoney', resp_data.subsidyMoney)
this.$set(this.formData, 'unitName', resp_data.unitName)
this.$set(this.formData, 'idcard', resp_data.idcard)
this.notifySuccess(resp_data.validMsg.join('、'))
} else {
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, 'unitName', user.unitName)
this.$set(this.formData, 'loginName', user.loginName)
this.$set(this.formData, 'idcard', user.idcard)
await this.getHistoryApplyRecords(user.loginName, this.formData.year)
},
async getHistoryApplyRecords(loginName, year) {
@@ -401,6 +408,8 @@ layout("/layouts/platform.html"){
await this.searchUser(loginName)
resp.data.year = resp.data.year.toString()
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)
}
},
@@ -412,4 +421,4 @@ layout("/layouts/platform.html"){
<!--#
}
#-->
#-->
@@ -45,7 +45,7 @@ layout("/layouts/platform.html"){
<div class="search-item">
<div class="search-item-label">补助人:</div>
<div class="search-item-option">
<el-input clearable maxlength="10" placeholder="可输入补助人的工号或姓名进行查询"
<el-input clearable maxlength="50" placeholder="可输入补助人的工号、姓名或身份证号进行查询"
v-model.trim="pageForm.subsidyUser"></el-input>
</div>
</div>
@@ -269,6 +269,7 @@ 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: 'unionName', label: '分工会', sortable: true, width: 150},
{prop: 'unitName', label: '单位', sortable: true, width: 150},
@@ -100,6 +100,7 @@ layout("/layouts/platform.html"){
{prop: 'userName', label: '姓名'},
{prop: 'loginName', label: '工号'},
{prop: 'sex', label: '性别'},
{prop: 'idcard', label: '身份证号'},
{prop: 'unitName', label: '单位'},
{prop: 'userState', 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-group>
</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-select clearable filterable style="width: 100%"
@@ -215,6 +218,7 @@ layout("/layouts/platform.html"){
loginName: [{required: true, message: '请输入工号', trigger: ['change', 'blur']}],
userName: [{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']}],
unitId: [{required: true, message: '请选择单位', trigger: ['change', 'blur']}],
isMember: [{required: true, message: '请选择是否会员', trigger: ['change', 'blur']}],
@@ -230,6 +234,7 @@ layout("/layouts/platform.html"){
userName: null,
loginName: null,
sex: null,
idcard: null,
unitName: null,
unitId: null,
isMember: null,