Merge branch 'main' of https://dd3skj.picp.vip/JyuHsin/zhgh_cug_v4
# Conflicts: # src/main/java/com/budwk/app/zhgh/staffbenefit/medicalMutualAid/medical/param/MedicalPageForm.java
This commit is contained in:
+2
@@ -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();
|
||||
}
|
||||
|
||||
-32
@@ -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<ClubEvaluatePageVo> 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<String, Object> variables = BeanUtil.beanToMap(approvalParam);
|
||||
|
||||
List<String> assignments = new ArrayList<>();
|
||||
if(approvalParam.getBpmTaskApprovalTypeEnum().equals(BpmTaskApprovalTypeEnum.PASS)){
|
||||
List<String> 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();
|
||||
}
|
||||
}
|
||||
|
||||
+29
-10
@@ -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<SysClubExamineRegister> list = dao.query(SysClubExamineRegister.class, Cnd.where("clubId", "=", id).and("year(registerDate)", "=", year));
|
||||
List<SysClubExamineRegister> list = dao.query(SysClubExamineRegister.class, Cnd.where("clubId", "=", clubId).and("year(registerDate)", "=", year).andEX("id", "!=", id));
|
||||
List<ProcessInstance> 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<NutMap> result = sysClubExamineService.getClubUserNum(clubId);
|
||||
List<NutMap> 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();
|
||||
}
|
||||
}
|
||||
|
||||
-26
@@ -53,30 +53,4 @@ public class ClubExamineClubAuditController {
|
||||
Pagination<ClubExaminePageVo> 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<String, Object> variables = BeanUtil.beanToMap(approvalParam);
|
||||
|
||||
List<String> assignments = new ArrayList<>();
|
||||
if(approvalParam.getBpmTaskApprovalTypeEnum().equals(BpmTaskApprovalTypeEnum.PASS)){
|
||||
List<String> 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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ import java.util.List;
|
||||
|
||||
public interface SysClubExamineService extends BaseService<SysClubExamineRegister> {
|
||||
|
||||
List<NutMap> getClubUserNum(@Valid String clubId);
|
||||
List<NutMap> getClubUserNum(@Valid String clubId, Integer year);
|
||||
|
||||
List<NutMap> getJgUser(@Valid String clubId);
|
||||
|
||||
|
||||
@@ -82,13 +82,11 @@ public class SysClubEvaluateServiceImpl extends BaseServiceImpl<SysClubEvaluate>
|
||||
|
||||
@Override
|
||||
public Pagination<ClubEvaluatePageVo> 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
|
||||
|
||||
+386
-247
@@ -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<SysClubExamineRegister> 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<NutMap> getClubUserNum(String clubId, Integer year) {
|
||||
// 定义统计的用户状态类型
|
||||
List<String> userStateList = List.of("在职", "退休");
|
||||
List<NutMap> 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<NutMap> getClubUserNum(String clubId) {
|
||||
// List<Sys_dict> userType = sysDictService.getSubListByCode("USER_STATE");
|
||||
// List<Sys_dict> 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<NutMap> userList = listMap(sql);
|
||||
// List<NutMap> result = new ArrayList<>();
|
||||
// userStateList.forEach(v -> {
|
||||
// List<NutMap> 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<NutMap> userList = listMap(sql);
|
||||
|
||||
@Override
|
||||
public List<NutMap> 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<NutMap> listMap = listMap(sql);
|
||||
for (NutMap nutMap : listMap) {
|
||||
List<String> 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<SysClubExamineRegisterDetailed> detailedList = Json.fromJsonAsList(SysClubExamineRegisterDetailed.class, incomeDetailed);
|
||||
List<JSONObject> 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<String> personTypeList = switch (userState) {
|
||||
case "在职" -> List.of("在职", "在岗");
|
||||
case "退休" -> List.of("退休", "退休【变号】");
|
||||
default -> new ArrayList<>();
|
||||
};
|
||||
|
||||
@Override
|
||||
public SysClubExamineRegister doEdit(SysClubExamineRegister examineRegister, String incomeDetailed, String incomeCensus) {
|
||||
List<SysClubExamineRegisterDetailed> detailedList = Json.fromJsonAsList(SysClubExamineRegisterDetailed.class, incomeDetailed);
|
||||
List<JSONObject> 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<NutMap> personTypeUsers = userList.stream()
|
||||
.filter(u -> StrUtil.isNotBlank(u.getString("userState"))
|
||||
&& personTypeList.contains(u.getString("userState")))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
@Override
|
||||
public Pagination<ClubExaminePageVo> minePageData(ClubUserPageForm pageForm) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) {
|
||||
List<SysClub> 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<String> 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<ClubExaminePageVo> 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<ClubExaminePageVo> 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<NutMap> 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<NutMap> listMap = listMap(sql);
|
||||
for (NutMap nutMap : listMap) {
|
||||
String roleCodeStr = nutMap.getString("roleCode");
|
||||
List<String> 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<SysClubExamineRegisterDetailed> detailedList = StrUtil.isNotBlank(incomeDetailed)
|
||||
? Json.fromJsonAsList(SysClubExamineRegisterDetailed.class, incomeDetailed)
|
||||
: new ArrayList<>();
|
||||
List<JSONObject> 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<SysClubExamineRegisterDetailed> detailedList = StrUtil.isNotBlank(incomeDetailed)
|
||||
? Json.fromJsonAsList(SysClubExamineRegisterDetailed.class, incomeDetailed)
|
||||
: new ArrayList<>();
|
||||
List<JSONObject> 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<ClubExaminePageVo> minePageData(ClubUserPageForm pageForm) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
// 非系统管理员,仅查询自己管理的协会(空集合判断避免in查询异常)
|
||||
if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) {
|
||||
List<SysClub> 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<ClubExaminePageVo> 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<ClubExaminePageVo> 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<ClubExaminePageVo> schoolLeaderAuditPageData(ClubUserPageForm pageForm) {
|
||||
@@ -232,77 +342,106 @@ public class SysClubExamineServiceImpl extends BaseServiceImpl<SysClubExamineReg
|
||||
return listPageVO(pageForm, sql, ClubExaminePageVo.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ClubExamineVo findOne(String id) {
|
||||
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);
|
||||
List<SysClubExamineRegisterDetailed> 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<SysClubExamineRegisterDetailed> 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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+241
@@ -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<NutMap> pagination = medicalApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
List<NutMap> 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<NutMap> pagination = medicalApplyService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
List<NutMap> list = medicalApplyService.getCostList(pagination.getList());
|
||||
for (NutMap map : list) {
|
||||
boolean isMajor = map.getBoolean("isMajorDiseases");
|
||||
map.put("isMajorDiseasesDisplay", isMajor ? "是" : "否");
|
||||
}
|
||||
List<ExcelExportEntity> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
+1
@@ -22,6 +22,7 @@ public class MedicalPageForm extends PageForm {
|
||||
private Boolean approval;
|
||||
private String unionId;
|
||||
private String unitId;
|
||||
private String aidFundMemberUserType;
|
||||
private Boolean isMajorDiseases;
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user