Compare commits

..
10 Commits
11 changed files with 365 additions and 202 deletions
@@ -12,6 +12,7 @@ import com.budwk.app.bpm.service.BpmService;
import com.budwk.app.sys.models.Sys_user; import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.sys.models.Sys_user_role; import com.budwk.app.sys.models.Sys_user_role;
import com.budwk.app.sys.services.SysMsgService; import com.budwk.app.sys.services.SysMsgService;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.web.controllers.open.commons.service.CommonService; import com.budwk.app.web.controllers.open.commons.service.CommonService;
import com.budwk.app.zhgh.club.model.ClubUser; import com.budwk.app.zhgh.club.model.ClubUser;
@@ -63,6 +64,7 @@ public class ClubUserJoinApplyController {
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
SELECT SELECT
cua.*, cua.*,
club.clubName,
u.loginname AS loginName, u.loginname AS loginName,
u.username AS userName, u.username AS userName,
u.sex, u.sex,
@@ -74,6 +76,7 @@ public class ClubUserJoinApplyController {
FROM FROM
club_user_apply cua club_user_apply cua
LEFT JOIN vw_user u ON u.id = cua.userId LEFT JOIN vw_user u ON u.id = cua.userId
LEFT JOIN sys_club club ON club.id = cua.clubId
WHERE cua.id = @id WHERE cua.id = @id
""").setParam("id", id); """).setParam("id", id);
sql.setCallback(Sqls.callback.map()); sql.setCallback(Sqls.callback.map());
@@ -87,10 +90,22 @@ public class ClubUserJoinApplyController {
@SaCheckPermission("club.join.apply") @SaCheckPermission("club.join.apply")
@Aop(TransAop.READ_COMMITTED) @Aop(TransAop.READ_COMMITTED)
public Result submit(ClubUserApply clubUserApply) { public Result submit(ClubUserApply clubUserApply) {
if (StrUtil.isNotBlank(clubUserApply.getId())) {
ClubUserApply existingApply = dao.fetch(ClubUserApply.class, clubUserApply.getId());
if (existingApply == null || !StrUtil.equals(existingApply.getUserId(), clubUserApply.getUserId())
|| (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name()) && !StrUtil.equals(existingApply.getUserId(), SecurityUtil.getUserId()))) {
return Result.error("申请不存在或无权编辑!");
}
BpmProcessInstance existingInstance = dao.fetch(BpmProcessInstance.class, Cnd.where(BpmProcessInstance::getProcessInstanceBusinessId, "=", existingApply.getId()));
if (existingInstance == null || existingInstance.getProcessInstanceNodeCode() == null
|| !List.of(10, 40, 70).contains(existingInstance.getProcessInstanceNodeCode())) {
return Result.error("当前申请状态不允许编辑提交!");
}
}
Sys_user user = dao.fetch(Sys_user.class, Cnd.where("id", "=", clubUserApply.getUserId())); Sys_user user = dao.fetch(Sys_user.class, Cnd.where("id", "=", clubUserApply.getUserId()));
if (!user.getMember() && !("劳务派遣一类".equals(user.getPreparedBy()) || "劳务派遣二类".equals(user.getPreparedBy()))) return Result.error("暂无申请加入协会资格!"); if (!user.getMember() && !("劳务派遣一类".equals(user.getPreparedBy()) || "劳务派遣二类".equals(user.getPreparedBy()))) return Result.error("暂无申请加入协会资格!");
ClubUserApply userApply = dao.fetch(ClubUserApply.class, Cnd.where("userId", "=", clubUserApply.getUserId()).and("clubId", "=", clubUserApply.getClubId()).and("mode", "=", 1).desc(ClubUserApply::getApplyDate)); ClubUserApply userApply = dao.fetch(ClubUserApply.class, Cnd.where("userId", "=", clubUserApply.getUserId()).and("clubId", "=", clubUserApply.getClubId()).and("mode", "=", 1).andEX("id", "!=", clubUserApply.getId()).desc(ClubUserApply::getApplyDate));
if (ObjectUtil.isNotEmpty(userApply) && StrUtil.isNotBlank(userApply.getId())) { if (ObjectUtil.isNotEmpty(userApply) && StrUtil.isNotBlank(userApply.getId())) {
BpmProcessInstance processInstance = dao.fetch(BpmProcessInstance.class, Cnd.where(BpmProcessInstance::getProcessInstanceBusinessId, "=", userApply.getId())); BpmProcessInstance processInstance = dao.fetch(BpmProcessInstance.class, Cnd.where(BpmProcessInstance::getProcessInstanceBusinessId, "=", userApply.getId()));
if (!processInstance.getProcessInstanceStatus().equals(BpmProcessInstanceStatusEnum.COMPLETED.name())) { if (!processInstance.getProcessInstanceStatus().equals(BpmProcessInstanceStatusEnum.COMPLETED.name())) {
@@ -1,32 +1,11 @@
package com.budwk.app.zhgh.club.controller.apply; package com.budwk.app.zhgh.club.controller.apply;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.bean.BeanUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result; import com.budwk.app.base.result.Result;
import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum;
import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum;
import com.budwk.app.bpm.models.BpmProcessInstance;
import com.budwk.app.bpm.models.BpmProcessTask;
import com.budwk.app.bpm.param.BpmTaskApprovalParam; import com.budwk.app.bpm.param.BpmTaskApprovalParam;
import com.budwk.app.bpm.service.BpmService;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.web.controllers.open.commons.service.CommonService;
import com.budwk.app.zhgh.club.model.ClubUser;
import com.budwk.app.zhgh.club.model.ClubUserApply;
import com.budwk.app.zhgh.club.param.ClubUserJoinPageForm; import com.budwk.app.zhgh.club.param.ClubUserJoinPageForm;
import com.budwk.app.zhgh.club.service.ClubUserJoinService; import com.budwk.app.zhgh.club.service.ClubUserJoinService;
import com.budwk.app.zhgh.club.vo.ClubUserJoinPageVo;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.Static;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.At;
@@ -34,23 +13,14 @@ import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param; import org.nutz.mvc.annotation.Param;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@IocBean @IocBean
@At("/platform/club/join/clubApproval") @At("/platform/club/join/clubApproval")
@Ok("json:full") @Ok("json:full")
public class ClubUserJoinApprovalController { public class ClubUserJoinApprovalController {
@Inject
private CommonService commonService;
@Inject
private BpmService bpmService;
@Inject @Inject
private ClubUserJoinService clubUserJoinService; private ClubUserJoinService clubUserJoinService;
@Inject
private Dao dao;
@At("") @At("")
@SaCheckPermission("club.join.clubApproval") @SaCheckPermission("club.join.clubApproval")
@@ -62,106 +32,22 @@ public class ClubUserJoinApprovalController {
@At @At
@SaCheckPermission("club.join.clubApproval") @SaCheckPermission("club.join.clubApproval")
public Result pageData(@Valid ClubUserJoinPageForm pageForm, boolean approval) { public Result pageData(@Valid ClubUserJoinPageForm pageForm, boolean approval) {
Sql sql = Sqls.create(""" return Result.success(clubUserJoinService.pageDataByClubApproval(pageForm, approval));
SELECT
info.*,
u.loginname AS loginName,
u.username AS userName,
u.sex,
u.unitName,
u.unionName,
club.clubName,
inst.id processInstanceId,
inst.processInstanceNodeId,
inst.processInstanceNodeName,
inst.processInstanceTaskIds,
inst.processInstanceStatus,
task.id processInstanceTaskId,
task.taskStatus processInstanceTaskStatus,
COUNT( nt.id ) OVER ( PARTITION BY task.id ) > 0 AS nextTaskIsComplete
FROM
bpm_process_task task
INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId
INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId
INNER JOIN club_user_apply info ON info.id = inst.processInstanceBusinessId
LEFT JOIN sys_club club ON club.id = info.clubId
LEFT JOIN vw_user u on u.id = info.userId
LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id
AND nt.taskStatus = 'COMPLETE'
$condition
""");
Cnd cnd = Cnd.NEW();
if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){
cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname())));
}
cnd.and("nd.nodeCode","=",20);
if(approval){
cnd.and("task.taskStatus","=", BpmProcessTaskStatusEnum.COMPLETE);
}else{
cnd.and("task.taskStatus","=",BpmProcessTaskStatusEnum.ACTIVE);
}
cnd.andEX("YEAR(info.applyDate)","=",pageForm.getYear());
cnd.and(Cnd.likeEX("u.userName", pageForm.getUserName()));
cnd.and(Cnd.likeEX("u.loginName", pageForm.getLoginName()));
cnd.andEX("u.unionId","=",pageForm.getUnionId());
cnd.andEX("u.unitId","=",pageForm.getUnitId());
cnd.andEX("info.clubId","=",pageForm.getClubId());
sql.setCondition(cnd);
Pagination<ClubUserJoinPageVo> pageVO = clubUserJoinService.listPageVO(pageForm, sql, ClubUserJoinPageVo.class);
return Result.success(pageVO);
} }
@At @At
@SaCheckPermission("club.join.clubApproval") @SaCheckPermission("club.join.clubApproval")
@ApiOperation("审核") @ApiOperation("审核")
@Aop(TransAop.READ_COMMITTED)
public Result approval(@Valid @Param("approval") BpmTaskApprovalParam approvalParam){ public Result approval(@Valid @Param("approval") BpmTaskApprovalParam approvalParam){
// approvalParam.getBpmTaskApprovalTypeEnum(); clubUserJoinService.clubApproval(approvalParam);
// Map<String, Object> variables = BeanUtil.beanToMap(approvalParam);
// List<String> assignments = new ArrayList<>();
// if(approvalParam.getBpmTaskApprovalTypeEnum().equals(BpmTaskApprovalTypeEnum.PASS)){
// String approvalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.SCHOOL_UNION_CLUB_ADMIN);
// assignments.add(approvalLoginName);
// }
// bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, assignments);
Map<String, Object> variables = BeanUtil.beanToMap(approvalParam);
List<String> assignments = new ArrayList<>();
bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, assignments);
if (approvalParam.getBpmTaskApprovalTypeEnum() == BpmTaskApprovalTypeEnum.PASS) {
String processInstanceBusinessId = approvalParam.getProcessInstanceBusinessId();
ClubUserApply clubUserApply = dao.fetch(ClubUserApply.class, processInstanceBusinessId);
if (clubUserApply != null) {
ClubUser existUser = dao.fetch(ClubUser.class, Cnd.where("userId", "=", clubUserApply.getUserId()).and("clubId", "=", clubUserApply.getClubId()));
if (existUser == null) {
ClubUser clubUser = BeanUtil.copyProperties(clubUserApply, ClubUser.class);
dao.insert(clubUser);
}
}
}
return Result.success(); return Result.success();
} }
@At @At
@SaCheckPermission("club.join.clubApproval") @SaCheckPermission("club.join.clubApproval")
@ApiOperation("撤回") @ApiOperation("撤回")
@Aop(TransAop.READ_COMMITTED)
public Result revoke(@Valid String taskId){ public Result revoke(@Valid String taskId){
bpmService.revokeTask(taskId); clubUserJoinService.revokeClubApproval(taskId);
BpmProcessTask task = dao.fetch(BpmProcessTask.class, taskId);
String processInstanceId = task.getProcessInstanceId();
BpmProcessInstance processInstance = dao.fetch(BpmProcessInstance.class, processInstanceId);
String businessId = processInstance.getProcessInstanceBusinessId();
ClubUserApply clubUserApply = dao.fetch(ClubUserApply.class, businessId);
dao.clear(ClubUser.class, Cnd.where(ClubUser::getUserId, "=", clubUserApply.getUserId())
.and(ClubUser::getClubId, "=", clubUserApply.getClubId()));
return Result.success(); return Result.success();
} }
@@ -1,10 +1,18 @@
package com.budwk.app.zhgh.club.h5controller; package com.budwk.app.zhgh.club.h5controller;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.result.Result;
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
import com.budwk.app.zhgh.club.param.ClubUserJoinPageForm;
import com.budwk.app.zhgh.club.service.ClubUserJoinService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.validation.Valid;
@IocBean @IocBean
@At("/platform/h5/club/audit") @At("/platform/h5/club/audit")
@@ -12,10 +20,40 @@ import org.nutz.mvc.annotation.Ok;
@Api("h5入会审核") @Api("h5入会审核")
public class H5ClubAuditController { public class H5ClubAuditController {
@Inject
private ClubUserJoinService clubUserJoinService;
@At("") @At("")
@Ok("beetl:/platform/zhghh5/club/audit/index.html") @Ok("beetl:/platform/zhghh5/club/audit/index.html")
@SaCheckPermission("h5.club.audit") @SaCheckPermission("h5.club.audit")
public void index() { public void index() {
} }
@At
@SaCheckPermission("h5.club.audit")
public Result pageData(@Valid ClubUserJoinPageForm pageForm, boolean approval, Integer auditType) {
Boolean approvalStatus = approval;
if (Integer.valueOf(1).equals(auditType)) {
approvalStatus = null;
} else if (auditType != null) {
approvalStatus = Integer.valueOf(2).equals(auditType);
}
return Result.success(clubUserJoinService.pageDataByClubApproval(pageForm, approvalStatus));
}
@At
@SaCheckPermission("h5.club.audit")
public Result doAudit(@Valid @Param("approval") BpmTaskApprovalParam approvalParam) {
clubUserJoinService.clubApproval(approvalParam);
return Result.success();
}
@At
@SaCheckPermission("h5.club.audit")
public Result revoke(@Valid String taskId){
clubUserJoinService.revokeClubApproval(taskId);
return Result.success();
}
} }
@@ -1,7 +1,19 @@
package com.budwk.app.zhgh.club.service; package com.budwk.app.zhgh.club.service;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
import com.budwk.app.zhgh.club.param.ClubUserJoinPageForm;
import com.budwk.app.zhgh.club.vo.ClubUserJoinPageVo;
import com.budwk.app.base.service.BaseService; import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.club.model.ClubUserApply; import com.budwk.app.zhgh.club.model.ClubUserApply;
public interface ClubUserJoinService extends BaseService<ClubUserApply> { public interface ClubUserJoinService extends BaseService<ClubUserApply> {
Pagination<ClubUserJoinPageVo> pageDataByClubApproval(ClubUserJoinPageForm pageForm, boolean approval);
Pagination<ClubUserJoinPageVo> pageDataByClubApproval(ClubUserJoinPageForm pageForm, Boolean approval);
void clubApproval(BpmTaskApprovalParam approvalParam);
void revokeClubApproval(String taskId);
} }
@@ -1,14 +1,147 @@
package com.budwk.app.zhgh.club.service.impl; package com.budwk.app.zhgh.club.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum;
import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum;
import com.budwk.app.bpm.models.BpmProcessInstance;
import com.budwk.app.bpm.models.BpmProcessTask;
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
import com.budwk.app.bpm.service.BpmService;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.club.model.ClubUser;
import com.budwk.app.zhgh.club.param.ClubUserJoinPageForm;
import com.budwk.app.zhgh.club.vo.ClubUserJoinPageVo;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.Static;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import com.budwk.app.base.service.impl.BaseServiceImpl; import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.zhgh.club.model.ClubUserApply; import com.budwk.app.zhgh.club.model.ClubUserApply;
import com.budwk.app.zhgh.club.service.ClubUserJoinService; import com.budwk.app.zhgh.club.service.ClubUserJoinService;
import org.nutz.dao.Dao; import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.ioc.loader.annotation.IocBean;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@IocBean(args = {"refer:dao"}) @IocBean(args = {"refer:dao"})
public class ClubUserJoinServiceImpl extends BaseServiceImpl<ClubUserApply> implements ClubUserJoinService { public class ClubUserJoinServiceImpl extends BaseServiceImpl<ClubUserApply> implements ClubUserJoinService {
@Inject
private BpmService bpmService;
public ClubUserJoinServiceImpl(Dao dao) { public ClubUserJoinServiceImpl(Dao dao) {
super(dao); super(dao);
} }
@Override
public Pagination<ClubUserJoinPageVo> pageDataByClubApproval(ClubUserJoinPageForm pageForm, boolean approval) {
return pageDataByClubApproval(pageForm, Boolean.valueOf(approval));
}
@Override
public Pagination<ClubUserJoinPageVo> pageDataByClubApproval(ClubUserJoinPageForm pageForm, Boolean approval) {
Sql sql = Sqls.create("""
SELECT
info.*,
u.loginname AS loginName,
u.username AS userName,
u.sex,
u.unitName,
u.unionName,
club.clubName,
inst.id processInstanceId,
inst.processInstanceNodeId,
inst.processInstanceNodeName,
inst.processInstanceTaskIds,
inst.processInstanceStatus,
task.id processInstanceTaskId,
task.taskStatus processInstanceTaskStatus,
COUNT( nt.id ) OVER ( PARTITION BY task.id ) > 0 AS nextTaskIsComplete
FROM
bpm_process_task task
INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId
INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId
INNER JOIN club_user_apply info ON info.id = inst.processInstanceBusinessId
LEFT JOIN sys_club club ON club.id = info.clubId
LEFT JOIN vw_user u on u.id = info.userId
LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id
AND nt.taskStatus = 'COMPLETE'
$condition
""");
Cnd cnd = Cnd.NEW();
if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){
cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname())));
}
cnd.and("nd.nodeCode","=",20);
if(approval == null){
cnd.and("task.taskStatus", "in", List.of(BpmProcessTaskStatusEnum.ACTIVE.name(), BpmProcessTaskStatusEnum.COMPLETE.name()));
}else if(approval){
cnd.and("task.taskStatus","=", BpmProcessTaskStatusEnum.COMPLETE);
}else{
cnd.and("task.taskStatus","=",BpmProcessTaskStatusEnum.ACTIVE);
}
cnd.andEX("YEAR(info.applyDate)","=",pageForm.getYear());
cnd.and(Cnd.likeEX("u.userName", pageForm.getUserName()));
cnd.and(Cnd.likeEX("u.loginName", pageForm.getLoginName()));
cnd.andEX("u.unionId","=",pageForm.getUnionId());
cnd.andEX("u.unitId","=",pageForm.getUnitId());
cnd.andEX("info.clubId","=",pageForm.getClubId());
sql.setCondition(cnd);
return listPageVO(pageForm, sql, ClubUserJoinPageVo.class);
}
@Override
@Aop(TransAop.READ_COMMITTED)
public void clubApproval(BpmTaskApprovalParam approvalParam) {
// approvalParam.getBpmTaskApprovalTypeEnum();
// Map<String, Object> variables = BeanUtil.beanToMap(approvalParam);
// List<String> assignments = new ArrayList<>();
// if(approvalParam.getBpmTaskApprovalTypeEnum().equals(BpmTaskApprovalTypeEnum.PASS)){
// String approvalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.SCHOOL_UNION_CLUB_ADMIN);
// assignments.add(approvalLoginName);
// }
// bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, assignments);
Map<String, Object> variables = BeanUtil.beanToMap(approvalParam);
List<String> assignments = new ArrayList<>();
bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, assignments);
if (approvalParam.getBpmTaskApprovalTypeEnum() == BpmTaskApprovalTypeEnum.PASS) {
String processInstanceBusinessId = approvalParam.getProcessInstanceBusinessId();
ClubUserApply clubUserApply = dao().fetch(ClubUserApply.class, processInstanceBusinessId);
if (clubUserApply != null) {
ClubUser existUser = dao().fetch(ClubUser.class, Cnd.where("userId", "=", clubUserApply.getUserId()).and("clubId", "=", clubUserApply.getClubId()));
if (existUser == null) {
ClubUser clubUser = BeanUtil.copyProperties(clubUserApply, ClubUser.class);
dao().insert(clubUser);
}
}
}
}
@Override
@Aop(TransAop.READ_COMMITTED)
public void revokeClubApproval(String taskId) {
bpmService.revokeTask(taskId);
BpmProcessTask task = dao().fetch(BpmProcessTask.class, taskId);
String processInstanceId = task.getProcessInstanceId();
BpmProcessInstance processInstance = dao().fetch(BpmProcessInstance.class, processInstanceId);
String businessId = processInstance.getProcessInstanceBusinessId();
ClubUserApply clubUserApply = dao().fetch(ClubUserApply.class, businessId);
dao().clear(ClubUser.class, Cnd.where(ClubUser::getUserId, "=", clubUserApply.getUserId())
.and(ClubUser::getClubId, "=", clubUserApply.getClubId()));
}
} }
+7
View File
@@ -0,0 +1,7 @@
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, processKey, platform, moduleId, isQuickEntry) VALUES ('56e0941221324d04bea7329cb8f549c4', '', '0079', '协会审核', null, 'menu', '/platform/h5/club/audit', null, '/platform/sys/file/download?id=19cl7j298kj3logm5qlb0vslhi', 1, 0, 'h5.club.audit', null, 223, 0, '17a7f8ad3ee947b4a26175049a9c253d', 1790154555839, '17a7f8ad3ee947b4a26175049a9c253d', 1790155973918, 0, null, 'H5', '5710401a805645d59060f888eb863b60', 0);
INSERT INTO sys_role_menu (roleId, menuId) VALUES ('7f4a820d5a394bb8a0a92d6699afe7c8', '56e0941221324d04bea7329cb8f549c4');
INSERT INTO sys_role_menu (roleId, menuId) VALUES ('53650479ee954e748fda6cceabdd2918', '56e0941221324d04bea7329cb8f549c4');
INSERT INTO sys_role_menu (roleId, menuId) VALUES ('419844ad90f34ca58807e84224905f27', '56e0941221324d04bea7329cb8f549c4');
INSERT INTO sys_role_menu (roleId, menuId) VALUES ('d8d30588c356492ebb8645bc2b593270', '56e0941221324d04bea7329cb8f549c4');
INSERT INTO sys_role_menu (roleId, menuId) VALUES ('cf0a07b773f444d3800bc18216d8cffb', '56e0941221324d04bea7329cb8f549c4');
@@ -46,14 +46,14 @@ layout("/layouts/platform.html"){
<el-radio-button :label="false">未审核</el-radio-button> <el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group> </el-radio-group>
</table-tool> </table-tool>
<el-table :data="tableData" @sort-change="pageOrder"> <el-table v-loading="tableLoading" element-loading-text="加载中..." :data="tableData" @sort-change="pageOrder">
<el-table-column type="index" width="50px" label="序号" :index="indexMethod"></el-table-column> <el-table-column type="index" width="50px" label="序号" :index="indexMethod"></el-table-column>
<el-table-column prop="userName" label="姓名"></el-table-column> <el-table-column prop="userName" label="姓名"></el-table-column>
<el-table-column prop="loginName" label="工号"></el-table-column> <el-table-column prop="loginName" label="工号"></el-table-column>
<el-table-column prop="sex" label="性别"></el-table-column> <el-table-column prop="sex" label="性别"></el-table-column>
<el-table-column prop="unitName" label="单位" show-overflow-tooltip></el-table-column> <el-table-column prop="unitName" label="单位" show-overflow-tooltip></el-table-column>
<el-table-column prop="unionName" label="分工会" show-overflow-tooltip></el-table-column> <el-table-column prop="unionName" label="分工会" show-overflow-tooltip></el-table-column>
<el-table-column prop="clubName" label="申请协会" show-overflow-tooltip></el-table-column> <el-table-column prop="clubName" label="申请协会" min-width="180px" show-overflow-tooltip></el-table-column>
<el-table-column prop="mode" label="申请模式"> <el-table-column prop="mode" label="申请模式">
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag size="mini" v-if="scope.row.mode" type="success">加入</el-tag> <el-tag size="mini" v-if="scope.row.mode" type="success">加入</el-tag>
@@ -62,7 +62,7 @@ layout("/layouts/platform.html"){
</el-table-column> </el-table-column>
<el-table-column prop="applyDate" label="申请时间" show-overflow-tooltip></el-table-column> <el-table-column prop="applyDate" label="申请时间" show-overflow-tooltip></el-table-column>
<el-table-column label="当前节点" prop="processInstanceNodeName" show-overflow-tooltip></el-table-column> <el-table-column label="当前节点" prop="processInstanceNodeName" show-overflow-tooltip></el-table-column>
<el-table-column label="操作" width="300px"> <el-table-column label="操作" width="160px">
<template slot-scope="{row}"> <template slot-scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button> <el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="row.processInstanceTaskStatus==='ACTIVE'" @click="openApproval(row)" size="mini" type="primary"> <el-button v-if="row.processInstanceTaskStatus==='ACTIVE'" @click="openApproval(row)" size="mini" type="primary">
@@ -131,6 +131,21 @@ layout("/layouts/platform.html"){
} }
}, },
methods: { methods: {
pageData(url = null, data = null) {
this.tableLoading = true
return this.$axios.post(url || loc() + "/pageData", data || this.pageForm).then((res) => {
if (res.code === 0) {
this.tableData = res.data.list
this.pageForm.totalCount = res.data.totalCount
} else {
this.$message.error(res.msg)
}
}).catch(() => {
this.$message.error("审核列表加载失败")
}).finally(() => {
this.tableLoading = false
})
},
openView(row) { openView(row) {
this.$refs.guava.public(() => { this.$refs.guava.public(() => {
this.$refs.infoRef.onOpen(row.id) this.$refs.infoRef.onOpen(row.id)
@@ -178,10 +193,15 @@ layout("/layouts/platform.html"){
} }
}, },
async created() { async created() {
this.tableLoading = true
try {
this.unitList = await this.$businessTool.listUnit() this.unitList = await this.$businessTool.listUnit()
this.unionList = await this.$businessTool.listUnion() this.unionList = await this.$businessTool.listUnion()
this.clubList = await this.$businessTool.listClub() this.clubList = await this.$businessTool.listClub()
this.pageData() await this.pageData()
} finally {
this.tableLoading = false
}
} }
}) })
</script> </script>
@@ -203,7 +203,7 @@ layout("/layouts/platform_h5.html"){
<!-- 提交按钮 --> <!-- 提交按钮 -->
<div class="submit-btn"> <div class="submit-btn">
<van-button round block type="info">提交申请</van-button> <van-button round block type="info" :disabled="formLoading">提交申请</van-button>
</div> </div>
</van-form> </van-form>
<van-popup :style="{ height: '100%',width: '100%'}" position="right" safe-area-inset-bottom v-model="viewShow"> <van-popup :style="{ height: '100%',width: '100%'}" position="right" safe-area-inset-bottom v-model="viewShow">
@@ -227,6 +227,7 @@ layout("/layouts/platform_h5.html"){
data() { data() {
return { return {
viewShow: false, viewShow: false,
formLoading: false,
formData: { formData: {
clubId: "", clubId: "",
clubName: "", clubName: "",
@@ -284,6 +285,22 @@ layout("/layouts/platform_h5.html"){
}); });
}, },
init() { init() {
const id = GetQueryString("id");
if (id) {
this.formLoading = true;
this.$axios.post("/platform/club/join/apply/info", { id }).then(res => {
if (res.code === 0 && res.data) {
this.formData = { ...this.formData, ...res.data };
this.isAgree = true;
this.formLoading = false;
} else {
this.$toast.fail(res.msg || "申请信息加载失败");
}
}).catch(() => {
this.$toast.fail("申请信息加载失败");
});
return;
}
const user = this.$store.state.user; const user = this.$store.state.user;
this.formData.userId = user.id; this.formData.userId = user.id;
this.formData.userName = user.username; this.formData.userName = user.username;
@@ -298,6 +315,7 @@ layout("/layouts/platform_h5.html"){
this.formData.governmentPosition = user.governmentPosition; this.formData.governmentPosition = user.governmentPosition;
}, },
doSubmit() { doSubmit() {
if (this.formLoading) return;
if (!this.isAgree) { if (!this.isAgree) {
this.$toast.fail("请先阅读并同意协议"); this.$toast.fail("请先阅读并同意协议");
return; return;
@@ -309,7 +327,9 @@ layout("/layouts/platform_h5.html"){
this.$axios.post("/platform/club/join/apply/submit", this.formData).then(res => { this.$axios.post("/platform/club/join/apply/submit", this.formData).then(res => {
if (res.code === 0) { if (res.code === 0) {
this.$toast(res.msg); this.$toast(res.msg);
this.$pjaxReplace("/platform/club/join/mine") this.$pjaxReplace("/platform/h5/club/mine")
} else {
this.$toast.fail(res.msg);
} }
}); });
}); });
@@ -11,23 +11,17 @@ layout("/layouts/platform_h5.html"){
<div id="app" v-cloak> <div id="app" v-cloak>
<van-sticky> <van-sticky>
<van-nav-bar title="入会审核" left-text="返回" left-arrow @click-left="$pjaxReplace('/platform/h5/home')"></van-nav-bar> <van-nav-bar title="入会审核" left-text="返回" left-arrow @click-left="$pjaxReplace('/platform/h5/home')"></van-nav-bar>
<van-search <van-search v-model="pageForm.loginName" placeholder="请输入工号查询" @search="doSearch" @clear="doSearch"></van-search>
v-model="pageForm.searchKeyword"
:show-action="showAction"
placeholder="请输入姓名/工号查询"
@search="doSearch"
@cancel="doSearch"
></van-search>
<van-dropdown-menu> <van-dropdown-menu>
<van-dropdown-item v-model="pageForm.applyType" :options="applyTypeOptions" @change="doSearch"></van-dropdown-item> <van-dropdown-item v-model="pageForm.year" :options="yearList" @change="doSearch"></van-dropdown-item>
<van-dropdown-item v-model="pageForm.auditType" :options="auditTypeOptions" @change="doSearch"></van-dropdown-item> <van-dropdown-item v-model="pageForm.auditType" :options="auditTypeOptions" @change="doSearch"></van-dropdown-item>
</van-dropdown-menu> </van-dropdown-menu>
</van-sticky> </van-sticky>
<div> <div>
<van-list v-if="tableData.length>0" v-model="tableLoading" :finished="tableFinished" finished-text="没有更多了" @load="pageData"> <van-list v-if="tableData.length>0 || tableLoading" v-model="tableLoading" :immediate-check="false" :finished="tableFinished" loading-text="加载中..." finished-text="没有更多了" @load="pageData">
<div class="table-list"> <div class="table-list">
<div class="table-card" v-for="row in tableData" :key="row.id"> <div class="table-card" v-for="row in tableData" :key="row.processInstanceTaskId">
<van-cell> <van-cell>
<template slot="title"> <template slot="title">
<div class="flex-align"> <div class="flex-align">
@@ -39,23 +33,16 @@ layout("/layouts/platform_h5.html"){
<van-cell title="工号" :value="row.loginName"></van-cell> <van-cell title="工号" :value="row.loginName"></van-cell>
<van-cell title="性别" :value="row.sex"></van-cell> <van-cell title="性别" :value="row.sex"></van-cell>
<van-cell title="所属工会" :value="row.unionName"></van-cell> <van-cell title="所属工会" :value="row.unionName"></van-cell>
<van-cell v-if="pageForm.applyType === 1 && row.status" title="入会状态"> <van-cell title="申请模式" :value="row.mode ? '加入' : '退出'"></van-cell>
<span v-if="row.status == 1">待协会审核</span> <van-cell title="当前节点" :value="row.processInstanceNodeName"></van-cell>
<span v-else-if="row.status == 2">协会不通过</span> <van-cell title="审核状态" :value="row.processInstanceTaskStatus === 'ACTIVE' ? '待审核' : '已审核'"></van-cell>
<span v-else-if="row.status == 3">待校工会审核</span> <van-cell v-if="row.processInstanceTaskStatus === 'ACTIVE'" class="table-card-footer">
<span v-else-if="row.status == 4">校工会不通过</span> <van-button size="small" @click="openAudit(row, 'BACK')" type="danger">退回重新申请</van-button>
<span v-else-if="row.status == 5">审核通过</span> <van-button size="small" @click="openAudit(row, 'REJECT')" type="danger">拒绝申请</van-button>
<van-button size="small" @click="openAudit(row, 'PASS')" type="info">同意申请</van-button>
</van-cell> </van-cell>
<van-cell v-if="pageForm.applyType === 2 && row.exitStatus" title="退会状态"> <van-cell v-if="row.processInstanceTaskStatus === 'COMPLETE' && !row.nextTaskIsComplete" class="table-card-footer">
<span v-if="row.exitStatus == 1">待协会审核</span> <van-button size="small" @click="openRevoke(row.processInstanceTaskId)" type="danger">撤回</van-button>
<span v-else-if="row.exitStatus == 2">协会不通过</span>
<span v-else-if="row.exitStatus == 3">待校工会审核</span>
<span v-else-if="row.exitStatus == 4">校工会不通过</span>
<span v-else-if="row.exitStatus == 5">审核通过</span>
</van-cell>
<van-cell v-if="pageForm.auditType !== 2 && (row.status === 1 || row.exitStatus === 1)" class="table-card-footer">
<van-button size="small" @click="openPayed(row, false)" type="danger">不通过</van-button>
<van-button size="small" @click="openPayed(row, true)" type="info">通过</van-button>
</van-cell> </van-cell>
</div> </div>
</div> </div>
@@ -63,17 +50,8 @@ layout("/layouts/platform_h5.html"){
<van-empty v-else image="/assets/platform/plugins/vant-green/images/nodata/nodata.png" description="暂无数据"></van-empty> <van-empty v-else image="/assets/platform/plugins/vant-green/images/nodata/nodata.png" description="暂无数据"></van-empty>
</div> </div>
<van-dialog v-model="payedShow" title="是否缴费" show-cancel-button :lazy-render="false" @confirm="doAudit"> <van-dialog v-model="auditShow" title="审核意见" show-cancel-button get-container="body" :overlay="true" :overlay-style="{ backgroundColor: 'rgba(0, 0, 0, 0.5)' }" :lazy-render="false" :before-close="beforeAuditClose">
<van-radio-group v-model="payed"> <van-field v-model="approvalOpinion" type="textarea" placeholder="请输入审核意见" :error-message="approvalOpinionError" @input="approvalOpinionError = ''"></van-field>
<van-cell-group>
<van-cell title="已缴费" clickable @click="payed = true">
<van-radio slot="right-icon" :name="true"></van-radio>
</van-cell>
<van-cell title="未缴费" clickable @click="payed = false">
<van-radio slot="right-icon" :name="false"></van-radio>
</van-cell>
</van-cell-group>
</van-radio-group>
</van-dialog> </van-dialog>
</div> </div>
@@ -84,19 +62,21 @@ layout("/layouts/platform_h5.html"){
components: {}, components: {},
data() { data() {
return { return {
showAction: true, auditShow: false,
payedShow: false, approvalOpinion: "",
payed: false, approvalOpinionError: "",
tableLoading: false,
tableFinished: false,
submitting: false,
pageForm: { pageForm: {
pageNumber: 1, pageNumber: 1,
pageSize: 10, pageSize: 10,
totalCount: 0, totalCount: 0,
searchKeyword: "" loginName: "",
year: new Date().getFullYear(),
auditType: 3
}, },
applyTypeOptions: [ yearList: [],
{ text: "申请加入", value: 1 },
{ text: "申请退会", value: 2 }
],
auditTypeOptions: [ auditTypeOptions: [
{ text: "全部", value: 1 }, { text: "全部", value: 1 },
{ text: "已审核", value: 2 }, { text: "已审核", value: 2 },
@@ -104,54 +84,83 @@ layout("/layouts/platform_h5.html"){
], ],
typeOptions: [], typeOptions: [],
tableData: [], tableData: [],
auditResult: false, approvalType: "",
auditIdList: [] approvalParam: {}
} }
}, },
methods: { methods: {
openPayed(row, flag) { openAudit(row, approvalType) {
this.auditResult = flag this.approvalType = approvalType
this.auditIdList = [row.id] this.approvalParam = row.approvalParam
if (this.pageForm.applyType === 1) { this.approvalOpinion = ""
this.payedShow = true this.approvalOpinionError = ""
} else { this.auditShow = true
this.doAudit() },
async beforeAuditClose(action, done) {
if (action !== 'confirm') {
done()
return
} }
if (!this.approvalOpinion.trim()) {
this.approvalOpinionError = "请输入审核意见"
done(false)
return
}
done(await this.doAudit() === true)
}, },
async doAudit() { async doAudit() {
const confirm = await this.$dialog.confirm({ if (this.submitting) return
title: "提示", this.submitting = true
message: "您确定要提交审核吗?" try {
const resp = await this.$axios.post("/platform/h5/club/audit/doAudit", {
approval: JSON.stringify({
...this.approvalParam,
bpmTaskApprovalType: this.approvalType,
approvalOpinion: this.approvalOpinion
}) })
if (confirm === "confirm") {
const resp = await this.$axios.post("/platform/club/applyJoin/clubAudit/doAudit", {
ids: JSON.stringify(this.auditIdList),
auditResult: this.auditResult,
auditType: 1,
applyType: this.pageForm.applyType,
payed: this.payed
}) })
if (resp.code === 0) { if (resp.code === 0) {
this.$toast.success(resp.msg) this.$toast.success(resp.msg)
this.auditIdList = [] this.doSearch()
this.payedShow = false return true
} else {
this.$toast(resp.msg)
}
} catch (error) {
this.$toast.fail("审核提交失败")
} finally {
this.submitting = false
}
},
openRevoke(taskId) {
this.$dialog.confirm({ title: "提示", message: "您确定要撤回吗?" }).then(async () => {
const resp = await this.$axios.post("/platform/h5/club/audit/revoke", { taskId })
if (resp.code === 0) {
this.$toast.success(resp.msg)
this.doSearch() this.doSearch()
} else { } else {
this.$toast(resp.msg) this.$toast(resp.msg)
} }
} }).catch(() => {})
}, },
pageData() { pageData() {
this.tableLoading = true this.tableLoading = true
this.pageForm.source = 1 this.$axios.post("/platform/h5/club/audit/pageData", this.pageForm).then((resp) => {
this.$axios.post("/platform/club/applyJoin/clubAudit/pageData", this.pageForm).then((resp) => { if (resp.code !== 0) {
this.tableFinished = true
this.$toast(resp.msg)
return
}
this.tableData = this.tableData.concat(resp.data.list) this.tableData = this.tableData.concat(resp.data.list)
this.pageForm.totalCount = resp.data.totalCount this.pageForm.totalCount = resp.data.totalCount
if (this.tableData.length >= this.pageForm.totalCount) { this.tableFinished = this.tableData.length >= this.pageForm.totalCount
this.tableFinished = true if (!this.tableFinished) {
} else {
this.pageForm.pageNumber++ this.pageForm.pageNumber++
} }
}).catch(() => {
this.tableFinished = true
this.$toast.fail("审核列表加载失败")
}).finally(() => {
this.tableLoading = false this.tableLoading = false
}) })
}, },
@@ -159,12 +168,14 @@ layout("/layouts/platform_h5.html"){
this.pageForm.pageNumber = 1 this.pageForm.pageNumber = 1
this.pageForm.totalCount = 0 this.pageForm.totalCount = 0
this.tableData = [] this.tableData = []
this.tableFinished = false
this.pageData() this.pageData()
} }
}, },
created() { created() {
this.$set(this.pageForm, "applyType", 1) for (let i = new Date().getFullYear() - 10; i <= new Date().getFullYear(); i++) {
this.$set(this.pageForm, "auditType", 3) this.yearList.unshift({ value: i, text: i + "年" })
}
this.pageData() this.pageData()
} }
}) })
@@ -29,6 +29,24 @@ const clubUserJoin = {
</template> </template>
</van-cell> </van-cell>
</van-cell-group> </van-cell-group>
<div v-for="nodeTask in viewData.nodeTasks" :key="nodeTask.id">
<van-cell-group :title="nodeTask.nodeName">
<div v-for="task in nodeTask.tasks" :key="task.id">
<van-cell title="审核人">{{ task.actualOwnerLoginName }}-{{ task.actualOwnerUserName }}</van-cell>
<van-cell title="审核时间">{{ task.endOn }}</van-cell>
<van-cell title="审核结果">
<template v-if="task.extVariable">
<van-tag type="success" v-if="task.extVariable.bpmTaskApprovalType === 'PASS'">同意</van-tag>
<van-tag type="danger" v-if="task.extVariable.bpmTaskApprovalType === 'BACK'">退回重新填写</van-tag>
<van-tag type="danger" v-if="task.extVariable.bpmTaskApprovalType === 'REJECT'">拒绝</van-tag>
</template>
</van-cell>
<van-cell title="审核意见">
<div style="white-space: pre-wrap; overflow-wrap: anywhere; text-align: right">{{ task.extVariable && task.extVariable.approvalOpinion }}</div>
</van-cell>
</div>
</van-cell-group>
</div>
</div> </div>
`, `,
data() { data() {
@@ -81,6 +81,9 @@ layout("/layouts/platform_h5.html"){
} }
}, },
methods: { methods: {
openEdit(row) {
this.$pjaxReplace("/platform/h5/club/apply?id=" + encodeURIComponent(row.id))
},
onOpen(row) { onOpen(row) {
this.viewShow = true this.viewShow = true
this.$nextTick(() => { this.$nextTick(() => {