This commit is contained in:
那些花儿
2025-08-30 17:49:39 +08:00
parent cbc1956bc6
commit 5441b1d785
83 changed files with 3708 additions and 3186 deletions
@@ -40,7 +40,7 @@ public class FlowTodoCenter {
@At
@SaCheckLogin
public Result todo(Integer pageNumber, Integer pageSize, String keyword, String categoty) {
public Result todo(Integer pageNumber, Integer pageSize, String searchKeyword, String category) {
Sql sql = Sqls.create("""
SELECT
t.id AS taskId,
@@ -75,7 +75,7 @@ public class FlowTodoCenter {
@At
@SaCheckLogin
public Result done(Integer pageNumber, Integer pageSize, String keyword, String categoty) {
public Result done(Integer pageNumber, Integer pageSize, String searchKeyword, String category) {
Sql sql = Sqls.create("""
SELECT
t.id AS taskId,
@@ -110,7 +110,7 @@ public class FlowTodoCenter {
@At
@SaCheckLogin
public Result started(Integer pageNumber, Integer pageSize, String keyword, String categoty) {
public Result started(Integer pageNumber, Integer pageSize, String searchKeyword, String category) {
Sql sql = Sqls.create("""
SELECT
ins.id AS instanceId,
@@ -9,20 +9,24 @@ import lombok.Getter;
@Getter
@DictEnum(key = "ProcessInstanceStateEnum", name = "流程实例状态")
public enum ProcessInstanceStateEnum {
DOING(10, "进行中"),
FINISHED(20, "已完成"),
WITHDRAW(30, "已撤回"),
INTERRUPT(40, "强行终止"),
REJECT(45, "已拒绝"),
PENDING(50, "挂起"),
ABANDON(99, "已废弃");
DOING(10, "进行中", null),
FINISHED(20, "已完成", "success"),
WITHDRAW(30, "已撤回", "danger"),
INTERRUPT(40, "强行终止", "danger"),
REJECT(45, "已拒绝", "danger"),
PENDING(50, "挂起", "danger"),
ABANDON(99, "已废弃", "danger");
private final Integer code;
private final String message;
ProcessInstanceStateEnum(Integer code, String message) {
private final String type;
ProcessInstanceStateEnum(Integer code, String message, String type) {
this.code = code;
this.message = message;
this.type = type;
}
}
@@ -378,7 +378,7 @@ public class SysRoleController {
@At
@Ok("json")
@SaCheckPermission("sys.manager.role.menu")
// @SaCheckPermission("sys.manager.role.menu")
@SLog(tag = "分配角色菜单", msg = "角色名称:${args[3].getAttribute('name')}")
public Object menuDo(@Param("menuIds") String menuIds, @Param("platform") String platform, @Param("roleId") String roleId, HttpServletRequest req) {
try {
@@ -14,7 +14,10 @@ import com.budwk.app.base.exception.BaseException;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.sys.models.*;
import com.budwk.app.sys.models.Sys_dict;
import com.budwk.app.sys.models.Sys_role;
import com.budwk.app.sys.models.Sys_unit;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.sys.services.SysDictService;
import com.budwk.app.sys.services.SysRoleService;
import com.budwk.app.sys.services.SysUnitService;
@@ -286,7 +289,7 @@ public class SysUnitController {
for (int i = 0; i < list.size(); i++) {
nodeList.add(new TreeNode<>(list.get(i).getId(), list.get(i).getParentId(), list.get(i).getName(), i));
}
List<Tree<String>> treeList = TreeUtil.build(nodeList, "1");
List<Tree<String>> treeList = TreeUtil.build(nodeList, StrUtil.blankToDefault(pid, "1"));
// NutMap menuMap = NutMap.NEW();
// for (Sys_unit unit : list) {
@@ -0,0 +1,24 @@
package com.budwk.app.sys.controller.message;
import com.budwk.app.sys.models.Sys_user;
/**
* 消息发送者
*/
public interface SysMessageSender {
/**
* 发送消息
* @param message 消息内容
* @param receiver 接收人
* @return 发送结果
*/
// boolean send(Message message, Sys_user receiver);
/**
* 支持的渠道类型
* @return 渠道类型
*/
String getChannelType();
}
@@ -0,0 +1,4 @@
package com.budwk.app.sys.controller.message;
public class SysSmsMessageSender {
}
@@ -1,80 +0,0 @@
package com.budwk.app.zhgh.democratic.grassrootscongress.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
import com.budwk.app.bpm.service.BpmService;
import com.budwk.app.zhgh.democratic.grassrootscongress.service.GrassrootsCongressMeetingService;
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.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.validation.Valid;
/**
* @ClassName GrassrootsCongressMeetingAuditController
* @Description TODO
* @Author zhf
* @Date 2024/9/6 15:17
*/
@Slf4j
@IocBean
@Ok("json:full")
@At("/platform/grassrootsCongress/materials/audit")
@Api(tags = "基层双代会资料审核")
public class GrassrootsCongressMaterialsAuditController {
@Inject
private BpmService bpmService;
@Inject
private GrassrootsCongressMeetingService grassrootsCongressMeetingService;
@At("")
@Ok("beetl:/platform/zhgh/democratic/grassrootscongress/materials/audit/index.html")
@SaCheckPermission("grassrootsCongress.materials.audit")
public void index() {
}
@At
@ApiOperation("资料列表")
@SaCheckPermission("grassrootsCongress.materials.audit")
public Result pageData(PageForm pageForm, Integer year, String unionId) {
Pagination pagination = grassrootsCongressMeetingService.pageData(pageForm, year, unionId);
return Result.success(pagination);
}
@At
@Aop(TransAop.READ_COMMITTED)
@ApiOperation("会议资料审核")
@SaCheckPermission("grassrootsCongress.materials.audit")
@SLog(type = "基层双代会", tag = "基层双代会资料审核", msg = "校工会审核信息")
public Result approval(@Param("approval") @Valid BpmTaskApprovalParam approvalParam) {
bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), null, null);
return Result.success();
}
@At
@Aop(TransAop.READ_COMMITTED)
@ApiOperation("会议批复撤回")
@SaCheckPermission("grassrootsCongress.materials.audit")
@SLog(type = "基层双代会", tag = "基层双代会资料撤回", msg = "基层双代会资料撤回")
public Result revoke(@Valid String taskId) {
bpmService.revokeTask(taskId);
return Result.success();
}
}
@@ -1,143 +0,0 @@
package com.budwk.app.zhgh.democratic.grassrootscongress.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.BpmProcessConstant;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.exception.BaseException;
import com.budwk.app.base.page.Pagination;
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.bpm.service.BpmService;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.web.controllers.open.commons.service.CommonService;
import com.budwk.app.zhgh.democratic.grassrootscongress.models.GrassrootsCongressMaterialsInfo;
import com.budwk.app.zhgh.democratic.grassrootscongress.service.GrassrootsCongressMeetingService;
import com.budwk.app.zhgh.democratic.grassrootscongress.vo.GrassrootsCongressMaterialVo;
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.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.validation.Valid;
import java.util.Date;
import java.util.List;
/**
* @ClassName GrassrootsCongressMaterialsController
* @Description TODO
* @Author zhf
* @Date 2024/9/6 9:53
*/
@Slf4j
@IocBean
@Ok("json:full")
@At("/platform/grassrootsCongress/materials/manage")
@Api(tags = "基层双代会资料管理")
public class GrassrootsCongressMaterialsController {
@Inject
private GrassrootsCongressMeetingService grassrootsCongressMeetingService;
@Inject
private BpmService bpmService;
@Inject
private BaseService baseService;
@Inject
private CommonService commonService;
@At("")
@Ok("beetl:/platform/zhgh/democratic/grassrootscongress/materials/manage/index.html")
@SaCheckPermission("grassrootsCongress.materials.manage")
public void index() {
}
@At
@ApiOperation("我的资料列表")
@SaCheckPermission("grassrootsCongress.materials.manage")
public Result pageData(PageForm pageForm, Integer year) {
Pagination pagination = grassrootsCongressMeetingService.pageData(pageForm, year);
return Result.success(pagination);
}
@At
@ApiOperation("提交")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("grassrootsCongress.materials.manage")
@SLog(tag = "基层双代会", msg = "上传会议资料", type = "grassrootsCongressMaterials")
public Result doSave(@Param("data") GrassrootsCongressMaterialsInfo data) {
data.setCreatedDate(new Date());
data.setUserName(SecurityUtil.getUserUsername());
data.setLoginName(SecurityUtil.getUserLoginname());
data.setUserId(SecurityUtil.getUserId());
grassrootsCongressMeetingService.insertOrUpdate(data);
bpmService.startSaveProcessInstance(BpmProcessConstant.GRASSROOTS_CONGRESS_MATERIALS.name(), data.getMaterialsName(), data.getId(), null);
return Result.success();
}
@At
@ApiOperation("提交")
@Aop({TransAop.READ_COMMITTED})
@SaCheckPermission("grassrootsCongress.materials.manage")
@SLog(type = "grassrootsCongressMaterials", tag = "基层双代会", msg = "会议请示添加会议")
public Result doSubmit(@Param("data") GrassrootsCongressMaterialsInfo data) {
data.setCreatedDate(new Date());
data.setUserName(SecurityUtil.getUserUsername());
data.setLoginName(SecurityUtil.getUserLoginname());
data.setUserId(SecurityUtil.getUserId());
grassrootsCongressMeetingService.insertOrUpdate(data);
String approvalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.SCHOOL_UNION_ADMIN);
if (StrUtil.isBlank(approvalLoginName)) {
throw new BaseException("会议资料审批人未设置");
}
bpmService.startSubmitProcessInstance(BpmProcessConstant.GRASSROOTS_CONGRESS_MATERIALS.name(), data.getMaterialsName(), data.getId(), List.of(approvalLoginName), null);
return Result.success();
}
@At
@ApiOperation("删除会议资料")
@SaCheckPermission("grassrootsCongress.myMeeting")
@Aop(TransAop.READ_COMMITTED)
@SLog(type = "grassrootsCongressMaterials", tag = "基层双代会", msg = "删除会议资料")
public Result doDelete(@Valid String id) {
grassrootsCongressMeetingService.dao().delete(GrassrootsCongressMaterialsInfo.class, id);
bpmService.deleteInstance(id);
return Result.success();
}
@At
@ApiOperation("撤回申请")
@Aop(TransAop.READ_COMMITTED)
@SLog(tag = "基层双代会", msg = "撤回申请")
@SaCheckPermission("grassrootsCongress.myMeeting")
public Result revokeApply(@Valid String id) {
bpmService.revokeApply(id);
return Result.success();
}
@At
@SaCheckPermission("grassrootsCongress.materials.manage")
@ApiOperation("查询单个会议资料信息")
public Result findOne(@Valid String id) {
Sql sql = Sqls.create("""
select * from grassroots_congress_materials_info where id=@id
""").setParam("id", id);
GrassrootsCongressMaterialVo grassrootsCongressMaterialVo = (GrassrootsCongressMaterialVo) baseService.fetchVO(sql, GrassrootsCongressMaterialVo.class);
grassrootsCongressMaterialVo.setNodeTasks(bpmService.getNodeTasks(BpmProcessConstant.GRASSROOTS_CONGRESS_MATERIALS, id));
return Result.success(grassrootsCongressMaterialVo);
}
}
@@ -0,0 +1,103 @@
package com.budwk.app.zhgh.democratic.grassrootscongress.controller.material;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.utils.PageUtil;
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.democratic.grassrootscongress.service.GrassrootsCongressService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
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 java.util.List;
@Slf4j
@IocBean
@Ok("json:full")
@At("/platform/grassrootsCongress/material/approval")
@Api(tags = "基层双代会-会议资料-校工会审核")
public class GrassrootsCongressMaterialApprovalController {
@Inject
private GrassrootsCongressService grassrootsCongressService;
@At("")
@Ok("beetl:/platform/zhgh/democratic/grassrootscongress/material/approval/index.html")
@SaCheckPermission("grassrootsCongress.material.approval")
public void index() {
}
@At
@ApiOperation("会议列表")
@SaCheckPermission("grassrootsCongress.material.approval")
public Result pageData(PageForm pageForm, Integer year, String unionId, boolean approval) {
Sql sql = Sqls.create("""
SELECT
info.*,
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 grassroots_congress_materials_info 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
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("t.taskName", "=", "zlsh");
if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
}
if (approval) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
} else {
cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode());
}
cnd.andEX("YEAR(info.createdTime)", "=", year);
cnd.andEX("info.unionId", "=", unionId);
if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
cnd.desc("info.createdAt");
} else {
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
}
cnd.groupBy("t.id");
sql.setCondition(cnd);
Pagination<NutMap> pageVO = grassrootsCongressService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pageVO);
}
}
@@ -0,0 +1,34 @@
package com.budwk.app.zhgh.democratic.grassrootscongress.controller.material;
import cn.dev33.satoken.annotation.SaCheckLogin;
import com.budwk.app.base.result.Result;
import com.budwk.app.zhgh.democratic.grassrootscongress.models.GrassrootsCongressMaterialsInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
@Slf4j
@IocBean
@Ok("json:full")
@At("/platform/grassrootsCongress/material/common")
@Api(tags = "基层双代会-会议资料-公共")
public class GrassrootsCongressMaterialCommonController {
@Inject
private Dao dao;
@At
@SaCheckLogin
@ApiOperation("获取申请信息")
public Result info(@Param("id") String id) {
GrassrootsCongressMaterialsInfo info = dao.fetch(GrassrootsCongressMaterialsInfo.class, id);
return Result.success(info);
}
}
@@ -0,0 +1,124 @@
package com.budwk.app.zhgh.democratic.grassrootscongress.controller.material;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.flow.engine.FlowEngine;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.democratic.grassrootscongress.models.GrassrootsCongressMaterialsInfo;
import com.budwk.app.zhgh.democratic.grassrootscongress.models.GrassrootsCongressMeetingInfo;
import com.budwk.app.zhgh.democratic.grassrootscongress.param.GrassrootsCongressPageForm;
import com.budwk.app.zhgh.democratic.grassrootscongress.service.GrassrootsCongressService;
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.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import javax.validation.Valid;
import java.util.List;
@Slf4j
@IocBean
@Ok("json:full")
@At("/platform/grassrootsCongress/material/mine")
@Api(tags = "基层双代会-会议资料-我的申请")
public class GrassrootsCongressMaterialMineController {
@Inject
private Dao dao;
@Inject
private FlowEngine flowEngine;
@Inject
private GrassrootsCongressService grassrootsCongressService;
@At("")
@Ok("beetl:/platform/zhgh/democratic/grassrootscongress/material/mine/index.html")
@SaCheckPermission("grassrootsCongress.material.mine")
public void index() {
}
@At
@ApiOperation("我的请示列表")
@SaCheckPermission("grassrootsCongress.material.mine")
public Result pageData(@Valid GrassrootsCongressPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
info.*,
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' AND taskState in (10,20)) AS startTaskId
FROM
grassroots_congress_materials_info info
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 (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) {
cnd.and("info.createdBy", "=", SecurityUtil.getUserId());
}
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
cnd.and(Cnd.likeEX("info.meetingName", pageForm.getSearchKeyword()));
}
cnd.andEX("YEAR(info.createdTime)", "=", pageForm.getYear());
cnd.desc("info.createdTime");
sql.setCondition(cnd);
Pagination<NutMap> pagination = grassrootsCongressService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@ApiOperation("删除会议请示")
@SaCheckPermission("grassrootsCongress.material.mine")
@Aop(TransAop.READ_COMMITTED)
@SLog(tag = "基层双代会-会议资料-我的申请", msg = "删除")
public Result delete(@Valid String id) {
dao.clear(GrassrootsCongressMaterialsInfo.class, Cnd.where("id", "=", id));
flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id);
return Result.success();
}
@At
@ApiOperation("基层双代会届次")
@SaCheckPermission("grassrootsCongress.material.mine")
public Result getAllJc(Integer year) {
List<GrassrootsCongressMeetingInfo> query = dao.query(GrassrootsCongressMeetingInfo.class,
Cnd.where("YEAR(createTime)", "=", year).and("fullName", "is not", null).groupBy("fullName"));
if (Lang.isNotEmpty(query)) {
List<String> list = query.stream().map(GrassrootsCongressMeetingInfo::getFullName).toList();
return Result.success(list);
}
return Result.success();
}
}
@@ -0,0 +1,63 @@
package com.budwk.app.zhgh.democratic.grassrootscongress.controller.material;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.flow.enums.ProcessInstanceStateEnum;
import com.budwk.app.zhgh.democratic.grassrootscongress.param.GrassrootsCongressPageForm;
import com.budwk.app.zhgh.democratic.grassrootscongress.service.GrassrootsCongressService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
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;
@Slf4j
@IocBean
@Ok("json:full")
@At("/platform/grassrootsCongress/material/statistics")
@Api(tags = "基层双代会-会议资料-统计")
public class GrassrootsCongressMaterialStatisticsController {
@Inject
private GrassrootsCongressService grassrootsCongressService;
@At("")
@Ok("beetl:/platform/zhgh/democratic/grassrootscongress/material/statistics/index.html")
@SaCheckPermission("grassrootsCongress.material.statistics")
public void index() {
}
@At
@ApiOperation("汇总统计列表")
@SaCheckPermission("grassrootsCongress.material.statistics")
public Result pageData(GrassrootsCongressPageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
info.*,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
ins.variable instanceVariable,
ins.processDefineId instanceProcessDefineId
FROM
grassroots_congress_materials_info info
LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("ins.state","=", ProcessInstanceStateEnum.FINISHED.getCode());
cnd.andEX("YEAR(info.createdTime)", "=", pageForm.getYear());
cnd.desc("info.createdTime");
sql.setCondition(cnd);
Pagination<NutMap> pagination = grassrootsCongressService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
}
@@ -0,0 +1,141 @@
package com.budwk.app.zhgh.democratic.grassrootscongress.controller.material;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.lang.Dict;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.result.Result;
import com.budwk.app.flow.constant.FlowConst;
import com.budwk.app.flow.engine.FlowEngine;
import com.budwk.app.flow.entity.ProcessInstance;
import com.budwk.app.flow.entity.ProcessTask;
import com.budwk.app.flow.enums.ProcessInstanceStateEnum;
import com.budwk.app.flow.enums.ProcessSubmitTypeEnum;
import com.budwk.app.flow.service.FlowCommonService;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.democratic.grassrootscongress.models.GrassrootsCongressMaterialsInfo;
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.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.validation.Valid;
import java.util.Date;
import java.util.List;
@Slf4j
@IocBean
@Ok("json:full")
@At("/platform/grassrootsCongress/material/write")
@Api(tags = "基层双代会-资料上传")
public class GrassrootsCongressMaterialWriteController {
@Inject
private Dao dao;
@Inject
private FlowEngine flowEngine;
@Inject
private FlowCommonService flowCommonService;
@At("")
@Ok("beetl:/platform/zhgh/democratic/grassrootscongress/material/write/index.html")
@SaCheckPermission("grassrootsCongress.material.write")
public void index() {
}
@At
@ApiOperation("保存")
@Aop(TransAop.READ_COMMITTED)
@SLog(tag = "基层双代会-资料资料", msg = "保存资料")
@SaCheckPermission("grassrootsCongress.material.write")
public Result save(@Param("data") GrassrootsCongressMaterialsInfo info) {
info.setCreatedTime(new Date());
dao.insertOrUpdate(info);
return Result.success();
}
@At
@ApiOperation("提交")
@Aop(TransAop.READ_COMMITTED)
@SLog(tag = "基层双代会-资料请示", msg = "提交资料")
@SaCheckPermission("grassrootsCongress.material.write")
public Result submit(@Param("data") GrassrootsCongressMaterialsInfo info) {
info.setCreatedTime(new Date());
dao.insertOrUpdate(info);
// 开启流程实例
Dict args = Dict.create();
args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode());
ProcessInstance instance = flowEngine.startProcessInstanceByKey("JCSDHHYZL", info.getId(), SecurityUtil.getUserId(), args);
// 自动完成第一个申请任务
List<ProcessTask> doingTaskList = flowEngine.processTaskService().getDoingTaskList(instance.getId(), null);
for (ProcessTask task : doingTaskList) {
flowEngine.executeProcessTask(task.getId(), SecurityUtil.getUserId(), args);
}
return Result.success();
}
@At
@SaCheckLogin
@ApiOperation("重新提交申请")
@SLog(tag = "基层双代会-资料请示", msg = "重新提交申请")
@SaCheckPermission("grassrootsCongress.material.write")
public Result submitAgain(@Param("data") GrassrootsCongressMaterialsInfo info, @Param("taskId") Long taskId) {
dao.insertOrUpdate(info);
Dict dict = Dict.create();
dict.set(FlowConst.PROCESS_TASK_ID_KEY, taskId);
dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.RE_APPLY.getCode());
flowCommonService.executeTask(dict);
return Result.success();
}
@At
@SaCheckPermission("grassrootsCongress")
@ApiOperation("查询单个资料信息")
public Result info(@Valid String id) {
GrassrootsCongressMaterialsInfo info = dao.fetch(GrassrootsCongressMaterialsInfo.class, id);
return Result.success(info);
}
@At
@ApiOperation("查询分工会申请成功的届次信息")
@SaCheckPermission("grassrootsCongress.material.write")
public Result listSession(String unionId) {
Sql sql = Sqls.create("""
SELECT
info.id,
info.fullName
FROM
`grassroots_congress_meeting_info` info
LEFT JOIN wf_process_instance inst ON inst.businessNo = info.id
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("inst.state","=", ProcessInstanceStateEnum.FINISHED.getCode());
if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){
cnd.andEX("info.unionId","=", unionId);
}
sql.setCondition(cnd);
sql.setCallback(Sqls.callback.maps());
dao.execute(sql);
List<NutMap> list = sql.getList(NutMap.class);
return Result.success(list);
}
}
@@ -44,7 +44,7 @@ public class GrassrootsCongressMeetingApprovalController {
@At
@ApiOperation("会议列表")
@SaCheckPermission("grassrootsCongress.meeting.approval")
public Result pageData(PageForm pageForm, Integer year, String meetingName, String unionId, boolean approval) {
public Result pageData(PageForm pageForm, Integer year, String unionId, boolean approval) {
Sql sql = Sqls.create("""
SELECT
info.*,
@@ -87,7 +87,9 @@ public class GrassrootsCongressMeetingApprovalController {
}
cnd.andEX("YEAR(info.createTime)", "=", year);
cnd.and(Cnd.likeEX("info.meetingName", meetingName));
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
cnd.and(Cnd.likeEX("info.meetingName", pageForm.getSearchKeyword()));
}
cnd.andEX("info.unionId", "=", unionId);
if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
@@ -59,14 +59,10 @@ public class GrassrootsCongressMeetingStatisticsController {
""");
Cnd cnd = Cnd.NEW();
cnd.and("ins.state","=", ProcessInstanceStateEnum.FINISHED.getCode());
cnd.andEX("YEAR(info.createTime)", "=", pageForm.getYear());
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
cnd.and(Cnd.likeEX("info.meetingName", pageForm.getSearchKeyword()));
}
if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) {
cnd.and("info.createUserId", "=", SecurityUtil.getUserId());
}
cnd.desc("info.createTime");
sql.setCondition(cnd);
Pagination<NutMap> pagination = grassrootsCongressService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
@@ -16,12 +16,15 @@ import com.budwk.app.flow.service.FlowCommonService;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.democratic.grassrootscongress.models.GrassrootsCongressMeetingInfo;
import com.budwk.app.zhgh.democratic.grassrootscongress.service.GrassrootsCongressService;
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.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
@@ -45,6 +48,8 @@ public class GrassrootsCongressMeetingWriteController {
private FlowEngine flowEngine;
@Inject
private FlowCommonService flowCommonService;
@Inject
private GrassrootsCongressService grassrootsCongressService;
@At("")
@Ok("beetl:/platform/zhgh/democratic/grassrootscongress/meeting/write/index.html")
@@ -59,6 +64,26 @@ public class GrassrootsCongressMeetingWriteController {
@SLog(tag = "基层双代会-会议请示", msg = "保存会议")
@SaCheckPermission("grassrootsCongress.meeting.write")
public Result save(@Param("data") GrassrootsCongressMeetingInfo data) {
Sql sql = Sqls.create("""
SELECT
count(1)
FROM
`grassroots_congress_meeting_info` info
LEFT JOIN wf_process_instance inst ON inst.businessNo = info.id
WHERE inst.state=20 AND info.unionId = @unionId
AND info.j = @j AND info.c = @c
""");
sql.setParam("unionId", data.getUnionId());
sql.setParam("j", data.getJ());
sql.setParam("c", data.getC());
int count = grassrootsCongressService.count(sql);
if (count > 0) {
return Result.error("该届次已存在!");
}
data.setFullName(data.getJ() + data.getC());
data.setCreateTime(DateUtil.now());
data.setCreateUserId(SecurityUtil.getUserId());
data.setCreateUserName(SecurityUtil.getUserUsername());
@@ -72,6 +97,25 @@ public class GrassrootsCongressMeetingWriteController {
@SLog(tag = "基层双代会-会议请示", msg = "提交会议")
@SaCheckPermission("grassrootsCongress.meeting.write")
public Result submit(@Param("data") GrassrootsCongressMeetingInfo data) {
Sql sql = Sqls.create("""
SELECT
count(1)
FROM
`grassroots_congress_meeting_info` info
LEFT JOIN wf_process_instance inst ON inst.businessNo = info.id
WHERE inst.state=20 AND info.unionId = @unionId
AND info.j = @j AND info.c = @c
""");
sql.setParam("unionId", data.getUnionId());
sql.setParam("j", data.getJ());
sql.setParam("c", data.getC());
int count = grassrootsCongressService.count(sql);
if (count > 0) {
return Result.error("该届次已存在!");
}
data.setFullName(data.getJ() + data.getC());
data.setCreateTime(DateUtil.now());
data.setCreateUserId(SecurityUtil.getUserId());
data.setCreateUserName(SecurityUtil.getUserUsername());
@@ -97,6 +141,7 @@ public class GrassrootsCongressMeetingWriteController {
@SLog(tag = "基层双代会-会议请示", msg = "重新提交申请")
@SaCheckPermission("grassrootsCongress.meeting.write")
public Result submitAgain(@Param("data") GrassrootsCongressMeetingInfo data, @Param("taskId") Long taskId) {
data.setFullName(data.getJ() + data.getC());
dao.insertOrUpdate(data);
Dict dict = Dict.create();
@@ -10,12 +10,6 @@ import org.nutz.dao.interceptor.annotation.PrevInsert;
import java.util.Date;
import java.util.List;
/**
* @ClassName GrassrootsCongressMaterialsInfo
* @Description TODO
* @Author zhf
* @Date 2024/9/6 10:06
*/
@Data
@Comment("基层双代会资料")
@EqualsAndHashCode(callSuper = true)
@@ -49,6 +43,11 @@ public class GrassrootsCongressMaterialsInfo extends BaseModel {
@ColDefine(type = ColType.VARCHAR, width = 50)
private String unionName;
@Column
@Comment("创建人工会id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unionId;
@Column
@Comment("教代会id")
@ColDefine(type = ColType.VARCHAR, width = 32)
@@ -73,10 +72,11 @@ public class GrassrootsCongressMaterialsInfo extends BaseModel {
@Comment("附件")
@ColDefine(type = ColType.MYSQL_JSON)
private List<JSONObject> files;
@Column
@Comment("创建时间")
@ColDefine(type = ColType.DATETIME)
private Date createdDate;
private Date createdTime;
}
@@ -81,7 +81,7 @@ public class ProposalConfigTypeController {
@At
@SaCheckPermission("proposal.config.type")
@ApiModelProperty("删除提案类型")
@SLog(type = "提案类型配置", tag = "删除提案类型", msg = "${id}")
@SLog(type = "提案类型配置", tag = "删除提案类型", msg = "id:${id}")
public Result delete(@Valid Integer id){
int count = dao.count(ProposalInfo.class, Cnd.where(ProposalInfo::getTypeId, "=", id));
if(count > 0){
@@ -1,24 +1,16 @@
package com.budwk.app.zhgh.democratic.proposal.controller.query;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import com.budwk.app.base.result.Result;
import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum;
import com.budwk.app.bpm.models.BpmProcessTask;
import com.budwk.app.flow.entity.ProcessInstance;
import com.budwk.app.flow.entity.ProcessTask;
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.zhgh.democratic.proposal.models.ProposalConfig;
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
import com.budwk.app.zhgh.democratic.proposal.models.ProposalUndertake;
import com.budwk.app.zhgh.democratic.proposal.service.common.ProposalCommonService;
import lombok.extern.slf4j.Slf4j;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.json.Json;
@@ -26,7 +18,10 @@ import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import java.util.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
@@ -65,7 +60,7 @@ public class ProposalQueryUnitReplyController {
// 主办任务记录
List<ProcessTask> masterUnitTasks = dao.query(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "in", instIds)
.and(ProcessTask::getTaskState, "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.DOING.getCode()))
.and(ProcessTask::getTaskName, "=", "85cf23da-2dd5-4007-a1e9-bd9bfddc68f0"));
.and(ProcessTask::getTaskName, "in", List.of("85cf23da-2dd5-4007-a1e9-bd9bfddc68f0", "5ed5a1be-0cd3-4b47-a0d5-238d53b61f34")));
// 协办任务记录
List<ProcessTask> slaveUnitTasks = dao.query(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "in", instIds)
@@ -1,12 +1,14 @@
package com.budwk.app.zhgh.democratic.proposal.controller.senior;
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.service.BaseService;
import com.budwk.app.zhgh.democratic.proposal.controller.vo.ProposalInfoPageVO;
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
import com.budwk.app.zhgh.democratic.proposal.param.ProposalQueryComprehensiveParam;
import com.budwk.app.zhgh.democratic.proposal.service.common.ProposalCommonService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.nutz.aop.interceptor.ioc.TransAop;
@@ -31,7 +33,7 @@ public class ProposalSeniorBasicController {
@Inject
private Dao dao;
@Inject
private BaseService baseService;
private ProposalCommonService proposalCommonService;
@At("")
@Ok("beetl:/platform/zhgh/democratic/proposal/senior/basic/index.html")
@@ -50,25 +52,35 @@ public class ProposalSeniorBasicController {
type.name AS typeName,
tcs.fullName AS sessionName,
tcd.`name` AS delegationName,
inst.processInstanceNodeId,
inst.processInstanceNodeCode,
inst.processInstanceNodeName,
inst.processInstanceTaskIds,
inst.processInstanceStatus
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
ins.variable instanceVariable,
ins.processDefineId instanceProcessDefineId,
t.displayName curTaskName,
JSON_UNQUOTE(JSON_EXTRACT(caseTasks.variable, '$.tf_hostUnitName')) AS masterUnitName,
JSON_EXTRACT(caseTasks.variable, '$.tf_helpUnitNames') AS slaveUnitNames
FROM
proposal_info info
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
LEFT JOIN proposal_type type on type.id = info.typeId
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
LEFT JOIN bpm_process_instance inst ON inst.processInstanceBusinessId = info.id
LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName
LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id
LEFT JOIN (SELECT processInstanceId, MAX(finishTime) AS finishTime FROM wf_process_task WHERE taskName = '9846ab38-40c5-4093-bafc-a9b3b443338b' AND taskState = 20 GROUP BY processInstanceId) latestTasks ON latestTasks.processInstanceId = ins.id
LEFT JOIN wf_process_task caseTasks ON caseTasks.processInstanceId = ins.id AND caseTasks.taskName = '9846ab38-40c5-4093-bafc-a9b3b443338b' AND caseTasks.taskState = 20 AND caseTasks.finishTime = latestTasks.finishTime
LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10
$condition
""");
Cnd cnd = Cnd.NEW();
if (StrUtil.isNotBlank(pageForm.getUndertakeUnitId())) {
}
ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm);
cnd.groupBy("info.id");
sql.setCondition(cnd);
Pagination pagination = baseService.listPageVO(pageForm, sql, ProposalInfoPageVO.class);
Pagination pagination = proposalCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@@ -1,6 +1,7 @@
package com.budwk.app.zhgh.democratic.proposal.controller.senior;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
@@ -57,20 +58,32 @@ public class ProposalSeniorDeleteController {
COUNT(p.consolidationIds) > 0 AS isConsolidation,
type.name AS typeName,
tcs.fullName AS sessionName,
tcd.`name` AS delegationName
tcd.`name` AS delegationName,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
ins.variable instanceVariable,
ins.processDefineId instanceProcessDefineId,
t.displayName curTaskName
FROM
proposal_info info
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
LEFT JOIN proposal_type type on type.id = info.typeId
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName
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
$condition
""");
Cnd cnd = Cnd.NEW();
if (StrUtil.isNotBlank(pageForm.getUndertakeUnitId())) {
}
ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm);
cnd.groupBy("info.id");
sql.setCondition(cnd);
Pagination pagination = proposalCommonService.listPageVO(pageForm, sql, ProposalInfoPageVO.class);
Pagination pagination = proposalCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@@ -81,10 +94,6 @@ public class ProposalSeniorDeleteController {
@SLog(tag = "提案管理系统-高级管理-万能删除提案", msg = "删除提案")
@Aop(TransAop.READ_COMMITTED)
public Result delete(String id) {
// dao.clear(ProposalReplyUnit.class, Cnd.where(ProposalReplyUnit::getProposalId, "=", id));
// dao.clear(ProposalSeconded.class, Cnd.where(ProposalReplyUnit::getProposalId, "=", id));
// dao.clear(ProposalInfo.class, Cnd.where(ProposalInfo::getId, "=", id));
// bpmService.deleteInstance(id);
dao.clear(ProposalInfo.class, Cnd.where("id", "=", id));
flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id);
return Result.success();
@@ -0,0 +1,130 @@
package com.budwk.app.zhgh.democratic.proposal.controller.senior;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog;
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.engine.FlowEngine;
import com.budwk.app.flow.entity.ProcessTask;
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.flow.vo.ProcessTaskVO;
import com.budwk.app.zhgh.democratic.proposal.param.ProposalQueryComprehensiveParam;
import com.budwk.app.zhgh.democratic.proposal.service.common.ProposalCommonService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
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.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.ArrayList;
import java.util.List;
@IocBean
@At("/platform/senior/feedback")
@Ok("json:full")
@Api(tags = "提案-高级管理-反馈评分修改")
public class ProposalSeniorFeedBackController {
@Inject
private Dao dao;
@Inject
private FlowEngine flowEngine;
@Inject
private ProposalCommonService proposalCommonService;
@At("")
@Ok("beetl:/platform/zhgh/democratic/proposal/senior/feedback/index.html")
@SaCheckPermission("proposal.senior.feedback")
public void index() {
}
@At
@SaCheckPermission("proposal.senior.feedback")
@ApiOperation(value = "分页列表")
public Result pageData(@Valid @Param("pageForm") ProposalQueryComprehensiveParam pageForm) {
Sql sql = Sqls.create("""
SELECT
info.*,
COUNT(p.consolidationIds) > 0 AS isConsolidation,
type.name AS typeName,
tcs.fullName AS sessionName,
tcd.`name` AS delegationName,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
ins.variable instanceVariable,
ins.processDefineId instanceProcessDefineId,
t.displayName curTaskName,
JSON_UNQUOTE(JSON_EXTRACT(caseTasks.variable, '$.tf_hostUnitName')) AS masterUnitName,
JSON_EXTRACT(caseTasks.variable, '$.tf_helpUnitNames') AS slaveUnitNames
FROM
proposal_info info
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
LEFT JOIN proposal_type type on type.id = info.typeId
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName
LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id
LEFT JOIN (SELECT processInstanceId, MAX(finishTime) AS finishTime FROM wf_process_task WHERE taskName = '9846ab38-40c5-4093-bafc-a9b3b443338b' AND taskState = 20 GROUP BY processInstanceId) latestTasks ON latestTasks.processInstanceId = ins.id
LEFT JOIN wf_process_task caseTasks ON caseTasks.processInstanceId = ins.id AND caseTasks.taskName = '9846ab38-40c5-4093-bafc-a9b3b443338b' AND caseTasks.taskState = 20 AND caseTasks.finishTime = latestTasks.finishTime
LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10
$condition
""");
Cnd cnd = Cnd.NEW();
if (StrUtil.isNotBlank(pageForm.getUndertakeUnitId())) {
}
ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm);
cnd.groupBy("info.id");
sql.setCondition(cnd);
Pagination pagination = proposalCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@SaCheckPermission("proposal.senior.feedback")
@ApiOperation(value = "反馈信息")
public Result info(@Param("instanceId") String instanceId) {
List<ProcessTask> taskList = dao.query(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "=", instanceId)
.and(ProcessTask::getTaskName, "=", "013a7cf9-20dd-4188-a196-53fd595448e5")
.and(ProcessTask::getTaskState, "=", ProcessTaskStateEnum.FINISHED.getCode())
);
List<ProcessTaskVO> doneTaskVos = new ArrayList<>();
for (ProcessTask doneTask : taskList) {
ProcessTaskVO taskVO = flowEngine.processTaskService().findById(doneTask.getId());
doneTaskVos.add(taskVO);
}
return Result.success(doneTaskVos);
}
@At
@SaCheckPermission("proposal.senior.feedback")
@ApiOperation(value = "修改反馈信息")
@SLog(tag = "提案-高级管理-反馈评分修改", msg = "修改反馈信息")
public Result update(@Param("data")String data) {
List<NutMap> tasks = Json.fromJsonAsList(NutMap.class, data);
for (NutMap task : tasks) {
ProcessTask processTask = flowEngine.processTaskService().fetch(task.getInt("id"));
NutMap variable = Json.fromJson(NutMap.class, processTask.getVariable());
variable.setv(FlowConst.TASK_FORM_DATA_PREFIX+"feedback",task.getString("feedback"));
variable.setv(FlowConst.TASK_FORM_DATA_PREFIX+"opinion",task.getString("opinion"));
processTask.setVariable(Json.toJson(variable));
dao.update(processTask,"variable");
}
return Result.success();
}
}
@@ -1,6 +1,7 @@
package com.budwk.app.zhgh.democratic.proposal.controller.senior;
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.service.BaseService;
@@ -8,6 +9,7 @@ import com.budwk.app.zhgh.democratic.proposal.controller.vo.ProposalInfoPageVO;
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
import com.budwk.app.zhgh.democratic.proposal.param.ProposalQueryComprehensiveParam;
import com.budwk.app.zhgh.democratic.proposal.param.ProposalSeniorUpdateTypeParam;
import com.budwk.app.zhgh.democratic.proposal.service.common.ProposalCommonService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.nutz.aop.interceptor.ioc.TransAop;
@@ -33,7 +35,7 @@ public class ProposalSeniorTypeController {
@Inject
private Dao dao;
@Inject
private BaseService baseService;
private ProposalCommonService proposalCommonService;
@At("")
@Ok("beetl:/platform/zhgh/democratic/proposal/senior/type/index.html")
@@ -51,20 +53,36 @@ public class ProposalSeniorTypeController {
COUNT(p.consolidationIds) > 0 AS isConsolidation,
type.name AS typeName,
tcs.fullName AS sessionName,
tcd.`name` AS delegationName
tcd.`name` AS delegationName,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
ins.variable instanceVariable,
ins.processDefineId instanceProcessDefineId,
t.displayName curTaskName,
JSON_UNQUOTE(JSON_EXTRACT(caseTasks.variable, '$.tf_hostUnitName')) AS masterUnitName,
JSON_EXTRACT(caseTasks.variable, '$.tf_helpUnitNames') AS slaveUnitNames
FROM
proposal_info info
LEFT JOIN proposal_consolidation p ON JSON_CONTAINS(p.consolidationIds, JSON_QUOTE(info.id))
LEFT JOIN proposal_type type on type.id = info.typeId
LEFT JOIN teacher_congress_session tcs on tcs.id = info.sessionId
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
LEFT JOIN teacher_congress_delegate tcde on tcde.loginName = info.createUserLoginName
LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id
LEFT JOIN (SELECT processInstanceId, MAX(finishTime) AS finishTime FROM wf_process_task WHERE taskName = '9846ab38-40c5-4093-bafc-a9b3b443338b' AND taskState = 20 GROUP BY processInstanceId) latestTasks ON latestTasks.processInstanceId = ins.id
LEFT JOIN wf_process_task caseTasks ON caseTasks.processInstanceId = ins.id AND caseTasks.taskName = '9846ab38-40c5-4093-bafc-a9b3b443338b' AND caseTasks.taskState = 20 AND caseTasks.finishTime = latestTasks.finishTime
LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10
$condition
""");
Cnd cnd = Cnd.NEW();
if (StrUtil.isNotBlank(pageForm.getUndertakeUnitId())) {
}
ProposalQueryComprehensiveParam.buildSearch(cnd, pageForm);
cnd.groupBy("info.id");
sql.setCondition(cnd);
Pagination pagination = baseService.listPageVO(pageForm, sql, ProposalInfoPageVO.class);
Pagination pagination = proposalCommonService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@@ -1,46 +1,27 @@
package com.budwk.app.zhgh.democratic.proposal.controller.transact;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum;
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.flow.enums.ProcessTaskStateEnum;
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.zhgh.democratic.proposal.controller.vo.ProposalInfoPageVO;
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
import com.budwk.app.zhgh.democratic.proposal.models.ProposalUndertake;
import com.budwk.app.zhgh.democratic.proposal.param.ProposalCommitteeFilingApprovalParam;
import com.budwk.app.zhgh.democratic.proposal.param.ProposalSearchParam;
import com.budwk.app.zhgh.democratic.proposal.service.ProposalCommitteeFilingService;
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.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.IocBean;
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.Map;
@IocBean
@At("/platform/proposal/committeeFiling")
@@ -59,7 +40,7 @@ public class ProposalCommitteeFilingController {
}
@At
@SaCheckPermission("proposal.delegation")
@SaCheckPermission("proposal.committeeFiling")
@ApiOperation("分页列表")
public Result pageData(@Valid ProposalSearchParam pageForm,boolean approval) {
Sql sql = Sqls.create("""
@@ -98,8 +79,9 @@ public class ProposalCommitteeFilingController {
""");
Cnd cnd = Cnd.NEW();
cnd.and("t.taskName", "=", "9846ab38-40c5-4093-bafc-a9b3b443338b");
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
}
if (approval) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
} else {
@@ -99,7 +99,10 @@ public class ProposalDelegationController {
""");
Cnd cnd = Cnd.NEW();
cnd.and("t.taskName", "=", "93d5ba64-8220-4e62-9783-83422f474b36");
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
}
if (approval) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
@@ -1,30 +1,24 @@
package com.budwk.app.zhgh.democratic.proposal.controller.transact;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.budwk.app.base.annotation.SLog;
import cn.hutool.json.JSONObject;
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.base.service.BaseService;
import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum;
import com.budwk.app.bpm.service.BpmService;
import com.budwk.app.flow.entity.ProcessTask;
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
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.controller.vo.ProposalInfoPageVO;
import com.budwk.app.zhgh.democratic.proposal.param.ProposalFeedbackEvaluationParam;
import com.budwk.app.zhgh.democratic.proposal.param.ProposalSearchParam;
import com.budwk.app.zhgh.democratic.proposal.service.ProposalFeedbackEvaluationService;
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.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.IocBean;
import org.nutz.mvc.annotation.At;
@@ -42,9 +36,9 @@ import java.util.List;
public class ProposalFeedbackEvaluationController {
@Inject
private ProposalCommonService proposalCommonService;
private Dao dao;
@Inject
private ProposalFeedbackEvaluationService proposalFeedbackEvaluationService;
private ProposalCommonService proposalCommonService;
@At("")
@Ok("beetl:/platform/zhgh/democratic/proposal/transact/feedbackEvaluation/index.html")
@@ -110,4 +104,18 @@ public class ProposalFeedbackEvaluationController {
return Result.success(pagination);
}
@At
@SaCheckPermission("proposal.feedbackEvaluation")
@ApiOperation("获取立案信息")
public Result caseInfo(@Param("instId") String instId) {
ProcessTask task = dao.fetch(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "=", instId)
.and(ProcessTask::getTaskName, "=", "9846ab38-40c5-4093-bafc-a9b3b443338b")
.and(ProcessTask::getTaskState, "=", ProcessTaskStateEnum.FINISHED.getCode())
.desc(ProcessTask::getCreatedAt)
);
JSONObject variable = JSONUtil.parseObj(task.getVariable());
return Result.success(variable);
}
}
@@ -86,7 +86,7 @@ public class ProposalUnderTakeReplyController {
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("t.taskName", "in", List.of("85cf23da-2dd5-4007-a1e9-bd9bfddc68f0", "c9a1586e-272b-41b8-b438-0be9f9e3781d"));
cnd.and("t.taskName", "in", List.of("85cf23da-2dd5-4007-a1e9-bd9bfddc68f0", "c9a1586e-272b-41b8-b438-0be9f9e3781d","5ed5a1be-0cd3-4b47-a0d5-238d53b61f34"));
if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) {
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
@@ -1,13 +1,10 @@
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.StrUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.BpmProcessConstant;
import com.budwk.app.base.result.Result;
import com.budwk.app.bpm.service.BpmService;
import com.budwk.app.flow.constant.FlowConst;
import com.budwk.app.flow.engine.FlowEngine;
import com.budwk.app.flow.entity.ProcessInstance;
@@ -20,6 +17,7 @@ import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
import com.budwk.app.zhgh.democratic.proposal.service.ProposalWriteService;
import com.budwk.app.zhgh.democratic.suggestionBox.models.SuggestionBox;
import com.budwk.app.zhgh.democratic.teachercongress.delegate.models.Teacher_congress_delegate;
import com.budwk.app.zhgh.democratic.teachercongress.prepare.models.Teacher_congress_session;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@@ -68,7 +66,7 @@ public class ProposalWriteController {
@SLog(tag = "提案管理系统-我的提案", msg = "保存提案")
public Result save(@Param("info") ProposalInfo proposalInfo) {
if (StrUtil.isBlank(proposalInfo.getCode())) {
proposalInfo.setCode(proposalWriteService.generateProposalCode(proposalInfo.getSessionId(),proposalInfo.getDelegationId()));
proposalInfo.setCode(proposalWriteService.generateProposalCode(proposalInfo.getSessionId(), proposalInfo.getDelegationId()));
}
dao.insertOrUpdate(proposalInfo);
return Result.success(proposalInfo);
@@ -81,7 +79,7 @@ public class ProposalWriteController {
@SLog(tag = "提案管理系统-我的提案", msg = "提交提案")
public Result submit(@Param("info") ProposalInfo proposalInfo) {
if (StrUtil.isBlank(proposalInfo.getCode())) {
proposalInfo.setCode(proposalWriteService.generateProposalCode(proposalInfo.getSessionId(),proposalInfo.getDelegationId()));
proposalInfo.setCode(proposalWriteService.generateProposalCode(proposalInfo.getSessionId(), proposalInfo.getDelegationId()));
}
dao.insertOrUpdate(proposalInfo);
@@ -89,6 +87,8 @@ public class ProposalWriteController {
Dict args = Dict.create();
args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode());
args.set(FlowConst.FORM_DATA, proposalInfo);
args.set(FlowConst.TASK_FORM_DATA_PREFIX + "source", proposalInfo.getSource());
ProcessInstance instance = flowEngine.startProcessInstanceByKey("JDHTA", proposalInfo.getId(), SecurityUtil.getUserId(), args);
// 自动完成第一个申请任务
@@ -105,12 +105,14 @@ public class ProposalWriteController {
@Aop(TransAop.READ_COMMITTED)
@ApiOperation("重新提交提案")
@SLog(tag = "提案管理系统-我的提案", msg = "重新提交提案")
public Result submitAgain(@Param("data") SuggestionBox suggestionBox, @Param("taskId") Long taskId) {
dao.insertOrUpdate(suggestionBox);
public Result submitAgain(@Param("info") ProposalInfo proposalInfo, @Param("taskId") Long taskId) {
dao.insertOrUpdate(proposalInfo);
Dict dict = Dict.create();
dict.set(FlowConst.PROCESS_TASK_ID_KEY, taskId);
dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.RE_APPLY.getCode());
dict.set(FlowConst.TASK_FORM_DATA_PREFIX + "source", proposalInfo.getSource());
flowCommonService.executeTask(dict);
return Result.success();
}
@@ -143,4 +145,13 @@ public class ProposalWriteController {
return Result.success().addData(sysDicts);
}
@At
@SaCheckPermission("proposal.write")
@ApiOperation("检查提案撰写时间")
public Result checkWriteTime(@Valid String sessionId) {
Teacher_congress_session session = dao.fetch(Teacher_congress_session.class, sessionId);
boolean flag = session.getCollectStartTime().getTime() < System.currentTimeMillis() && System.currentTimeMillis() < session.getCollectEndTime().getTime();
return Result.success().addData(flag);
}
}
@@ -0,0 +1,57 @@
package com.budwk.app.zhgh.democratic.proposal.handler;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.flow.constant.FlowConst;
import com.budwk.app.flow.engine.AssignmentHandler;
import com.budwk.app.flow.engine.core.Execution;
import com.budwk.app.flow.engine.core.ServiceContext;
import com.budwk.app.flow.engine.model.TaskModel;
import com.budwk.app.sys.models.Sys_role;
import com.budwk.app.sys.models.Sys_user_role;
import com.budwk.app.sys.services.SysRoleService;
import com.budwk.app.sys.services.SysUserService;
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.json.Json;
import org.nutz.lang.util.NutMap;
import java.util.List;
/**
* 提案代表团团长
*/
public class ProposalDelegationAssignmentHandler implements AssignmentHandler {
@Override
public List<String> assign(TaskModel model, Execution execution) {
NutMap variable = Json.fromJson(NutMap.class, execution.getProcessInstance().getVariable());
ProposalInfo info = variable.getAs(FlowConst.FORM_DATA, ProposalInfo.class);
String sessionId = info.getSessionId();
String delegationId = info.getDelegationId();
SysRoleService sysRoleService = ServiceContext.find(SysRoleService.class);
Sys_role role = sysRoleService.getByCode(RoleConstant.TEACHER_CONGRESS_DELEGATION_HEAD);
Sys_user_role user_role = ServiceContext.find(Dao.class).fetch(Sys_user_role.class, Cnd.where(Sys_user_role::getRoleId, "=", role.getId())
.and(Sys_user_role::getTcDelegationId, "=", delegationId)
.and(Sys_user_role::getTcSessionId, "=", sessionId));
if(user_role==null){
throw new RuntimeException("您所在的代表团没有设置团长,无法流转到下一步,请联系校工会进行设置。");
}
return List.of(user_role.getUserId());
}
@Override
public String getMessage() {
return "当前代表代表团团长";
}
@Override
public int getOrder() {
return 210;
}
}
@@ -11,12 +11,10 @@ import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.util.NutMap;
import java.util.List;
public class ProposalSchoolLeaderCandidateHandler implements CandidateHandler {
@Override
public List<Candidate> handle(TaskModel model) {
Dao dao = ServiceContext.find(Dao.class);
@@ -0,0 +1,52 @@
package com.budwk.app.zhgh.democratic.proposal.handler;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.flow.constant.FlowConst;
import com.budwk.app.flow.engine.AssignmentHandler;
import com.budwk.app.flow.engine.core.Execution;
import com.budwk.app.flow.engine.core.ServiceContext;
import com.budwk.app.flow.engine.model.TaskModel;
import com.budwk.app.sys.models.Sys_role;
import com.budwk.app.sys.models.Sys_user_role;
import com.budwk.app.sys.services.SysRoleService;
import com.budwk.app.zhgh.democratic.proposal.models.ProposalInfo;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.json.Json;
import org.nutz.lang.util.NutMap;
import java.util.List;
/**
* 提案委员会主任
*/
public class ProposalWyhAssignmentHandler implements AssignmentHandler {
@Override
public List<String> assign(TaskModel model, Execution execution) {
NutMap variable = Json.fromJson(NutMap.class, execution.getProcessInstance().getVariable());
ProposalInfo info = variable.getAs(FlowConst.FORM_DATA, ProposalInfo.class);
String sessionId = info.getSessionId();
SysRoleService sysRoleService = ServiceContext.find(SysRoleService.class);
Sys_role role = sysRoleService.getByCode(RoleConstant.PROPOSAL_COMMITTEE_DIRECTOR);
Sys_user_role user_role = ServiceContext.find(Dao.class).fetch(Sys_user_role.class, Cnd.where(Sys_user_role::getRoleId, "=", role.getId()).and(Sys_user_role::getTcSessionId, "=", sessionId));
if (user_role == null) {
throw new RuntimeException("没有设置提案委员会主任,无法流转到下一步,请联系校工会进行设置。");
}
return List.of(user_role.getUserId());
}
@Override
public String getMessage() {
return "教代会提案委员会主任";
}
@Override
public int getOrder() {
return 220;
}
}
@@ -1,5 +1,6 @@
package com.budwk.app.zhgh.democratic.proposal.interceptor;
import com.budwk.app.flow.constant.FlowConst;
import com.budwk.app.flow.engine.FlowInterceptor;
import com.budwk.app.flow.engine.core.Execution;
import com.budwk.app.flow.engine.core.ServiceContext;
@@ -20,7 +21,7 @@ import java.util.List;
/**
* 提案委员会立案后置拦截器
*/
public class ProposalUnitNameInterceptor implements FlowInterceptor {
public class ProposalCaseFilingInterceptor implements FlowInterceptor {
@Override
@Aop(TransAop.READ_COMMITTED)
public void intercept(Execution execution) {
@@ -35,7 +36,7 @@ public class ProposalUnitNameInterceptor implements FlowInterceptor {
// 单位名称
variable.setv("unitName", taskActor.getActorUnitName());
variable.setv("unitId",taskActor.getActorUnitId());
variable.setv("unitId", taskActor.getActorUnitId());
// 是否主办
variable.setv("isMaster", task.getTaskName().equals("85cf23da-2dd5-4007-a1e9-bd9bfddc68f0"));
@@ -46,7 +47,7 @@ public class ProposalUnitNameInterceptor implements FlowInterceptor {
// 更新立案结果
ProcessInstance processInstance = execution.getProcessInstance();
String businessNo = processInstance.getBusinessNo();
dao.update(ProposalInfo.class, Chain.make("caseFilingResult", execution.getArgs().getStr("")), Cnd.where(ProposalInfo::getId, "=", businessNo));
dao.update(ProposalInfo.class, Chain.make("caseFilingResult", execution.getArgs().getStr(FlowConst.TASK_FORM_DATA_PREFIX + "caseFilingResult")), Cnd.where(ProposalInfo::getId, "=", businessNo));
dao.update(processTaskList, "variable");
}
@@ -1,6 +1,8 @@
package com.budwk.app.zhgh.democratic.suggestionBox.controller;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.flow.engine.FlowEngine;
@@ -24,7 +26,7 @@ import org.nutz.mvc.annotation.Param;
@IocBean
@At("/platform/suggestionBox/mine")
@Ok("json:full")
@Api("意见箱-我的")
@Api("建言献策-我的申请")
public class SuggestionBoxMineController {
@Inject
@@ -36,15 +38,14 @@ public class SuggestionBoxMineController {
@At("")
@Ok("beetl:/platform/zhgh/democratic/suggestionBox/mine/index.html")
@SaCheckLogin
@SaCheckPermission("suggestionBox.mine")
public void index() {
}
@At
@SaCheckLogin
public Result pageData(Integer pageNumber, Integer pageSize) {
@SaCheckPermission("suggestionBox.mine")
public Result pageData(Integer pageNumber, Integer pageSize, String title, Integer year) {
Sql sql = Sqls.create("""
SELECT
info.id,
@@ -79,6 +80,10 @@ public class SuggestionBoxMineController {
""");
Cnd cnd = Cnd.NEW();
cnd.and("info.createdBy", "=", SecurityUtil.getUserId());
if (StrUtil.isNotBlank(title)) {
cnd.where().andLike("info.title", title);
}
cnd.andEX("YEAR(info.submitTime)", "=", year);
cnd.desc("info.submitTime");
sql.setCondition(cnd);
Pagination<NutMap> pagination = suggestionBoxService.listPageMap(pageNumber, pageSize, sql);
@@ -86,9 +91,10 @@ public class SuggestionBoxMineController {
}
@At
@SaCheckLogin
@SaCheckPermission("suggestionBox.mine")
@Aop(TransAop.READ_COMMITTED)
@ApiOperation("删除")
@SLog(tag = "建言献策-我的申请", msg = "删除")
public Result delete(@Param("id") String id) {
suggestionBoxService.delete(id);
flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id);
@@ -1,7 +1,9 @@
package com.budwk.app.zhgh.democratic.suggestionBox.controller;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.lang.Dict;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.result.Result;
import com.budwk.app.flow.constant.FlowConst;
import com.budwk.app.flow.engine.FlowEngine;
@@ -27,7 +29,7 @@ import java.util.List;
@IocBean
@At("/platform/suggestionBox/write")
@Ok("json:full")
@Api("意见箱-撰写")
@Api("建言献策-填写申请")
public class SuggestionBoxWriteController {
@Inject
@@ -39,14 +41,15 @@ public class SuggestionBoxWriteController {
@At("")
@Ok("beetl:/platform/zhgh/democratic/suggestionBox/write/index.html")
@SaCheckLogin
@SaCheckPermission("suggestionBox.write")
public void index() {
}
@At
@SaCheckLogin
@SaCheckPermission("suggestionBox.write")
@ApiOperation("保存申请")
@SLog(tag = "建言献策-填写申请", msg = "保存申请")
public Result save(@Param("data") SuggestionBox suggestionBox) {
dao.insertOrUpdate(suggestionBox);
return Result.success();
@@ -54,8 +57,10 @@ public class SuggestionBoxWriteController {
@At
@SaCheckLogin
@SaCheckPermission("suggestionBox.write")
@ApiOperation("提交申请")
@Aop(TransAop.READ_COMMITTED)
@SLog(tag = "建言献策-填写申请", msg = "提交申请")
public Result submit(@Param("data") SuggestionBox suggestionBox) {
dao.insertOrUpdate(suggestionBox);
// 开启流程实例
@@ -73,9 +78,10 @@ public class SuggestionBoxWriteController {
}
@At
@SaCheckLogin
@SaCheckPermission("suggestionBox.write")
@ApiOperation("重新提交申请")
@Aop(TransAop.READ_COMMITTED)
@SLog(tag = "建言献策-填写申请", msg = "重新提交申请")
public Result submitAgain(@Param("data") SuggestionBox suggestionBox, @Param("taskId") Long taskId) {
dao.insertOrUpdate(suggestionBox);
@@ -86,14 +92,12 @@ public class SuggestionBoxWriteController {
return Result.success();
}
@At
@SaCheckLogin
@SaCheckPermission("suggestionBox.write")
@ApiOperation("获取申请信息")
public Result info(@Param("id") String id) {
SuggestionBox box = dao.fetch(SuggestionBox.class, id);
return Result.success(box);
}
}
@@ -1,20 +1,35 @@
package com.budwk.app.zhgh.democratic.teachercongress.delegate.controller;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
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.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.model.ExcelImportRes;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.base.utils.CommonDownloadUtil;
import com.budwk.app.sys.models.Sys_role;
import com.budwk.app.sys.models.Sys_user_role;
import com.budwk.app.sys.services.SysRoleService;
import com.budwk.app.sys.services.SysUserService;
import com.budwk.app.sys.views.View_user;
import com.budwk.app.zhgh.democratic.teachercongress.delegate.mode.TeacherCongressImportExcel;
import com.budwk.app.zhgh.democratic.teachercongress.delegate.models.Teacher_congress_delegate;
import com.budwk.app.zhgh.democratic.teachercongress.delegate.param.*;
import com.budwk.app.zhgh.democratic.teachercongress.delegate.service.TeacherCongressDelegateService;
import com.budwk.app.zhgh.democratic.teachercongress.delegation.models.Teacher_congress_delegation;
import com.budwk.app.zhgh.democratic.teachercongress.delegation.models.Teacher_congress_delegation_unit;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.*;
import org.nutz.dao.sql.Sql;
@@ -23,14 +38,17 @@ import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.AdaptBy;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import org.nutz.mvc.upload.TempFile;
import org.nutz.mvc.upload.UploadAdaptor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.*;
import java.util.stream.Collectors;
/**
* 代表高级管理
@@ -38,13 +56,12 @@ import java.util.Optional;
@IocBean
@At("/platform/teacherCongress/delegate/manage")
@Ok("json:full")
@Slf4j
public class TeacherCongressDelegateManageController {
@Inject
private Dao dao;
@Inject
private BaseService baseService;
@Inject
private SysUserService sysUserService;
@Inject
private SysRoleService sysRoleService;
@@ -285,4 +302,140 @@ public class TeacherCongressDelegateManageController {
sysRoleService.clearCache();
return Result.success();
}
@At
@Ok("void")
@SaCheckPermission("tc.delegate.manage")
@ApiOperation("下载模版")
public void downloadTemplate(HttpServletResponse response, String sessionId) {
List<ExcelExportEntity> entities = new ArrayList<>();
entities.add(new ExcelExportEntity("工号", "loginname", 20));
entities.add(new ExcelExportEntity("姓名", "username", 20));
entities.add(new ExcelExportEntity("代表团", "delegationName", 20));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entities, Collections.emptyList());
Sheet sheet = workbook.getSheetAt(0);
DataValidationHelper helper = sheet.getDataValidationHelper();
// 添加代表团下拉列
List<Teacher_congress_delegation> delegations = dao.query(Teacher_congress_delegation.class, Cnd.where(Teacher_congress_delegation::getSessionId, "=", sessionId).asc(Teacher_congress_delegation::getCode));
String[] delegationNames = delegations.stream().map(Teacher_congress_delegation::getName).toArray(String[]::new);
CellRangeAddressList delegationAddressList = new CellRangeAddressList(0, 65535, 2, 2);
DataValidationConstraint dataValidationConstraint = helper.createExplicitListConstraint(delegationNames);
DataValidation validation = helper.createValidation(dataValidationConstraint, delegationAddressList);
sheet.addValidationData(validation);
CommonDownloadUtil.download("教代会代表导入模版.xlsx", workbook, response);
}
@At
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("tc.delegate.manage")
@AdaptBy(type = UploadAdaptor.class, args = {"ioc:fileUpload"})
public Result importByExcel(@Param("file") TempFile tempFile, @Param("sessionId") String sessionId) {
// 读取数据
List<TeacherCongressImportExcel> excelList = ExcelImportUtil.importExcel(tempFile.getFile(), TeacherCongressImportExcel.class, new ImportParams());
// 查询用户
List<String> loginNames = excelList.stream().map(TeacherCongressImportExcel::getLoginName).filter(StrUtil::isNotBlank).collect(Collectors.toList());
List<View_user> sysUsers = dao.query(View_user.class, Cnd.where(View_user::getLoginname, "in", loginNames));
// 查询当前届次的代表
List<Teacher_congress_delegate> delegates = dao.query(Teacher_congress_delegate.class, Cnd.where(Teacher_congress_delegate::getSessionId, "=", sessionId));
// 查询当前届次的代表团
List<Teacher_congress_delegation> delegations = dao.query(Teacher_congress_delegation.class, Cnd.where(Teacher_congress_delegation::getSessionId, "=", sessionId));
Map<String, Teacher_congress_delegation> delegationMap = delegations.stream().collect(Collectors.toMap(Teacher_congress_delegation::getName, v -> v));
// 创建结果集
ExcelImportRes<TeacherCongressImportExcel> excelImportRes = new ExcelImportRes<>();
excelImportRes.setTotalRecords(excelList.size());
for (int i = 0; i < excelList.size(); i++) {
TeacherCongressImportExcel excel = excelList.get(i);
if (StrUtil.isBlank(excel.getLoginName())) {
excel.setErrInfo("工号为空", i + 1);
continue;
}
// 不能在excel里重复
if (excelList.stream().filter(s -> s.getLoginName().equals(excel.getLoginName())).count() > 1) {
excel.setErrInfo("重复数据", i + 1);
}
View_user user = sysUsers.stream().filter(s -> s.getLoginname().equals(excel.getLoginName())).findFirst().orElse(null);
if (user == null) {
excel.setErrInfo("无此用户", i + 1);
continue;
}
if (delegates.stream().anyMatch(s -> s.getUserId().equals(user.getId()))) {
excel.setErrInfo("该用户已设置为代表", i + 1);
continue;
}
if (StrUtil.isBlank(excel.getDelegationName())) {
excel.setErrInfo("代表团为空", i + 1);
continue;
}
if (!delegationMap.containsKey(excel.getDelegationName())) {
excel.setErrInfo("无此代表团", i + 1);
continue;
}
Sql sql = Sqls.queryEntity("""
SELECT
t1.id as userId,
t1.username AS userName,
t1.loginName AS loginName,
t1.sex,
TIMESTAMPDIFF(YEAR,t1.birthday,CURDATE()) AS age,
t1.mobile,
t1.unitId,
t2.NAME AS unitName,
t3.id AS unionId,
t3.NAME AS unionName
FROM
`sys_user` t1
LEFT JOIN sys_unit t2 ON t2.id = t1.unitId
LEFT JOIN sys_union t3 ON t3.id = t2.unionId
WHERE t1.id = (@userId)
""");
sql.setParam("userId", user.getId());
sql.setCallback(Sqls.callback.entity());
sql.setEntity(dao.getEntity(Teacher_congress_delegate.class));
dao.execute(sql);
Teacher_congress_delegate delegate = (Teacher_congress_delegate) sql.getResult();
delegate.setDelegationId(delegationMap.get(excel.getDelegationName()).getId());
delegate.setSessionId(sessionId);
// 正式代表
delegate.setRoleId("72e24b5b4c4f4e90a6641e6af8487e42");
try {
dao.insert(delegate);
dao.insert("sys_user_role", Chain.make("userId", delegate.getUserId()).add("roleId", delegate.getRoleId()).add("tcSessionId", sessionId).add("tcDelegationId", delegate.getDelegationId()));
sysUserService.clearCache();
} catch (Exception e) {
log.error("导入代表失败:{}", e.getMessage());
excel.setErrInfo("添加失败", i + 1);
}
}
// 添加错误记录
excelImportRes.setErrorDetails(excelList.stream().filter(s -> StrUtil.isNotBlank(s.getErrMsg())).collect(Collectors.toList()));
excelImportRes.setFailedCount(excelImportRes.getErrorDetails().size());
return Result.success(excelImportRes);
}
}
@@ -6,6 +6,7 @@ import com.budwk.app.base.result.Result;
import com.budwk.app.zhgh.democratic.teachercongress.delegate.models.Teacher_congress_delegate;
import com.budwk.app.zhgh.democratic.teachercongress.delegate.param.TeacherCongressDelegateManagePageParam;
import com.budwk.app.zhgh.democratic.teachercongress.delegate.service.TeacherCongressDelegateService;
import io.swagger.annotations.ApiOperation;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
@@ -49,13 +50,15 @@ public class TeacherCongressDelegateReadController {
@At
@Ok("void")
@SaCheckPermission("tc.delegate.read")
@ApiOperation("导出xlsx")
public void exportXlsx(TeacherCongressDelegateManagePageParam param, HttpServletResponse response) {
teacherDelegateService.exportXlsx(param, response);
}
@At
@Ok("void")
@SaCheckPermission("tc.delegate.read.exportDocx")
@SaCheckPermission("tc.delegate.read")
@ApiOperation("导出docx")
public void exportDocx(TeacherCongressDelegateManagePageParam param, HttpServletResponse response){
teacherDelegateService.exportDocx(param, response);
}
@@ -0,0 +1,24 @@
package com.budwk.app.zhgh.democratic.teachercongress.delegate.mode;
import cn.afterturn.easypoi.excel.annotation.Excel;
import com.budwk.app.base.model.ExcelImportError;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 教代会代表导入模板
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class TeacherCongressImportExcel extends ExcelImportError {
@Excel(name = "工号")
private String loginName;
@Excel(name = "姓名")
private String userName;
@Excel(name = "代表团")
private String delegationName;
}