diff --git a/src/main/java/com/budwk/app/zhgh/club/controller/evaluate/ClubEvaluateApplyController.java b/src/main/java/com/budwk/app/zhgh/club/controller/evaluate/ClubEvaluateApplyController.java index 2dba229d..3999471c 100644 --- a/src/main/java/com/budwk/app/zhgh/club/controller/evaluate/ClubEvaluateApplyController.java +++ b/src/main/java/com/budwk/app/zhgh/club/controller/evaluate/ClubEvaluateApplyController.java @@ -86,6 +86,7 @@ public class ClubEvaluateApplyController { Dict args = Dict.create(); args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode()); args.set(FlowConst.FORM_DATA, evaluate); + args.set("clubId", evaluate.getClubId()); ProcessInstance instance = flowEngine.startProcessInstanceByKey("XHPY", evaluate.getId(), SecurityUtil.getUserId(), args); // 自动完成第一个申请任务 @@ -106,6 +107,7 @@ public class ClubEvaluateApplyController { Dict dict = Dict.create(); dict.set(FlowConst.PROCESS_TASK_ID_KEY, taskId); dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.RE_APPLY.getCode()); + dict.set("clubId", clubEvaluate.getClubId()); flowCommonService.executeTask(dict); return Result.success(); } diff --git a/src/main/java/com/budwk/app/zhgh/club/controller/evaluate/ClubEvaluateClubAuditController.java b/src/main/java/com/budwk/app/zhgh/club/controller/evaluate/ClubEvaluateClubAuditController.java index d1bda7fc..38a4e9e9 100644 --- a/src/main/java/com/budwk/app/zhgh/club/controller/evaluate/ClubEvaluateClubAuditController.java +++ b/src/main/java/com/budwk/app/zhgh/club/controller/evaluate/ClubEvaluateClubAuditController.java @@ -38,15 +38,9 @@ import java.util.Map; @At("/platform/club/evaluate/clubAudit") public class ClubEvaluateClubAuditController { - @Inject - private CommonService commonService; - @Inject private SysClubEvaluateService sysClubEvaluateService; - @Inject - private BpmService bpmService; - @At("") @Ok("beetl:/platform/zhgh/club/evaluate/clubAudit/index.html") @SaCheckPermission("club.evaluate.clubAudit") @@ -59,30 +53,4 @@ public class ClubEvaluateClubAuditController { Pagination pagination = sysClubEvaluateService.clubAuditPageData(pageForm); return Result.success(pagination); } - - @At - @Aop(TransAop.READ_COMMITTED) - @SaCheckPermission("club.evaluate.clubAudit") - @SLog(tag = "协会管理系统-协会评优", msg = "会长审核评优申请") - public Result approval(@Valid @Param("approval") BpmTaskApprovalParam approvalParam) { - approvalParam.getBpmTaskApprovalTypeEnum(); - Map variables = BeanUtil.beanToMap(approvalParam); - - List assignments = new ArrayList<>(); - if(approvalParam.getBpmTaskApprovalTypeEnum().equals(BpmTaskApprovalTypeEnum.PASS)){ - List schoolUnionApprovalLoginName = commonService.findUsersLoginNameByRoleCode(RoleConstant.SCHOOL_UNION_CLUB_ADMIN, Cnd.NEW()); - assignments.addAll(schoolUnionApprovalLoginName); - } - bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, assignments); - return Result.success(); - } - - @At - @Aop(TransAop.READ_COMMITTED) - @SaCheckPermission("club.evaluate.clubAudit") - @SLog(tag = "协会管理系统-协会评优", msg = "会长撤回评优申请") - public Result revoke(@Valid String taskId) { - bpmService.revokeTask(taskId); - return Result.success(); - } } diff --git a/src/main/java/com/budwk/app/zhgh/club/controller/examine/ClubExamineApplyController.java b/src/main/java/com/budwk/app/zhgh/club/controller/examine/ClubExamineApplyController.java index ded88f71..9c40c913 100644 --- a/src/main/java/com/budwk/app/zhgh/club/controller/examine/ClubExamineApplyController.java +++ b/src/main/java/com/budwk/app/zhgh/club/controller/examine/ClubExamineApplyController.java @@ -4,6 +4,7 @@ import cn.dev33.satoken.annotation.SaCheckLogin; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Dict; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import com.budwk.app.base.annotation.SLog; @@ -21,6 +22,7 @@ import com.budwk.app.zhgh.club.model.SysClub; import com.budwk.app.zhgh.club.model.SysClubExamineRegister; import com.budwk.app.zhgh.club.service.SysClubExamineService; import com.budwk.app.zhgh.club.service.SysClubService; +import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.club.model.OutlayManageClub; import io.swagger.annotations.ApiOperation; import org.nutz.aop.interceptor.ioc.TransAop; import org.nutz.dao.Cnd; @@ -67,14 +69,14 @@ public class ClubExamineApplyController { @At @SaCheckLogin - public Result getCount(String id, Integer year) { - if(StrUtil.isBlank(id)) { + public Result getCount(String id, Integer year, String clubId) { + if(StrUtil.isBlank(clubId)) { return Result.error("协会信息为空,请核查"); } if(year == null) { return Result.error("年份信息为空,请核查"); } - List list = dao.query(SysClubExamineRegister.class, Cnd.where("clubId", "=", id).and("year(registerDate)", "=", year)); + List list = dao.query(SysClubExamineRegister.class, Cnd.where("clubId", "=", clubId).and("year(registerDate)", "=", year).andEX("id", "!=", id)); List instanceList = dao.query( ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "in", list.stream().map(SysClubExamineRegister::getId).toList()) @@ -92,11 +94,11 @@ public class ClubExamineApplyController { @At @SaCheckLogin - public Result getClubUserNum(String clubId) { + public Result getClubUserNum(String clubId, Integer year) { if(StrUtil.isBlank(clubId)) { return Result.error("协会信息为空,请核查"); } - List result = sysClubExamineService.getClubUserNum(clubId); + List result = sysClubExamineService.getClubUserNum(clubId, year); return Result.success(result); } @@ -124,15 +126,20 @@ public class ClubExamineApplyController { @At @SaCheckLogin - public Result getXghBkMoney(@Valid String clubId) { - /*jf_club club = dao().fetch(jf_club.class, Cnd.where("club_id", "=", id)); - Double total_quota = Double.valueOf(club.getTotal_quota());*/ - return Result.success(0); + public Result getXghBkMoney(@Valid String clubId, Integer year) { + OutlayManageClub club = dao.fetch( + OutlayManageClub.class, + Cnd.where("clubId", "=", clubId) + .and("year", "=", year) + .desc("year") + ); + Number number = ObjectUtil.defaultIfNull(club.getTotalQuota(), 0); + return Result.success(number.floatValue()); } @At @SaCheckLogin - public Result getLasYearSurplus(String clubId) { + public Result getLastYearSurplus(String clubId) { if(StrUtil.isBlank(clubId)) { return Result.error("协会信息为空,请核查"); } @@ -190,6 +197,7 @@ public class ClubExamineApplyController { Dict args = Dict.create(); args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode()); args.set(FlowConst.FORM_DATA, reg); + args.set("clubId", reg.getClubId()); ProcessInstance instance = flowEngine.startProcessInstanceByKey("XHNS", reg.getId(), SecurityUtil.getUserId(), args); // 自动完成第一个申请任务 @@ -218,7 +226,18 @@ public class ClubExamineApplyController { Dict dict = Dict.create(); dict.set(FlowConst.PROCESS_TASK_ID_KEY, taskId); dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.RE_APPLY.getCode()); + dict.set("clubId", examineRegister.getClubId()); flowCommonService.executeTask(dict); return Result.success(); } + + @At + @ApiOperation("获取上一年度的数据") + @SaCheckPermission("club.examine.apply") + public Result getLastData(String clubId, Integer year) { + if (year == null) { + year = DateUtil.thisYear(); + } + return Result.success(); + } } diff --git a/src/main/java/com/budwk/app/zhgh/club/controller/examine/ClubExamineClubAuditController.java b/src/main/java/com/budwk/app/zhgh/club/controller/examine/ClubExamineClubAuditController.java index eb4cf57b..b2d47cd7 100644 --- a/src/main/java/com/budwk/app/zhgh/club/controller/examine/ClubExamineClubAuditController.java +++ b/src/main/java/com/budwk/app/zhgh/club/controller/examine/ClubExamineClubAuditController.java @@ -53,30 +53,4 @@ public class ClubExamineClubAuditController { Pagination pagination = sysClubExamineService.clubAuditPageData(pageForm); return Result.success(pagination); } - - @At - @Aop(TransAop.READ_COMMITTED) - @SaCheckPermission("club.examine.clubAudit") - @SLog(tag = "协会管理系统-协会年审", msg = "会长审核年度考核") - public Result approval(@Valid @Param("approval") BpmTaskApprovalParam approvalParam) { - approvalParam.getBpmTaskApprovalTypeEnum(); - Map variables = BeanUtil.beanToMap(approvalParam); - - List assignments = new ArrayList<>(); - if(approvalParam.getBpmTaskApprovalTypeEnum().equals(BpmTaskApprovalTypeEnum.PASS)){ - List schoolUnionApprovalLoginName = commonService.findUsersLoginNameByRoleCode(RoleConstant.SCHOOL_UNION_CLUB_ADMIN, Cnd.NEW()); - assignments.addAll(schoolUnionApprovalLoginName); - } - bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, assignments); - return Result.success(); - } - - @At - @Aop(TransAop.READ_COMMITTED) - @SaCheckPermission("club.examine.clubAudit") - @SLog(tag = "协会管理系统-协会年审", msg = "会长撤回年度考核") - public Result revoke(@Valid String taskId) { - bpmService.revokeTask(taskId); - return Result.success(); - } } diff --git a/src/main/java/com/budwk/app/zhgh/club/service/SysClubExamineService.java b/src/main/java/com/budwk/app/zhgh/club/service/SysClubExamineService.java index e317d03f..adc8300c 100644 --- a/src/main/java/com/budwk/app/zhgh/club/service/SysClubExamineService.java +++ b/src/main/java/com/budwk/app/zhgh/club/service/SysClubExamineService.java @@ -13,7 +13,7 @@ import java.util.List; public interface SysClubExamineService extends BaseService { - List getClubUserNum(@Valid String clubId); + List getClubUserNum(@Valid String clubId, Integer year); List getJgUser(@Valid String clubId); diff --git a/src/main/java/com/budwk/app/zhgh/club/service/impl/SysClubEvaluateServiceImpl.java b/src/main/java/com/budwk/app/zhgh/club/service/impl/SysClubEvaluateServiceImpl.java index e0b4f094..f0372d68 100644 --- a/src/main/java/com/budwk/app/zhgh/club/service/impl/SysClubEvaluateServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/club/service/impl/SysClubEvaluateServiceImpl.java @@ -82,13 +82,11 @@ public class SysClubEvaluateServiceImpl extends BaseServiceImpl @Override public Pagination clubAuditPageData(ClubUserPageForm pageForm) { - Cnd cnd = Cnd.NEW(); - cnd.and("nd.nodeCode","=",20); - if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name(), RoleConstant.SCHOOL_UNION_CLUB_ADMIN.name())) { - cnd.and("ce.userId", "=", SecurityUtil.getUserId()); - } - Sql sql = generateSql(pageForm, cnd); - return listPageVO(pageForm, sql, ClubEvaluatePageVo.class); + Cnd cnd = Cnd.NEW(); + cnd.and("t.taskName", "=", "ec81591d-da91-412a-90c9-df853dcef478"); + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + Sql sql = generateSql(pageForm, cnd); + return listPageVO(pageForm, sql, ClubEvaluatePageVo.class); } @Override diff --git a/src/main/java/com/budwk/app/zhgh/club/service/impl/SysClubExamineServiceImpl.java b/src/main/java/com/budwk/app/zhgh/club/service/impl/SysClubExamineServiceImpl.java index 943faa10..0ea86234 100644 --- a/src/main/java/com/budwk/app/zhgh/club/service/impl/SysClubExamineServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/club/service/impl/SysClubExamineServiceImpl.java @@ -3,13 +3,11 @@ package com.budwk.app.zhgh.club.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; -import com.budwk.app.base.constant.BpmProcessConstant; import com.budwk.app.base.constant.RoleConstant; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.service.impl.BaseServiceImpl; import com.budwk.app.base.utils.PageUtil; -import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum; -import com.budwk.app.bpm.service.BpmService; +import com.budwk.app.flow.enums.ProcessInstanceStateEnum; import com.budwk.app.flow.enums.ProcessTaskStateEnum; import com.budwk.app.sys.services.SysDictService; import com.budwk.app.web.commons.auth.utils.AuthUtil; @@ -29,199 +27,311 @@ import org.nutz.dao.sql.Sql; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.json.Json; +import org.nutz.lang.Lang; import org.nutz.lang.util.NutMap; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; @IocBean(args = {"refer:dao"}) public class SysClubExamineServiceImpl extends BaseServiceImpl implements SysClubExamineService { - @Inject - private SysDictService sysDictService; + @Inject + private SysDictService sysDictService; + @Inject + private SysClubService sysClubService; - @Inject - private SysClubService sysClubService; + public SysClubExamineServiceImpl(Dao dao) { + super(dao); + } - @Inject - private BpmService bpmService; + @Override + public List getClubUserNum(String clubId, Integer year) { + // 定义统计的用户状态类型 + List userStateList = List.of("在职", "退休"); + List result = new ArrayList<>(); - public SysClubExamineServiceImpl(Dao dao) { - super(dao); - } + // 查询上一年度考核登记数据(用于获取年初人数) + SysClubExamineRegister examineRegister = dao().fetch(SysClubExamineRegister.class, + Cnd.where("year", "=", year - 1).and("clubId", "=", clubId)); - @Override - public List getClubUserNum(String clubId) { -// List userType = sysDictService.getSubListByCode("USER_STATE"); -// List userStateList = userType.stream() -// .filter(v -> v.getName().equals("在职") || v.getName().equals("在岗") || v.getName().equals("退休")) -// .toList(); -// -// Sql sql = Sqls.create(""" -// SELECT -// cu.*, -// u.userState -// FROM -// club_user cu -// LEFT JOIN sys_user u ON cu.userId = u.id -// where cu.clubId = @clubId -// """).setParam("clubId", clubId); -// List userList = listMap(sql); -// List result = new ArrayList<>(); -// userStateList.forEach(v -> { -// List personTypeUser = userList.stream().filter(u -> StrUtil.isNotBlank(u.getString("userState")) && u.getString("userState").equals(v.getName())).toList(); -// NutMap nutMap = new NutMap(); -// nutMap.addv("userState", v.getName()); -// //获取今年年初人数 -// int yearFirst = personTypeUser.stream().filter(u -> !u.getString("joinTime").substring(0, 4).equals(DateUtil.thisYear() + "") && StrUtil.isBlank(u.getString("changeTime"))).toList().size(); -// nutMap.addv("yearFirstNum", yearFirst); -// -// //获取今年人数 -// int thisYear = personTypeUser.stream().filter(u -> u.getString("joinTime").substring(0, 4).equals(DateUtil.thisYear() + "")).toList().size(); -// nutMap.addv("yearAddNum", thisYear); -// //获取今年比去年减少了多少个人 -// int yearEditNum = personTypeUser.stream().filter(u -> StrUtil.isNotBlank(u.getString("changeTime")) && u.getString("changeTime").substring(0, 4).equals(DateUtil.thisYear() + "") && !u.getBoolean("isNormal")).toList().size(); -// nutMap.addv("yearEditNum", yearEditNum); -// -// //总人数 -// int thisYearNum = personTypeUser.stream().filter(u -> StrUtil.isBlank(u.getString("changeTime"))).toList().size(); -// nutMap.addv("thisYearNum", thisYearNum); -// result.add(nutMap); -// }); -// return result; - return null; - } + // 构建协会用户申请记录查询SQL(关联用户信息、流程实例) + Sql sql = Sqls.create(""" + SELECT + cu.*, + year(cu.applyDate) as applyYear, + u.userState, + u.retireDate + FROM + club_user_apply cu + LEFT JOIN sys_user u ON cu.userId = u.id + LEFT JOIN wf_process_instance ins ON ins.businessNo = cu.id + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("cu.clubId", "=", clubId); + cnd.and("ins.state", "=", ProcessInstanceStateEnum.FINISHED.getCode()); + cnd.groupBy("cu.clubId, cu.userId, cu.mode"); + sql.setCondition(cnd); + List userList = listMap(sql); - @Override - public List getJgUser(String clubId) { - Sql sql = Sqls.create(""" - SELECT - cl.*, - u.username as userName, - u.loginname as loginName, - u.unitname as unitName, - u.mobile - FROM - club_user cl - LEFT JOIN `vw_user` u ON cl.userId = u.id - WHERE - cl.clubId = @clubId - AND NOT JSON_CONTAINS(cl.roleCode, '"CLUB_MEMBER"') - ORDER BY - CASE - WHEN JSON_CONTAINS(cl.roleCode, '"CLUB_PRESIDENT"') THEN 1 - WHEN JSON_CONTAINS(cl.roleCode, '"CLUB_VICE_PRESIDENT"') THEN 2 - WHEN JSON_CONTAINS(cl.roleCode, '"CLUB_SECRETARY"') THEN 3 - WHEN JSON_CONTAINS(cl.roleCode, '"CLUB_VICE_SECRETARY"') THEN 4 - WHEN JSON_CONTAINS(cl.roleCode, '"CLUB_MEMBER"') THEN 5 - ELSE 99 - END - """).setParam("clubId", clubId); - List listMap = listMap(sql); - for (NutMap nutMap : listMap) { - List list = Json.fromJsonAsList(String.class, nutMap.getString("roleCode")); - String roleName = SysClubUserServiceImpl.convertRoleName(list); - nutMap.put("roleName", roleName); - nutMap.put("roleCode", list); - } - return listMap; - } + // 遍历在职/退休状态,分别统计人员变动数据 + for (String userState : userStateList) { + NutMap nutMap = new NutMap(); + nutMap.addv("userState", userState); - @Override - public SysClubExamineRegister doAdd(SysClubExamineRegister examineRegister, String incomeDetailed, String incomeCensus) { - List detailedList = Json.fromJsonAsList(SysClubExamineRegisterDetailed.class, incomeDetailed); - List incomeCensusList = Json.fromJsonAsList(JSONObject.class, incomeCensus); - examineRegister.setRegisterDate(DateUtil.now()); - examineRegister.setUserId(SecurityUtil.getUserId()); - examineRegister.setIncomeCensus(incomeCensusList); - SysClubExamineRegister examineReg = dao().insert(examineRegister); - detailedList.forEach(v -> { - v.setRegisterId(examineRegister.getId()); - }); - dao().insert(detailedList); - return examineReg; - } + // 根据用户状态匹配对应的人员类型集合 + List personTypeList = switch (userState) { + case "在职" -> List.of("在职", "在岗"); + case "退休" -> List.of("退休", "退休【变号】"); + default -> new ArrayList<>(); + }; - @Override - public SysClubExamineRegister doEdit(SysClubExamineRegister examineRegister, String incomeDetailed, String incomeCensus) { - List detailedList = Json.fromJsonAsList(SysClubExamineRegisterDetailed.class, incomeDetailed); - List incomeCensusList = Json.fromJsonAsList(JSONObject.class, incomeCensus); - examineRegister.setRegisterDate(DateUtil.now()); - examineRegister.setIncomeCensus(incomeCensusList); - updateIgnoreNull(examineRegister); - dao().clear(SysClubExamineRegisterDetailed.class, Cnd.where("registerId", "=", examineRegister.getId())); - detailedList.forEach(v -> { - v.setRegisterId(examineRegister.getId()); - }); - insert(detailedList); - return examineRegister; - } + // 过滤出符合当前人员类型的用户(非空判断避免NPE) + List personTypeUsers = userList.stream() + .filter(u -> StrUtil.isNotBlank(u.getString("userState")) + && personTypeList.contains(u.getString("userState"))) + .collect(Collectors.toList()); - @Override - public Pagination minePageData(ClubUserPageForm pageForm) { - Cnd cnd = Cnd.NEW(); - if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) { - List myManageClub = sysClubService.getMyManageClub(); - cnd.and("info.clubId", "in", myManageClub.stream().map(SysClub::getId).toList()); - } - Sql sql = Sqls.create(""" - SELECT - info.*, - u.username as concatPersonName, - sc.concatPersonMobile, - ins.id AS instanceId, - ins.businessNo, - ins.state instanceState, - ins.variable instanceVariable, - ins.processDefineId instanceProcessDefineId, - t.id taskId, - t.taskName AS taskKey, - t.displayName taskName, - t.taskType, - t.performType taskPerformType, - t.taskState, - t.finishTime, - t.taskParentId, - t.variable taskVariable, - IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke, - (select MAX(id) from wf_process_task where processInstanceId = ins.id and taskName = 'startTask') AS startTaskId - FROM - `sys_club_examine_register` info - LEFT JOIN sys_club sc ON sc.id = info.clubId - LEFT JOIN `vw_user` u ON u.id = sc.concatPerson - 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_actor ta ON ta.processTaskId = t.id - $condition - """); - cnd.andEX("YEAR(info.registerDate)", "=", pageForm.getYear()); - cnd.andEX("sc.id", "=", pageForm.getClubId()); - cnd.and("info.userId", "=", SecurityUtil.getUserId()); + // 初始化年末人数为0 + int thisYearNum = 0; + if (!Lang.isEmpty(personTypeUsers)) { + // 统计年末人数:加入协会且无退出记录的用户数量 + List exitUserIds = personTypeUsers.stream() + .filter(u -> u.getInt("mode") == 0) + .map(u -> u.getString("userId")) + .toList(); - cnd.groupBy("info.id"); - cnd.desc("registerDate"); - sql.setCondition(cnd); - return listPageVO(pageForm, sql, ClubExaminePageVo.class); - } + thisYearNum = (int) personTypeUsers.stream() + .filter(u -> u.getInt("mode") == 1) + .filter(u -> !exitUserIds.contains(u.getString("userId"))) + .count(); + } - @Override - public Pagination clubAuditPageData(ClubUserPageForm pageForm) { - Cnd cnd = Cnd.NEW(); - cnd.and("nd.nodeCode","=",20); - if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name(), RoleConstant.SCHOOL_UNION_CLUB_ADMIN.name())) { - cnd.and("scer.userId", "=", SecurityUtil.getUserId()); - } - Sql sql = generateSql(pageForm, cnd); - return listPageVO(pageForm, sql, ClubExaminePageVo.class); - } + // 统计今年退休人数:已入会且退休日期在本年度的用户 + int retireCount = (int) personTypeUsers.stream() + .filter(u -> u.getTime("retireDate") != null + && u.getInt("mode") == 1 + && DateUtil.year(u.getTime("retireDate")) == year) + .count(); - @Override - public Pagination schoolAuditPageData(ClubUserPageForm pageForm) { - Cnd cnd = Cnd.NEW(); - cnd.and("t.taskName", "=", "ed4f6e9f-f0ea-4a73-ad57-bfcd8dd4d4bd"); - cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); - Sql sql = generateSql(pageForm, cnd); - return listPageVO(pageForm, sql, ClubExaminePageVo.class); - } + // 封装年初人数:从上一年度登记数据中获取,无数据则为0 + if (Lang.isNotEmpty(examineRegister) && Lang.isNotEmpty(examineRegister.getChangeUserNum())) { + JSONObject uState = examineRegister.getChangeUserNum().stream() + .filter(c -> c.getStr("userState").equals(userState)) + .findFirst() + .orElse(null); + nutMap.addv("yearFirstNum", Lang.isEmpty(uState) ? 0 : uState.getInt("thisYearNum")); + } else { + nutMap.addv("yearFirstNum", 0); + } + + // 统计年度增加相关数据 + int joinThisYear = (int) personTypeUsers.stream() + .filter(u -> u.getInt("mode") == 1 && u.getInt("applyYear") == year) + .count(); + + int thisYearJoinAndRetire = (int) userList.stream() + .filter(u -> u.getInt("mode") == 1 && u.getInt("applyYear") == year + && u.getTime("retireDate") != null + && DateUtil.year(u.getTime("retireDate")) == year) + .count(); + + int beforeYearJoinAndRetire = (int) userList.stream() + .filter(u -> u.getInt("mode") == 1 && u.getInt("applyYear") == year + && u.getTime("retireDate") != null + && DateUtil.year(u.getTime("retireDate")) < year) + .count(); + + // 按用户状态封装年度增加人数 + nutMap.addv("yearAddNum", "在职".equals(userState) + ? joinThisYear + thisYearJoinAndRetire + : beforeYearJoinAndRetire + retireCount); + + // 统计年度减少相关数据 + int quitThisYear = (int) personTypeUsers.stream() + .filter(u -> u.getInt("mode") == 0 && u.getInt("applyYear") == year) + .count(); + + // 在职人员年度减少:退休人数+主动退出人数;退休人员仅统计主动退出 + if ("在职".equals(userState)) { + int retireThisYear = (int) userList.stream() + .filter(u -> u.getTime("retireDate") != null + && DateUtil.year(u.getTime("retireDate")) == year) + .count(); + nutMap.addv("yearReduceNum", retireThisYear + quitThisYear); + } else { + nutMap.addv("yearReduceNum", quitThisYear); + } + + // 封装年末人数 + nutMap.addv("thisYearNum", thisYearNum); + result.add(nutMap); + } + return result; + } + + @Override + public List getJgUser(String clubId) { + // 构建协会管理人员查询SQL(排除普通成员,按职务排序) + Sql sql = Sqls.create(""" + SELECT + cl.*, + u.username as userName, + u.loginname as loginName, + u.unitname as unitName, + u.mobile + FROM + club_user cl + LEFT JOIN `vw_user` u ON cl.userId = u.id + WHERE + cl.clubId = @clubId + AND NOT JSON_CONTAINS(cl.roleCode, '"CLUB_MEMBER"') + ORDER BY + CASE + WHEN JSON_CONTAINS(cl.roleCode, '"CLUB_PRESIDENT"') THEN 1 + WHEN JSON_CONTAINS(cl.roleCode, '"CLUB_VICE_PRESIDENT"') THEN 2 + WHEN JSON_CONTAINS(cl.roleCode, '"CLUB_SECRETARY"') THEN 3 + WHEN JSON_CONTAINS(cl.roleCode, '"CLUB_VICE_SECRETARY"') THEN 4 + WHEN JSON_CONTAINS(cl.roleCode, '"CLUB_MEMBER"') THEN 5 + ELSE 99 + END + """).setParam("clubId", clubId); + + // 执行查询并处理角色编码转换 + List listMap = listMap(sql); + for (NutMap nutMap : listMap) { + String roleCodeStr = nutMap.getString("roleCode"); + List list = StrUtil.isBlank(roleCodeStr) + ? new ArrayList<>() + : Json.fromJsonAsList(String.class, roleCodeStr); + String roleName = SysClubUserServiceImpl.convertRoleName(list); + nutMap.put("roleName", roleName); + nutMap.put("roleCode", list); + } + return listMap; + } + + @Override + public SysClubExamineRegister doAdd(SysClubExamineRegister examineRegister, String incomeDetailed, String incomeCensus) { + // JSON转换为实体列表(空值判断避免转换异常) + List detailedList = StrUtil.isNotBlank(incomeDetailed) + ? Json.fromJsonAsList(SysClubExamineRegisterDetailed.class, incomeDetailed) + : new ArrayList<>(); + List incomeCensusList = StrUtil.isNotBlank(incomeCensus) + ? Json.fromJsonAsList(JSONObject.class, incomeCensus) + : new ArrayList<>(); + + // 封装新增基础信息 + examineRegister.setRegisterDate(DateUtil.now()); + examineRegister.setUserId(SecurityUtil.getUserId()); + examineRegister.setIncomeCensus(incomeCensusList); + + // 插入主表并批量插入明细(设置关联ID) + SysClubExamineRegister examineReg = dao().insert(examineRegister); + detailedList.forEach(v -> v.setRegisterId(examineRegister.getId())); + if (!Lang.isEmpty(detailedList)) { + dao().insert(detailedList); + } + return examineReg; + } + + @Override + public SysClubExamineRegister doEdit(SysClubExamineRegister examineRegister, String incomeDetailed, String incomeCensus) { + // JSON转换为实体列表(空值判断避免转换异常) + List detailedList = StrUtil.isNotBlank(incomeDetailed) + ? Json.fromJsonAsList(SysClubExamineRegisterDetailed.class, incomeDetailed) + : new ArrayList<>(); + List incomeCensusList = StrUtil.isNotBlank(incomeCensus) + ? Json.fromJsonAsList(JSONObject.class, incomeCensus) + : new ArrayList<>(); + + // 封装编辑信息,更新主表(忽略空值) + examineRegister.setRegisterDate(DateUtil.now()); + examineRegister.setIncomeCensus(incomeCensusList); + updateIgnoreNull(examineRegister); + + // 清空原有明细,插入新明细(设置关联ID) + dao().clear(SysClubExamineRegisterDetailed.class, Cnd.where("registerId", "=", examineRegister.getId())); + detailedList.forEach(v -> v.setRegisterId(examineRegister.getId())); + if (!Lang.isEmpty(detailedList)) { + insert(detailedList); + } + return examineRegister; + } + + @Override + public Pagination minePageData(ClubUserPageForm pageForm) { + Cnd cnd = Cnd.NEW(); + // 非系统管理员,仅查询自己管理的协会(空集合判断避免in查询异常) + if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) { + List myManageClub = sysClubService.getMyManageClub(); + if (!Lang.isEmpty(myManageClub)) { + cnd.and("info.clubId", "in", myManageClub.stream().map(SysClub::getId).collect(Collectors.toList())); + } else { + // 无管理协会,返回空分页结果 + return new Pagination<>(pageForm.getPageNumber(), pageForm.getPageSize(), 0, new ArrayList<>()); + } + } + + // 构建我的考核登记分页查询SQL + Sql sql = Sqls.create(""" + SELECT + info.*, + u.username as concatPersonName, + sc.concatPersonMobile, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime, + t.taskParentId, + t.variable taskVariable, + IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke, + (select MAX(id) from wf_process_task where processInstanceId = ins.id and taskName = 'startTask') AS startTaskId + FROM + `sys_club_examine_register` info + LEFT JOIN sys_club sc ON sc.id = info.clubId + LEFT JOIN `vw_user` u ON u.id = sc.concatPerson + 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_actor ta ON ta.processTaskId = t.id + $condition + """); + // 构建基础分页查询条件 + buildPageBaseCondition(cnd, pageForm, "info"); + cnd.and("info.userId", "=", SecurityUtil.getUserId()); + cnd.groupBy("info.id"); + cnd.desc("registerDate"); + sql.setCondition(cnd); + return listPageVO(pageForm, sql, ClubExaminePageVo.class); + } + + @Override + public Pagination clubAuditPageData(ClubUserPageForm pageForm) { + Cnd cnd = Cnd.NEW(); + cnd.and("t.taskName", "=", "ed4f6e9f-f0ea-4a73-ad57-bfcd8dd4d4bd"); + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + Sql sql = generateSql(pageForm, cnd); + return listPageVO(pageForm, sql, ClubExaminePageVo.class); + } + + @Override + public Pagination schoolAuditPageData(ClubUserPageForm pageForm) { + Cnd cnd = Cnd.NEW(); + cnd.and("t.taskName", "=", "ed4f6e9f-f0ea-4a73-ad57-bfcd8dd4d4bd"); + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + Sql sql = generateSql(pageForm, cnd); + return listPageVO(pageForm, sql, ClubExaminePageVo.class); + } @Override public Pagination schoolLeaderAuditPageData(ClubUserPageForm pageForm) { @@ -232,77 +342,106 @@ public class SysClubExamineServiceImpl extends BaseServiceImpl detailedList = dao().query(SysClubExamineRegisterDetailed.class, Cnd.where("registerId", "=", id).asc("location")); - clubExamineVo.setDetailedList(detailedList); - return clubExamineVo; - } + @Override + public ClubExamineVo findOne(String id) { + // 构建单条考核登记查询SQL(关联协会、联系人信息) + Sql sql = Sqls.create(""" + SELECT + scer.*, + u.username as concatPersonName, + sc.concatPersonMobile + FROM + `sys_club_examine_register` scer + LEFT JOIN sys_club sc ON sc.id = scer.clubId + LEFT JOIN `vw_user` u ON u.id = sc.concatPerson + WHERE scer.id = @id + """).setParam("id", id); + // 查询主表数据并关联明细数据 + ClubExamineVo clubExamineVo = fetchVO(sql, ClubExamineVo.class); + if (Lang.isNotEmpty(clubExamineVo)) { + List detailedList = dao().query(SysClubExamineRegisterDetailed.class, + Cnd.where("registerId", "=", id).asc("location")); + clubExamineVo.setDetailedList(detailedList); + } + return clubExamineVo; + } - private Sql generateSql(ClubUserPageForm pageForm, Cnd cnd) { - Sql sql = Sqls.create(""" - SELECT - info.*, - u.username as concatPersonName, - club.concatPersonMobile, - dict.name as typeName, - ins.id AS instanceId, - ins.businessNo, - ins.state instanceState, - ins.variable instanceVariable, - ins.processDefineId instanceProcessDefineId, - t.id taskId, - t.taskName AS taskKey, - t.displayName taskName, - t.taskType, - t.performType taskPerformType, - t.taskState, - t.finishTime, - t.taskParentId, - t.variable taskVariable, - IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName, - IF(rt.id IS NOT NULL, 1, 0) AS canRevoke - FROM - wf_process_task t - LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId - LEFT JOIN sys_club_examine_register info ON info.id = ins.businessNo - LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id - LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10 - LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10 - LEFT JOIN sys_club club on club.id = info.clubId - LEFT JOIN sys_dict dict ON dict.CODE = club.clubType - LEFT JOIN `vw_user` u ON u.id = club.concatPerson - $condition - """); + /** + * 生成审核分页通用SQL + * @param pageForm 分页查询参数 + * @param cnd 自定义查询条件 + * @return 构建后的Sql对象 + */ + private Sql generateSql(ClubUserPageForm pageForm, Cnd cnd) { + // 构建审核通用分页查询SQL + Sql sql = Sqls.create(""" + SELECT + info.*, + u.username as concatPersonName, + club.concatPersonMobile, + dict.name as typeName, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime, + t.taskParentId, + t.variable taskVariable, + IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName, + IF(rt.id IS NOT NULL, 1, 0) AS canRevoke + FROM + wf_process_task t + LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId + LEFT JOIN sys_club_examine_register info ON info.id = ins.businessNo + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10 + LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10 + LEFT JOIN sys_club club on club.id = info.clubId + LEFT JOIN sys_dict dict ON dict.CODE = club.clubType + LEFT JOIN `vw_user` u ON u.id = club.concatPerson + $condition + """); + // 构建基础分页查询条件 + buildPageBaseCondition(cnd, pageForm, "info"); - cnd.andEX("info.clubId", "=", pageForm.getClubId()); - cnd.andEX("YEAR(info.registerDate)", "=", pageForm.getYear()); + // 按审核状态过滤任务(已审核/待审核) + if (pageForm.getAudit()) { + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); + } else { + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); + } - if (pageForm.getAudit()) { - cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); - } else { - cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); - } - if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { - cnd.desc("registerDate"); - } else { - cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); - } + // 处理排序:无自定义排序则按登记日期降序 + if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { + cnd.desc("registerDate"); + } else { + cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); + } - cnd.groupBy("t.id"); - sql.setCondition(cnd); - return sql; - } + cnd.groupBy("t.id"); + sql.setCondition(cnd); + return sql; + } + + /** + * 构建分页查询基础条件(年度、协会ID) + * @param cnd 条件对象 + * @param pageForm 分页参数 + * @param tableAlias 表别名 + */ + private void buildPageBaseCondition(Cnd cnd, ClubUserPageForm pageForm, String tableAlias) { + if (pageForm.getYear() != null) { + cnd.andEX("YEAR(" + tableAlias + ".registerDate)", "=", pageForm.getYear()); + } + if (StrUtil.isNotBlank(pageForm.getClubId())) { + cnd.andEX(tableAlias + ".clubId", "=", pageForm.getClubId()); + } + } } diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalStatisticsController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalStatisticsController.java new file mode 100644 index 00000000..89321b9b --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/controller/MedicalStatisticsController.java @@ -0,0 +1,241 @@ +package com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.controller; + +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.util.StrUtil; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.utils.CommonDownloadUtil; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.param.MedicalPageForm; +import com.budwk.app.zhgh.staffbenefit.medicalMutualAid.medical.service.MedicalApplyService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.usermodel.Workbook; +import org.nutz.dao.Cnd; +import org.nutz.dao.Sqls; +import org.nutz.dao.entity.Record; +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.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.List; + +/** + * @author : hongqiwei + * @description :医疗互助汇总 + * @createDate : 2026/1/24 10:20 + */ +@IocBean +@At("/platform/medicalMutualAid/medical/statistics") +@Api("医疗互助汇总") +@Ok("json:full") +@Slf4j +public class MedicalStatisticsController { + + @Inject + private MedicalApplyService medicalApplyService; + + @Inject + private FlowEngine flowEngine; + + @At("") + @Ok("beetl:/platform/zhgh/staffbenefit/medicalMutualAid/medical/statistics/index.html") + @SaCheckPermission("medicalMutualAid.medical.statistics") + public void index() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission("medicalMutualAid.medical.statistics") + public Result pageData(MedicalPageForm pageForm) { + Sql sql = Sqls.create(""" + SELECT + info.*, + type.diseaseName, + type.isMajorDiseases, + us.username, + us.loginname, + us.unitName, + us.unionName, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime, + t.taskParentId, + t.variable taskVariable, + IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke, + (SELECT MAX(id) FROM wf_process_task WHERE processInstanceId = ins.id AND taskName = 'startTask') AS startTaskId + FROM + medical_apply info + LEFT JOIN medical_disease_type type ON info.diseaseId = type.id + LEFT JOIN aid_fund_member_pay member ON member.userId = info.userId + LEFT JOIN vw_user us ON us.id = info.userId + 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_actor ta ON ta.processTaskId = t.id + $condition + """); + Cnd cnd = Cnd.NEW(); + if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) { + SqlExpressionGroup seg = new SqlExpressionGroup(); + seg.orLike("us.loginname", pageForm.getSearchKeyword()); + seg.orLike("us.username", pageForm.getSearchKeyword()); + cnd.and(seg); + } + cnd.andEX("year(info.applyTime)", "=", pageForm.getYear()); + cnd.andEX("info.diseaseId", "=", pageForm.getDiseaseId()); + cnd.andEX("us.unionId", "=", pageForm.getUnionId()); + cnd.andEX("us.unitId", "=", pageForm.getUnitId()); + cnd.andEX("member.aidFundMemberUserType", "=", pageForm.getAidFundMemberUserType()); + + if (StrUtil.isNotBlank(pageForm.getPageOrderName()) && StrUtil.isNotBlank(pageForm.getPageOrderBy())) { + cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); + } else { + cnd.desc("info.applyTime"); + } + cnd.and("ins.state", "=", 20); + cnd.groupBy("info.id"); + sql.setCondition(cnd); + Pagination pagination = medicalApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + List costList = medicalApplyService.getCostList(pagination.getList()); + pagination.setList(costList); + return Result.success(pagination); + } + + @At + @Ok("void") + @ApiOperation("分页查询") + @SaCheckPermission("medicalMutualAid.medical.statistics") + public void doExport(MedicalPageForm pageForm, Boolean isMajorDiseases, HttpServletResponse response) { + Sql sql = Sqls.create(""" + SELECT + info.*, + type.diseaseName, + type.diseaseCode, + type.isMajorDiseases, + us.username, + us.loginname, + us.unitName, + us.unitCode, + us.unionName, + us.unionCode, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime, + t.taskParentId, + t.variable taskVariable, + IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke, + (SELECT MAX(id) FROM wf_process_task WHERE processInstanceId = ins.id AND taskName = 'startTask') AS startTaskId + FROM + medical_apply info + LEFT JOIN medical_disease_type type ON info.diseaseId = type.id + LEFT JOIN aid_fund_member_pay member ON member.userId = info.userId + LEFT JOIN vw_user us ON us.id = info.userId + 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_actor ta ON ta.processTaskId = t.id + $condition + """); + Cnd cnd = Cnd.NEW(); + if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) { + SqlExpressionGroup seg = new SqlExpressionGroup(); + seg.orLike("us.loginname", pageForm.getSearchKeyword()); + seg.orLike("us.username", pageForm.getSearchKeyword()); + cnd.and(seg); + } + cnd.andEX("year(info.applyTime)", "=", pageForm.getYear()); + cnd.andEX("info.diseaseId", "=", pageForm.getDiseaseId()); + cnd.andEX("us.unionId", "=", pageForm.getUnionId()); + cnd.andEX("us.unitId", "=", pageForm.getUnitId()); + cnd.andEX("member.aidFundMemberUserType", "=", pageForm.getAidFundMemberUserType()); + cnd.andEX("type.isMajorDiseases", "=", isMajorDiseases); + + if (StrUtil.isNotBlank(pageForm.getPageOrderName()) && StrUtil.isNotBlank(pageForm.getPageOrderBy())) { + cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); + } else { + cnd.desc("info.applyTime"); + } + cnd.and("ins.state", "=", 20); + cnd.groupBy("info.id"); + sql.setCondition(cnd); + Pagination pagination = medicalApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + List list = medicalApplyService.getCostList(pagination.getList()); + for (NutMap map : list) { + boolean isMajor = map.getBoolean("isMajorDiseases"); + map.put("isMajorDiseasesDisplay", isMajor ? "是" : "否"); + } + List excelExportEntities = new ArrayList<>(); + excelExportEntities.add(new ExcelExportEntity("姓名","username",20)); + excelExportEntities.add(new ExcelExportEntity("工号","loginname",20)); + excelExportEntities.add(new ExcelExportEntity("单位","unitName",20)); + excelExportEntities.add(new ExcelExportEntity("单位编码","unitCode",20)); + excelExportEntities.add(new ExcelExportEntity("工会","unionName",20)); + excelExportEntities.add(new ExcelExportEntity("工会编码","unionCode",20)); + excelExportEntities.add(new ExcelExportEntity("疾病名称","diseaseName",20)); + excelExportEntities.add(new ExcelExportEntity("疾病编码","diseaseCode",20)); + excelExportEntities.add(new ExcelExportEntity("是否重疾","isMajorDiseasesDisplay",20)); + excelExportEntities.add(new ExcelExportEntity("申请时间","applyTime",20)); + excelExportEntities.add(new ExcelExportEntity("申请次数","applyNum",20)); + excelExportEntities.add(new ExcelExportEntity("住院医疗费总额(不含门诊)","hospitalSumMoney$",20)); + excelExportEntities.add(new ExcelExportEntity("实际报销总额","reimbursementMoney$",20)); + excelExportEntities.add(new ExcelExportEntity("(住院医疗)允许报销范围内个人承担部分金额","singleBearMoney$",20)); + excelExportEntities.add(new ExcelExportEntity("(住院医疗)自费部分金额","personExpenseMoney$",20)); + excelExportEntities.add(new ExcelExportEntity("重病门诊自费金额","outpatientServiceMoney$",20)); + excelExportEntities.add(new ExcelExportEntity("非住院肾衰竭治疗、靶向药金额","bxyMoney$",20)); + excelExportEntities.add(new ExcelExportEntity("合计","totalMoney",20)); + excelExportEntities.add(new ExcelExportEntity("预测补助金额","forecastSubsidyMoney",20)); + excelExportEntities.add(new ExcelExportEntity("补助金额","subsidyMoney",20)); + excelExportEntities.add(new ExcelExportEntity("爱心基金","loveSubsidyMoney",20)); + + String exportYear = String.valueOf(pageForm.getYear()); + if (StrUtil.isBlank(exportYear)) { + exportYear = String.valueOf(java.time.Year.now().getValue()); + } + String fileName = exportYear + "年补助人员列表.xlsx"; + + try { + ExportParams exportParams = new ExportParams(); + exportParams.setType(ExcelType.XSSF); + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, excelExportEntities, list); + CommonDownloadUtil.download(fileName, workbook, response); + } catch (Exception e) { + log.error("导出补助人员列表失败", e); + } + } +} + + + + diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/param/MedicalPageForm.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/param/MedicalPageForm.java index 89574881..f306ff14 100644 --- a/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/param/MedicalPageForm.java +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/param/MedicalPageForm.java @@ -22,6 +22,7 @@ public class MedicalPageForm extends PageForm { private Boolean approval; private String unionId; private String unitId; + private String aidFundMemberUserType; private Boolean isMajorDiseases; } diff --git a/src/main/resources/views/platform/zhgh/club/evaluate/clubAudit/index.html b/src/main/resources/views/platform/zhgh/club/evaluate/clubAudit/index.html index 333d539b..89f4425f 100644 --- a/src/main/resources/views/platform/zhgh/club/evaluate/clubAudit/index.html +++ b/src/main/resources/views/platform/zhgh/club/evaluate/clubAudit/index.html @@ -9,11 +9,11 @@ layout("/layouts/platform.html"){ @@ -31,37 +31,33 @@ layout("/layouts/platform.html"){ 未审核 - + - + - - + + + + + @@ -69,21 +65,26 @@ layout("/layouts/platform.html"){ @@ -93,6 +94,7 @@ layout("/layouts/platform.html"){ new Vue({ el: "#app", mixins: [initTableMixins], + dicts: ["PROCESS_INSTANCE_STATE"], data() { return { pageForm: { @@ -111,42 +113,47 @@ layout("/layouts/platform.html"){ methods: { openView(row) { this.$refs.guava.public(() => { - this.$refs.evaluateInfoRef.onOpen(row.id) + this.$refs.evaluateInfoRef.onOpen(row) this.showApprovalForm = false }) }, - openApproval(row) { + onAudit(row) { this.$refs.guava.public(() => { - this.$refs.evaluateInfoRef.onOpen(row.id) - this.formData = row.approvalParam - this.showApprovalForm = true - }) - }, - doApproval(approvalType) { - this.formData.bpmTaskApprovalType = approvalType - this.$refs.approvalFormRef.validate((valid) => { - if (valid) { - this.$axios - .post(loc() + "/approval", { - approval: JSON.stringify(this.formData) - }) - .then((res) => { - if (res.code === 0) { - this.$refs.guava.index() - this.$message.success(res.msg) - this.doSearch() - } - }) + this.formData = { + processTaskId: row.taskId, + taskName: row.curTaskName } + this.showApprovalForm = true + this.$refs.evaluateInfoRef.onOpen(row) }) }, - openRevoke(taskId) { + handleTaskAction(val) { + this.$confirm("您确定要提交吗?", "提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }).then(() => { + this.$axios.post("/flow/common/executeTask", { + data: JSON.stringify({ + ...this.formData, + submitType: val + }) + }).then((res) => { + if (res.code === 0) { + this.$refs.guava.index() + this.$message.success(res.msg) + this.doSearch() + } + }) + }) + }, + onRevoke(row) { this.$confirm("您确定要撤回吗?", "提示", { confirmButtonText: "确定", cancelButtonText: "取消", type: "info" }).then(() => { - this.$axios.post(loc() + "/revoke", { taskId }).then((res) => { + this.$axios.post("/flow/common/revokeTask", {taskId: row.taskId}).then((res) => { if (res.code === 0) { this.$message.success(res.msg) this.doSearch() diff --git a/src/main/resources/views/platform/zhgh/club/examine/apply/index.html b/src/main/resources/views/platform/zhgh/club/examine/apply/index.html index ce8e2f59..54c799b0 100644 --- a/src/main/resources/views/platform/zhgh/club/examine/apply/index.html +++ b/src/main/resources/views/platform/zhgh/club/examine/apply/index.html @@ -1,305 +1,603 @@ - -
- - + + - + + - + + +
基础信息
- - + + - + @change="handleYearChange" + :disabled="!!formData.id" + format="yyyy" + placeholder="选择填报年度" + style="width: 100%" + type="year" + v-model="formData.year" + value-format="yyyy" + > - - - + + + - + v-for="item in clubOptions" + :key="item.id" + :label="item.clubName" + :value="item.id" + > + + + + + + + + + + + + - - 说明:非赛事活动无需填写赛事举办单位、获奖情况。 + + 说明:非赛事活动无需填写赛事举办单位、获奖情况。 + :data="formData.yearActivityList" + border + size="small" + style="width: 100%" + > + - -