commit
This commit is contained in:
+5
-6
@@ -9,8 +9,7 @@ import com.budwk.app.base.result.Result;
|
|||||||
import com.budwk.app.sys.views.View_user;
|
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.AuthUtil;
|
||||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||||
import org.nutz.dao.Cnd;
|
import com.budwk.app.zhgh.staffmanage.member.service.MemberInfoService;
|
||||||
import org.nutz.dao.Dao;
|
|
||||||
import org.nutz.ioc.loader.annotation.Inject;
|
import org.nutz.ioc.loader.annotation.Inject;
|
||||||
import org.nutz.ioc.loader.annotation.IocBean;
|
import org.nutz.ioc.loader.annotation.IocBean;
|
||||||
import org.nutz.mvc.annotation.At;
|
import org.nutz.mvc.annotation.At;
|
||||||
@@ -24,12 +23,12 @@ import javax.validation.Valid;
|
|||||||
public class MemberApplyCommonController {
|
public class MemberApplyCommonController {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private Dao dao;
|
private MemberInfoService memberInfoService;
|
||||||
|
|
||||||
@At
|
@At
|
||||||
@SaCheckLogin
|
@SaCheckLogin
|
||||||
public Result findOne(@Valid String id) {
|
public Result findOne(@Valid String id) {
|
||||||
View_user user = dao.fetch(View_user.class, Cnd.where("id", "=", id));
|
View_user user = memberInfoService.getMemberInfoDetail(id);
|
||||||
if (ObjectUtil.isNull(user)) {
|
if (ObjectUtil.isNull(user)) {
|
||||||
return Result.error("用户信息不存在");
|
return Result.error("用户信息不存在");
|
||||||
}
|
}
|
||||||
@@ -39,8 +38,8 @@ public class MemberApplyCommonController {
|
|||||||
return Result.success(user);
|
return Result.success(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 分会主席只能查看本分会用户或未分配分会的用户 分工会操作员同主席权限一致
|
// 分会主席、分工会操作员只能查看本分会用户,无工会人员不再放行,避免空工会人员查看时报错。
|
||||||
if (AuthUtil.hasRoleOr(RoleConstant.BRANCH_UNION_CHAIRMAN.name(), RoleConstant.BRANCH_UNION_OPERATOR.name()) && (user.getUnionId().equals(SecurityUtil.getUnionId()) || StrUtil.isBlank(user.getUnionId()))) {
|
if (AuthUtil.hasRoleOr(RoleConstant.BRANCH_UNION_CHAIRMAN.name(), RoleConstant.BRANCH_UNION_OPERATOR.name()) && StrUtil.isNotBlank(user.getUnionId()) && user.getUnionId().equals(SecurityUtil.getUnionId())) {
|
||||||
user.setIdCard(DesensitizedUtil.idCardNum(user.getIdCard(), 3, 4));
|
user.setIdCard(DesensitizedUtil.idCardNum(user.getIdCard(), 3, 4));
|
||||||
user.setMobile(DesensitizedUtil.mobilePhone(user.getMobile()));
|
user.setMobile(DesensitizedUtil.mobilePhone(user.getMobile()));
|
||||||
return Result.success(user);
|
return Result.success(user);
|
||||||
|
|||||||
+12
-7
@@ -10,6 +10,7 @@ import com.budwk.app.base.result.Result;
|
|||||||
import com.budwk.app.base.utils.PageUtil;
|
import com.budwk.app.base.utils.PageUtil;
|
||||||
import com.budwk.app.bpm.service.BpmService;
|
import com.budwk.app.bpm.service.BpmService;
|
||||||
import com.budwk.app.flow.engine.FlowEngine;
|
import com.budwk.app.flow.engine.FlowEngine;
|
||||||
|
import com.budwk.app.sys.models.Sys_union;
|
||||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
||||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||||
import com.budwk.app.zhgh.staffmanage.member.models.MemberChangeRecord;
|
import com.budwk.app.zhgh.staffmanage.member.models.MemberChangeRecord;
|
||||||
@@ -73,7 +74,7 @@ public class MemberChangeMineController {
|
|||||||
info.loginname,
|
info.loginname,
|
||||||
info.sex,
|
info.sex,
|
||||||
info.unitName,
|
info.unitName,
|
||||||
info.unionName,
|
IFNULL(su.name, info.unionName) AS unionName,
|
||||||
info.userState,
|
info.userState,
|
||||||
info.preparedBy,
|
info.preparedBy,
|
||||||
info.personType,
|
info.personType,
|
||||||
@@ -100,16 +101,15 @@ public class MemberChangeMineController {
|
|||||||
LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id
|
LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id
|
||||||
LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10
|
LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10
|
||||||
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
|
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
|
||||||
|
-- 使用工会表实时名称展示,避免历史变更记录冗余工会名称不一致。
|
||||||
|
LEFT JOIN sys_union su ON su.id = info.unionId
|
||||||
$condition
|
$condition
|
||||||
""");
|
""");
|
||||||
Cnd cnd = Cnd.NEW();
|
Cnd cnd = Cnd.NEW();
|
||||||
pageForm.buildSearch(cnd, "info.");
|
pageForm.buildSearch(cnd, "info.");
|
||||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_MEMBER_ADMIN.name())) {
|
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||||
if (AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name())) {
|
// 除超管和校工会管理员外,其他角色只查看当前所属分工会的变更申请。
|
||||||
cnd.and("info.unionId", "=", SecurityUtil.getUnionId());
|
cnd.and("info.unionId", "=", SecurityUtil.getUnionId());
|
||||||
} else {
|
|
||||||
cnd.and("info.userId", "=", SecurityUtil.getUserId());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||||
cnd.desc("info.applyDateTime");
|
cnd.desc("info.applyDateTime");
|
||||||
@@ -152,6 +152,11 @@ public class MemberChangeMineController {
|
|||||||
public Result findMemberChangeRecord(String id){
|
public Result findMemberChangeRecord(String id){
|
||||||
MemberChangeRecord record = dao.fetch(MemberChangeRecord.class, id);
|
MemberChangeRecord record = dao.fetch(MemberChangeRecord.class, id);
|
||||||
NutMap nutMap = Lang.obj2nutmap(record);
|
NutMap nutMap = Lang.obj2nutmap(record);
|
||||||
|
Sys_union union = dao.fetch(Sys_union.class, record.getUnionId());
|
||||||
|
// 查看页所属工会与列表一致,优先使用 unionId 对应的实时工会名称。
|
||||||
|
if (Lang.isNotEmpty(union)) {
|
||||||
|
nutMap.put("unionName", union.getName());
|
||||||
|
}
|
||||||
|
|
||||||
List<NutMap> changeInfos = memberCommonService.getChangeInfos(nutMap.getString("id"));
|
List<NutMap> changeInfos = memberCommonService.getChangeInfos(nutMap.getString("id"));
|
||||||
nutMap.put("changeInfos", changeInfos);
|
nutMap.put("changeInfos", changeInfos);
|
||||||
|
|||||||
+55
@@ -0,0 +1,55 @@
|
|||||||
|
package com.budwk.app.zhgh.staffmanage.member.controller.check;
|
||||||
|
|
||||||
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import com.budwk.app.base.param.PageForm;
|
||||||
|
import com.budwk.app.base.result.Result;
|
||||||
|
import com.budwk.app.zhgh.staffmanage.member.service.MemberCheckTaskService;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.nutz.ioc.loader.annotation.Inject;
|
||||||
|
import org.nutz.ioc.loader.annotation.IocBean;
|
||||||
|
import org.nutz.mvc.annotation.At;
|
||||||
|
import org.nutz.mvc.annotation.Ok;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author zzr
|
||||||
|
* @name:MemberCheckConfirmController
|
||||||
|
* @Date 2025/9/26 15:31
|
||||||
|
* @注释 会员核对确认统计
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@IocBean
|
||||||
|
@Ok("json")
|
||||||
|
@At("/platform/member/check/confirm")
|
||||||
|
public class MemberCheckConfirmController {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private MemberCheckTaskService memberCheckTaskService;
|
||||||
|
|
||||||
|
@At("")
|
||||||
|
@Ok("beetl:/platform/zhgh/staffmanage/member/check/confirm/index.html")
|
||||||
|
@SaCheckPermission("member.check.confirm")
|
||||||
|
public void index() {}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@ApiOperation("工会确认情况分页统计")
|
||||||
|
@SaCheckPermission("member.check.confirm")
|
||||||
|
public Result pageData(PageForm pageForm, Integer year, String checkTaskId, String unionId) {
|
||||||
|
return Result.success(memberCheckTaskService.confirmStatistics(
|
||||||
|
pageForm.getPageNumber(),
|
||||||
|
pageForm.getPageSize(),
|
||||||
|
year,
|
||||||
|
checkTaskId,
|
||||||
|
unionId
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@ApiOperation("按年度查询事项")
|
||||||
|
@SaCheckPermission("member.check.confirm")
|
||||||
|
public Result listEnabledTask(Integer year) {
|
||||||
|
return Result.success(memberCheckTaskService.listEnabledTask(year == null ? DateUtil.thisYear() : year));
|
||||||
|
}
|
||||||
|
}
|
||||||
+229
@@ -0,0 +1,229 @@
|
|||||||
|
package com.budwk.app.zhgh.staffmanage.member.controller.check;
|
||||||
|
|
||||||
|
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.dev33.satoken.annotation.SaCheckPermission;
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import com.budwk.app.base.annotation.SLog;
|
||||||
|
import com.budwk.app.base.model.ExcelImportRes;
|
||||||
|
import com.budwk.app.base.result.Result;
|
||||||
|
import com.budwk.app.base.utils.CommonDownloadUtil;
|
||||||
|
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||||
|
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberCheckPageForm;
|
||||||
|
import com.budwk.app.zhgh.staffmanage.member.service.MemberCheckTaskService;
|
||||||
|
import com.budwk.app.zhgh.staffmanage.member.template.MemberCheckTaskUserImportTemp;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.poi.ss.usermodel.Workbook;
|
||||||
|
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||||
|
import org.nutz.ioc.aop.Aop;
|
||||||
|
import org.nutz.ioc.loader.annotation.Inject;
|
||||||
|
import org.nutz.ioc.loader.annotation.IocBean;
|
||||||
|
import org.nutz.lang.util.NutMap;
|
||||||
|
import org.nutz.mvc.annotation.AdaptBy;
|
||||||
|
import org.nutz.mvc.annotation.At;
|
||||||
|
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 javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author zzr
|
||||||
|
* @name:MemberCheckRosterController
|
||||||
|
* @Date 2025/9/24 11:24
|
||||||
|
* @注释 会员核对人员名单
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@IocBean
|
||||||
|
@Ok("json")
|
||||||
|
@At("/platform/member/check/roster")
|
||||||
|
public class MemberCheckRosterController {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private MemberCheckTaskService memberCheckTaskService;
|
||||||
|
|
||||||
|
@At("")
|
||||||
|
@Ok("beetl:/platform/zhgh/staffmanage/member/check/roster/index.html")
|
||||||
|
@SaCheckPermission("member.check.roster")
|
||||||
|
public void index() {}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@ApiOperation("查询已发布事项")
|
||||||
|
@SaCheckPermission("member.check.roster")
|
||||||
|
public Result listEnabledTask(Integer year) {
|
||||||
|
return Result.success(memberCheckTaskService.listEnabledTask(year == null ? DateUtil.thisYear() : year));
|
||||||
|
}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@ApiOperation("人员名单分页查询")
|
||||||
|
@SaCheckPermission("member.check.roster")
|
||||||
|
public Result pageData(@Param("pageForm") MemberCheckPageForm pageForm) {
|
||||||
|
return Result.success(memberCheckTaskService.checkUserPageData(pageForm));
|
||||||
|
}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@ApiOperation("分页查询可添加人员")
|
||||||
|
@SaCheckPermission("member.check.roster")
|
||||||
|
@Ok("json:{dateFormat:'yyyy-MM-dd'}")
|
||||||
|
public Result notCheckUserPageData(@Param("pageForm") MemberCheckPageForm pageForm) {
|
||||||
|
if (StrUtil.isBlank(pageForm.getCheckTaskId())) {
|
||||||
|
return Result.error("请选择事项");
|
||||||
|
}
|
||||||
|
return Result.success(memberCheckTaskService.notCheckUserPageData(pageForm));
|
||||||
|
}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@ApiOperation("按筛选条件添加人员")
|
||||||
|
@Aop(TransAop.READ_COMMITTED)
|
||||||
|
@SaCheckPermission("member.check.roster")
|
||||||
|
public Result addCheckUser(@Param("pageForm") MemberCheckPageForm pageForm) {
|
||||||
|
if (StrUtil.isBlank(pageForm.getCheckTaskId())) {
|
||||||
|
return Result.error("请选择事项");
|
||||||
|
}
|
||||||
|
NutMap result = memberCheckTaskService.addCheckUser(pageForm);
|
||||||
|
if (result.getInt("code") == 0) {
|
||||||
|
return Result.success(result.getString("msg"));
|
||||||
|
}
|
||||||
|
return Result.error(result.getString("msg"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@ApiOperation("按事项和工会确认名单")
|
||||||
|
@Aop(TransAop.READ_COMMITTED)
|
||||||
|
@SaCheckPermission("member.check.roster")
|
||||||
|
@SLog(tag = "会员核对名单", msg = "按事项和工会确认名单")
|
||||||
|
public Result doConfirmUser(String checkTaskId, String unionId, Boolean flag) {
|
||||||
|
if (StrUtil.isBlank(checkTaskId)) {
|
||||||
|
return Result.error("请选择事项");
|
||||||
|
}
|
||||||
|
if (StrUtil.isBlank(unionId)) {
|
||||||
|
unionId = SecurityUtil.getUnionId();
|
||||||
|
}
|
||||||
|
if (StrUtil.isBlank(unionId)) {
|
||||||
|
return Result.error("请选择分工会");
|
||||||
|
}
|
||||||
|
NutMap result = memberCheckTaskService.confirmByTaskAndUnion(checkTaskId, unionId, flag);
|
||||||
|
if (result.getInt("code") == 0) {
|
||||||
|
return Result.success(result.getString("msg"));
|
||||||
|
}
|
||||||
|
return Result.error(result.getString("msg"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@ApiOperation("按勾选人员确认名单")
|
||||||
|
@Aop(TransAop.READ_COMMITTED)
|
||||||
|
@SaCheckPermission("member.check.roster")
|
||||||
|
@SLog(tag = "会员核对名单", msg = "按勾选人员确认名单")
|
||||||
|
public Result doConfirmSelected(String ids, Boolean flag) {
|
||||||
|
String[] idArray = parseIds(ids);
|
||||||
|
if (idArray.length == 0) {
|
||||||
|
return Result.error("请选择需要操作的人员");
|
||||||
|
}
|
||||||
|
memberCheckTaskService.confirmSelected(idArray, flag);
|
||||||
|
return Result.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@ApiOperation("按勾选人员删除名单")
|
||||||
|
@Aop(TransAop.READ_COMMITTED)
|
||||||
|
@SaCheckPermission("member.check.roster")
|
||||||
|
@SLog(tag = "会员核对名单", msg = "按勾选人员删除名单")
|
||||||
|
public Result deleteSelected(String ids) {
|
||||||
|
String[] idArray = parseIds(ids);
|
||||||
|
if (idArray.length == 0) {
|
||||||
|
return Result.error("请选择需要删除的人员");
|
||||||
|
}
|
||||||
|
memberCheckTaskService.deleteSelected(idArray);
|
||||||
|
return Result.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@Ok("void")
|
||||||
|
@ApiOperation("下载人员名单导入模板")
|
||||||
|
@SaCheckPermission("member.check.roster")
|
||||||
|
public void downloadTem(HttpServletResponse response) {
|
||||||
|
List<ExcelExportEntity> entities = new ArrayList<>();
|
||||||
|
entities.add(new ExcelExportEntity("工号", "loginname", 20));
|
||||||
|
entities.add(new ExcelExportEntity("姓名", "username", 20));
|
||||||
|
ExportParams exportParams = new ExportParams();
|
||||||
|
exportParams.setType(ExcelType.XSSF);
|
||||||
|
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entities, Collections.emptyList());
|
||||||
|
CommonDownloadUtil.download("会员核对人员名单导入模板.xlsx", workbook, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@ApiOperation("导入人员名单")
|
||||||
|
@Aop(TransAop.READ_COMMITTED)
|
||||||
|
@SaCheckPermission("member.check.roster")
|
||||||
|
@AdaptBy(type = UploadAdaptor.class, args = {"ioc:fileUpload"})
|
||||||
|
public Result importCheckUser(TempFile file, String checkTaskId) {
|
||||||
|
if (file == null || file.getFile() == null) {
|
||||||
|
return Result.error("请选择导入文件");
|
||||||
|
}
|
||||||
|
if (StrUtil.isBlank(checkTaskId)) {
|
||||||
|
return Result.error("请选择事项");
|
||||||
|
}
|
||||||
|
ExcelImportRes<MemberCheckTaskUserImportTemp> result = memberCheckTaskService.importCheckUser(file.getFile(), checkTaskId);
|
||||||
|
return Result.success(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@Ok("void")
|
||||||
|
@ApiOperation("导出人员名单")
|
||||||
|
@SaCheckPermission("member.check.roster")
|
||||||
|
public void exportCheckUser(@Param("pageForm") MemberCheckPageForm pageForm, HttpServletResponse response) {
|
||||||
|
List<NutMap> list = memberCheckTaskService.checkUserList(pageForm);
|
||||||
|
for (int i = 0; i < list.size(); i++) {
|
||||||
|
NutMap row = list.get(i);
|
||||||
|
row.put("index", i + 1);
|
||||||
|
row.put("branchUnionCheckedText", Boolean.TRUE.equals(row.getBoolean("branchUnionChecked")) ? "已确认" : "未确认");
|
||||||
|
Object auditTime = row.get("auditTime");
|
||||||
|
if (auditTime instanceof java.util.Date) {
|
||||||
|
row.put("auditTimeText", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format((java.util.Date) auditTime));
|
||||||
|
} else if (auditTime != null) {
|
||||||
|
row.put("auditTimeText", auditTime.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<ExcelExportEntity> entityList = new ArrayList<>();
|
||||||
|
entityList.add(new ExcelExportEntity("序号", "index", 10));
|
||||||
|
entityList.add(new ExcelExportEntity("工号", "loginname", 20));
|
||||||
|
entityList.add(new ExcelExportEntity("姓名", "username", 20));
|
||||||
|
entityList.add(new ExcelExportEntity("性别", "sex", 20));
|
||||||
|
entityList.add(new ExcelExportEntity("所属工会", "unionName", 20));
|
||||||
|
entityList.add(new ExcelExportEntity("所属单位", "unitName", 20));
|
||||||
|
entityList.add(new ExcelExportEntity("事项名称", "taskName", 30));
|
||||||
|
entityList.add(new ExcelExportEntity("手机号", "mobile", 20));
|
||||||
|
entityList.add(new ExcelExportEntity("身份证号", "idCard", 25));
|
||||||
|
entityList.add(new ExcelExportEntity("是否确认", "branchUnionCheckedText", 20));
|
||||||
|
entityList.add(new ExcelExportEntity("确认时间", "auditTimeText", 25));
|
||||||
|
|
||||||
|
ExportParams exportParams = new ExportParams();
|
||||||
|
exportParams.setType(ExcelType.XSSF);
|
||||||
|
exportParams.setTitle("会员核对人员名单");
|
||||||
|
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, list);
|
||||||
|
CommonDownloadUtil.download("会员核对人员名单.xlsx", workbook, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String[] parseIds(String ids) {
|
||||||
|
if (StrUtil.isBlank(ids)) {
|
||||||
|
return new String[0];
|
||||||
|
}
|
||||||
|
String value = ids.trim();
|
||||||
|
if (value.startsWith("[")) {
|
||||||
|
return JSONUtil.parseArray(value).toList(String.class).toArray(new String[0]);
|
||||||
|
}
|
||||||
|
return value.split(",");
|
||||||
|
}
|
||||||
|
}
|
||||||
+47
-56
@@ -1,50 +1,30 @@
|
|||||||
package com.budwk.app.zhgh.staffmanage.member.controller.check;
|
package com.budwk.app.zhgh.staffmanage.member.controller.check;
|
||||||
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||||
import cn.dev33.satoken.annotation.SaMode;
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.budwk.app.base.annotation.SLog;
|
import com.budwk.app.base.annotation.SLog;
|
||||||
import com.budwk.app.base.constant.RoleConstant;
|
|
||||||
import com.budwk.app.base.page.Pagination;
|
|
||||||
import com.budwk.app.base.result.Result;
|
import com.budwk.app.base.result.Result;
|
||||||
import com.budwk.app.base.utils.ManyAddOrRenewUtil;
|
|
||||||
import com.budwk.app.sys.models.Sys_user;
|
|
||||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
|
||||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
|
||||||
import com.budwk.app.zhgh.staffmanage.member.models.check.MemberCheckTask;
|
import com.budwk.app.zhgh.staffmanage.member.models.check.MemberCheckTask;
|
||||||
import com.budwk.app.zhgh.staffmanage.member.models.check.MemberCheckTaskUser;
|
import com.budwk.app.zhgh.staffmanage.member.models.check.MemberCheckTaskUser;
|
||||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberCheckPageForm;
|
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberCheckPageForm;
|
||||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberStatisticsPageForm;
|
|
||||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberCheckTaskService;
|
import com.budwk.app.zhgh.staffmanage.member.service.MemberCheckTaskService;
|
||||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberCommonService;
|
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.ArrayUtils;
|
|
||||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||||
import org.nutz.dao.Cnd;
|
import org.nutz.dao.Cnd;
|
||||||
import org.nutz.dao.Dao;
|
|
||||||
import org.nutz.dao.Sqls;
|
|
||||||
import org.nutz.dao.sql.Sql;
|
|
||||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
|
||||||
import org.nutz.dao.util.cri.Static;
|
|
||||||
import org.nutz.ioc.aop.Aop;
|
import org.nutz.ioc.aop.Aop;
|
||||||
import org.nutz.ioc.loader.annotation.Inject;
|
import org.nutz.ioc.loader.annotation.Inject;
|
||||||
import org.nutz.ioc.loader.annotation.IocBean;
|
import org.nutz.ioc.loader.annotation.IocBean;
|
||||||
import org.nutz.lang.Lang;
|
|
||||||
import org.nutz.lang.Strings;
|
|
||||||
import org.nutz.lang.random.R;
|
|
||||||
import org.nutz.mvc.annotation.At;
|
import org.nutz.mvc.annotation.At;
|
||||||
import org.nutz.mvc.annotation.Ok;
|
import org.nutz.mvc.annotation.Ok;
|
||||||
|
import org.nutz.mvc.annotation.Param;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
* @Author zzr
|
* @Author zzr
|
||||||
* @name:MemberCheckTaskController
|
* @name:MemberCheckTaskController
|
||||||
* @Date 2025/9/24 9:53
|
* @Date 2025/9/24 9:53
|
||||||
* @注释 会员核对任务创建
|
* @注释 会员核对事项管理
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@IocBean
|
@IocBean
|
||||||
@@ -52,10 +32,6 @@ import java.util.List;
|
|||||||
@At("/platform/member/check/task")
|
@At("/platform/member/check/task")
|
||||||
public class MemberCheckTaskController {
|
public class MemberCheckTaskController {
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Dao dao;
|
|
||||||
@Inject
|
|
||||||
private ManyAddOrRenewUtil renewUtil;
|
|
||||||
@Inject
|
@Inject
|
||||||
private MemberCheckTaskService memberCheckTaskService;
|
private MemberCheckTaskService memberCheckTaskService;
|
||||||
|
|
||||||
@@ -64,44 +40,59 @@ public class MemberCheckTaskController {
|
|||||||
@SaCheckPermission("member.check.task")
|
@SaCheckPermission("member.check.task")
|
||||||
public void index() {}
|
public void index() {}
|
||||||
|
|
||||||
|
|
||||||
@At
|
@At
|
||||||
@ApiOperation("页面数据")
|
@ApiOperation("事项页面数据")
|
||||||
@SaCheckPermission("member.check.task")
|
@SaCheckPermission("member.check.task")
|
||||||
public Result pageData(MemberCheckPageForm pageForm) {
|
public Result pageData(MemberCheckPageForm pageForm) {
|
||||||
Sql sql = Sqls.create("select * from member_check_task $condition");
|
return Result.success(memberCheckTaskService.taskPageData(pageForm));
|
||||||
Cnd cnd = Cnd.NEW();
|
|
||||||
cnd.andEX("`year`", "=", pageForm.getYear());
|
|
||||||
cnd.andEX("checkTaskId", "=", pageForm.getCheckTaskId());
|
|
||||||
sql.setCondition(cnd);
|
|
||||||
Pagination pagination = memberCheckTaskService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
|
||||||
return Result.success(pagination);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@At
|
@At
|
||||||
@ApiOperation("添加或修改")
|
@ApiOperation("添加或修改事项")
|
||||||
@Aop(TransAop.READ_COMMITTED)
|
@Aop(TransAop.READ_COMMITTED)
|
||||||
@SaCheckPermission("member.check.task")
|
@SaCheckPermission("member.check.task")
|
||||||
@SLog(tag = "会员核对任务创建", msg = "添加或修改会员核对任务创建:${args[0].taskName}")
|
@SLog(tag = "会员核对事项管理", msg = "添加或修改会员核对事项:${args[0].taskName}")
|
||||||
public Result doAddOrModify(MemberCheckTask memberCheckTask) {
|
public Result doAddOrModify(@Param("data") MemberCheckTask memberCheckTask) {
|
||||||
dao.insertOrUpdate(memberCheckTask);
|
if (StrUtil.isBlank(memberCheckTask.getTaskName())) {
|
||||||
|
return Result.error("请输入事项名称");
|
||||||
dao.clear(MemberCheckTaskUser.class, Cnd.where(MemberCheckTaskUser::getCheckTaskId, "=", memberCheckTask.getId()));
|
}
|
||||||
|
if (memberCheckTask.getStartTime() == null || memberCheckTask.getEndTime() == null) {
|
||||||
List<String> userStates = memberCheckTask.getUserStates();
|
return Result.error("请选择开始时间和结束时间");
|
||||||
|
}
|
||||||
List<Sys_user> query = dao.query(Sys_user.class, Cnd.where(Sys_user::getUserState, "in", userStates).or(Sys_user::getMember, "=", 1));
|
if (memberCheckTask.getStartTime().after(memberCheckTask.getEndTime())) {
|
||||||
List<MemberCheckTaskUser> list = query.stream().map(v -> {
|
return Result.error("开始时间不能晚于结束时间");
|
||||||
MemberCheckTaskUser memberCheckTaskUser = new MemberCheckTaskUser();
|
}
|
||||||
BeanUtil.copyProperties(v, memberCheckTaskUser);
|
memberCheckTaskService.saveTask(memberCheckTask);
|
||||||
memberCheckTaskUser.setId(R.UU32());
|
|
||||||
memberCheckTaskUser.setCheckTaskId(memberCheckTask.getId());
|
|
||||||
memberCheckTaskUser.setUserId(v.getId());
|
|
||||||
return memberCheckTaskUser;
|
|
||||||
}).toList();
|
|
||||||
|
|
||||||
renewUtil.asyncExecuteFastInsert(list, 200);
|
|
||||||
return Result.success();
|
return Result.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@ApiOperation("状态切换")
|
||||||
|
@Aop(TransAop.READ_COMMITTED)
|
||||||
|
@SaCheckPermission("member.check.task")
|
||||||
|
public Result switchChange(MemberCheckTask memberCheckTask) {
|
||||||
|
memberCheckTaskService.dao().updateIgnoreNull(memberCheckTask);
|
||||||
|
return Result.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@ApiOperation("删除事项")
|
||||||
|
@Aop(TransAop.READ_COMMITTED)
|
||||||
|
@SaCheckPermission("member.check.task")
|
||||||
|
public Result delete(@Param("id") String id) {
|
||||||
|
if (StrUtil.isBlank(id)) {
|
||||||
|
return Result.error("请选择需要删除的事项");
|
||||||
|
}
|
||||||
|
memberCheckTaskService.dao().delete(MemberCheckTask.class, id);
|
||||||
|
memberCheckTaskService.dao().update(MemberCheckTaskUser.class,
|
||||||
|
org.nutz.dao.Chain.make("delFlag", true),
|
||||||
|
Cnd.where(MemberCheckTaskUser::getCheckTaskId, "=", id));
|
||||||
|
return Result.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
@At
|
||||||
|
@SaCheckPermission("member.check.task")
|
||||||
|
public Result findOne(String id) {
|
||||||
|
return Result.success(memberCheckTaskService.dao().fetch(MemberCheckTask.class, id));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-43
@@ -1,43 +0,0 @@
|
|||||||
package com.budwk.app.zhgh.staffmanage.member.controller.check;
|
|
||||||
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
|
||||||
import com.budwk.app.base.result.Result;
|
|
||||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberCheckPageForm;
|
|
||||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberCheckTaskService;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.nutz.dao.Dao;
|
|
||||||
import org.nutz.ioc.loader.annotation.Inject;
|
|
||||||
import org.nutz.ioc.loader.annotation.IocBean;
|
|
||||||
import org.nutz.mvc.annotation.At;
|
|
||||||
import org.nutz.mvc.annotation.Ok;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @version 1.0
|
|
||||||
* @Author zzr
|
|
||||||
* @name:MemberCheckTaskSchoolController
|
|
||||||
* @Date 2025/9/26 15:31
|
|
||||||
* @注释 校工会核对
|
|
||||||
*/
|
|
||||||
@Slf4j
|
|
||||||
@IocBean
|
|
||||||
@Ok("json")
|
|
||||||
@At("/platform/member/checkTask/school")
|
|
||||||
public class MemberCheckTaskSchoolController {
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Dao dao;
|
|
||||||
@Inject
|
|
||||||
private MemberCheckTaskService memberCheckTaskService;
|
|
||||||
|
|
||||||
@At("")
|
|
||||||
@Ok("beetl:/platform/zhgh/staffmanage/member/check/school/index.html")
|
|
||||||
@SaCheckPermission("member.checkTask.school")
|
|
||||||
public void index() {}
|
|
||||||
|
|
||||||
@At
|
|
||||||
@SaCheckPermission("member.checkTask.school")
|
|
||||||
public Result pageData(MemberCheckPageForm pageForm) {
|
|
||||||
|
|
||||||
return Result.success();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-179
@@ -1,179 +0,0 @@
|
|||||||
package com.budwk.app.zhgh.staffmanage.member.controller.check;
|
|
||||||
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
|
||||||
import com.budwk.app.base.constant.RoleConstant;
|
|
||||||
import com.budwk.app.base.page.Pagination;
|
|
||||||
import com.budwk.app.base.result.Result;
|
|
||||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
|
||||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
|
||||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberCheckPageForm;
|
|
||||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberCheckTaskService;
|
|
||||||
import io.swagger.annotations.ApiOperation;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.nutz.dao.Cnd;
|
|
||||||
import org.nutz.dao.Dao;
|
|
||||||
import org.nutz.dao.Sqls;
|
|
||||||
import org.nutz.dao.sql.Sql;
|
|
||||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
|
||||||
import org.nutz.ioc.loader.annotation.Inject;
|
|
||||||
import org.nutz.ioc.loader.annotation.IocBean;
|
|
||||||
import org.nutz.lang.Lang;
|
|
||||||
import org.nutz.lang.Strings;
|
|
||||||
import org.nutz.mvc.annotation.At;
|
|
||||||
import org.nutz.mvc.annotation.Ok;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @version 1.0
|
|
||||||
* @Author zzr
|
|
||||||
* @name:MemberCheckTaskUnionController
|
|
||||||
* @Date 2025/9/24 11:24
|
|
||||||
* @注释
|
|
||||||
*/
|
|
||||||
@Slf4j
|
|
||||||
@IocBean
|
|
||||||
@Ok("json")
|
|
||||||
@At("/platform/member/checkTask/union")
|
|
||||||
public class MemberCheckTaskUnionController {
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Dao dao;
|
|
||||||
@Inject
|
|
||||||
private MemberCheckTaskService memberCheckTaskService;
|
|
||||||
|
|
||||||
@At("")
|
|
||||||
@Ok("beetl:/platform/zhgh/staffmanage/member/check/union/index.html")
|
|
||||||
@SaCheckPermission("member.checkTask.union")
|
|
||||||
public void index() {}
|
|
||||||
|
|
||||||
@At
|
|
||||||
@ApiOperation("页面数据")
|
|
||||||
@SaCheckPermission("member.checkTask.union")
|
|
||||||
public Result pageData(MemberCheckPageForm pageForm){
|
|
||||||
Sql sql = Sqls.create("""
|
|
||||||
SELECT
|
|
||||||
u.id,
|
|
||||||
u.loginname,
|
|
||||||
u.username,
|
|
||||||
u.sex,
|
|
||||||
u.birthday,
|
|
||||||
u.political,
|
|
||||||
u.joinPartyDate,
|
|
||||||
u.nation,
|
|
||||||
u.nativePlace,
|
|
||||||
u.nationality,
|
|
||||||
u.idCardType,
|
|
||||||
u.mobile,
|
|
||||||
u.education,
|
|
||||||
u.academicDegree,
|
|
||||||
u.position,
|
|
||||||
u.personType,
|
|
||||||
u.preparedBy,
|
|
||||||
u.identityType,
|
|
||||||
u.userState,
|
|
||||||
u.unionName,
|
|
||||||
u.unitName,
|
|
||||||
u.member,
|
|
||||||
u.postDoctoralJoinDate
|
|
||||||
FROM
|
|
||||||
`vw_user` u
|
|
||||||
$condition
|
|
||||||
""");
|
|
||||||
Cnd cnd = getCnd(pageForm);
|
|
||||||
if (StrUtil.isNotBlank(pageForm.getIsUnit())) {
|
|
||||||
cnd.and("u.unitId", "true".equals(pageForm.getIsUnit()) ? "is not" : "is", null);
|
|
||||||
}
|
|
||||||
if (StrUtil.isNotBlank(pageForm.getIsUnion())) {
|
|
||||||
cnd.and("u.unionId", "true".equals(pageForm.getIsUnion()) ? "is not" : "is", null);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
|
||||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
|
||||||
seg.or("u.username", "like", "%" + pageForm.getSearchKeyword() + "%");
|
|
||||||
seg.or("u.loginname", "like", "%" + pageForm.getSearchKeyword() + "%");
|
|
||||||
cnd.and(seg);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
|
||||||
cnd.and(Cnd.exps("u.unionId", "=", SecurityUtil.getUnionId())
|
|
||||||
.or("u.unionId", "is", null).or("u.unionId", "=", ""));
|
|
||||||
}
|
|
||||||
cnd.desc("u.unionName,u.id");
|
|
||||||
cnd.groupBy("u.id");
|
|
||||||
sql.setCondition(cnd);
|
|
||||||
Pagination pagination = memberCheckTaskService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
|
||||||
return Result.success(pagination);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Cnd getCnd(MemberCheckPageForm pageForm) {
|
|
||||||
Boolean reverseSelection = pageForm.getReverseSelection();
|
|
||||||
String IN_OR_NIN_OP = reverseSelection ? "NOT IN" : "IN";
|
|
||||||
String EQ_OR_NEQ_OP = reverseSelection ? "!=" : "=";
|
|
||||||
//小于等于
|
|
||||||
String LE_OR_NLE_OP = reverseSelection ? ">=" : "<=";
|
|
||||||
//大于等于
|
|
||||||
String GE_OR_NGE_OP = reverseSelection ? "<=" : ">=";
|
|
||||||
|
|
||||||
Cnd cnd = Cnd.NEW();
|
|
||||||
if (StrUtil.isAllNotBlank(pageForm.getPageOrderBy(), pageForm.getPageOrderName())) {
|
|
||||||
cnd.orderBy(pageForm.getPageOrderName(), "ascending".equalsIgnoreCase(pageForm.getPageOrderBy()) ? "ASC" : "DESC");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Lang.isNotEmpty(pageForm.getUserTypes())) {
|
|
||||||
if (pageForm.getUserTypes().contains("工会会员")) {
|
|
||||||
cnd.and("u.member", EQ_OR_NEQ_OP, true);
|
|
||||||
}
|
|
||||||
if (pageForm.getUserTypes().contains("福利会员")) {
|
|
||||||
cnd.and("u.welfareMember", EQ_OR_NEQ_OP, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Lang.isNotEmpty(pageForm.getAge()) && !"0".equals(pageForm.getAge().get(1))) {
|
|
||||||
if (reverseSelection) {
|
|
||||||
cnd.andNot("TIMESTAMPDIFF(YEAR, u.birthday, CURDATE())", "between", pageForm.getAge().toArray());
|
|
||||||
} else {
|
|
||||||
cnd.and("TIMESTAMPDIFF(YEAR, u.birthday, CURDATE())", "between", pageForm.getAge().toArray());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Strings.isNotBlank(pageForm.getBirthdayStartDate()) && Strings.isNotBlank(pageForm.getBirthdayEndDate())) {
|
|
||||||
if (reverseSelection) {
|
|
||||||
cnd.andNot("DATE(u.birthday)", "between", new String[]{pageForm.getBirthdayStartDate(), pageForm.getBirthdayEndDate()});
|
|
||||||
} else {
|
|
||||||
cnd.and("DATE(u.birthday)", "between", new String[]{pageForm.getBirthdayStartDate(), pageForm.getBirthdayEndDate()});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Strings.isNotBlank(pageForm.getBirthdayStartDate()) && Strings.isBlank(pageForm.getBirthdayEndDate())) {
|
|
||||||
cnd.and("DATE(u.birthday)", GE_OR_NGE_OP, pageForm.getBirthdayStartDate());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Strings.isBlank(pageForm.getBirthdayStartDate()) && Strings.isNotBlank(pageForm.getBirthdayEndDate())) {
|
|
||||||
cnd.and("DATE(u.birthday)", LE_OR_NLE_OP, pageForm.getBirthdayEndDate());
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
handleField("id", pageForm.getUserInfos(), reverseSelection, IN_OR_NIN_OP, cnd);
|
|
||||||
handleField("unionId", pageForm.getUnionIds(), reverseSelection, IN_OR_NIN_OP, cnd);
|
|
||||||
handleField("unitId", pageForm.getUnitIds(), reverseSelection, IN_OR_NIN_OP, cnd);
|
|
||||||
handleField("personType", pageForm.getPersonTypes(), reverseSelection, IN_OR_NIN_OP, cnd);
|
|
||||||
handleField("preparedBy", pageForm.getPreparedBys(), reverseSelection, IN_OR_NIN_OP, cnd);
|
|
||||||
handleField("userState", pageForm.getUserStates(), reverseSelection, IN_OR_NIN_OP, cnd);
|
|
||||||
handleField("sex", pageForm.getSexTypes(), reverseSelection, IN_OR_NIN_OP, cnd);
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
return cnd;
|
|
||||||
}
|
|
||||||
|
|
||||||
void handleField(String fieldName, Object fieldValue, boolean reverseSelection, String IN_OR_NIN_OP, Cnd cnd) {
|
|
||||||
if (reverseSelection && Lang.isNotEmpty(fieldValue)) {
|
|
||||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
|
||||||
seg.or("u." + fieldName, "is", null);
|
|
||||||
seg.or("u." + fieldName, IN_OR_NIN_OP, fieldValue);
|
|
||||||
cnd.and(seg);
|
|
||||||
} else {
|
|
||||||
cnd.andEX("u." + fieldName, IN_OR_NIN_OP, fieldValue);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+2
-2
@@ -40,8 +40,8 @@ public class MemberCheckTask extends BaseModel {
|
|||||||
private String taskName;
|
private String taskName;
|
||||||
|
|
||||||
@Column
|
@Column
|
||||||
@Comment("说明")
|
@Comment("内容详情")
|
||||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
@ColDefine(type = ColType.TEXT)
|
||||||
private String description;
|
private String description;
|
||||||
|
|
||||||
@Column
|
@Column
|
||||||
|
|||||||
+16
-5
@@ -38,7 +38,7 @@ public class MemberCheckPageForm extends PageForm {
|
|||||||
|
|
||||||
// 单位id
|
// 单位id
|
||||||
@ApiModelProperty("单位id")
|
@ApiModelProperty("单位id")
|
||||||
private String unitIds;
|
private List<String> unitIds;
|
||||||
|
|
||||||
@ApiModelProperty("出生日期开始时间")
|
@ApiModelProperty("出生日期开始时间")
|
||||||
private String birthdayStartDate;
|
private String birthdayStartDate;
|
||||||
@@ -50,10 +50,6 @@ public class MemberCheckPageForm extends PageForm {
|
|||||||
@ApiModelProperty("在职状态")
|
@ApiModelProperty("在职状态")
|
||||||
private List<String> userStates;
|
private List<String> userStates;
|
||||||
|
|
||||||
// 在职状态
|
|
||||||
@ApiModelProperty("编制类别")
|
|
||||||
private List<String> preparedBys;
|
|
||||||
|
|
||||||
// 教职工类别
|
// 教职工类别
|
||||||
@ApiModelProperty("教职工类别")
|
@ApiModelProperty("教职工类别")
|
||||||
private List<String> personTypes;
|
private List<String> personTypes;
|
||||||
@@ -75,4 +71,19 @@ public class MemberCheckPageForm extends PageForm {
|
|||||||
|
|
||||||
@ApiModelProperty("用户信息查询列表")
|
@ApiModelProperty("用户信息查询列表")
|
||||||
private List<String> userInfos;
|
private List<String> userInfos;
|
||||||
|
|
||||||
|
@ApiModelProperty("事项名称")
|
||||||
|
private String taskName;
|
||||||
|
|
||||||
|
@ApiModelProperty("是否发布")
|
||||||
|
private Boolean isEnabled;
|
||||||
|
|
||||||
|
@ApiModelProperty("姓名")
|
||||||
|
private String userName;
|
||||||
|
|
||||||
|
@ApiModelProperty("工号")
|
||||||
|
private String loginName;
|
||||||
|
|
||||||
|
@ApiModelProperty("是否会员")
|
||||||
|
private Boolean isMember;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -120,8 +120,8 @@ public class MemberInfoPageForm extends PageForm {
|
|||||||
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||||
SqlExpressionGroup seg = new SqlExpressionGroup();
|
SqlExpressionGroup seg = new SqlExpressionGroup();
|
||||||
seg.or(prefix + "unionId", "=", SecurityUtil.getUnionId());
|
seg.or(prefix + "unionId", "=", SecurityUtil.getUnionId());
|
||||||
seg.or(prefix + "unionId", "is", null);
|
// seg.or(prefix + "unionId", "is", null);
|
||||||
seg.or(prefix + "unionId", "=", "");
|
// seg.or(prefix + "unionId", "=", "");
|
||||||
cnd.and(seg);
|
cnd.and(seg);
|
||||||
} else {
|
} else {
|
||||||
cnd.andEX(prefix + "unionId", "=", this.getUnionId());
|
cnd.andEX(prefix + "unionId", "=", this.getUnionId());
|
||||||
|
|||||||
+70
@@ -1,7 +1,16 @@
|
|||||||
package com.budwk.app.zhgh.staffmanage.member.service;
|
package com.budwk.app.zhgh.staffmanage.member.service;
|
||||||
|
|
||||||
|
import com.budwk.app.base.model.ExcelImportRes;
|
||||||
|
import com.budwk.app.base.page.Pagination;
|
||||||
import com.budwk.app.base.service.BaseService;
|
import com.budwk.app.base.service.BaseService;
|
||||||
|
import com.budwk.app.zhgh.staffmanage.member.models.check.MemberCheckTask;
|
||||||
import com.budwk.app.zhgh.staffmanage.member.models.check.MemberCheckTaskUser;
|
import com.budwk.app.zhgh.staffmanage.member.models.check.MemberCheckTaskUser;
|
||||||
|
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberCheckPageForm;
|
||||||
|
import com.budwk.app.zhgh.staffmanage.member.template.MemberCheckTaskUserImportTemp;
|
||||||
|
import org.nutz.lang.util.NutMap;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
@@ -11,4 +20,65 @@ import com.budwk.app.zhgh.staffmanage.member.models.check.MemberCheckTaskUser;
|
|||||||
* @注释
|
* @注释
|
||||||
*/
|
*/
|
||||||
public interface MemberCheckTaskService extends BaseService<MemberCheckTaskUser> {
|
public interface MemberCheckTaskService extends BaseService<MemberCheckTaskUser> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询会员核对事项。
|
||||||
|
*/
|
||||||
|
Pagination<NutMap> taskPageData(MemberCheckPageForm pageForm);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存会员核对事项,只维护事项本身,不重建名单。
|
||||||
|
*/
|
||||||
|
void saveTask(MemberCheckTask memberCheckTask);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询已发布的会员核对事项。
|
||||||
|
*/
|
||||||
|
List<MemberCheckTask> listEnabledTask(Integer year);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询会员核对名单,统一承载页面列表和导出数据范围。
|
||||||
|
*/
|
||||||
|
Pagination<NutMap> checkUserPageData(MemberCheckPageForm pageForm);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询会员核对名单,不分页,用于按当前筛选条件导出。
|
||||||
|
*/
|
||||||
|
List<NutMap> checkUserList(MemberCheckPageForm pageForm);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导入会员核对名单,并按工号从系统用户视图补齐人员基础信息。
|
||||||
|
*/
|
||||||
|
ExcelImportRes<MemberCheckTaskUserImportTemp> importCheckUser(File file, String checkTaskId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询当前筛选条件下尚未加入名单的系统人员。
|
||||||
|
*/
|
||||||
|
Pagination<NutMap> notCheckUserPageData(MemberCheckPageForm pageForm);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将当前筛选条件下的系统人员批量加入会员核对名单。
|
||||||
|
*/
|
||||||
|
NutMap addCheckUser(MemberCheckPageForm pageForm);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按事项和工会批量确认或取消确认名单。
|
||||||
|
*/
|
||||||
|
NutMap confirmByTaskAndUnion(String checkTaskId, String unionId, Boolean flag);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按列表勾选记录批量确认或取消确认名单。
|
||||||
|
*/
|
||||||
|
void confirmSelected(String[] ids, Boolean flag);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按列表勾选记录批量删除人员名单,非校工会管理员只能删除本工会数据。
|
||||||
|
*/
|
||||||
|
void deleteSelected(String[] ids);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按工会统计会员核对名单确认完成情况。
|
||||||
|
*/
|
||||||
|
Pagination<NutMap> confirmStatistics(Integer pageNumber, Integer pageSize, Integer year,
|
||||||
|
String checkTaskId, String unionId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.budwk.app.zhgh.staffmanage.member.service;
|
|||||||
|
|
||||||
import com.budwk.app.base.service.BaseService;
|
import com.budwk.app.base.service.BaseService;
|
||||||
import com.budwk.app.sys.models.Sys_user;
|
import com.budwk.app.sys.models.Sys_user;
|
||||||
|
import com.budwk.app.sys.views.View_user;
|
||||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberInfoPageForm;
|
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberInfoPageForm;
|
||||||
import org.apache.poi.ss.usermodel.Workbook;
|
import org.apache.poi.ss.usermodel.Workbook;
|
||||||
import org.nutz.dao.sql.Sql;
|
import org.nutz.dao.sql.Sql;
|
||||||
@@ -27,6 +28,13 @@ public interface MemberInfoService extends BaseService<Sys_user> {
|
|||||||
*/
|
*/
|
||||||
Sql getSql(MemberInfoPageForm pageForm);
|
Sql getSql(MemberInfoPageForm pageForm);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取会员详情,特殊人员优先返回工会关系所属工会,便于详情权限和列表权限保持一致。
|
||||||
|
* @param id 用户id
|
||||||
|
* @return 会员详情
|
||||||
|
*/
|
||||||
|
View_user getMemberInfoDetail(String id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取会员历史
|
* 获取会员历史
|
||||||
* @param pageForm
|
* @param pageForm
|
||||||
|
|||||||
+489
@@ -1,11 +1,38 @@
|
|||||||
package com.budwk.app.zhgh.staffmanage.member.service.impl;
|
package com.budwk.app.zhgh.staffmanage.member.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import com.budwk.app.base.constant.RoleConstant;
|
||||||
|
import com.budwk.app.base.model.ExcelImportRes;
|
||||||
|
import com.budwk.app.base.page.Pagination;
|
||||||
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
import com.budwk.app.base.service.impl.BaseServiceImpl;
|
||||||
|
import com.budwk.app.base.utils.PageUtil;
|
||||||
|
import com.budwk.app.base.utils.easyexcel.EasyExcelUtil;
|
||||||
|
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.zhgh.staffmanage.member.models.check.MemberCheckTask;
|
import com.budwk.app.zhgh.staffmanage.member.models.check.MemberCheckTask;
|
||||||
import com.budwk.app.zhgh.staffmanage.member.models.check.MemberCheckTaskUser;
|
import com.budwk.app.zhgh.staffmanage.member.models.check.MemberCheckTaskUser;
|
||||||
|
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberCheckPageForm;
|
||||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberCheckTaskService;
|
import com.budwk.app.zhgh.staffmanage.member.service.MemberCheckTaskService;
|
||||||
|
import com.budwk.app.zhgh.staffmanage.member.template.MemberCheckTaskUserImportTemp;
|
||||||
import org.nutz.dao.Dao;
|
import org.nutz.dao.Dao;
|
||||||
|
import org.nutz.dao.Chain;
|
||||||
|
import org.nutz.dao.Cnd;
|
||||||
|
import org.nutz.dao.Sqls;
|
||||||
|
import org.nutz.dao.sql.Sql;
|
||||||
|
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||||
import org.nutz.ioc.loader.annotation.IocBean;
|
import org.nutz.ioc.loader.annotation.IocBean;
|
||||||
|
import org.nutz.lang.Strings;
|
||||||
|
import org.nutz.lang.util.NutMap;
|
||||||
|
import org.apache.poi.ss.formula.functions.T;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
@@ -20,4 +47,466 @@ public class MemberCheckTaskServiceImpl extends BaseServiceImpl<MemberCheckTaskU
|
|||||||
public MemberCheckTaskServiceImpl(Dao dao) {
|
public MemberCheckTaskServiceImpl(Dao dao) {
|
||||||
super(dao);
|
super(dao);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Pagination<NutMap> taskPageData(MemberCheckPageForm pageForm) {
|
||||||
|
Sql sql = Sqls.create("""
|
||||||
|
SELECT
|
||||||
|
*
|
||||||
|
FROM member_check_task
|
||||||
|
$condition
|
||||||
|
""");
|
||||||
|
Cnd cnd = Cnd.NEW();
|
||||||
|
cnd.andEX("`year`", "=", pageForm.getYear());
|
||||||
|
cnd.and(Cnd.likeEX("taskName", pageForm.getTaskName()));
|
||||||
|
cnd.andEX("isEnabled", "=", pageForm.getIsEnabled());
|
||||||
|
cnd.desc("startTime");
|
||||||
|
sql.setCondition(cnd);
|
||||||
|
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void saveTask(MemberCheckTask memberCheckTask) {
|
||||||
|
if (memberCheckTask.getStartTime() != null) {
|
||||||
|
memberCheckTask.setYear(DateUtil.year(memberCheckTask.getStartTime()));
|
||||||
|
} else if (memberCheckTask.getYear() == null) {
|
||||||
|
memberCheckTask.setYear(DateUtil.thisYear());
|
||||||
|
}
|
||||||
|
dao().insertOrUpdate(memberCheckTask);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<MemberCheckTask> listEnabledTask(Integer year) {
|
||||||
|
Cnd cnd = Cnd.NEW();
|
||||||
|
cnd.andEX("year", "=", year);
|
||||||
|
cnd.and("isEnabled", "=", true);
|
||||||
|
cnd.desc("startTime");
|
||||||
|
return dao().query(MemberCheckTask.class, cnd);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Pagination<NutMap> checkUserPageData(MemberCheckPageForm pageForm) {
|
||||||
|
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), buildCheckUserSql(pageForm));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<NutMap> checkUserList(MemberCheckPageForm pageForm) {
|
||||||
|
return listMap(buildCheckUserSql(pageForm));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ExcelImportRes<MemberCheckTaskUserImportTemp> importCheckUser(File file, String checkTaskId) {
|
||||||
|
List<T> rows = EasyExcelUtil.syncReadModel(file, MemberCheckTaskUserImportTemp.class, 0, 1);
|
||||||
|
List<MemberCheckTaskUserImportTemp> importRows = JSONUtil.parseArray(JSONUtil.toJsonStr(rows)).toList(MemberCheckTaskUserImportTemp.class);
|
||||||
|
ExcelImportRes<MemberCheckTaskUserImportTemp> result = new ExcelImportRes<>();
|
||||||
|
result.setTotalRecords(importRows.size());
|
||||||
|
|
||||||
|
MemberCheckTask task = validateCheckUserTask(checkTaskId);
|
||||||
|
if (task == null) {
|
||||||
|
markAllFailed(importRows, "事项不存在、未发布或不在时间范围内");
|
||||||
|
fillImportResult(result, importRows, 0);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> loginNames = importRows.stream()
|
||||||
|
.map(MemberCheckTaskUserImportTemp::getLoginname)
|
||||||
|
.filter(StrUtil::isNotBlank)
|
||||||
|
.map(Strings::trim)
|
||||||
|
.distinct()
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
List<View_user> users = loginNames.isEmpty()
|
||||||
|
? Collections.emptyList()
|
||||||
|
: dao().query(View_user.class, Cnd.where(View_user::getLoginname, "in", loginNames));
|
||||||
|
|
||||||
|
int successCount = 0;
|
||||||
|
for (int i = 0; i < importRows.size(); i++) {
|
||||||
|
MemberCheckTaskUserImportTemp row = importRows.get(i);
|
||||||
|
String loginName = Strings.trim(row.getLoginname());
|
||||||
|
if (StrUtil.isBlank(loginName)) {
|
||||||
|
row.setErrInfo("工号不能为空", i + 1);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (importRows.stream().filter(item -> loginName.equals(Strings.trim(item.getLoginname()))).count() > 1) {
|
||||||
|
row.setErrInfo("导入文件中工号重复", i + 1);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
View_user user = users.stream()
|
||||||
|
.filter(item -> loginName.equals(item.getLoginname()))
|
||||||
|
.findFirst()
|
||||||
|
.orElse(null);
|
||||||
|
if (user == null) {
|
||||||
|
row.setErrInfo("工号在系统中不存在", i + 1);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
upsertCheckUser(task, user);
|
||||||
|
successCount++;
|
||||||
|
}
|
||||||
|
fillImportResult(result, importRows, successCount);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Pagination<NutMap> notCheckUserPageData(MemberCheckPageForm pageForm) {
|
||||||
|
Sql sql = Sqls.create("""
|
||||||
|
SELECT
|
||||||
|
u.id,
|
||||||
|
u.loginname,
|
||||||
|
u.username,
|
||||||
|
u.sex,
|
||||||
|
u.birthday,
|
||||||
|
u.personType,
|
||||||
|
u.userState,
|
||||||
|
u.unitId,
|
||||||
|
u.unitName,
|
||||||
|
u.unionId,
|
||||||
|
u.unionName,
|
||||||
|
u.member
|
||||||
|
FROM vw_user u
|
||||||
|
LEFT JOIN member_check_task_user info ON u.id = info.userId
|
||||||
|
AND info.checkTaskId = @checkTaskId
|
||||||
|
AND info.delFlag = 0
|
||||||
|
$condition
|
||||||
|
""").setParam("checkTaskId", pageForm.getCheckTaskId());
|
||||||
|
Cnd cnd = buildAddUserFilterCnd(pageForm);
|
||||||
|
cnd.and("info.userId", "is", null);
|
||||||
|
sql.setCondition(cnd);
|
||||||
|
return listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NutMap addCheckUser(MemberCheckPageForm pageForm) {
|
||||||
|
MemberCheckTask task = validateCheckUserTask(pageForm.getCheckTaskId());
|
||||||
|
if (task == null) {
|
||||||
|
return NutMap.NEW().addv("code", 1).addv("msg", "添加失败,请选择已发布且在时间范围内的事项");
|
||||||
|
}
|
||||||
|
|
||||||
|
Sql sql = Sqls.create("""
|
||||||
|
SELECT
|
||||||
|
u.id,
|
||||||
|
u.loginname,
|
||||||
|
u.username,
|
||||||
|
u.sex,
|
||||||
|
u.birthday,
|
||||||
|
u.political,
|
||||||
|
u.joinPartyDate,
|
||||||
|
u.nation,
|
||||||
|
u.nativePlace,
|
||||||
|
u.nationality,
|
||||||
|
u.idCardType,
|
||||||
|
u.idCard,
|
||||||
|
u.email,
|
||||||
|
u.mobile,
|
||||||
|
u.education,
|
||||||
|
u.academicDegree,
|
||||||
|
u.position,
|
||||||
|
u.personType,
|
||||||
|
u.identityType,
|
||||||
|
u.userState,
|
||||||
|
u.unitId,
|
||||||
|
u.unitName,
|
||||||
|
u.unionId,
|
||||||
|
u.unionName,
|
||||||
|
u.member,
|
||||||
|
u.welfareMember,
|
||||||
|
u.retireDate,
|
||||||
|
u.personalData,
|
||||||
|
u.postDoctoralJoinDate
|
||||||
|
FROM vw_user u
|
||||||
|
$condition
|
||||||
|
""");
|
||||||
|
Cnd cnd = buildAddUserFilterCnd(pageForm);
|
||||||
|
cnd.and("u.id", "not in", Sqls.create("""
|
||||||
|
SELECT userId FROM member_check_task_user
|
||||||
|
WHERE checkTaskId = @checkTaskId AND delFlag = 0
|
||||||
|
""").setParam("checkTaskId", pageForm.getCheckTaskId()));
|
||||||
|
sql.setCondition(cnd);
|
||||||
|
List<NutMap> users = listMap(sql);
|
||||||
|
if (users.isEmpty()) {
|
||||||
|
return NutMap.NEW().addv("code", 1).addv("msg", "添加失败,暂无数据");
|
||||||
|
}
|
||||||
|
for (NutMap user : users) {
|
||||||
|
upsertCheckUser(task, user);
|
||||||
|
}
|
||||||
|
return NutMap.NEW().addv("code", 0).addv("msg", "添加成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NutMap confirmByTaskAndUnion(String checkTaskId, String unionId, Boolean flag) {
|
||||||
|
Cnd cnd = Cnd.NEW().and("checkTaskId", "=", checkTaskId).and("unionId", "=", unionId).and("delFlag", "=", false);
|
||||||
|
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||||
|
cnd.and("unionId", "=", SecurityUtil.getUnionId());
|
||||||
|
}
|
||||||
|
// 按工会确认依赖当前事项和工会筛选结果,空数据时明确返回失败,避免页面误认为已确认。
|
||||||
|
if (count(cnd) == 0) {
|
||||||
|
return NutMap.NEW().addv("code", 1).addv("msg", "确认失败,暂无数据");
|
||||||
|
}
|
||||||
|
updateAuditState(cnd, flag);
|
||||||
|
return NutMap.NEW().addv("code", 0).addv("msg", "操作成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void confirmSelected(String[] ids, Boolean flag) {
|
||||||
|
if (ids == null || ids.length == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Cnd cnd = Cnd.where("id", "in", ids).and("delFlag", "=", false);
|
||||||
|
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||||
|
cnd.and("unionId", "=", SecurityUtil.getUnionId());
|
||||||
|
}
|
||||||
|
updateAuditState(cnd, flag);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteSelected(String[] ids) {
|
||||||
|
if (ids == null || ids.length == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Cnd cnd = Cnd.where("id", "in", ids).and("delFlag", "=", false);
|
||||||
|
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||||
|
cnd.and("unionId", "=", SecurityUtil.getUnionId());
|
||||||
|
}
|
||||||
|
// 人员名单删除采用逻辑删除,避免核对名单被物理清除后无法追溯。
|
||||||
|
dao().update(MemberCheckTaskUser.class, Chain.make("delFlag", true), cnd);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Pagination<NutMap> confirmStatistics(Integer pageNumber, Integer pageSize, Integer year, String checkTaskId, String unionId) {
|
||||||
|
Sql sql = Sqls.create("""
|
||||||
|
SELECT
|
||||||
|
su.id AS unionId,
|
||||||
|
su.name AS unionName,
|
||||||
|
COUNT(CASE WHEN task.id IS NOT NULL THEN info.id END) AS totalCount,
|
||||||
|
SUM(CASE WHEN task.id IS NOT NULL AND info.branchUnionChecked = 1 THEN 1 ELSE 0 END) AS confirmedCount,
|
||||||
|
SUM(CASE WHEN task.id IS NOT NULL AND info.id IS NOT NULL AND (info.branchUnionChecked IS NULL OR info.branchUnionChecked <> 1) THEN 1 ELSE 0 END) AS unconfirmedCount,
|
||||||
|
CASE
|
||||||
|
WHEN COUNT(CASE WHEN task.id IS NOT NULL THEN info.id END) > 0
|
||||||
|
AND COUNT(CASE WHEN task.id IS NOT NULL THEN info.id END) = SUM(CASE WHEN task.id IS NOT NULL AND info.branchUnionChecked = 1 THEN 1 ELSE 0 END) THEN '已完成'
|
||||||
|
ELSE '未完成'
|
||||||
|
END AS completeStatus
|
||||||
|
FROM sys_union su
|
||||||
|
LEFT JOIN member_check_task_user info ON info.unionId = su.id
|
||||||
|
AND info.delFlag = 0
|
||||||
|
AND info.checkTaskId = @checkTaskId
|
||||||
|
LEFT JOIN member_check_task task ON task.id = info.checkTaskId
|
||||||
|
AND task.delFlag = 0
|
||||||
|
AND task.year = @year
|
||||||
|
$condition
|
||||||
|
""").setParam("checkTaskId", checkTaskId).setParam("year", year);
|
||||||
|
Cnd cnd = Cnd.NEW();
|
||||||
|
cnd.andEX("su.id", "=", unionId);
|
||||||
|
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||||
|
cnd.and("su.id", "=", SecurityUtil.getUnionId());
|
||||||
|
}
|
||||||
|
cnd.groupBy("su.id,su.name");
|
||||||
|
cnd.asc("completeStatus");
|
||||||
|
cnd.asc("su.unionCode");
|
||||||
|
sql.setCondition(cnd);
|
||||||
|
return listPageMap(pageNumber, pageSize, sql);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Sql buildCheckUserSql(MemberCheckPageForm pageForm) {
|
||||||
|
Sql sql = Sqls.create("""
|
||||||
|
SELECT
|
||||||
|
info.*,
|
||||||
|
task.taskName,
|
||||||
|
task.year AS taskYear,
|
||||||
|
CASE WHEN info.branchUnionChecked = 1 THEN FROM_UNIXTIME(info.updatedAt / 1000) ELSE NULL END AS auditTime
|
||||||
|
FROM member_check_task_user info
|
||||||
|
LEFT JOIN member_check_task task ON task.id = info.checkTaskId
|
||||||
|
$condition
|
||||||
|
""");
|
||||||
|
Cnd cnd = Cnd.NEW();
|
||||||
|
cnd.and("info.delFlag", "=", false);
|
||||||
|
cnd.and("task.delFlag", "=", false);
|
||||||
|
cnd.andEX("task.year", "=", pageForm.getYear());
|
||||||
|
cnd.andEX("info.checkTaskId", "=", pageForm.getCheckTaskId());
|
||||||
|
cnd.andEX("info.unionId", "=", pageForm.getUnionIds());
|
||||||
|
cnd.andEX("info.unitId", "in", pageForm.getUnitIds());
|
||||||
|
if (pageForm.getAudit() != null) {
|
||||||
|
cnd.and("info.branchUnionChecked", "=", pageForm.getAudit());
|
||||||
|
}
|
||||||
|
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||||
|
cnd.andEX("info.unionId", "=", SecurityUtil.getUnionId());
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
|
||||||
|
SqlExpressionGroup group = new SqlExpressionGroup();
|
||||||
|
group.orLike("info.username", pageForm.getSearchKeyword());
|
||||||
|
group.orLike("info.loginname", pageForm.getSearchKeyword());
|
||||||
|
cnd.and(group);
|
||||||
|
}
|
||||||
|
cnd.desc("info.createdAt");
|
||||||
|
cnd.desc("info.updatedAt");
|
||||||
|
sql.setCondition(cnd);
|
||||||
|
return sql;
|
||||||
|
}
|
||||||
|
|
||||||
|
private MemberCheckTask validateCheckUserTask(String checkTaskId) {
|
||||||
|
if (StrUtil.isBlank(checkTaskId)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
MemberCheckTask task = dao().fetch(MemberCheckTask.class,
|
||||||
|
Cnd.where("id", "=", checkTaskId).and("isEnabled", "=", true).and("delFlag", "=", false));
|
||||||
|
if (task == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
Date now = new Date();
|
||||||
|
if ((task.getStartTime() != null && now.before(task.getStartTime()))
|
||||||
|
|| (task.getEndTime() != null && now.after(task.getEndTime()))) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return task;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Cnd buildAddUserFilterCnd(MemberCheckPageForm pageForm) {
|
||||||
|
Cnd cnd = Cnd.NEW();
|
||||||
|
if (StrUtil.isNotBlank(pageForm.getUserName())) {
|
||||||
|
cnd.and(Cnd.likeEX("u.username", pageForm.getUserName()));
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotBlank(pageForm.getLoginName())) {
|
||||||
|
cnd.and(Cnd.likeEX("u.loginname", pageForm.getLoginName()));
|
||||||
|
}
|
||||||
|
cnd.andEX("u.unionId", "=", pageForm.getUnionIds());
|
||||||
|
cnd.andEX("u.unitId", "in", pageForm.getUnitIds());
|
||||||
|
cnd.andEX("u.personType", "in", pageForm.getPersonTypes());
|
||||||
|
cnd.andEX("u.userState", "in", pageForm.getUserStates());
|
||||||
|
cnd.andEX("u.member", "=", pageForm.getIsMember());
|
||||||
|
if (pageForm.getSexTypes() != null && !pageForm.getSexTypes().isEmpty()) {
|
||||||
|
cnd.andEX("u.sex", "in", pageForm.getSexTypes());
|
||||||
|
}
|
||||||
|
if (Strings.isNotBlank(pageForm.getBirthdayStartDate()) && Strings.isNotBlank(pageForm.getBirthdayEndDate())) {
|
||||||
|
cnd.and("DATE(u.birthday)", "between", new String[]{pageForm.getBirthdayStartDate(), pageForm.getBirthdayEndDate()});
|
||||||
|
}
|
||||||
|
if (Strings.isNotBlank(pageForm.getBirthdayStartDate()) && Strings.isBlank(pageForm.getBirthdayEndDate())) {
|
||||||
|
cnd.and("DATE(u.birthday)", ">=", pageForm.getBirthdayStartDate());
|
||||||
|
}
|
||||||
|
if (Strings.isBlank(pageForm.getBirthdayStartDate()) && Strings.isNotBlank(pageForm.getBirthdayEndDate())) {
|
||||||
|
cnd.and("DATE(u.birthday)", "<=", pageForm.getBirthdayEndDate());
|
||||||
|
}
|
||||||
|
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
|
||||||
|
cnd.and("u.unionId", "=", SecurityUtil.getUnionId());
|
||||||
|
}
|
||||||
|
if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||||
|
cnd.asc("u.unionCode");
|
||||||
|
cnd.asc("u.unitCode");
|
||||||
|
cnd.asc("u.loginname");
|
||||||
|
} else {
|
||||||
|
cnd.orderBy("u." + pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
|
||||||
|
}
|
||||||
|
return cnd;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateAuditState(Cnd cnd, Boolean flag) {
|
||||||
|
Chain chain = Chain.make("branchUnionChecked", Boolean.TRUE.equals(flag));
|
||||||
|
dao().update(MemberCheckTaskUser.class, chain, cnd);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void upsertCheckUser(MemberCheckTask task, View_user user) {
|
||||||
|
MemberCheckTaskUser info = dao().fetch(MemberCheckTaskUser.class,
|
||||||
|
Cnd.where("checkTaskId", "=", task.getId()).and("userId", "=", user.getId()));
|
||||||
|
if (info == null) {
|
||||||
|
info = new MemberCheckTaskUser();
|
||||||
|
info.setCheckTaskId(task.getId());
|
||||||
|
info.setBranchUnionChecked(false);
|
||||||
|
info.setSchoolUnionChecked(false);
|
||||||
|
info.setIsChanged(false);
|
||||||
|
}
|
||||||
|
info.setDelFlag(false);
|
||||||
|
fillCheckUser(info, user);
|
||||||
|
dao().insertOrUpdate(info);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void upsertCheckUser(MemberCheckTask task, NutMap user) {
|
||||||
|
MemberCheckTaskUser info = dao().fetch(MemberCheckTaskUser.class,
|
||||||
|
Cnd.where("checkTaskId", "=", task.getId()).and("userId", "=", user.getString("id")));
|
||||||
|
if (info == null) {
|
||||||
|
info = new MemberCheckTaskUser();
|
||||||
|
info.setCheckTaskId(task.getId());
|
||||||
|
info.setBranchUnionChecked(false);
|
||||||
|
info.setSchoolUnionChecked(false);
|
||||||
|
info.setIsChanged(false);
|
||||||
|
}
|
||||||
|
info.setDelFlag(false);
|
||||||
|
fillCheckUser(info, user);
|
||||||
|
dao().insertOrUpdate(info);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fillCheckUser(MemberCheckTaskUser info, View_user user) {
|
||||||
|
info.setUserId(user.getId());
|
||||||
|
info.setLoginname(user.getLoginname());
|
||||||
|
info.setUsername(user.getUsername());
|
||||||
|
info.setSex(user.getSex());
|
||||||
|
info.setBirthday(user.getBirthday());
|
||||||
|
info.setPolitical(user.getPolitical());
|
||||||
|
info.setNation(user.getNation());
|
||||||
|
info.setIdCard(user.getIdCard());
|
||||||
|
info.setEmail(user.getEmail());
|
||||||
|
info.setMobile(user.getMobile());
|
||||||
|
info.setEducation(user.getEducation());
|
||||||
|
info.setAcademicDegree(user.getAcademicDegree());
|
||||||
|
info.setPosition(user.getPosition());
|
||||||
|
info.setPersonType(user.getPersonType());
|
||||||
|
info.setUserState(user.getUserState());
|
||||||
|
info.setUnitId(user.getUnitId());
|
||||||
|
info.setUnitName(user.getUnitName());
|
||||||
|
info.setUnionId(user.getUnionId());
|
||||||
|
info.setUnionName(user.getUnionName());
|
||||||
|
info.setMember(user.getMember() != null && user.getMember() == 1);
|
||||||
|
info.setWelfareMember(user.getWelfareMember() != null && user.getWelfareMember() == 1);
|
||||||
|
info.setCampus(user.getCampusName());
|
||||||
|
info.setRetireDate(user.getRetireDate());
|
||||||
|
info.setPersonalData(user.getPersonalData());
|
||||||
|
info.setWelfareStopDate(user.getWelfareStopDate() == null ? null : DateUtil.formatDate(user.getWelfareStopDate()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fillCheckUser(MemberCheckTaskUser info, NutMap user) {
|
||||||
|
info.setUserId(user.getString("id"));
|
||||||
|
info.setLoginname(user.getString("loginname"));
|
||||||
|
info.setUsername(user.getString("username"));
|
||||||
|
info.setSex(user.getString("sex"));
|
||||||
|
info.setBirthday(getDate(user, "birthday"));
|
||||||
|
info.setPolitical(user.getString("political"));
|
||||||
|
info.setNation(user.getString("nation"));
|
||||||
|
info.setIdCard(user.getString("idCard"));
|
||||||
|
info.setEmail(user.getString("email"));
|
||||||
|
info.setMobile(user.getString("mobile"));
|
||||||
|
info.setEducation(user.getString("education"));
|
||||||
|
info.setAcademicDegree(user.getString("academicDegree"));
|
||||||
|
info.setPosition(user.getString("position"));
|
||||||
|
info.setPersonType(user.getString("personType"));
|
||||||
|
info.setUserState(user.getString("userState"));
|
||||||
|
info.setUnitId(user.getString("unitId"));
|
||||||
|
info.setUnitName(user.getString("unitName"));
|
||||||
|
info.setUnionId(user.getString("unionId"));
|
||||||
|
info.setUnionName(user.getString("unionName"));
|
||||||
|
info.setMember("1".equals(user.getString("member")) || Boolean.TRUE.equals(user.getBoolean("member")));
|
||||||
|
info.setWelfareMember("1".equals(user.getString("welfareMember")) || Boolean.TRUE.equals(user.getBoolean("welfareMember")));
|
||||||
|
info.setCampus(user.getString("campus"));
|
||||||
|
info.setRetireDate(getDate(user, "retireDate"));
|
||||||
|
info.setPersonalData(user.getString("personalData"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private Date getDate(NutMap user, String key) {
|
||||||
|
Object value = user.get(key);
|
||||||
|
if (value instanceof Date) {
|
||||||
|
return (Date) value;
|
||||||
|
}
|
||||||
|
if (value == null || StrUtil.isBlank(value.toString())) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return DateUtil.parse(value.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void markAllFailed(List<MemberCheckTaskUserImportTemp> rows, String msg) {
|
||||||
|
for (int i = 0; i < rows.size(); i++) {
|
||||||
|
rows.get(i).setErrInfo(msg, i + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fillImportResult(ExcelImportRes<MemberCheckTaskUserImportTemp> result,
|
||||||
|
List<MemberCheckTaskUserImportTemp> rows,
|
||||||
|
int successCount) {
|
||||||
|
result.setSuccessCount(successCount);
|
||||||
|
result.setErrorDetails(rows.stream().filter(row -> StrUtil.isNotBlank(row.getErrMsg())).collect(Collectors.toList()));
|
||||||
|
result.setFailedCount(result.getErrorDetails().size());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+77
-1
@@ -15,6 +15,7 @@ import com.budwk.app.base.utils.easyexcel.EasyExcelUtil;
|
|||||||
import com.budwk.app.sys.models.Sys_role;
|
import com.budwk.app.sys.models.Sys_role;
|
||||||
import com.budwk.app.sys.models.Sys_unit;
|
import com.budwk.app.sys.models.Sys_unit;
|
||||||
import com.budwk.app.sys.models.Sys_user_role;
|
import com.budwk.app.sys.models.Sys_user_role;
|
||||||
|
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.AuthUtil;
|
||||||
import com.budwk.app.sys.models.Sys_user;
|
import com.budwk.app.sys.models.Sys_user;
|
||||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||||
@@ -22,6 +23,7 @@ import com.budwk.app.zhgh.staffmanage.member.models.MemberHistory;
|
|||||||
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberInfoPageForm;
|
import com.budwk.app.zhgh.staffmanage.member.param.pageform.MemberInfoPageForm;
|
||||||
import com.budwk.app.zhgh.staffmanage.member.service.MemberInfoService;
|
import com.budwk.app.zhgh.staffmanage.member.service.MemberInfoService;
|
||||||
import com.budwk.app.zhgh.staffmanage.member.vo.MemberImportVo;
|
import com.budwk.app.zhgh.staffmanage.member.vo.MemberImportVo;
|
||||||
|
import com.budwk.app.zhgh.staffmanage.specialstaff.model.SpecialStaff;
|
||||||
import org.apache.poi.ss.formula.functions.T;
|
import org.apache.poi.ss.formula.functions.T;
|
||||||
import org.apache.poi.ss.usermodel.Workbook;
|
import org.apache.poi.ss.usermodel.Workbook;
|
||||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||||
@@ -64,9 +66,14 @@ public class MemberInfoServiceImpl extends BaseServiceImpl<Sys_user> implements
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Sql getSql(MemberInfoPageForm pageForm) {
|
public Sql getSql(MemberInfoPageForm pageForm) {
|
||||||
|
// 特殊人员优先使用工会关系所属工会,普通人员继续使用用户当前所属工会。
|
||||||
Sql sql = Sqls.create("""
|
Sql sql = Sqls.create("""
|
||||||
SELECT
|
SELECT
|
||||||
u.id,
|
u.id,
|
||||||
|
u.unionId,
|
||||||
|
u.unionCode,
|
||||||
|
u.unitId,
|
||||||
|
u.unitCode,
|
||||||
u.loginname,
|
u.loginname,
|
||||||
u.username,
|
u.username,
|
||||||
u.sex,
|
u.sex,
|
||||||
@@ -103,7 +110,58 @@ public class MemberInfoServiceImpl extends BaseServiceImpl<Sys_user> implements
|
|||||||
u.member,
|
u.member,
|
||||||
DATE_FORMAT(u.postDoctoralJoinDate, '%Y-%m-%d') AS postDoctoralJoinDate
|
DATE_FORMAT(u.postDoctoralJoinDate, '%Y-%m-%d') AS postDoctoralJoinDate
|
||||||
FROM
|
FROM
|
||||||
vw_user u
|
(
|
||||||
|
SELECT
|
||||||
|
vu.id,
|
||||||
|
CASE
|
||||||
|
WHEN NULLIF(s.unionRelationUnionId, '') IS NOT NULL THEN s.unionRelationUnionId
|
||||||
|
ELSE vu.unionId
|
||||||
|
END AS unionId,
|
||||||
|
vu.unionCode,
|
||||||
|
vu.unitId,
|
||||||
|
vu.unitCode,
|
||||||
|
vu.loginname,
|
||||||
|
vu.username,
|
||||||
|
vu.sex,
|
||||||
|
vu.birthday,
|
||||||
|
vu.political,
|
||||||
|
vu.joinPartyDate,
|
||||||
|
vu.nation,
|
||||||
|
vu.nativePlace,
|
||||||
|
vu.nationality,
|
||||||
|
vu.idCardType,
|
||||||
|
vu.mobile,
|
||||||
|
vu.idCard,
|
||||||
|
vu.marriage,
|
||||||
|
vu.education,
|
||||||
|
vu.academicDegree,
|
||||||
|
vu.position,
|
||||||
|
vu.jobCategory,
|
||||||
|
vu.professionalTitle,
|
||||||
|
vu.professionalLevel,
|
||||||
|
vu.employeeSource,
|
||||||
|
vu.administrativeLevel,
|
||||||
|
vu.positionSeries,
|
||||||
|
vu.positionLevel,
|
||||||
|
vu.administrativePositionLevel,
|
||||||
|
vu.arrivalAtSchoolDate,
|
||||||
|
vu.personType,
|
||||||
|
vu.preparedBy,
|
||||||
|
vu.identityType,
|
||||||
|
vu.userState,
|
||||||
|
CASE
|
||||||
|
WHEN NULLIF(s.unionRelationUnionId, '') IS NOT NULL THEN s.unionRelationUnionName
|
||||||
|
ELSE vu.unionName
|
||||||
|
END AS unionName,
|
||||||
|
vu.unitName,
|
||||||
|
vu.teachingTime,
|
||||||
|
vu.expectedLeaveSchoolDate,
|
||||||
|
vu.member,
|
||||||
|
vu.postDoctoralJoinDate
|
||||||
|
FROM
|
||||||
|
vw_user vu
|
||||||
|
LEFT JOIN special_staff s ON s.userId = vu.id
|
||||||
|
) u
|
||||||
$condition
|
$condition
|
||||||
""");
|
""");
|
||||||
Cnd cnd = Cnd.NEW();
|
Cnd cnd = Cnd.NEW();
|
||||||
@@ -113,6 +171,24 @@ public class MemberInfoServiceImpl extends BaseServiceImpl<Sys_user> implements
|
|||||||
return sql;
|
return sql;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View_user getMemberInfoDetail(String id) {
|
||||||
|
View_user user = dao().fetch(View_user.class, Cnd.where("id", "=", id));
|
||||||
|
if (user == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
SpecialStaff specialStaff = dao().fetch(SpecialStaff.class, Cnd.where("userId", "=", id));
|
||||||
|
// 详情权限和列表权限共用有效工会口径:特殊人员优先使用工会关系,普通人员使用原所属工会。
|
||||||
|
if (specialStaff != null && StrUtil.isNotBlank(specialStaff.getUnionRelationUnionId())) {
|
||||||
|
user.setUnionId(specialStaff.getUnionRelationUnionId());
|
||||||
|
user.setUnionName(specialStaff.getUnionRelationUnionName());
|
||||||
|
user.setUnionGroupId(specialStaff.getUnionRelationUnionGroupId());
|
||||||
|
user.setUnionGroupName(specialStaff.getUnionRelationUnionGroupName());
|
||||||
|
}
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Sql getMemberHistorySql(MemberInfoPageForm pageForm) {
|
public Sql getMemberHistorySql(MemberInfoPageForm pageForm) {
|
||||||
|
|||||||
+26
@@ -0,0 +1,26 @@
|
|||||||
|
package com.budwk.app.zhgh.staffmanage.member.template;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||||
|
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
|
||||||
|
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
|
||||||
|
import com.budwk.app.base.model.ExcelImportError;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 会员核对名单导入模板。
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ContentRowHeight(20)
|
||||||
|
@HeadRowHeight(20)
|
||||||
|
@ColumnWidth(25)
|
||||||
|
public class MemberCheckTaskUserImportTemp extends ExcelImportError {
|
||||||
|
|
||||||
|
@ExcelProperty("工号")
|
||||||
|
private String loginname;
|
||||||
|
|
||||||
|
@ExcelProperty("姓名")
|
||||||
|
private String username;
|
||||||
|
}
|
||||||
+6
-6
@@ -23,8 +23,8 @@ import com.budwk.app.zhgh.welfare.model.WelfareProjectSubjectOption;
|
|||||||
import com.budwk.app.zhgh.welfare.param.WelfareSelectionSituationPageForm;
|
import com.budwk.app.zhgh.welfare.param.WelfareSelectionSituationPageForm;
|
||||||
import com.budwk.app.zhgh.welfare.service.WelfareSelectionSituationService;
|
import com.budwk.app.zhgh.welfare.service.WelfareSelectionSituationService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
|
||||||
import org.apache.poi.ss.usermodel.Workbook;
|
import org.apache.poi.ss.usermodel.Workbook;
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||||
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;
|
||||||
@@ -255,9 +255,9 @@ public class WelfareSelectionSituationServiceImpl extends BaseServiceImpl<Welfar
|
|||||||
return map;
|
return map;
|
||||||
}).toList();
|
}).toList();
|
||||||
|
|
||||||
// 分组
|
// 按工会名称分组,工会名称为空时使用默认 sheet 名称,避免导出时 groupingBy 空 key 报错
|
||||||
Map<String, List<Map<String, Object>>> listMap = safeList.stream()
|
Map<String, List<Map<String, Object>>> listMap = safeList.stream()
|
||||||
.collect(Collectors.groupingBy(n -> (String) n.get("welfareUnionName")));
|
.collect(Collectors.groupingBy(n -> StrUtil.blankToDefault(Objects.toString(n.get("welfareUnionName"), ""), "未设置工会"), LinkedHashMap::new, Collectors.toList()));
|
||||||
|
|
||||||
// 构建 Excel 列
|
// 构建 Excel 列
|
||||||
List<ExcelExportEntity> entities = new ArrayList<>();
|
List<ExcelExportEntity> entities = new ArrayList<>();
|
||||||
@@ -272,15 +272,15 @@ public class WelfareSelectionSituationServiceImpl extends BaseServiceImpl<Welfar
|
|||||||
entities.add(userSignEntity);
|
entities.add(userSignEntity);
|
||||||
|
|
||||||
// 导出
|
// 导出
|
||||||
Workbook workbook = new HSSFWorkbook();
|
Workbook workbook = new XSSFWorkbook();
|
||||||
listMap.forEach((k, v) -> {
|
listMap.forEach((k, v) -> {
|
||||||
ExcelExportService service = new ExcelExportService();
|
ExcelExportService service = new ExcelExportService();
|
||||||
ExportParams exportParams = new ExportParams();
|
ExportParams exportParams = new ExportParams();
|
||||||
exportParams.setSheetName(k);
|
exportParams.setSheetName(k);
|
||||||
exportParams.setType(ExcelType.HSSF);
|
exportParams.setType(ExcelType.XSSF);
|
||||||
service.createSheetForMap(workbook, exportParams, entities, v);
|
service.createSheetForMap(workbook, exportParams, entities, v);
|
||||||
});
|
});
|
||||||
|
|
||||||
CommonDownloadUtil.download("领取表.xls", workbook, response);
|
CommonDownloadUtil.download("领取表.xlsx", workbook, response);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -498,11 +498,11 @@ public class WelfareStatisticsServiceImpl extends BaseServiceImpl<WelfareProject
|
|||||||
|
|
||||||
for (NutMap union : mapUnions) {
|
for (NutMap union : mapUnions) {
|
||||||
// 福利人数
|
// 福利人数
|
||||||
long teacherSum = welfareSelectionList.stream().filter(v -> v.getString("welfareUnionId").equals(union.getString("id"))).count();
|
long teacherSum = welfareSelectionList.stream().filter(v -> StrUtil.isNotBlank(v.getString("welfareUnionId")) && v.getString("welfareUnionId", "").equals(union.getString("id"))).count();
|
||||||
union.put("teacherSum", teacherSum);
|
union.put("teacherSum", teacherSum);
|
||||||
|
|
||||||
// 已选人数
|
// 已选人数
|
||||||
long selectedNum = welfareSelectionList.stream().filter(v -> v.getString("welfareUnionId").equals(union.getString("id")) && v.getBoolean("has_selected")).count();
|
long selectedNum = welfareSelectionList.stream().filter(v -> StrUtil.isNotBlank(v.getString("welfareUnionId")) && v.getString("welfareUnionId", "").equals(union.getString("id")) && v.getBoolean("has_selected")).count();
|
||||||
union.put("selectedNum", selectedNum);
|
union.put("selectedNum", selectedNum);
|
||||||
|
|
||||||
// 未选人数
|
// 未选人数
|
||||||
|
|||||||
@@ -25,6 +25,9 @@ const flowMixins = {
|
|||||||
console.log(this.$refs)
|
console.log(this.$refs)
|
||||||
console.log(this.$refs.guava)
|
console.log(this.$refs.guava)
|
||||||
|
|
||||||
|
// 首页待办已完成页面跳转,自动定位待办详情逻辑暂未启用时,及时关闭加载动画避免页面卡住
|
||||||
|
loading.close();
|
||||||
|
|
||||||
// this.oepnAudit({})
|
// this.oepnAudit({})
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -10,12 +10,12 @@ layout("/layouts/platform.html"){
|
|||||||
<table-tool label="子女信息"></table-tool>
|
<table-tool label="子女信息"></table-tool>
|
||||||
<el-descriptions :column="2" border>
|
<el-descriptions :column="2" border>
|
||||||
<el-descriptions-item label="就读年级">
|
<el-descriptions-item label="就读年级">
|
||||||
<el-form-item prop="childRelationship">
|
<el-form-item prop="childrenGrade">
|
||||||
<dict-select v-model="formData.childRelationship" code="CHILD_MANAGE_GRADE" style="width: 100%" placeholder="请选择就读年级">
|
<dict-select v-model="formData.childrenGrade" code="CHILD_MANAGE_GRADE" style="width: 100%" placeholder="请选择就读年级">
|
||||||
</dict-select>
|
</dict-select>
|
||||||
</el-form-item></el-descriptions-item>
|
</el-form-item></el-descriptions-item>
|
||||||
<el-descriptions-item label="入学年份">
|
<el-descriptions-item label="入学年份">
|
||||||
<el-form-item prop="childrenBirthday">
|
<el-form-item prop="childrenYear">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
v-model="formData.childrenYear"
|
v-model="formData.childrenYear"
|
||||||
type="year"
|
type="year"
|
||||||
@@ -146,7 +146,7 @@ layout("/layouts/platform.html"){
|
|||||||
bizId: GetQueryString("bizId"),
|
bizId: GetQueryString("bizId"),
|
||||||
formData: {},
|
formData: {},
|
||||||
formRules: {
|
formRules: {
|
||||||
childRelationship: [{ required: true, message: '请选择就读年级', trigger: 'change' }],
|
childrenGrade: [{ required: true, message: '请选择就读年级', trigger: 'change' }],
|
||||||
childrenYear: [{ required: true, message: '请选择入学年份', trigger: 'change' }],
|
childrenYear: [{ required: true, message: '请选择入学年份', trigger: 'change' }],
|
||||||
childrenName: [{ required: true, message: '请输入子女姓名', trigger: 'blur' }],
|
childrenName: [{ required: true, message: '请输入子女姓名', trigger: 'blur' }],
|
||||||
childrenIdCard: [{ required: true, message: '请输入子女身份证号', trigger: 'blur' }, {pattern: /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/, message: '请输入正确的身份证号码', trigger: 'blur'}],
|
childrenIdCard: [{ required: true, message: '请输入子女身份证号', trigger: 'blur' }, {pattern: /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/, message: '请输入正确的身份证号码', trigger: 'blur'}],
|
||||||
@@ -220,6 +220,7 @@ layout("/layouts/platform.html"){
|
|||||||
unionId: union.id,
|
unionId: union.id,
|
||||||
mobile: mobile,
|
mobile: mobile,
|
||||||
// 自动填充监护人1信息
|
// 自动填充监护人1信息
|
||||||
|
guardianUserId1: id,
|
||||||
guardianUserName1: username,
|
guardianUserName1: username,
|
||||||
guardianLoginName1: loginname,
|
guardianLoginName1: loginname,
|
||||||
guardianMobile1: mobile,
|
guardianMobile1: mobile,
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ const INFO = {
|
|||||||
<el-descriptions-item label="学位">{{ viewData.academicDegree }}</el-descriptions-item>
|
<el-descriptions-item label="学位">{{ viewData.academicDegree }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="党政职务">{{ viewData.position }}</el-descriptions-item>
|
<el-descriptions-item label="党政职务">{{ viewData.position }}</el-descriptions-item>
|
||||||
|
|
||||||
<el-descriptions-item label="工作单位">{{ viewData.unitname }}</el-descriptions-item>
|
<el-descriptions-item label="工作单位">{{ viewData.unitName }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="所属工会">{{ viewData.unionname }}</el-descriptions-item>
|
<el-descriptions-item label="所属工会">{{ viewData.unionName }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="所属校区">{{ viewData.campus }}</el-descriptions-item>
|
<el-descriptions-item label="所属校区">{{ viewData.campus }}</el-descriptions-item>
|
||||||
|
|
||||||
<el-descriptions-item label="身份证号码">{{ viewData.idCard }}</el-descriptions-item>
|
<el-descriptions-item label="身份证号码">{{ viewData.idCard }}</el-descriptions-item>
|
||||||
@@ -51,26 +51,26 @@ const INFO = {
|
|||||||
<el-descriptions-item></el-descriptions-item>
|
<el-descriptions-item></el-descriptions-item>
|
||||||
|
|
||||||
<!-- <template v-if="viewData.loginname == $store.state.user.loginname">-->
|
<!-- <template v-if="viewData.loginname == $store.state.user.loginname">-->
|
||||||
<template>
|
<template v-if="viewData.loginname == $store.state.user.loginname">
|
||||||
<el-descriptions-item label="家庭主要成员" :span="3">
|
<el-descriptions-item label="家庭主要成员" :span="3">
|
||||||
<el-table v-if="viewData.families&&viewData.families.length"
|
<el-table v-if="viewData.families&&viewData.families.length"
|
||||||
:data="viewData.families" size="mini" border
|
:data="viewData.families" size="mini" border
|
||||||
:header-cell-style="{background:'#eff3f6'}"
|
:header-cell-style="{background:'#eff3f6'}"
|
||||||
style="width: 100%">
|
style="width: 100%">
|
||||||
<el-table-column prop="relation" label="与本人关系" align="center"
|
<el-table-column prop="relation" label="关系" align="center"
|
||||||
header-align="center">
|
header-align="center">
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="name" label="姓名" align="center" header-align="center">
|
<el-table-column prop="name" label="姓名" align="center" header-align="center">
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="unit" label="单位" align="center" header-align="center">
|
<el-table-column prop="unit" label="工作单位" align="center" header-align="center">
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="remark" label="备注" align="center" header-align="center">
|
<el-table-column prop="remark" label="备注" align="center" header-align="center">
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<el-empty v-else :image-size="50" description="暂无家庭成员信息"></el-empty>
|
<el-empty v-else :image-size="50" description="暂无家庭成员信息"></el-empty>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="个人简况" :span="3">
|
<el-descriptions-item label="个人简历" :span="3">
|
||||||
<template slot="label">个人简况</template>
|
<template slot="label">个人简历</template>
|
||||||
<div v-if="viewData.personalData" class="text-left" v-html="viewData.personalData"></div>
|
<div v-if="viewData.personalData" class="text-left" v-html="viewData.personalData"></div>
|
||||||
<span v-else>无数据</span>
|
<span v-else>无数据</span>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
|
|||||||
+3
-3
@@ -15,8 +15,8 @@ const MEMBER_ALL_CHANGE_INFO = {
|
|||||||
<el-descriptions-item label="学位">{{ viewData.academicDegree }}</el-descriptions-item>
|
<el-descriptions-item label="学位">{{ viewData.academicDegree }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="党政职务">{{ viewData.position }}</el-descriptions-item>
|
<el-descriptions-item label="党政职务">{{ viewData.position }}</el-descriptions-item>
|
||||||
|
|
||||||
<el-descriptions-item label="工作单位">{{ viewData.unitname }}</el-descriptions-item>
|
<el-descriptions-item label="工作单位">{{ viewData.unitName }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="所属工会">{{ viewData.unionname }}</el-descriptions-item>
|
<el-descriptions-item label="所属工会">{{ viewData.unionName }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="所属校区">{{ viewData.campus }}</el-descriptions-item>
|
<el-descriptions-item label="所属校区">{{ viewData.campus }}</el-descriptions-item>
|
||||||
|
|
||||||
<el-descriptions-item label="身份证号码">{{ viewData.idCard }}</el-descriptions-item>
|
<el-descriptions-item label="身份证号码">{{ viewData.idCard }}</el-descriptions-item>
|
||||||
@@ -56,7 +56,7 @@ const MEMBER_ALL_CHANGE_INFO = {
|
|||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="个人简况" :span="3">
|
<el-descriptions-item label="个人简况" :span="3">
|
||||||
<template slot="label">个人简况</template>
|
<template slot="label">个人简况</template>
|
||||||
<div v-if="viewData.vita" class="text-left" v-html="viewData.vita"></div>
|
<div v-if="viewData.personalData" class="text-left" v-html="viewData.personalData"></div>
|
||||||
<span v-else>无数据</span>
|
<span v-else>无数据</span>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
+4
-2
@@ -350,9 +350,11 @@ const MEMBER_CHANGE = {
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
getUnionName(val){
|
getUnionName(val){
|
||||||
debugger
|
|
||||||
const data = this.units.find(v => v.id === val)
|
const data = this.units.find(v => v.id === val)
|
||||||
this.$set(this.formData, 'unionName', data ? data.unionName : '')
|
// 选择工作单位后,同步保存单位名称和所属工会信息,避免变更记录快照不一致。
|
||||||
|
this.$set(this.formData, 'unitName', data ? data.name : null)
|
||||||
|
this.$set(this.formData, 'unionId', data ? (data.unionId || data.unionid) : null)
|
||||||
|
this.$set(this.formData, 'unionName', data ? (data.unionName || data.unionname) : '')
|
||||||
},
|
},
|
||||||
allowFields(prop) {
|
allowFields(prop) {
|
||||||
return !this.allowChangeFields.map(v => v.code).includes(prop)
|
return !this.allowChangeFields.map(v => v.code).includes(prop)
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ layout("/layouts/platform.html"){
|
|||||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||||
{ prop: "changeTypes", label: "变更类型", sortable: true, width: 200 },
|
{ prop: "changeTypes", label: "变更类型", sortable: true, width: 200 },
|
||||||
{ prop: "applyDateTime", label: "申请时间", sortable: true },
|
{ prop: "applyDateTime", label: "申请时间", sortable: true },
|
||||||
{ prop: "curTaskName", label: "当前节点"},
|
{ prop: "taskName", label: "当前节点"},
|
||||||
{ prop: "instanceState", label: "流程状态"}
|
{ prop: "instanceState", label: "流程状态"}
|
||||||
],
|
],
|
||||||
changeTypeData: [],
|
changeTypeData: [],
|
||||||
|
|||||||
@@ -428,7 +428,10 @@
|
|||||||
},
|
},
|
||||||
getUnionName(val){
|
getUnionName(val){
|
||||||
const data = this.units.find(v => v.id === val)
|
const data = this.units.find(v => v.id === val)
|
||||||
this.$set(this.formData, 'unionName', data ? data.unionname : '')
|
// 选择工作单位后,同步保存单位名称和所属工会信息,避免变更记录快照不一致。
|
||||||
|
this.$set(this.formData, 'unitName', data ? data.name : null)
|
||||||
|
this.$set(this.formData, 'unionId', data ? (data.unionId || data.unionid) : null)
|
||||||
|
this.$set(this.formData, 'unionName', data ? (data.unionName || data.unionname) : '')
|
||||||
},
|
},
|
||||||
allowFields(prop) {
|
allowFields(prop) {
|
||||||
return !this.allowChangeFields.map(v => v.code).includes(prop)
|
return !this.allowChangeFields.map(v => v.code).includes(prop)
|
||||||
|
|||||||
@@ -427,7 +427,10 @@ layout("/layouts/platform.html"){
|
|||||||
// 获取表单工会名称
|
// 获取表单工会名称
|
||||||
getUnionName(val){
|
getUnionName(val){
|
||||||
const data = this.units.find(v => v.id === val)
|
const data = this.units.find(v => v.id === val)
|
||||||
this.$set(this.formData, 'unionName', data ? data.unionName : '')
|
// 选择工作单位后,同步保存单位名称和所属工会信息,避免变更记录快照不一致。
|
||||||
|
this.$set(this.formData, 'unitName', data ? data.name : null)
|
||||||
|
this.$set(this.formData, 'unionId', data ? (data.unionId || data.unionid) : null)
|
||||||
|
this.$set(this.formData, 'unionName', data ? (data.unionName || data.unionname) : '')
|
||||||
},
|
},
|
||||||
// 获取表单可编辑的字段信息
|
// 获取表单可编辑的字段信息
|
||||||
allowFields(prop) {
|
allowFields(prop) {
|
||||||
|
|||||||
@@ -14,8 +14,8 @@
|
|||||||
<el-descriptions-item label="学位">{{ viewData.academicDegree }}</el-descriptions-item>
|
<el-descriptions-item label="学位">{{ viewData.academicDegree }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="党政职务">{{ viewData.position }}</el-descriptions-item>
|
<el-descriptions-item label="党政职务">{{ viewData.position }}</el-descriptions-item>
|
||||||
|
|
||||||
<el-descriptions-item label="工作单位">{{ viewData.unitname }}</el-descriptions-item>
|
<el-descriptions-item label="工作单位">{{ viewData.unitName }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="所属工会">{{ viewData.unionname }}</el-descriptions-item>
|
<el-descriptions-item label="所属工会">{{ viewData.unionName }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="所属校区">{{ viewData.campus }}</el-descriptions-item>
|
<el-descriptions-item label="所属校区">{{ viewData.campus }}</el-descriptions-item>
|
||||||
|
|
||||||
<el-descriptions-item label="身份证号码">{{ viewData.idCard }}</el-descriptions-item>
|
<el-descriptions-item label="身份证号码">{{ viewData.idCard }}</el-descriptions-item>
|
||||||
@@ -54,7 +54,7 @@
|
|||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="个人简况" :span="3">
|
<el-descriptions-item label="个人简况" :span="3">
|
||||||
<template slot="label">个人简况</template>
|
<template slot="label">个人简况</template>
|
||||||
<div v-if="viewData.vita" class="text-left" v-html="viewData.vita"></div>
|
<div v-if="viewData.personalData" class="text-left" v-html="viewData.personalData"></div>
|
||||||
<span v-else>无数据</span>
|
<span v-else>无数据</span>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
</el-descriptions>
|
</el-descriptions>
|
||||||
|
|||||||
@@ -0,0 +1,136 @@
|
|||||||
|
<!--#
|
||||||
|
layout("/layouts/platform.html"){
|
||||||
|
#-->
|
||||||
|
<div id="app" class="platform" v-cloak>
|
||||||
|
<guava ref="guava" padding="0 5%">
|
||||||
|
<template>
|
||||||
|
<el-card shadow="never">
|
||||||
|
<search @search="doSearch">
|
||||||
|
<search-item label="年度">
|
||||||
|
<el-date-picker v-model="pageForm.year"
|
||||||
|
type="year"
|
||||||
|
value-format="yyyy"
|
||||||
|
placeholder="请选择年度"
|
||||||
|
style="width: 100%"
|
||||||
|
@change="yearChange"></el-date-picker>
|
||||||
|
</search-item>
|
||||||
|
<search-item label="任务名称">
|
||||||
|
<el-select v-model="pageForm.checkTaskId"
|
||||||
|
clearable
|
||||||
|
filterable
|
||||||
|
placeholder="请选择任务"
|
||||||
|
style="width: 100%"
|
||||||
|
@change="doSearch">
|
||||||
|
<el-option v-for="item in taskOptions"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.taskName"
|
||||||
|
:value="item.id"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</search-item>
|
||||||
|
<search-item label="所属工会">
|
||||||
|
<el-select v-model="pageForm.unionId"
|
||||||
|
clearable
|
||||||
|
filterable
|
||||||
|
placeholder="请选择所属工会"
|
||||||
|
style="width: 100%"
|
||||||
|
@change="doSearch">
|
||||||
|
<el-option v-for="item in unions"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</search-item>
|
||||||
|
</search>
|
||||||
|
</el-card>
|
||||||
|
|
||||||
|
<el-card shadow="never" class="mt10">
|
||||||
|
<table-tool label="工会确认情况统计"></table-tool>
|
||||||
|
<el-table :data="tableData"
|
||||||
|
:size="tableSize"
|
||||||
|
row-key="unionId"
|
||||||
|
style="width: 100%"
|
||||||
|
v-loading="tableLoading"
|
||||||
|
ref="table"
|
||||||
|
class="vi-table">
|
||||||
|
<el-table-column type="index" :index="indexMethod" label="序号" width="80px" align="center" header-align="center"></el-table-column>
|
||||||
|
<el-table-column prop="unionName" label="工会名称" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||||
|
<el-table-column prop="totalCount" label="总人数" align="center" header-align="center"></el-table-column>
|
||||||
|
<el-table-column prop="confirmedCount" label="已确认人数" align="center" header-align="center"></el-table-column>
|
||||||
|
<el-table-column prop="unconfirmedCount" label="未确认人数" align="center" header-align="center"></el-table-column>
|
||||||
|
<el-table-column prop="completeStatus" label="确认完成状态" align="center" header-align="center"></el-table-column>
|
||||||
|
</el-table>
|
||||||
|
<!--#include("/layouts/pagination.html"){}#-->
|
||||||
|
</el-card>
|
||||||
|
</template>
|
||||||
|
</guava>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script nonce="${cspNonce!}">
|
||||||
|
const vue = new Vue({
|
||||||
|
el: "#app",
|
||||||
|
mixins: [initTableMixins],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
pageForm: {
|
||||||
|
year: moment().format("YYYY"),
|
||||||
|
checkTaskId: "",
|
||||||
|
unionId: ""
|
||||||
|
},
|
||||||
|
unions: [],
|
||||||
|
taskOptions: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
yearChange() {
|
||||||
|
return $.get("/platform/member/check/confirm/listEnabledTask", {year: this.pageForm.year}).then((resp) => {
|
||||||
|
if (resp.code === 0) {
|
||||||
|
this.taskOptions = resp.data || []
|
||||||
|
if (this.taskOptions.length > 0 && !this.pageForm.checkTaskId) {
|
||||||
|
this.$set(this.pageForm, "checkTaskId", this.taskOptions[0].id)
|
||||||
|
}
|
||||||
|
if (this.taskOptions.length === 0) {
|
||||||
|
this.$set(this.pageForm, "checkTaskId", "")
|
||||||
|
}
|
||||||
|
this.doSearch()
|
||||||
|
} else {
|
||||||
|
this.notifyError(resp.msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
pageData() {
|
||||||
|
if (!this.pageForm.year || !this.pageForm.checkTaskId) {
|
||||||
|
this.tableData = []
|
||||||
|
this.$set(this.pageForm, "totalCount", 0)
|
||||||
|
return Promise.resolve()
|
||||||
|
}
|
||||||
|
this.tableLoading = true
|
||||||
|
return $.post("/platform/member/check/confirm/pageData", this.pageForm).then((resp) => {
|
||||||
|
if (resp.code === 0) {
|
||||||
|
this.tableData = resp.data.list || []
|
||||||
|
this.$set(this.pageForm, "totalCount", resp.data.totalCount || 0)
|
||||||
|
} else {
|
||||||
|
this.notifyError(resp.msg)
|
||||||
|
}
|
||||||
|
}).always(() => {
|
||||||
|
this.tableLoading = false
|
||||||
|
})
|
||||||
|
},
|
||||||
|
doSearch() {
|
||||||
|
this.$set(this.pageForm, "pageNumber", 1)
|
||||||
|
return this.pageData()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.$businessTool.listUnion().then((res) => {
|
||||||
|
this.unions = res
|
||||||
|
if (!this.pageForm.unionId && this.unions && this.unions.length === 1) {
|
||||||
|
this.$set(this.pageForm, "unionId", this.unions[0].id)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.yearChange()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
<!--#
|
||||||
|
}
|
||||||
|
#-->
|
||||||
@@ -0,0 +1,513 @@
|
|||||||
|
<!--#
|
||||||
|
layout("/layouts/platform.html"){
|
||||||
|
#-->
|
||||||
|
<div id="app" class="platform" v-cloak>
|
||||||
|
<guava ref="guava" padding="0 5%">
|
||||||
|
<template>
|
||||||
|
<el-card shadow="never">
|
||||||
|
<search @search="doSearch">
|
||||||
|
<search-item label="年度">
|
||||||
|
<el-date-picker v-model="pageForm.year"
|
||||||
|
type="year"
|
||||||
|
value-format="yyyy"
|
||||||
|
placeholder="请选择年度"
|
||||||
|
style="width: 100%"
|
||||||
|
@change="yearChange"></el-date-picker>
|
||||||
|
</search-item>
|
||||||
|
<search-item label="任务名称">
|
||||||
|
<el-select v-model="pageForm.checkTaskId"
|
||||||
|
placeholder="请选择任务"
|
||||||
|
clearable
|
||||||
|
filterable
|
||||||
|
style="width: 100%"
|
||||||
|
@change="doSearch">
|
||||||
|
<el-option v-for="item in taskOptions"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.taskName"
|
||||||
|
:value="item.id"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</search-item>
|
||||||
|
<search-item label="姓名/工号">
|
||||||
|
<el-input v-model="pageForm.searchKeyword" clearable placeholder="请输入姓名或工号"></el-input>
|
||||||
|
</search-item>
|
||||||
|
<search-item label="所属工会" v-if="$auth.hasRoleOr(['SYSADMIN', 'SCHOOL_UNION_ADMIN'])">
|
||||||
|
<el-select v-model="pageForm.unionIds"
|
||||||
|
placeholder="请选择所属工会"
|
||||||
|
clearable
|
||||||
|
filterable
|
||||||
|
style="width: 100%"
|
||||||
|
@change="flushUnits"
|
||||||
|
@clear="flushUnits">
|
||||||
|
<el-option v-for="item in unions"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</search-item>
|
||||||
|
<search-item label="所属单位">
|
||||||
|
<el-select v-model="pageForm.unitIds"
|
||||||
|
placeholder="请选择所属单位"
|
||||||
|
clearable
|
||||||
|
filterable
|
||||||
|
multiple
|
||||||
|
collapse-tags
|
||||||
|
style="width: 100%">
|
||||||
|
<el-option v-for="item in units"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</search-item>
|
||||||
|
<search-item label="确认状态">
|
||||||
|
<el-select v-model="pageForm.audit" placeholder="请选择确认状态" clearable style="width: 100%">
|
||||||
|
<el-option label="已确认" :value="true"></el-option>
|
||||||
|
<el-option label="未确认" :value="false"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</search-item>
|
||||||
|
</search>
|
||||||
|
</el-card>
|
||||||
|
|
||||||
|
<el-card shadow="never" class="mt10">
|
||||||
|
<table-tool label="人员名单">
|
||||||
|
<el-button type="primary" size="small" @click="openImport">导入名单</el-button>
|
||||||
|
<el-button type="primary" size="small" @click="openAddUser">添加人员</el-button>
|
||||||
|
<el-button type="primary" size="small" @click="exportData">导出</el-button>
|
||||||
|
<el-button type="primary" size="small" :disabled="!pageForm.checkTaskId" @click="doAuditByUnion(true)">按工会确认</el-button>
|
||||||
|
<el-button type="danger" size="small" :disabled="!pageForm.checkTaskId" @click="doAuditByUnion(false)">按工会取消确认</el-button>
|
||||||
|
<el-button type="primary" size="small" :disabled="selectedIds.length === 0" @click="doConfirmSelected(true)">勾选确认</el-button>
|
||||||
|
<el-button type="danger" size="small" :disabled="selectedIds.length === 0" @click="doConfirmSelected(false)">勾选取消确认</el-button>
|
||||||
|
<el-button type="danger" size="small" :disabled="selectedIds.length === 0" @click="deleteSelected">批量删除</el-button>
|
||||||
|
</table-tool>
|
||||||
|
|
||||||
|
<el-table :data="tableData"
|
||||||
|
style="width: 100%"
|
||||||
|
row-key="id"
|
||||||
|
:size="tableSize"
|
||||||
|
v-loading="tableLoading"
|
||||||
|
@selection-change="handleSelectionChange"
|
||||||
|
@sort-change="pageOrder"
|
||||||
|
ref="table"
|
||||||
|
class="vi-table">
|
||||||
|
<el-table-column type="selection" width="55" align="center" header-align="center"></el-table-column>
|
||||||
|
<el-table-column type="index" :index="indexMethod" label="序号" width="80px" align="center" header-align="center"></el-table-column>
|
||||||
|
<el-table-column prop="loginname" label="工号" align="center" header-align="center"></el-table-column>
|
||||||
|
<el-table-column prop="username" label="姓名" align="center" header-align="center"></el-table-column>
|
||||||
|
<el-table-column prop="sex" label="性别" align="center" header-align="center"></el-table-column>
|
||||||
|
<el-table-column prop="unionName" label="所属工会" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||||
|
<el-table-column prop="unitName" label="所属单位" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||||
|
<el-table-column prop="taskName" label="任务名称" min-width="180px" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||||
|
<el-table-column prop="mobile" label="手机号" align="center" header-align="center"></el-table-column>
|
||||||
|
<el-table-column prop="idCard" label="身份证号" min-width="170px" align="center" header-align="center"></el-table-column>
|
||||||
|
<el-table-column prop="branchUnionChecked" label="确认状态" align="center" header-align="center">
|
||||||
|
<template slot-scope="{row}">
|
||||||
|
<el-tag type="success" v-if="row.branchUnionChecked">已确认</el-tag>
|
||||||
|
<el-tag type="info" v-else>未确认</el-tag>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="auditTime" label="确认时间" min-width="160px" align="center" header-align="center"></el-table-column>
|
||||||
|
</el-table>
|
||||||
|
<!--#include("/layouts/pagination.html"){}#-->
|
||||||
|
</el-card>
|
||||||
|
</template>
|
||||||
|
</guava>
|
||||||
|
|
||||||
|
<el-dialog title="添加人员" :visible.sync="addUserVisible" width="80%" :close-on-click-modal="false">
|
||||||
|
<el-card shadow="never">
|
||||||
|
<search @search="addUserDoSearch">
|
||||||
|
<search-item label="姓名">
|
||||||
|
<el-input v-model="addUserPageForm.userName" @keyup.enter.native="addUserDoSearch" clearable placeholder="请输入姓名"></el-input>
|
||||||
|
</search-item>
|
||||||
|
<search-item label="工号">
|
||||||
|
<el-input v-model="addUserPageForm.loginName" @keyup.enter.native="addUserDoSearch" clearable placeholder="请输入工号"></el-input>
|
||||||
|
</search-item>
|
||||||
|
<search-item label="性别">
|
||||||
|
<el-select v-model="addUserPageForm.sexTypes" clearable multiple collapse-tags placeholder="请选择性别" style="width: 100%">
|
||||||
|
<el-option label="男" value="男"></el-option>
|
||||||
|
<el-option label="女" value="女"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</search-item>
|
||||||
|
<search-item label="出生开始">
|
||||||
|
<el-date-picker v-model="addUserPageForm.birthdayStartDate"
|
||||||
|
type="date"
|
||||||
|
value-format="yyyy-MM-dd"
|
||||||
|
placeholder="选择出生开始"
|
||||||
|
style="width: 100%"></el-date-picker>
|
||||||
|
</search-item>
|
||||||
|
<search-item label="出生结束">
|
||||||
|
<el-date-picker v-model="addUserPageForm.birthdayEndDate"
|
||||||
|
type="date"
|
||||||
|
value-format="yyyy-MM-dd"
|
||||||
|
placeholder="选择出生结束"
|
||||||
|
style="width: 100%"></el-date-picker>
|
||||||
|
</search-item>
|
||||||
|
<search-item label="所属工会" v-if="$auth.hasRoleOr(['SYSADMIN', 'SCHOOL_UNION_ADMIN'])">
|
||||||
|
<el-select v-model="addUserPageForm.unionIds"
|
||||||
|
clearable
|
||||||
|
filterable
|
||||||
|
placeholder="请选择所属工会"
|
||||||
|
style="width: 100%"
|
||||||
|
@change="addUserUnionChange"
|
||||||
|
@clear="addUserUnionChange">
|
||||||
|
<el-option v-for="item in addUserUnionOptions"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</search-item>
|
||||||
|
<search-item label="所属单位">
|
||||||
|
<el-select v-model="addUserPageForm.unitIds"
|
||||||
|
clearable
|
||||||
|
filterable
|
||||||
|
multiple
|
||||||
|
collapse-tags
|
||||||
|
placeholder="请选择所属单位"
|
||||||
|
style="width: 100%">
|
||||||
|
<el-option v-for="item in addUserUnitOptions"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</search-item>
|
||||||
|
<search-item label="人员类型">
|
||||||
|
<dict-select clearable
|
||||||
|
code="USER_PERSON_TYPE"
|
||||||
|
multiple
|
||||||
|
collapse-tags
|
||||||
|
placeholder="请选择人员类型"
|
||||||
|
v-model="addUserPageForm.personTypes"></dict-select>
|
||||||
|
</search-item>
|
||||||
|
<search-item label="在职状态">
|
||||||
|
<dict-select clearable
|
||||||
|
code="USER_STATE"
|
||||||
|
multiple
|
||||||
|
collapse-tags
|
||||||
|
placeholder="请选择人员状态"
|
||||||
|
v-model="addUserPageForm.userStates"></dict-select>
|
||||||
|
</search-item>
|
||||||
|
<search-item label="是否会员">
|
||||||
|
<el-select v-model="addUserPageForm.isMember" clearable placeholder="请选择是否会员" style="width: 100%">
|
||||||
|
<el-option label="是" :value="true"></el-option>
|
||||||
|
<el-option label="否" :value="false"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</search-item>
|
||||||
|
</search>
|
||||||
|
</el-card>
|
||||||
|
<el-card shadow="never" class="mt10">
|
||||||
|
<el-table :data="addUserTableData"
|
||||||
|
:size="tableSize"
|
||||||
|
row-key="id"
|
||||||
|
v-loading="addUserTableLoading"
|
||||||
|
style="width: 100%">
|
||||||
|
<el-table-column type="index" :index="addUserIndexMethod" label="序号" width="80px" align="center"></el-table-column>
|
||||||
|
<el-table-column prop="loginname" label="工号" align="center" header-align="center"></el-table-column>
|
||||||
|
<el-table-column prop="username" label="姓名" align="center" header-align="center"></el-table-column>
|
||||||
|
<el-table-column prop="sex" label="性别" align="center" header-align="center"></el-table-column>
|
||||||
|
<el-table-column prop="birthday" label="出生日期" align="center" header-align="center"></el-table-column>
|
||||||
|
<el-table-column prop="personType" label="人员类型" align="center" header-align="center"></el-table-column>
|
||||||
|
<el-table-column prop="userState" label="在职状态" align="center" header-align="center"></el-table-column>
|
||||||
|
<el-table-column prop="unionName" label="所属工会" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||||
|
<el-table-column prop="unitName" label="所属单位" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||||
|
</el-table>
|
||||||
|
<div class="mt10 text-right">
|
||||||
|
<el-pagination background
|
||||||
|
layout="total, sizes, prev, pager, next, jumper"
|
||||||
|
:current-page.sync="addUserPageForm.pageNumber"
|
||||||
|
:page-size.sync="addUserPageForm.pageSize"
|
||||||
|
:page-sizes="[10, 20, 50, 100]"
|
||||||
|
:total="addUserPageForm.totalCount || 0"
|
||||||
|
@size-change="addUserPageData"
|
||||||
|
@current-change="addUserPageData"></el-pagination>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
<template slot="footer">
|
||||||
|
<el-button @click="addUserVisible=false">取消</el-button>
|
||||||
|
<el-button type="primary" @click="submitAddUser">确定</el-button>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
|
<excel-import
|
||||||
|
ref="excelImportRef"
|
||||||
|
url="/platform/member/check/roster/importCheckUser"
|
||||||
|
template_url="/platform/member/check/roster/downloadTem"
|
||||||
|
:visible.sync="importVisible"
|
||||||
|
title="导入人员名单"
|
||||||
|
width="700px"
|
||||||
|
:extra_params="{checkTaskId:pageForm.checkTaskId}"
|
||||||
|
@import-success="doSearch"
|
||||||
|
></excel-import>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script nonce="${cspNonce!}">
|
||||||
|
const vue = new Vue({
|
||||||
|
el: "#app",
|
||||||
|
mixins: [initTableMixins],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
pageForm: {
|
||||||
|
year: moment().format("YYYY"),
|
||||||
|
checkTaskId: "",
|
||||||
|
searchKeyword: "",
|
||||||
|
unionIds: "",
|
||||||
|
unitIds: [],
|
||||||
|
audit: null
|
||||||
|
},
|
||||||
|
unions: [],
|
||||||
|
units: [],
|
||||||
|
taskOptions: [],
|
||||||
|
selectedIds: [],
|
||||||
|
importVisible: false,
|
||||||
|
addUserVisible: false,
|
||||||
|
addUserTableLoading: false,
|
||||||
|
addUserTableData: [],
|
||||||
|
addUserUnionOptions: [],
|
||||||
|
addUserUnitOptions: [],
|
||||||
|
addUserPageForm: {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleSelectionChange(rows) {
|
||||||
|
this.selectedIds = rows.map(function (item) {
|
||||||
|
return item.id
|
||||||
|
})
|
||||||
|
},
|
||||||
|
yearChange() {
|
||||||
|
return $.get("/platform/member/check/roster/listEnabledTask", {year: this.pageForm.year}).then((resp) => {
|
||||||
|
if (resp.code === 0) {
|
||||||
|
this.taskOptions = resp.data || []
|
||||||
|
if (this.taskOptions.length > 0 && !this.pageForm.checkTaskId) {
|
||||||
|
this.$set(this.pageForm, "checkTaskId", this.taskOptions[0].id)
|
||||||
|
}
|
||||||
|
if (this.taskOptions.length === 0) {
|
||||||
|
this.$set(this.pageForm, "checkTaskId", "")
|
||||||
|
}
|
||||||
|
this.doSearch()
|
||||||
|
} else {
|
||||||
|
this.notifyError(resp.msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
pageData() {
|
||||||
|
this.tableLoading = true
|
||||||
|
return $.post("/platform/member/check/roster/pageData", {
|
||||||
|
pageForm: JSON.stringify(this.pageForm)
|
||||||
|
}).then((resp) => {
|
||||||
|
if (resp.code === 0) {
|
||||||
|
this.tableData = resp.data.list || []
|
||||||
|
this.$set(this.pageForm, "totalCount", resp.data.totalCount || 0)
|
||||||
|
this.selectedIds = []
|
||||||
|
} else {
|
||||||
|
this.notifyError(resp.msg)
|
||||||
|
}
|
||||||
|
}).always(() => {
|
||||||
|
this.tableLoading = false
|
||||||
|
})
|
||||||
|
},
|
||||||
|
doSearch() {
|
||||||
|
this.$set(this.pageForm, "pageNumber", 1)
|
||||||
|
return this.pageData()
|
||||||
|
},
|
||||||
|
flushUnits() {
|
||||||
|
this.$set(this.pageForm, "unitIds", [])
|
||||||
|
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
|
||||||
|
this.$businessTool.listUnit(this.pageForm.unionIds).then((res) => {
|
||||||
|
this.units = res
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
this.$businessTool.listUnit().then((res) => {
|
||||||
|
this.units = res
|
||||||
|
})
|
||||||
|
}
|
||||||
|
this.doSearch()
|
||||||
|
},
|
||||||
|
openImport() {
|
||||||
|
if (!this.pageForm.checkTaskId) {
|
||||||
|
this.notifyWarning("请先选择任务")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.importVisible = true
|
||||||
|
},
|
||||||
|
resetAddUserPageForm() {
|
||||||
|
this.addUserPageForm = {
|
||||||
|
pageNumber: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
totalCount: 0,
|
||||||
|
checkTaskId: "",
|
||||||
|
userName: "",
|
||||||
|
loginName: "",
|
||||||
|
sexTypes: [],
|
||||||
|
birthdayStartDate: "",
|
||||||
|
birthdayEndDate: "",
|
||||||
|
unionIds: "",
|
||||||
|
unitIds: [],
|
||||||
|
personTypes: [],
|
||||||
|
userStates: [],
|
||||||
|
isMember: null
|
||||||
|
}
|
||||||
|
this.addUserTableData = []
|
||||||
|
},
|
||||||
|
openAddUser() {
|
||||||
|
if (!this.pageForm.checkTaskId) {
|
||||||
|
this.notifyWarning("请先选择任务")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.resetAddUserPageForm()
|
||||||
|
this.$set(this.addUserPageForm, "checkTaskId", this.pageForm.checkTaskId)
|
||||||
|
this.addUserVisible = true
|
||||||
|
this.$businessTool.listUnion().then((res) => {
|
||||||
|
this.addUserUnionOptions = res
|
||||||
|
})
|
||||||
|
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
|
||||||
|
this.$businessTool.listUnit(this.addUserPageForm.unionIds).then((res) => {
|
||||||
|
this.addUserUnitOptions = res
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
this.$businessTool.listUnit().then((res) => {
|
||||||
|
this.addUserUnitOptions = res
|
||||||
|
})
|
||||||
|
}
|
||||||
|
this.addUserPageData()
|
||||||
|
},
|
||||||
|
addUserUnionChange() {
|
||||||
|
this.$set(this.addUserPageForm, "unitIds", [])
|
||||||
|
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
|
||||||
|
this.$businessTool.listUnit(this.addUserPageForm.unionIds).then((res) => {
|
||||||
|
this.addUserUnitOptions = res
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
addUserPageData() {
|
||||||
|
this.addUserTableLoading = true
|
||||||
|
return $.post("/platform/member/check/roster/notCheckUserPageData", {
|
||||||
|
pageForm: JSON.stringify(this.addUserPageForm)
|
||||||
|
}).then((resp) => {
|
||||||
|
if (resp.code === 0) {
|
||||||
|
this.addUserTableData = resp.data.list || []
|
||||||
|
this.$set(this.addUserPageForm, "totalCount", resp.data.totalCount || 0)
|
||||||
|
} else {
|
||||||
|
this.notifyError(resp.msg)
|
||||||
|
}
|
||||||
|
}).always(() => {
|
||||||
|
this.addUserTableLoading = false
|
||||||
|
})
|
||||||
|
},
|
||||||
|
addUserDoSearch() {
|
||||||
|
this.$set(this.addUserPageForm, "pageNumber", 1)
|
||||||
|
this.addUserPageData()
|
||||||
|
},
|
||||||
|
addUserIndexMethod(index) {
|
||||||
|
return (this.addUserPageForm.pageNumber - 1) * this.addUserPageForm.pageSize + index + 1
|
||||||
|
},
|
||||||
|
submitAddUser() {
|
||||||
|
if (!this.pageForm.checkTaskId) {
|
||||||
|
this.notifyWarning("请先选择任务")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.$set(this.addUserPageForm, "checkTaskId", this.pageForm.checkTaskId)
|
||||||
|
this.$confirm("当前筛选出" + (this.addUserPageForm.totalCount || 0) + "条数据,确认添加到人员名单吗?", "提示", {
|
||||||
|
confirmButtonText: "确定",
|
||||||
|
cancelButtonText: "取消",
|
||||||
|
type: "warning"
|
||||||
|
}).then(() => {
|
||||||
|
const loading = this.$loading({
|
||||||
|
lock: true,
|
||||||
|
text: "数据保存中,请稍后...",
|
||||||
|
spinner: "el-icon-loading"
|
||||||
|
})
|
||||||
|
$.post("/platform/member/check/roster/addCheckUser", {
|
||||||
|
pageForm: JSON.stringify(this.addUserPageForm)
|
||||||
|
}).then((resp) => {
|
||||||
|
if (resp.code === 0) {
|
||||||
|
this.notifySuccess(resp.msg)
|
||||||
|
this.addUserVisible = false
|
||||||
|
this.doSearch()
|
||||||
|
} else {
|
||||||
|
this.notifyError(resp.msg)
|
||||||
|
}
|
||||||
|
}).always(() => {
|
||||||
|
loading.close()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
doAuditByUnion(flag) {
|
||||||
|
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"]) && !this.pageForm.unionIds) {
|
||||||
|
this.notifyWarning("请选择需要确认的分工会")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const msg = flag ? "确定按当前任务和分工会确认名单吗?" : "确定按当前任务和分工会取消确认吗?"
|
||||||
|
this.$confirm(msg, "提示", {
|
||||||
|
confirmButtonText: "确定",
|
||||||
|
cancelButtonText: "取消",
|
||||||
|
type: "warning"
|
||||||
|
}).then(() => {
|
||||||
|
$.post("/platform/member/check/roster/doConfirmUser", {
|
||||||
|
checkTaskId: this.pageForm.checkTaskId,
|
||||||
|
unionId: this.pageForm.unionIds,
|
||||||
|
flag: flag
|
||||||
|
}).then((resp) => {
|
||||||
|
if (resp.code === 0) {
|
||||||
|
this.notifySuccess(resp.msg)
|
||||||
|
this.doSearch()
|
||||||
|
} else {
|
||||||
|
this.notifyError(resp.msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
doConfirmSelected(flag) {
|
||||||
|
const msg = flag ? "确定确认勾选人员吗?" : "确定取消确认勾选人员吗?"
|
||||||
|
this.$confirm(msg, "提示", {
|
||||||
|
confirmButtonText: "确定",
|
||||||
|
cancelButtonText: "取消",
|
||||||
|
type: "warning"
|
||||||
|
}).then(() => {
|
||||||
|
$.post("/platform/member/check/roster/doConfirmSelected", {
|
||||||
|
ids: this.selectedIds.join(","),
|
||||||
|
flag: flag
|
||||||
|
}).then((resp) => {
|
||||||
|
if (resp.code === 0) {
|
||||||
|
this.notifySuccess(resp.msg)
|
||||||
|
this.doSearch()
|
||||||
|
} else {
|
||||||
|
this.notifyError(resp.msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
deleteSelected() {
|
||||||
|
this.$confirm("确认删除勾选人员吗?", "提示", {
|
||||||
|
confirmButtonText: "确定",
|
||||||
|
cancelButtonText: "取消",
|
||||||
|
type: "warning"
|
||||||
|
}).then(() => {
|
||||||
|
$.post("/platform/member/check/roster/deleteSelected", {
|
||||||
|
ids: this.selectedIds.join(",")
|
||||||
|
}).then((resp) => {
|
||||||
|
if (resp.code === 0) {
|
||||||
|
this.notifySuccess(resp.msg)
|
||||||
|
this.doSearch()
|
||||||
|
} else {
|
||||||
|
this.notifyError(resp.msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
exportData() {
|
||||||
|
const form = JSON.stringify(this.pageForm)
|
||||||
|
window.open("/platform/member/check/roster/exportCheckUser?pageForm=" + encodeURIComponent(form))
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.$businessTool.listUnion().then((res) => {
|
||||||
|
this.unions = res
|
||||||
|
if (!this.pageForm.unionIds && this.unions && this.unions.length === 1) {
|
||||||
|
this.$set(this.pageForm, "unionIds", this.unions[0].id)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.flushUnits()
|
||||||
|
this.yearChange()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
<!--#
|
||||||
|
}
|
||||||
|
#-->
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
<!--#
|
|
||||||
layout("/layouts/platform.html"){
|
|
||||||
#-->
|
|
||||||
<div id="app">
|
|
||||||
<guava ref="guava">
|
|
||||||
|
|
||||||
</guava>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script nonce="${cspNonce!}">
|
|
||||||
new Vue({
|
|
||||||
el: '#app',
|
|
||||||
data() {
|
|
||||||
return{
|
|
||||||
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
|
|
||||||
},
|
|
||||||
created() {
|
|
||||||
|
|
||||||
}
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
<!--#
|
|
||||||
}
|
|
||||||
#-->
|
|
||||||
@@ -1,25 +1,215 @@
|
|||||||
<!--#
|
<!--#
|
||||||
layout("/layouts/platform.html"){
|
layout("/layouts/platform.html"){
|
||||||
#-->
|
#-->
|
||||||
<div id="app">
|
<div id="app" v-cloak>
|
||||||
|
<el-card shadow="never">
|
||||||
|
<search @search="doSearch">
|
||||||
|
<search-item label="年度">
|
||||||
|
<el-date-picker v-model="pageForm.year"
|
||||||
|
type="year"
|
||||||
|
value-format="yyyy"
|
||||||
|
placeholder="请选择年度"
|
||||||
|
style="width: 100%"></el-date-picker>
|
||||||
|
</search-item>
|
||||||
|
<search-item label="任务名称">
|
||||||
|
<el-input v-model="pageForm.taskName" placeholder="请输入任务名称查询" clearable></el-input>
|
||||||
|
</search-item>
|
||||||
|
<!-- <search-item label="发布状态">-->
|
||||||
|
<!-- <el-select v-model="pageForm.isEnabled" placeholder="请选择发布状态" clearable style="width: 100%">-->
|
||||||
|
<!-- <el-option label="已发布" :value="true"></el-option>-->
|
||||||
|
<!-- <el-option label="未发布" :value="false"></el-option>-->
|
||||||
|
<!-- </el-select>-->
|
||||||
|
<!-- </search-item>-->
|
||||||
|
</search>
|
||||||
|
</el-card>
|
||||||
|
|
||||||
|
<el-card shadow="never" class="mt10">
|
||||||
|
<table-tool label="任务列表">
|
||||||
|
<el-button size="small" type="primary" icon="el-icon-plus" @click="openAdd">新增</el-button>
|
||||||
|
</table-tool>
|
||||||
|
<el-table :data="tableData"
|
||||||
|
row-key="id"
|
||||||
|
:size="tableSize"
|
||||||
|
v-loading="tableLoading"
|
||||||
|
class="vi-table">
|
||||||
|
<el-table-column type="index" width="80px" label="序号" :index="indexMethod" align="center" header-align="center"></el-table-column>
|
||||||
|
<el-table-column prop="taskName" label="任务名称" align="center" header-align="center" show-overflow-tooltip></el-table-column>
|
||||||
|
<el-table-column prop="year" label="年度" align="center" header-align="center"></el-table-column>
|
||||||
|
<el-table-column prop="startTime" label="开始时间" align="center" header-align="center" min-width="160px"></el-table-column>
|
||||||
|
<el-table-column prop="endTime" label="结束时间" align="center" header-align="center" min-width="160px"></el-table-column>
|
||||||
|
<el-table-column prop="isEnabled" label="是否发布" align="center" header-align="center">
|
||||||
|
<template slot-scope="{row}">
|
||||||
|
<el-switch v-model="row.isEnabled"
|
||||||
|
active-color="#13ce66"
|
||||||
|
inactive-color="#ff4949"
|
||||||
|
@change="switchChange(row)"></el-switch>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" width="180px" fixed="right" align="center" header-align="center">
|
||||||
|
<template slot-scope="{row}">
|
||||||
|
<el-button size="mini" type="primary" @click="openEdit(row)">编辑</el-button>
|
||||||
|
<el-button size="mini" type="danger" @click="onDelete(row.id)">删除</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
<!--#include("/layouts/pagination.html"){}#-->
|
||||||
|
</el-card>
|
||||||
|
|
||||||
|
<el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="50%" :close-on-click-modal="false">
|
||||||
|
<el-form :model="formData" ref="formRef" label-width="100px" :rules="rules">
|
||||||
|
<el-form-item label="任务名称" prop="taskName">
|
||||||
|
<el-input v-model="formData.taskName" maxlength="20" placeholder="请输入任务名称"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="开始时间" prop="startTime">
|
||||||
|
<el-date-picker v-model="formData.startTime"
|
||||||
|
type="datetime"
|
||||||
|
value-format="yyyy-MM-dd HH:mm:ss"
|
||||||
|
placeholder="请选择开始时间"
|
||||||
|
style="width: 100%"></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="结束时间" prop="endTime">
|
||||||
|
<el-date-picker v-model="formData.endTime"
|
||||||
|
type="datetime"
|
||||||
|
value-format="yyyy-MM-dd HH:mm:ss"
|
||||||
|
placeholder="请选择结束时间"
|
||||||
|
style="width: 100%"></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="内容详情" prop="description">
|
||||||
|
<el-input v-model="formData.description" type="textarea" :rows="5" placeholder="请输入内容详情"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<!-- <el-form-item label="是否发布" prop="isEnabled">-->
|
||||||
|
<!-- <el-switch v-model="formData.isEnabled" active-color="#13ce66" inactive-color="#ff4949"></el-switch>-->
|
||||||
|
<!-- </el-form-item>-->
|
||||||
|
</el-form>
|
||||||
|
<template slot="footer">
|
||||||
|
<el-button @click="dialogVisible=false">取消</el-button>
|
||||||
|
<el-button type="primary" @click="submitForm">确定</el-button>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script nonce="${cspNonce!}">
|
<script nonce="${cspNonce!}">
|
||||||
new Vue({
|
const vue = new Vue({
|
||||||
el: '#app',
|
el: "#app",
|
||||||
data() {
|
mixins: [initTableMixins],
|
||||||
return{
|
computed: {
|
||||||
|
dialogTitle() {
|
||||||
}
|
return this.formData.id ? "编辑任务" : "新增任务"
|
||||||
},
|
}
|
||||||
methods: {
|
},
|
||||||
|
data() {
|
||||||
},
|
return {
|
||||||
created() {
|
pageForm: {
|
||||||
|
year: moment().format("YYYY"),
|
||||||
}
|
taskName: "",
|
||||||
})
|
isEnabled: null
|
||||||
|
},
|
||||||
|
dialogVisible: false,
|
||||||
|
formData: {
|
||||||
|
taskName: "",
|
||||||
|
startTime: "",
|
||||||
|
endTime: "",
|
||||||
|
description: "",
|
||||||
|
isEnabled: true
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
taskName: [{required: true, message: "请输入任务名称", trigger: ["change", "blur"]}],
|
||||||
|
startTime: [{required: true, message: "请选择开始时间", trigger: ["change", "blur"]}],
|
||||||
|
endTime: [{required: true, message: "请选择结束时间", trigger: ["change", "blur"]}],
|
||||||
|
description: [{required: true, message: "请输入内容详情", trigger: ["change", "blur"]}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
pageData() {
|
||||||
|
this.tableLoading = true
|
||||||
|
return $.post("/platform/member/check/task/pageData", this.pageForm).then((resp) => {
|
||||||
|
if (resp.code === 0) {
|
||||||
|
this.tableData = resp.data.list || []
|
||||||
|
this.$set(this.pageForm, "totalCount", resp.data.totalCount || 0)
|
||||||
|
} else {
|
||||||
|
this.notifyError(resp.msg)
|
||||||
|
}
|
||||||
|
}).always(() => {
|
||||||
|
this.tableLoading = false
|
||||||
|
})
|
||||||
|
},
|
||||||
|
doSearch() {
|
||||||
|
this.$set(this.pageForm, "pageNumber", 1)
|
||||||
|
return this.pageData()
|
||||||
|
},
|
||||||
|
openAdd() {
|
||||||
|
this.formData = {
|
||||||
|
taskName: "",
|
||||||
|
startTime: "",
|
||||||
|
endTime: "",
|
||||||
|
description: "",
|
||||||
|
isEnabled: true
|
||||||
|
}
|
||||||
|
this.dialogVisible = true
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs.formRef.clearValidate()
|
||||||
|
})
|
||||||
|
},
|
||||||
|
openEdit(row) {
|
||||||
|
$.get("/platform/member/check/task/findOne", {id: row.id}).then((resp) => {
|
||||||
|
if (resp.code === 0) {
|
||||||
|
this.formData = Object.assign({}, resp.data)
|
||||||
|
this.dialogVisible = true
|
||||||
|
} else {
|
||||||
|
this.notifyError(resp.msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
submitForm() {
|
||||||
|
this.$refs.formRef.validate((valid) => {
|
||||||
|
if (!valid) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
$.post("/platform/member/check/task/doAddOrModify", {
|
||||||
|
data: JSON.stringify(this.formData)
|
||||||
|
}).then((resp) => {
|
||||||
|
if (resp.code === 0) {
|
||||||
|
this.notifySuccess(resp.msg)
|
||||||
|
this.dialogVisible = false
|
||||||
|
this.doSearch()
|
||||||
|
} else {
|
||||||
|
this.notifyError(resp.msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
switchChange(row) {
|
||||||
|
$.post("/platform/member/check/task/switchChange", row).then((resp) => {
|
||||||
|
if (resp.code === 0) {
|
||||||
|
this.notifySuccess(resp.msg)
|
||||||
|
this.pageData()
|
||||||
|
} else {
|
||||||
|
this.notifyError(resp.msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
onDelete(id) {
|
||||||
|
this.$confirm("确认删除该任务及其人员名单吗?", "提示", {
|
||||||
|
confirmButtonText: "确定",
|
||||||
|
cancelButtonText: "取消",
|
||||||
|
type: "warning"
|
||||||
|
}).then(() => {
|
||||||
|
$.post("/platform/member/check/task/delete", {id: id}).then((resp) => {
|
||||||
|
if (resp.code === 0) {
|
||||||
|
this.notifySuccess(resp.msg)
|
||||||
|
this.doSearch()
|
||||||
|
} else {
|
||||||
|
this.notifyError(resp.msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}).catch(() => {})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.pageData()
|
||||||
|
}
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
<!--#
|
<!--#
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
<!--#
|
|
||||||
layout("/layouts/platform.html"){
|
|
||||||
#-->
|
|
||||||
<div id="app">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script nonce="${cspNonce!}">
|
|
||||||
new Vue({
|
|
||||||
el: '#app',
|
|
||||||
data() {
|
|
||||||
return{
|
|
||||||
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
|
|
||||||
},
|
|
||||||
created() {
|
|
||||||
|
|
||||||
}
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
<!--#
|
|
||||||
}
|
|
||||||
#-->
|
|
||||||
@@ -112,6 +112,7 @@ layout("/layouts/platform.html"){
|
|||||||
|
|
||||||
new Vue({
|
new Vue({
|
||||||
el: "#app",
|
el: "#app",
|
||||||
|
store,
|
||||||
mixins: [initTableMixins],
|
mixins: [initTableMixins],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -169,7 +169,8 @@ const selectView = {
|
|||||||
selectedOptions: [],
|
selectedOptions: [],
|
||||||
detailVisible: false,
|
detailVisible: false,
|
||||||
currentOption: null,
|
currentOption: null,
|
||||||
activeNames:[]
|
activeNames:[],
|
||||||
|
defaultWelfareImage: "/assets/platform/img/v4/not-image.png"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@@ -179,7 +180,7 @@ const selectView = {
|
|||||||
return {
|
return {
|
||||||
...item,
|
...item,
|
||||||
optionName: option.optionName || "未知选项",
|
optionName: option.optionName || "未知选项",
|
||||||
imgUrl: option.imgUrl,
|
imgUrl: option.imgUrl || this.defaultWelfareImage,
|
||||||
description: option.description
|
description: option.description
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -267,7 +268,11 @@ const selectView = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
handleImageError(e) {
|
handleImageError(e) {
|
||||||
e.target.src = "/static/images/default-welfare.png"
|
// 兜底图加载失败时不再重复替换,避免控制台持续刷 404。
|
||||||
|
if (!e || !e.target || e.target.src.indexOf(this.defaultWelfareImage) > -1) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
e.target.src = this.defaultWelfareImage
|
||||||
},
|
},
|
||||||
|
|
||||||
formatDate(dateStr) {
|
formatDate(dateStr) {
|
||||||
|
|||||||
Reference in New Issue
Block a user