bug修复:

1、入会分工会审核:查看详情弹窗将“人员性质”改成“编制类别”
2、会员高级管理添加导出会员名单接口
This commit is contained in:
JyuHsin
2026-03-27 14:21:49 +08:00
parent 7097b9ec34
commit c71292d3c8
6 changed files with 120 additions and 6 deletions
@@ -49,6 +49,7 @@ import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
@@ -176,8 +177,12 @@ public class MemberChangeManageController {
return Result.success(map);
}
public void doExport() {
@At
@RepeatSubmit
@Aop(TransAop.READ_COMMITTED)
@Ok("void")
@ApiOperation("导出会员名单")
public void doExport(MemberManagePageForm pageForm, HttpServletResponse response) {
memberCommonService.assembleExcel(pageForm, response);
}
}
@@ -12,6 +12,7 @@ import org.nutz.dao.Cnd;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.dao.util.cri.Static;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import java.util.List;
@@ -59,6 +60,9 @@ public class MemberManagePageForm extends PageForm {
//变更来源
private List<Integer> changeOrigins;
//动态列名 json
private List<NutMap> columns;
public static void buildSearch(Cnd cnd, MemberManagePageForm pageForm) {
if (cnd == null) {
cnd = Cnd.NEW();
@@ -90,7 +94,7 @@ public class MemberManagePageForm extends PageForm {
cnd.andEX("u.personType", "=", pageForm.getPersonType());
if (StrUtil.isNotBlank(pageForm.getChangeDateBefore()) && StrUtil.isNotBlank(pageForm.getChangeDateEnd())) {
cnd.and(new Static(String.format("Date(his.changeTime) >= '%s' and Date(his.changeTime) <= '%s'", pageForm.getChangeDateBefore(), pageForm.getChangeDateEnd())));
cnd.and(new Static(java.lang.String.format("Date(his.changeTime) >= '%s' and Date(his.changeTime) <= '%s'", pageForm.getChangeDateBefore(), pageForm.getChangeDateEnd())));
}
if (Lang.isNotEmpty(pageForm.getChangeTypes())) {
@@ -10,6 +10,7 @@ import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberManagePageForm
import org.nutz.dao.sql.Sql;
import org.nutz.lang.util.NutMap;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
@@ -115,4 +116,11 @@ public interface MemberCommonService extends BaseService<Sys_user> {
* @param type 类型: apply or change
*/
void validateApplyOrChangeIsDoing(String userId, String type);
/**
* 导出会员名单
* @param pageForm
* @param response
*/
void assembleExcel(MemberManagePageForm pageForm, HttpServletResponse response);
}
@@ -1,5 +1,9 @@
package com.budwk.app.zhgh.staffmanage.member.service.impl;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
@@ -10,6 +14,7 @@ import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.exception.BaseException;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.base.utils.CommonDownloadUtil;
import com.budwk.app.flow.engine.FlowEngine;
import com.budwk.app.flow.entity.ProcessInstance;
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
@@ -20,6 +25,7 @@ import com.budwk.app.sys.services.SysUserService;
import com.budwk.app.sys.views.View_user;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.web.commons.base.Globals;
import com.budwk.app.zhgh.activity.basic.models.ActivityUserScope;
import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeOrigin;
import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeType;
@@ -30,6 +36,8 @@ import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
import com.budwk.app.zhgh.staffmanage.specialstaff.model.SpecialStaff;
import com.budwk.app.zhgh.welfare.model.WelfareList;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
@@ -42,10 +50,13 @@ import org.nutz.dao.util.cri.Static;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.json.Json;
import org.nutz.json.JsonException;
import org.nutz.lang.Lang;
import org.nutz.lang.random.R;
import org.nutz.lang.util.NutMap;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
@@ -566,4 +577,90 @@ public class MemberManageServiceImpl extends BaseServiceImpl<Sys_user> implement
}
return value.toString();
}
/**
* 导出会员名单
* @param pageForm
* @param response
*/
@Override
public void assembleExcel(MemberManagePageForm pageForm, HttpServletResponse response) {
Sql sql = Sqls.create("""
SELECT
u.id,
u.sex,
u.loginname,
u.username,
u.mobile,
u.unitId,
u.unitName,
u.unionId,
u.unionName,
u.birthday,
u.manyUnit,
CASE WHEN IFNULL(u.member,0)=0 THEN \'否\' WHEN u.member=1 THEN \'是\' ELSE \'未知\' END AS member,
u.userState,
u.preparedBy,
u.personType,
CASE WHEN IFNULL(u.welfareMember,0)=0 THEN \'否\' WHEN u.welfareMember=1 THEN \'是\' ELSE \'未知\' END AS welfareMember,
u.isModelWorker,
his.id hisId,
his.changeTypes,
his.changeTime
FROM
vw_user u
LEFT JOIN sys_user_history his ON his.loginname = u.loginname
$condition
""");
Cnd cnd = Cnd.NEW();
MemberManagePageForm.buildSearch(cnd, pageForm);
cnd.desc("his.changeTime");
cnd.groupBy("u.id");
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.and("u.unionId", "=", SecurityUtil.getUnionId());
}
sql.setCondition(cnd);
List<NutMap> resultListData = this.listMap(sql);
try {
//转换 “异动类型” 枚举值
if (!CollectionUtil.isEmpty(resultListData)) {
List<Map<String, Object>> memberChangeType = Globals.EnumMap.get("MemberChangeType");
for (NutMap partObj : resultListData) {
List<String> changeTypes = Json.fromJsonAsList(String.class, partObj.getString("changeTypes"));
String changeTypeNames = changeTypes.stream()
.filter(StringUtils::isNotBlank)
.map(changeType -> {
List<Map<String, Object>> menuList = memberChangeType.stream()
.filter(e -> e.get("code").equals(changeType))
.collect(Collectors.toList());
if (!CollectionUtil.isEmpty(menuList)) {
return menuList.stream().map(e -> (String) e.get("changeTypeName")).collect(Collectors.joining(","));
} else {
return "未知";
}
}).collect(Collectors.joining("、"));
partObj.put("changeTypes", changeTypeNames);
}
}
List<ExcelExportEntity> entityList = new ArrayList<>();
ExcelExportEntity no = new ExcelExportEntity("序号", "no", 10);
no.setFormat("isAddIndex");
entityList.add(no);
if (CollectionUtil.isNotEmpty(pageForm.getColumns())) {
for (NutMap e : pageForm.getColumns()) {
entityList.add(new ExcelExportEntity(e.getString("label"), e.getString("prop"), 40));
}
}
entityList.add(new ExcelExportEntity("更新时间", "changeTime", 20));
entityList.add(new ExcelExportEntity("异动类型", "changeTypes", 20));
entityList.add(new ExcelExportEntity("会员", "member", 40));
entityList.add(new ExcelExportEntity("福利会员", "welfareMember", 40));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, resultListData);
CommonDownloadUtil.download("会员名单.xlsx", workbook, response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@@ -49,7 +49,7 @@ layout("/layouts/platform.html"){
</el-card>
<el-card shadow="never" class="mt10">
<table-tool label="人员列表(工会小组或分工会提交的变更还需校工会审核哦)">
<table-tool label="人员列表(工会小组或分工会提交的变更还需校工会审核)">
<el-radio-group @change="doSearch" class="mr5"
size="small"
v-model="pageForm.isMember">
@@ -25,7 +25,7 @@ const INFO = {
<van-cell title="在职状态">{{ viewData.userState }}</van-cell>
<van-cell title="教职工类别">{{ viewData.personType }}</van-cell>
<van-cell title="人员性质">{{ viewData.preparedBy || '暂无' }}</van-cell>
<van-cell title="编制类别">{{ viewData.preparedBy || '暂无' }}</van-cell>
<template v-if="viewData.loginname === $store.state.user.loginnmae">
<van-cell title="家庭成员" class="column-cell">