This commit is contained in:
2026-03-21 16:03:12 +08:00
parent d0b71121c1
commit 8c747cde26
11 changed files with 435 additions and 235 deletions
@@ -49,7 +49,7 @@ public class ExecutiveCommitteeFormalPushController {
@Inject
private BaseService baseService;
@At("/index")
@At("")
@SaCheckPermission("executiveCommittee.formalPush")
@Ok("beetl:/platform/zhgh/democratic/executiveCommittee/formalPush/index.html")
public void index() {
@@ -1,22 +1,21 @@
package com.budwk.app.zhgh.democratic.executiveCommittee.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Validator;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.pinyin.PinyinUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.democratic.executiveCommittee.models.ExecutiveCommitteeTwoPush;
import com.budwk.app.zhgh.democratic.executiveCommittee.models.ExecutiveCommitteeConfig;
import com.budwk.app.zhgh.democratic.executiveCommittee.models.ExecutiveCommitteeOnePush;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
@@ -30,8 +29,10 @@ import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author zhf
@@ -42,7 +43,7 @@ import java.util.Map;
@At("/platform/executiveCommittee/preparatoryGroupPush")
@Ok("json:full")
@Slf4j
@Api(tags = "执委会推选-正式委员录入")
@Api(tags = "执委会推选-筹备组推选")
public class ExecutiveCommitteePushController {
@Inject
@@ -62,49 +63,38 @@ public class ExecutiveCommitteePushController {
public Result pageData(PageForm pageForm,
String teacherMeetId,
String delegationId,
String unionId,
String roleCode) {
String unionId) {
Sql sql = Sqls.create("""
SELECT
SELECT
t1.*,
t2.loginName,
t2.userName,
t3.name AS unitName,
t4.name unionName,
t5.sex,
t2.name AS unitName,
t3.name unionName,
t4.sex,
TIMESTAMPDIFF(
YEAR,
t5.birthday,
t4.birthday,
CURDATE()) AS age,
t6.name AS delegationName
t5.name AS delegationName
FROM
`executive_committee_two_push` t1
LEFT JOIN executive_committee_one_push t2 on t2.userId=t1.userId and t2.teacherMeetId=t1.teacherMeetId
LEFT JOIN sys_unit t3 ON t2.unitId = t3.id
LEFT JOIN `sys_union` t4 ON t4.id = t3.unionid
LEFT JOIN `vw_user` t5 ON t5.id = t1.userId
LEFT JOIN teacher_congress_delegation t6 ON t6.id = t2.delegationId
`executive_committee_one_push` t1
LEFT JOIN sys_unit t2 ON t1.unitId = t2.id
LEFT JOIN `sys_union` t3 ON t3.id = t2.unionid
LEFT JOIN `vw_user` t4 ON t4.id = t1.userId
LEFT JOIN teacher_congress_delegation t5 ON t5.id = t1.delegationId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("t1.teacherMeetId", "=", teacherMeetId);
cnd.andEX("t2.delegationId", "=", delegationId);
cnd.andEX("t1.roleCode", "=", roleCode);
cnd.andEX("t1.isFormal", "=", true);
if (StpUtil.hasRole(RoleConstant.SYSADMIN.name()) ||
StpUtil.hasRole(RoleConstant.SCHOOL_UNION_ADMIN.name()) ||
StpUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name())) {
cnd.andEX("t4.id", "=", unionId);
} else {
cnd.andEX("t4.id", "=", SecurityUtil.getUnionId());
}
cnd.andEX("t1.delegationId", "=", delegationId);
cnd.andEX("t3.id", "=", unionId);
cnd.andEX("t1.addType", "=", 2);
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup group = new SqlExpressionGroup();
group.orLike("t2.userName", pageForm.getSearchKeyword());
group.orLike("t2.loginName", pageForm.getSearchKeyword());
group.orLike("t1.userName", pageForm.getSearchKeyword());
group.orLike("t1.loginName", pageForm.getSearchKeyword());
cnd.and(group);
}
cnd.asc("t6.code").asc("t2.firstLetter");
cnd.asc("t5.code").asc("t1.firstLetter");
sql.setCondition(cnd);
return Result.success(baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql));
}
@@ -114,53 +104,93 @@ public class ExecutiveCommitteePushController {
@SaCheckPermission("executiveCommittee.preparatoryGroupPush")
@ApiOperation("查询可以推选委员和已经推选的人员")
public Result getDelegationUser(String teacherMeetId) {
List<ExecutiveCommitteeTwoPush> twoPushList = dao.query(ExecutiveCommitteeTwoPush.class,
Cnd.where("teacherMeetId", "=", teacherMeetId).and(ExecutiveCommitteeTwoPush::getRoleCode, "is not", null));
List<ExecutiveCommitteeTwoPush> userValue = twoPushList.stream().filter(ExecutiveCommitteeTwoPush::getIsFormal).toList();
List<String> userIds = userValue.stream().map(ExecutiveCommitteeTwoPush::getUserId).toList();
List<ExecutiveCommitteeOnePush> userValue = dao.query(ExecutiveCommitteeOnePush.class,
Cnd.where("teacherMeetId", "=", teacherMeetId)
.and("addType", "=", 2));
List<ExecutiveCommitteeOnePush> onePushList = dao.query(ExecutiveCommitteeOnePush.class, Cnd.NEW());
List<String> userIds = onePushList.stream().map(ExecutiveCommitteeOnePush::getUserId).collect(Collectors.toList());
ExecutiveCommitteeConfig config = dao.fetch(ExecutiveCommitteeConfig.class,
Cnd.where("teacherMeetId", "=", teacherMeetId));
Cnd cnd = Cnd.NEW();
cnd.andEX("db.sessionId", "=", teacherMeetId);
cnd.andEX("db.userId", "not in", userIds);
cnd.andEX("db.userId", "!=", SecurityUtil.getUserId());
Sql sql = Sqls.create("""
SELECT
t2.id userId,
t2.username userName,
t2.loginname loginName,
t2.unitName,
t2.sex,
t2.professionalTitle,
t2.professionalLevel,
t1.roleCode,
TIMESTAMPDIFF(
YEAR,
t2.birthday,
CURDATE()) age
SELECT
db.*,
u.professionalTitle,
u.professionalLevel,
TIMESTAMPDIFF(YEAR, u.birthday, CURDATE()) AS age
FROM
executive_committee_two_push t1
LEFT JOIN `vw_user` t2 ON t1.userId = t2.id
teacher_congress_delegate db
LEFT JOIN `vw_user` u ON db.userId = u.id
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("t1.teacherMeetId", "=", teacherMeetId);
cnd.andEX("t1.userId", "not in", userIds);
sql.setCondition(cnd);
List<NutMap> userData = baseService.listMap(sql);
return Result.success(Map.of("userData", userData, "userValue", userValue));
return Result.success(Map.of("userData", userData, "userValue", userValue,"prepareGroupQuotaCount",config.getPrepareGroupQuotaCount()));
}
@At
@SaCheckPermission("executiveCommittee.preparatoryGroupPush")
@SLog(tag = "执委会推选-正式委员录入", msg = "推选委员")
@SLog(tag = "执委会推选-筹备组推选", msg = "推选委员")
public Result addOnePush(@Param("userValue") String[] userValue,
String teacherMeetId) {
try {
if (ObjectUtil.isEmpty(userValue)) {
return Result.error("请选择要录入的委员!");
ExecutiveCommitteeConfig config = dao.fetch(ExecutiveCommitteeConfig.class,
Cnd.where("teacherMeetId", "=", teacherMeetId));
if (ObjectUtil.isEmpty(config)) {
return Result.error("请先配置基础信息");
}
if (ObjectUtil.isEmpty(teacherMeetId)) {
return Result.error("选择教代会!");
if (config.getFirstStartTime().getTime() > System.currentTimeMillis()) {
return Result.error("等待一次预选开始时间");
}
List<ExecutiveCommitteeTwoPush> twoPushList = dao.query(ExecutiveCommitteeTwoPush.class, Cnd.where(ExecutiveCommitteeTwoPush::getTeacherMeetId, "=", teacherMeetId).and(ExecutiveCommitteeTwoPush::getUserId, "in", userValue));
List<String> ids = twoPushList.stream().map(ExecutiveCommitteeTwoPush::getId).toList();
dao.update(ExecutiveCommitteeTwoPush.class, Chain.make("isFormal", true), Cnd.where("id", "in", ids));
if (config.getFirstEndTime().getTime() < System.currentTimeMillis()) {
return Result.error("一次预选已结束");
}
int dbCount = dao.count(ExecutiveCommitteeOnePush.class,
Cnd.where("teacherMeetId", "=", teacherMeetId)
.and("addType", "=", 2));
if (dbCount + userValue.length > config.getPrepareGroupQuotaCount()) {
return Result.error("推选人数限制" + config.getPrepareGroupQuotaCount() + "");
}
Sql sql = Sqls.create("""
SELECT
t1.*
FROM
teacher_congress_delegate t1
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("t1.sessionId", "=", teacherMeetId);
cnd.andEX("t1.userId", "in", userValue);
sql.setCondition(cnd);
List<NutMap> dbList = baseService.listMap(sql);
List<ExecutiveCommitteeOnePush> list = new ArrayList<>();
for (String id : userValue) {
NutMap jdhDb = dbList.stream().filter(v -> v.getString("userId").equals(id)).findFirst().orElse(null);
if (ObjectUtil.isEmpty(jdhDb)) {
return Result.error("请选择正确的代表!");
}
ExecutiveCommitteeOnePush onePush = new ExecutiveCommitteeOnePush();
onePush.setPushDate(DateUtil.date());
onePush.setUserId(jdhDb.getString("userId"));
onePush.setUserName(jdhDb.getString("userName"));
onePush.setLoginName(jdhDb.getString("loginName"));
onePush.setDelegationId(jdhDb.getString("delegationId"));
onePush.setUnionId(jdhDb.getString("unionId"));
onePush.setUnitId(jdhDb.getString("unitId"));
onePush.setTeacherMeetId(teacherMeetId);
String firstLetter = String.valueOf(getFirstLetter(jdhDb.getString("userName")));
onePush.setFirstLetter(firstLetter);
onePush.setAddType(2);
list.add(onePush);
}
dao.insert(list);
return Result.success("添加成功!");
} catch (Exception e) {
e.printStackTrace();
@@ -172,9 +202,16 @@ public class ExecutiveCommitteePushController {
@SaCheckPermission("executiveCommittee.preparatoryGroupPush")
@SLog(tag = "执委会推选-筹备组推选", msg = "删除推选的人")
public Result doDelete(@Valid String id, @Valid String teacherMeetId) {
dao.update(ExecutiveCommitteeTwoPush.class, Chain.make("isFormal", false), Cnd.where("id", "=", id));
return Result.success("删除成功!");
ExecutiveCommitteeConfig config = dao.fetch(ExecutiveCommitteeConfig.class,
Cnd.where("teacherMeetId", "=", teacherMeetId));
if (ObjectUtil.isEmpty(config)) {
return Result.error("请先配置基础信息");
}
int num = dao.clear(ExecutiveCommitteeOnePush.class, Cnd.where("id", "=", id));
return num >= 0 ? Result.success() : Result.error();
}
public static char getFirstLetter(String str) {
if (str == null || str.isEmpty()) {
throw new IllegalArgumentException("字符串不能为空");
@@ -40,6 +40,7 @@ public class ExecutiveCommitteeMemberServiceImpl extends BaseServiceImpl impleme
( SELECT count( 1 ) FROM executive_committee_two_push tp WHERE tp.userId = op.userId ) as pushCount,
CASE op.addType
WHEN 1 THEN '执委会委员'
WHEN 2 THEN '筹备组推选'
WHEN 3 THEN '工会委员会委员'
ELSE '未知'
END AS addTypeName
@@ -1,22 +1,30 @@
package com.budwk.app.zhgh.democratic.proposal.controller.transact;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
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.flow.constant.FlowConst;
import com.budwk.app.flow.entity.ProcessTask;
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.flow.service.FlowCommonService;
import com.budwk.app.flow.service.ProcessTaskService;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
import com.budwk.app.zhgh.democratic.proposal.models.ProposalMerge;
import com.budwk.app.zhgh.democratic.proposal.param.ProposalSearchParam;
import com.budwk.app.zhgh.democratic.proposal.service.ProposalCommitteeFilingService;
import com.budwk.app.zhgh.democratic.proposal.service.common.ProposalCommonService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
@@ -26,12 +34,14 @@ import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.json.Json;
import org.nutz.lang.random.R;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.validation.Valid;
import java.util.List;
import java.util.Objects;
@IocBean
@At("/platform/proposal/committeeFiling")
@@ -47,6 +57,12 @@ public class ProposalCommitteeFilingController {
@Inject
private FlowCommonService flowCommonService;
@Inject
private ProposalCommonService proposalCommonService;
@Inject
private ProcessTaskService processTaskService;
@At("")
@Ok("beetl:/platform/zhgh/democratic/proposal/transact/committeeFiling/index.html")
@@ -121,6 +137,7 @@ public class ProposalCommitteeFilingController {
List<Integer> taskIds = (List<Integer>) args.get("processTaskIds");
List<String> proposalIds = (List<String>) args.get("proposalIds");
List<NutMap> proposals = (List<NutMap>) args.get("proposals");
// 记录提案并案
dao.clear(ProposalMerge.class, Cnd.where(ProposalMerge::getProposalId, "in", proposalIds));
@@ -136,10 +153,81 @@ public class ProposalCommitteeFilingController {
for (Integer taskId : taskIds) {
Dict taskArgs = args.clone();
taskArgs.put(FlowConst.PROCESS_TASK_ID_KEY, taskId);
NutMap proposal = proposals.stream().filter(v -> v.getInt("taskId") == taskId).findFirst().orElse(null);
taskArgs.put("tf_proposalId", proposal.getString("id"));
taskArgs.put("tf_code", proposal.getString("tf_code"));
taskArgs.put("tf_oldCode", proposal.getString("tf_oldCode"));
taskArgs.put("tf_typeId", proposal.getString("tf_typeId"));
taskArgs.put("tf_oldTypeId", proposal.getString("tf_oldTypeId"));
if (!proposal.getString("tf_code").equals(proposal.getString("tf_oldCode"))) {
dao.update(ProposalInfo.class, Chain.make("code", proposal.getString("tf_code")), Cnd.where(ProposalInfo::getId, "=", proposal.getString("id")));
}
if (!proposal.getString("tf_typeId").equals(proposal.getString("tf_oldTypeId"))) {
dao.update(ProposalInfo.class, Chain.make("typeId", proposal.getString("tf_typeId")), Cnd.where(ProposalInfo::getId, "=", proposal.getString("id")));
}
flowCommonService.executeTask(taskArgs);
}
return Result.success();
}
@At
@SaCheckLogin
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("proposal.committeeFiling")
@ApiOperation("撤销任务")
public Result revokeTask(@Param("taskId") Long taskId, @Param("proposalId") String proposalId) {
// 单条撤回
List<String> mergeProposalIds = proposalCommonService.mergeProposal(proposalId);
if (ObjectUtil.isEmpty(mergeProposalIds)) {
//撤回要把修改的提案编号和提案类型同步改回来
ProcessTask processTask = dao.fetch(ProcessTask.class, taskId);
Dict processTaskArgs = JSONUtil.toBean(processTask.getVariable(), Dict.class);
String tfOldCode = processTaskArgs.getStr("tf_oldCode");
String tfOldTypeId = processTaskArgs.getStr("tf_oldTypeId");
dao.update(ProposalInfo.class,
Chain.make("code", tfOldCode).add("typeId", tfOldTypeId),
Cnd.where(ProposalInfo::getId, "=", proposalId));
flowCommonService.revokeTask(taskId);
return Result.success();
}
// 并案撤回
ProcessTask thisTask = dao.fetch(ProcessTask.class, taskId);
List<ProcessTask> mergeTasks = processTaskService.getDoneTaskByBizIdTaskName(mergeProposalIds, thisTask.getTaskName());
for (ProcessTask mergeTask : mergeTasks) {
//撤回要把修改的提案编号和提案类型同步改回来
Dict processTaskArgs = JSONUtil.toBean(mergeTask.getVariable(), Dict.class);
String tfOldCode = processTaskArgs.getStr("tf_oldCode");
String tfOldTypeId = processTaskArgs.getStr("tf_oldTypeId");
dao.update(ProposalInfo.class,
Chain.make("code", tfOldCode).add("typeId", tfOldTypeId),
Cnd.where(ProposalInfo::getId, "=", processTaskArgs.getStr("tf_proposalId")));
flowCommonService.revokeTask(mergeTask.getId());
}
// 删除并案信息
dao.clear(ProposalMerge.class, Cnd.where(ProposalMerge::getProposalId, "in", mergeProposalIds));
return Result.success();
}
@At
@ApiOperation("执行任务")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("proposal.committeeFiling")
public Result executeTask(@Param("data") String data) {
Dict args = Json.fromJson(Dict.class, data);
if (Objects.isNull(args.getStr("proposalId"))) {
return Result.error("参数错误!");
}
// 审核修改提案编号和提案类型
dao.update(
ProposalInfo.class,
Chain.make("code", args.getStr("tf_code")).add("typeId", args.getStr("tf_typeId")),
Cnd.where(ProposalInfo::getId, "=", args.getStr("proposalId")));
flowCommonService.executeTask(args);
return Result.success();
}
}
@@ -17,7 +17,7 @@ import com.budwk.app.flow.service.FlowCommonService;
import com.budwk.app.flow.service.ProcessTaskService;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
import com.budwk.app.zhgh.democratic.proposal.models.ProposalMerge;
import com.budwk.app.zhgh.democratic.proposal.param.ProposalSearchParam;
import com.budwk.app.zhgh.democratic.proposal.service.ProposalCommitteeFilingUnitService;
import com.budwk.app.zhgh.democratic.proposal.service.common.ProposalCommonService;
@@ -148,8 +148,7 @@ public class ProposalCommitteeFilingUnitController {
flowCommonService.executeTask(cloneArgs);
}
ProposalInfo info = proposalCommonService.fetch(proposalId);
info.setCaseFilingResult(args.getStr("caseFilingResult"));
baseService.dao().clear(ProposalMerge.class, Cnd.where(ProposalMerge::getProposalId, "in", mergeProposalIds));
return Result.success();
}
@@ -178,30 +177,30 @@ public class ProposalCommitteeFilingUnitController {
@At
@SaCheckPermission("proposal.committeeFilingUnit")
public Result doUpData(){
List<ProcessTask> tasks = baseService.dao().query(ProcessTask.class, Cnd.where("taskName", "=", "personnelOffice"));
List<ProcessTask> tasks = baseService.dao().query(ProcessTask.class, Cnd.where("taskName", "=", "committee"));
List<Long> list = tasks.stream().map(ProcessTask::getId).toList();
List<ProcessTaskActor> actorList = baseService.dao().query(ProcessTaskActor.class, Cnd.where(ProcessTaskActor::getProcessTaskId, "in", list));
List<ProcessInstance> instanceList = baseService.dao().query(ProcessInstance.class, Cnd.where(ProcessInstance::getProcessDefineId, "=", 396));
List<ProcessInstance> instanceList = baseService.dao().query(ProcessInstance.class, Cnd.where(ProcessInstance::getProcessDefineId, "=", 399));
for (ProcessTask task : tasks) {
task.setTaskName("committee");
task.setDisplayName("提案委员会立案");
task.setDisplayName("人事处审核");
task.setFormKey("/platform/proposal/committee");
task.setH5FormKey("");
}
for (ProcessTaskActor actor : actorList) {
actor.setActorId("1fb89886bf4c43dcb48409c83d3363c3");
actor.setActorAccount("018054");
actor.setActorName("赵丽霞");
actor.setActorUnitName("工会");
actor.setActorUnitId("0011");
actor.setActorId("a2e5874eb28e42e9811f1af4d4bcb5a5");
actor.setActorAccount("001094");
actor.setActorName("郑胜水");
actor.setActorUnitName("人事处(党委教师工作部、人才工作办公室)");
actor.setActorUnitId("1001");
}
for (ProcessInstance instance : instanceList) {
instance.setProcessDefineId(399L);
instance.setProcessDefineId(400L);
}
baseService.update(tasks);