diff --git a/src/main/java/com/budwk/app/flow/controller/FlowTodoCenter.java b/src/main/java/com/budwk/app/flow/controller/FlowTodoCenter.java index f268df55..4cf7d75a 100644 --- a/src/main/java/com/budwk/app/flow/controller/FlowTodoCenter.java +++ b/src/main/java/com/budwk/app/flow/controller/FlowTodoCenter.java @@ -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, diff --git a/src/main/java/com/budwk/app/flow/enums/ProcessInstanceStateEnum.java b/src/main/java/com/budwk/app/flow/enums/ProcessInstanceStateEnum.java index 4dd1d89c..79aff22d 100644 --- a/src/main/java/com/budwk/app/flow/enums/ProcessInstanceStateEnum.java +++ b/src/main/java/com/budwk/app/flow/enums/ProcessInstanceStateEnum.java @@ -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; } } diff --git a/src/main/java/com/budwk/app/sys/controller/SysRoleController.java b/src/main/java/com/budwk/app/sys/controller/SysRoleController.java index f34b4297..f21d53e0 100644 --- a/src/main/java/com/budwk/app/sys/controller/SysRoleController.java +++ b/src/main/java/com/budwk/app/sys/controller/SysRoleController.java @@ -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 { diff --git a/src/main/java/com/budwk/app/sys/controller/SysUnitController.java b/src/main/java/com/budwk/app/sys/controller/SysUnitController.java index 9e25c885..64895c29 100644 --- a/src/main/java/com/budwk/app/sys/controller/SysUnitController.java +++ b/src/main/java/com/budwk/app/sys/controller/SysUnitController.java @@ -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> treeList = TreeUtil.build(nodeList, "1"); + List> treeList = TreeUtil.build(nodeList, StrUtil.blankToDefault(pid, "1")); // NutMap menuMap = NutMap.NEW(); // for (Sys_unit unit : list) { diff --git a/src/main/java/com/budwk/app/sys/controller/message/SysMessageSender.java b/src/main/java/com/budwk/app/sys/controller/message/SysMessageSender.java new file mode 100644 index 00000000..923a07d9 --- /dev/null +++ b/src/main/java/com/budwk/app/sys/controller/message/SysMessageSender.java @@ -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(); + +} diff --git a/src/main/java/com/budwk/app/sys/controller/message/SysSmsMessageSender.java b/src/main/java/com/budwk/app/sys/controller/message/SysSmsMessageSender.java new file mode 100644 index 00000000..863e012c --- /dev/null +++ b/src/main/java/com/budwk/app/sys/controller/message/SysSmsMessageSender.java @@ -0,0 +1,4 @@ +package com.budwk.app.sys.controller.message; + +public class SysSmsMessageSender { +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/GrassrootsCongressMaterialsAuditController.java b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/GrassrootsCongressMaterialsAuditController.java deleted file mode 100644 index 63ee556b..00000000 --- a/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/GrassrootsCongressMaterialsAuditController.java +++ /dev/null @@ -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(); - } - - -} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/GrassrootsCongressMaterialsController.java b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/GrassrootsCongressMaterialsController.java deleted file mode 100644 index 1780a715..00000000 --- a/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/GrassrootsCongressMaterialsController.java +++ /dev/null @@ -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); - } - - -} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/material/GrassrootsCongressMaterialApprovalController.java b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/material/GrassrootsCongressMaterialApprovalController.java new file mode 100644 index 00000000..99c7cff9 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/material/GrassrootsCongressMaterialApprovalController.java @@ -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 pageVO = grassrootsCongressService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pageVO); + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/material/GrassrootsCongressMaterialCommonController.java b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/material/GrassrootsCongressMaterialCommonController.java new file mode 100644 index 00000000..d80437b8 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/material/GrassrootsCongressMaterialCommonController.java @@ -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); + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/material/GrassrootsCongressMaterialMineController.java b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/material/GrassrootsCongressMaterialMineController.java new file mode 100644 index 00000000..1e02b91a --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/material/GrassrootsCongressMaterialMineController.java @@ -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 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 query = dao.query(GrassrootsCongressMeetingInfo.class, + Cnd.where("YEAR(createTime)", "=", year).and("fullName", "is not", null).groupBy("fullName")); + if (Lang.isNotEmpty(query)) { + List list = query.stream().map(GrassrootsCongressMeetingInfo::getFullName).toList(); + return Result.success(list); + } + return Result.success(); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/material/GrassrootsCongressMaterialStatisticsController.java b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/material/GrassrootsCongressMaterialStatisticsController.java new file mode 100644 index 00000000..3f26df79 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/material/GrassrootsCongressMaterialStatisticsController.java @@ -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 pagination = grassrootsCongressService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/material/GrassrootsCongressMaterialWriteController.java b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/material/GrassrootsCongressMaterialWriteController.java new file mode 100644 index 00000000..57ce1443 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/material/GrassrootsCongressMaterialWriteController.java @@ -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 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 list = sql.getList(NutMap.class); + return Result.success(list); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/meeting/GrassrootsCongressMeetingApprovalController.java b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/meeting/GrassrootsCongressMeetingApprovalController.java index 08eda20d..2d4e3c12 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/meeting/GrassrootsCongressMeetingApprovalController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/meeting/GrassrootsCongressMeetingApprovalController.java @@ -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())) { diff --git a/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/meeting/GrassrootsCongressMeetingStatisticsController.java b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/meeting/GrassrootsCongressMeetingStatisticsController.java index 576e1a18..b7b34509 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/meeting/GrassrootsCongressMeetingStatisticsController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/meeting/GrassrootsCongressMeetingStatisticsController.java @@ -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 pagination = grassrootsCongressService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); diff --git a/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/meeting/GrassrootsCongressMeetingWriteController.java b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/meeting/GrassrootsCongressMeetingWriteController.java index f2258ab8..bfadd1cc 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/meeting/GrassrootsCongressMeetingWriteController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/controller/meeting/GrassrootsCongressMeetingWriteController.java @@ -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(); diff --git a/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/models/GrassrootsCongressMaterialsInfo.java b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/models/GrassrootsCongressMaterialsInfo.java index 43d5c7ed..d2c178bb 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/models/GrassrootsCongressMaterialsInfo.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/grassrootscongress/models/GrassrootsCongressMaterialsInfo.java @@ -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 files; + @Column @Comment("创建时间") @ColDefine(type = ColType.DATETIME) - private Date createdDate; + private Date createdTime; } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/config/ProposalConfigTypeController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/config/ProposalConfigTypeController.java index b539b6ad..f020cefe 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/config/ProposalConfigTypeController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/config/ProposalConfigTypeController.java @@ -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){ diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryUnitReplyController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryUnitReplyController.java index d68a30f9..8b390f1a 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryUnitReplyController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/query/ProposalQueryUnitReplyController.java @@ -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 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 slaveUnitTasks = dao.query(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "in", instIds) diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/senior/ProposalSeniorBasicController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/senior/ProposalSeniorBasicController.java index 0c1325b2..ee683f93 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/senior/ProposalSeniorBasicController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/senior/ProposalSeniorBasicController.java @@ -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); } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/senior/ProposalSeniorDeleteController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/senior/ProposalSeniorDeleteController.java index 30350717..0bae8d69 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/senior/ProposalSeniorDeleteController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/senior/ProposalSeniorDeleteController.java @@ -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(); diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/senior/ProposalSeniorFeedBackController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/senior/ProposalSeniorFeedBackController.java new file mode 100644 index 00000000..2c00d22f --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/senior/ProposalSeniorFeedBackController.java @@ -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 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 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 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(); + } + + +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/senior/ProposalSeniorTypeController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/senior/ProposalSeniorTypeController.java index 0b155a5f..131afc5b 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/senior/ProposalSeniorTypeController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/senior/ProposalSeniorTypeController.java @@ -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); } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalCommitteeFilingController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalCommitteeFilingController.java index c80262ca..3b74ce67 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalCommitteeFilingController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalCommitteeFilingController.java @@ -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 { diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalDelegationController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalDelegationController.java index d1ba58f9..3faa8e0f 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalDelegationController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalDelegationController.java @@ -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())); diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalFeedbackEvaluationController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalFeedbackEvaluationController.java index 54dd16ad..2a8c4026 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalFeedbackEvaluationController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalFeedbackEvaluationController.java @@ -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); + } + + } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalUnderTakeReplyController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalUnderTakeReplyController.java index 6d22d06b..0b6f2c7f 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalUnderTakeReplyController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalUnderTakeReplyController.java @@ -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())); diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalWriteController.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalWriteController.java index 1c92a42b..3bb7201b 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalWriteController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/controller/transact/ProposalWriteController.java @@ -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); + } + } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalDelegationAssignmentHandler.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalDelegationAssignmentHandler.java new file mode 100644 index 00000000..3c65c951 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalDelegationAssignmentHandler.java @@ -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 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; + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalSchoolLeaderCandidateHandler.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalSchoolLeaderCandidateHandler.java index ba5195f1..16e0fe52 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalSchoolLeaderCandidateHandler.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalSchoolLeaderCandidateHandler.java @@ -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 handle(TaskModel model) { Dao dao = ServiceContext.find(Dao.class); diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalWyhAssignmentHandler.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalWyhAssignmentHandler.java new file mode 100644 index 00000000..e68a2da6 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/handler/ProposalWyhAssignmentHandler.java @@ -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 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; + } + +} diff --git a/src/main/java/com/budwk/app/zhgh/democratic/proposal/interceptor/ProposalUnitNameInterceptor.java b/src/main/java/com/budwk/app/zhgh/democratic/proposal/interceptor/ProposalCaseFilingInterceptor.java similarity index 84% rename from src/main/java/com/budwk/app/zhgh/democratic/proposal/interceptor/ProposalUnitNameInterceptor.java rename to src/main/java/com/budwk/app/zhgh/democratic/proposal/interceptor/ProposalCaseFilingInterceptor.java index 3fbb4367..70d009f7 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/proposal/interceptor/ProposalUnitNameInterceptor.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/proposal/interceptor/ProposalCaseFilingInterceptor.java @@ -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"); } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionBoxMineController.java b/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionBoxMineController.java index f8abefab..e24dfc9e 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionBoxMineController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionBoxMineController.java @@ -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 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); diff --git a/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionBoxWriteController.java b/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionBoxWriteController.java index 1d34b14f..c7a54f68 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionBoxWriteController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/suggestionBox/controller/SuggestionBoxWriteController.java @@ -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); } - } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/delegate/controller/TeacherCongressDelegateManageController.java b/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/delegate/controller/TeacherCongressDelegateManageController.java index 8f17dff2..010ac794 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/delegate/controller/TeacherCongressDelegateManageController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/delegate/controller/TeacherCongressDelegateManageController.java @@ -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 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 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 excelList = ExcelImportUtil.importExcel(tempFile.getFile(), TeacherCongressImportExcel.class, new ImportParams()); + + // 查询用户 + List loginNames = excelList.stream().map(TeacherCongressImportExcel::getLoginName).filter(StrUtil::isNotBlank).collect(Collectors.toList()); + List sysUsers = dao.query(View_user.class, Cnd.where(View_user::getLoginname, "in", loginNames)); + + // 查询当前届次的代表 + List delegates = dao.query(Teacher_congress_delegate.class, Cnd.where(Teacher_congress_delegate::getSessionId, "=", sessionId)); + + // 查询当前届次的代表团 + List delegations = dao.query(Teacher_congress_delegation.class, Cnd.where(Teacher_congress_delegation::getSessionId, "=", sessionId)); + Map delegationMap = delegations.stream().collect(Collectors.toMap(Teacher_congress_delegation::getName, v -> v)); + + // 创建结果集 + ExcelImportRes 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); + } + + } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/delegate/controller/TeacherCongressDelegateReadController.java b/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/delegate/controller/TeacherCongressDelegateReadController.java index 9b049aca..033032da 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/delegate/controller/TeacherCongressDelegateReadController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/delegate/controller/TeacherCongressDelegateReadController.java @@ -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); } diff --git a/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/delegate/mode/TeacherCongressImportExcel.java b/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/delegate/mode/TeacherCongressImportExcel.java new file mode 100644 index 00000000..c6734232 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/delegate/mode/TeacherCongressImportExcel.java @@ -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; + +} diff --git a/src/main/resources/static/assets/platform/plugins/element-ui/lib/theme-chalk/override.css b/src/main/resources/static/assets/platform/plugins/element-ui/lib/theme-chalk/override.css index d49515cf..b7545495 100644 --- a/src/main/resources/static/assets/platform/plugins/element-ui/lib/theme-chalk/override.css +++ b/src/main/resources/static/assets/platform/plugins/element-ui/lib/theme-chalk/override.css @@ -105,3 +105,8 @@ .el-button{ border-radius: 2px; } + +.el-descriptions .is-bordered{ + table-layout: fixed;!important; +} + diff --git a/src/main/resources/static/assets/platform/plugins/logicflow/index.css b/src/main/resources/static/assets/platform/plugins/logicflow/index.css new file mode 100644 index 00000000..f9108257 --- /dev/null +++ b/src/main/resources/static/assets/platform/plugins/logicflow/index.css @@ -0,0 +1,195 @@ +.lf-graph { + position: relative; + width: 100%; + height: 100%; + z-index: 0; + background: #ffffff; + user-select: none; +} +.lf-element-text { + cursor: text; +} +.lf-text-disabled { + pointer-events: none; +} +.lf-text-draggable { + cursor: move; +} +.lf-node-anchor { + cursor: crosshair; +} +.lf-node-anchor-hover { + visibility: hidden; +} +.lf-anchor:hover .lf-node-anchor-hover { + visibility: visible; +} +.lf-edge.pointer-none { + pointer-events: none; +} +.lf-edge-append { + cursor: pointer; +} +.lf-edge-animation { + stroke-dashoffset: 100%; + animation: lf_animate_dash 5s linear infinite; +} +@keyframes lf_animate_dash { + to { + stroke-dashoffset: 0; + } +} +/* node */ +.lf-node-not-allow { + cursor: not-allowed; +} + +.lf-polyline-append-ns-resize { + cursor: ns-resize; +} +.lf-polyline-append-ew-resize { + cursor: ew-resize; +} +.lf-dragging { + cursor: grabbing; +} +.lf-drag-able { + cursor: default; +} +.lf-bezier-adjust-anchor { + cursor: pointer; +} +/* background */ +.lf-background, +.lf-grid { + position: absolute; + left: 0px; + top: 0px; + right: 0; + bottom: 0; + z-index: -1; +} +.lf-background-area { + width: 100%; + height: 100%; +} +/* html-overlay */ +.lf-html-overlay { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 1; + pointer-events: none; + overflow: hidden; + user-select: none; +} +.lf-html-overlay__transform > * { + pointer-events: all; +} + +.lf-text-editable { + pointer-events: all; +} +.lf-text-input { + text-align: center; + outline: none; + position: absolute; + border: 1px solid #edefed; + box-sizing: border-box; + line-height: 1.2; + border-radius: 3px; + resize: none; + padding: 5px; + min-height: 20px; + min-width: 100px; + white-space: pre; + background: #fff; + transform: translate(-50%, -50%); +} +.lf-get-text-height { + display: inline-block; + word-break: break-all; + /* 为了跟输入效果保持一致,设置透明边框占位 */ + border: 1px solid transparent; + box-sizing: border-box; +} +.lf-node-text-auto-wrap { + box-sizing: border-box; + display: flex; + justify-content: center; + align-items: center; + /* border: 1px solid transparent; */ +} +.lf-node-text-auto-wrap-content { + line-height: 1.2; + background: transparent; + text-align: center; + word-break: break-all; + width: 100%; +} +.lf-node-text-ellipsis-content { + line-height: 1.2; + background: transparent; + text-align: center; + white-space: nowrap; + /* overflow: hidden; + text-overflow: ellipsis; */ + width: 100%; +} +.lf-node-text-ellipsis-content>div{ + text-overflow: ellipsis; + overflow: hidden; +} +/* tool-overlay */ +.lf-tool-overlay { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 2; + pointer-events: none; + overflow: hidden; +} +.lf-tool-overlay > * { + pointer-events: all; +} +/* modification-overlay */ + +.modification-overlay { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 1; + pointer-events: none; + overflow: hidden; +} +.modification-overlay > * { + pointer-events: all; +} +.lf-outline,.lf-snapline { + pointer-events: none; +} + +.lf-keyboard-tips { + float: right; +} +.lf-node-select-decorate { + transform: translate(-50%, -50%); + pointer-events: none; + border: 1px dashed #343435; + position: absolute; +} +.lf-multiple-select { + position: absolute; + border: 2px dashed rgba(24, 125, 255, 0.8); + box-shadow: 0px 0px 3px 0px rgba(24, 125, 255, 0.5); + cursor: move; +} +.lf-edge-adjust-point { + cursor: move; +} diff --git a/src/main/resources/static/assets/platform/plugins/logicflow/logic-flow.js b/src/main/resources/static/assets/platform/plugins/logicflow/logic-flow.js new file mode 100644 index 00000000..fde8854c --- /dev/null +++ b/src/main/resources/static/assets/platform/plugins/logicflow/logic-flow.js @@ -0,0 +1,15 @@ +!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var r=e();for(var n in r)("object"==typeof exports?exports:t)[n]=r[n]}}(window,(function(){return function(t){var e={};function r(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return t[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=t,r.c=e,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)r.d(n,o,function(e){return t[e]}.bind(null,o));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=215)}([function(t,e,r){"use strict";r.d(e,"a",(function(){return m})),r.d(e,"b",(function(){return b})),r.d(e,"c",(function(){return H})),r.d(e,"d",(function(){return U})),r.d(e,"e",(function(){return h})),r.d(e,"f",(function(){return g})),r.d(e,"g",(function(){return h})),r.d(e,"h",(function(){return B})),r.d(e,"i",(function(){return o})),r.d(e,"j",(function(){return z})),r.d(e,"k",(function(){return S}));var n,o,i,a,u,c,s,l={},f=[],p=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function d(t,e){for(var r in e)t[r]=e[r];return t}function y(t){var e=t.parentNode;e&&e.removeChild(t)}function h(t,e,r){var o,i,a,u={};for(a in e)"key"==a?o=e[a]:"ref"==a?i=e[a]:u[a]=e[a];if(arguments.length>2&&(u.children=arguments.length>3?n.call(arguments,2):r),"function"==typeof t&&null!=t.defaultProps)for(a in t.defaultProps)void 0===u[a]&&(u[a]=t.defaultProps[a]);return v(t,u,o,i,null)}function v(t,e,r,n,a){var u={type:t,props:e,key:r,ref:n,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==a?++i:a};return null==a&&null!=o.vnode&&o.vnode(u),u}function g(){return{current:null}}function b(t){return t.children}function m(t,e){this.props=t,this.context=e}function O(t,e){if(null==e)return t.__?O(t.__,t.__.__k.indexOf(t)+1):null;for(var r;e0?v(h.type,h.props,h.key,null,h.__v):h)){if(h.__=r,h.__b=r.__b+1,null===(y=_[p])||y&&h.key==y.key&&h.type===y.type)_[p]=void 0;else for(d=0;d2&&(u.children=arguments.length>3?n.call(arguments,2):r),v(t.type,u,o||t.key,i||t.ref,null)}function U(t,e){var r={__c:e="__cC"+s++,__:t,Consumer:function(t,e){return t.children(e)},Provider:function(t){var r,n;return this.getChildContext||(r=[],(n={})[e]=this,this.getChildContext=function(){return n},this.shouldComponentUpdate=function(t){this.props.value!==t.value&&r.some(_)},this.sub=function(t){r.push(t);var e=t.componentWillUnmount;t.componentWillUnmount=function(){r.splice(r.indexOf(t),1),e&&e.call(t)}}),t.children}};return r.Provider.__=r.Consumer.contextType=r}n=f.slice,o={__e:function(t,e){for(var r,n,o;e=e.__;)if((r=e.__c)&&!r.__)try{if((n=r.constructor)&&null!=n.getDerivedStateFromError&&(r.setState(n.getDerivedStateFromError(t)),o=r.__d),null!=r.componentDidCatch&&(r.componentDidCatch(t),o=r.__d),o)return r.__E=r}catch(e){t=e}throw t}},i=0,m.prototype.setState=function(t,e){var r;r=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=d({},this.state),"function"==typeof t&&(t=t(d({},r),this.props)),t&&d(r,t),null!=t&&this.__v&&(e&&this.__h.push(e),_(this))},m.prototype.forceUpdate=function(t){this.__v&&(this.__e=!0,t&&this.__h.push(t),_(this))},m.prototype.render=b,a=[],u="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,E.__r=0,s=0},function(t,e,r){"use strict";(function(t,n){r.d(e,"a",(function(){return w})),r.d(e,"b",(function(){return or})),r.d(e,"c",(function(){return Ft})),r.d(e,"d",(function(){return Et})),r.d(e,"e",(function(){return yt})),r.d(e,"f",(function(){return dt})),r.d(e,"g",(function(){return _t})),r.d(e,"h",(function(){return gr})),r.d(e,"i",(function(){return at})),r.d(e,"j",(function(){return wt})),r.d(e,"k",(function(){return te})),r.d(e,"l",(function(){return oe})),r.d(e,"m",(function(){return rt})),r.d(e,"n",(function(){return le})),r.d(e,"o",(function(){return j})),r.d(e,"p",(function(){return Pe})),r.d(e,"q",(function(){return fe})),r.d(e,"r",(function(){return be})),r.d(e,"s",(function(){return vr})),r.d(e,"t",(function(){return ye})),r.d(e,"u",(function(){return re})),r.d(e,"v",(function(){return we})),r.d(e,"w",(function(){return _e})),r.d(e,"x",(function(){return je})),r.d(e,"y",(function(){return er})),r.d(e,"z",(function(){return ir})),r.d(e,"A",(function(){return hr})),r.d(e,"B",(function(){return xe})),r.d(e,"C",(function(){return Z})),r.d(e,"D",(function(){return Ae})),r.d(e,"E",(function(){return ce})),r.d(e,"F",(function(){return ue})),r.d(e,"G",(function(){return ee})),r.d(e,"H",(function(){return Zt})),r.d(e,"I",(function(){return Ne})),r.d(e,"J",(function(){return Re})),r.d(e,"K",(function(){return lt})),r.d(e,"L",(function(){return Se})),r.d(e,"M",(function(){return Ie}));var o=[];Object.freeze(o);var i={};function a(){return++Rt.mobxGuid}function u(t){throw c(!1,t),"X"}function c(t,e){if(!t)throw new Error("[mobx] "+(e||"An invariant failed, however the error is obfuscated because this is a production build."))}Object.freeze(i);function s(t){var e=!1;return function(){if(!e)return e=!0,t.apply(this,arguments)}}var l=function(){};function f(t){return null!==t&&"object"==typeof t}function p(t){if(null===t||"object"!=typeof t)return!1;var e=Object.getPrototypeOf(t);return e===Object.prototype||null===e}function d(t,e,r){Object.defineProperty(t,e,{enumerable:!1,writable:!0,configurable:!0,value:r})}function y(t,e){var r="isMobX"+t;return e.prototype[r]=!0,function(t){return f(t)&&!0===t[r]}}function h(t){return t instanceof Map}function v(t){return t instanceof Set}function g(t){var e=new Set;for(var r in t)e.add(r);return Object.getOwnPropertySymbols(t).forEach((function(r){Object.getOwnPropertyDescriptor(t,r).enumerable&&e.add(r)})),Array.from(e)}function b(t){return t&&t.toString?t.toString():new String(t).toString()}function m(t){return null===t?null:"object"==typeof t?""+t:t}var O="undefined"!=typeof Reflect&&Reflect.ownKeys?Reflect.ownKeys:Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:Object.getOwnPropertyNames,w=Symbol("mobx administration"),_=function(){function t(t){void 0===t&&(t="Atom@"+a()),this.name=t,this.isPendingUnobservation=!1,this.isBeingObserved=!1,this.observers=new Set,this.diffValue=0,this.lastAccessedBy=0,this.lowestObserverState=J.NOT_TRACKING}return t.prototype.onBecomeObserved=function(){this.onBecomeObservedListeners&&this.onBecomeObservedListeners.forEach((function(t){return t()}))},t.prototype.onBecomeUnobserved=function(){this.onBecomeUnobservedListeners&&this.onBecomeUnobservedListeners.forEach((function(t){return t()}))},t.prototype.reportObserved=function(){return Ut(this)},t.prototype.reportChanged=function(){Bt(),function(t){if(t.lowestObserverState===J.STALE)return;t.lowestObserverState=J.STALE,t.observers.forEach((function(e){e.dependenciesState===J.UP_TO_DATE&&(e.isTracing!==Q.NONE&&Xt(e,t),e.onBecomeStale()),e.dependenciesState=J.STALE}))}(this),Ht()},t.prototype.toString=function(){return this.name},t}(),E=y("Atom",_);function j(t,e,r){void 0===e&&(e=l),void 0===r&&(r=l);var n,o=new _(t);return e!==l&&se("onBecomeObserved",o,e,n),r!==l&&ce(o,r),o}var x={identity:function(t,e){return t===e},structural:function(t,e){return mr(t,e)},default:function(t,e){return Object.is(t,e)},shallow:function(t,e){return mr(t,e,1)}},S=function(t,e){return S=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])},S(t,e)}; + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. All rights reserved. + Licensed under the Apache License, Version 2.0 (the "License"); you may not use + this file except in compliance with the License. You may obtain a copy of the + License at http://www.apache.org/licenses/LICENSE-2.0 + + THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED + WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, + MERCHANTABLITY OR NON-INFRINGEMENT. + + See the Apache Version 2.0 License for specific language governing permissions + and limitations under the License. + ***************************************************************************** */var P=function(){return P=Object.assign||function(t){for(var e,r=1,n=arguments.length;r=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}}}function A(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a}function D(){for(var t=[],e=0;e2&&q("box");var r=G(e);return new St(t,K(r),r.name,!0,r.equals)},array:function(t,e){arguments.length>2&&q("array");var r=G(e);return Ze(t,K(r),r.name)},map:function(t,e){arguments.length>2&&q("map");var r=G(e);return new or(t,K(r),r.name)},set:function(t,e){arguments.length>2&&q("set");var r=G(e);return new ur(t,K(r),r.name)},object:function(t,e,r){"string"==typeof arguments[1]&&q("object");var n=G(r);if(!1===n.proxy)return fe({},t,e,n);var o=pe(n),i=fe({},void 0,void 0,n),a=Xe(i);return de(a,t,e,o),a},ref:V,shallow:Y,deep:F,struct:W},Z=function(t,e,r){if("string"==typeof arguments[1]||"symbol"==typeof arguments[1])return F.apply(null,arguments);if(je(t))return t;var n=p(t)?Z.object(t,e,r):Array.isArray(t)?Z.array(t,e):h(t)?Z.map(t,e):v(t)?Z.set(t,e):t;if(n!==t)return n;u(!1)};function q(t){u("Expected one or two arguments to observable."+t+". Did you accidentally try to use observable."+t+" as decorator?")}Object.keys($).forEach((function(t){return Z[t]=$[t]}));var J,Q,tt=L(!1,(function(t,e,r,n,o){var i=r.get,a=r.set,u=o[0]||{};lr(t).addComputedProp(t,e,P({get:i,set:a,context:t},u))})),et=tt({equals:x.structural}),rt=function(t,e,r){if("string"==typeof e)return tt.apply(null,arguments);if(null!==t&&"object"==typeof t&&1===arguments.length)return tt.apply(null,arguments);var n="object"==typeof e?e:{};return n.get=t,n.set="function"==typeof e?e:n.set,n.name=n.name||t.name||"",new kt(n)};rt.struct=et,function(t){t[t.NOT_TRACKING=-1]="NOT_TRACKING",t[t.UP_TO_DATE=0]="UP_TO_DATE",t[t.POSSIBLY_STALE=1]="POSSIBLY_STALE",t[t.STALE=2]="STALE"}(J||(J={})),function(t){t[t.NONE=0]="NONE",t[t.LOG=1]="LOG",t[t.BREAK=2]="BREAK"}(Q||(Q={}));var nt=function(t){this.cause=t};function ot(t){return t instanceof nt}function it(t){switch(t.dependenciesState){case J.UP_TO_DATE:return!1;case J.NOT_TRACKING:case J.STALE:return!0;case J.POSSIBLY_STALE:for(var e=dt(!0),r=ft(),n=t.observing,o=n.length,i=0;i0;Rt.computationDepth>0&&e&&u(!1),Rt.allowStateChanges||!e&&"strict"!==Rt.enforceActions||u(!1)}function ct(t,e,r){var n=dt(!0);ht(t),t.newObserving=new Array(t.observing.length+100),t.unboundDepsCount=0,t.runId=++Rt.runId;var o,i=Rt.trackingDerivation;if(Rt.trackingDerivation=t,!0===Rt.disableErrorBoundaries)o=e.call(r);else try{o=e.call(r)}catch(t){o=new nt(t)}return Rt.trackingDerivation=i,function(t){for(var e=t.observing,r=t.observing=t.newObserving,n=J.UP_TO_DATE,o=0,i=t.unboundDepsCount,a=0;an&&(n=u.dependenciesState)}r.length=o,t.newObserving=null,i=e.length;for(;i--;){0===(u=e[i]).diffValue&&Lt(u,t),u.diffValue=0}for(;o--;){var u;1===(u=r[o]).diffValue&&(u.diffValue=0,It(u,t))}n!==J.UP_TO_DATE&&(t.dependenciesState=n,t.onBecomeStale())}(t),yt(n),o}function st(t){var e=t.observing;t.observing=[];for(var r=e.length;r--;)Lt(e[r],t);t.dependenciesState=J.NOT_TRACKING}function lt(t){var e=ft();try{return t()}finally{pt(e)}}function ft(){var t=Rt.trackingDerivation;return Rt.trackingDerivation=null,t}function pt(t){Rt.trackingDerivation=t}function dt(t){var e=Rt.allowStateReads;return Rt.allowStateReads=t,e}function yt(t){Rt.allowStateReads=t}function ht(t){if(t.dependenciesState!==J.UP_TO_DATE){t.dependenciesState=J.UP_TO_DATE;for(var e=t.observing,r=e.length;r--;)e[r].lowestObserverState=J.UP_TO_DATE}}var vt=0,gt=1,bt=Object.getOwnPropertyDescriptor((function(){}),"name");bt&&bt.configurable;function mt(t,e,r){var n=function(){return Ot(t,e,r||this,arguments)};return n.isMobxAction=!0,n}function Ot(t,e,r,n){var o=wt(t,r,n);try{return e.apply(r,n)}catch(t){throw o.error=t,t}finally{_t(o)}}function wt(t,e,r){var n=0,o=ft();Bt();var i={prevDerivation:o,prevAllowStateChanges:jt(!0),prevAllowStateReads:dt(!0),notifySpy:false,startTime:n,actionId:gt++,parentActionId:vt};return vt=i.actionId,i}function _t(t){vt!==t.actionId&&u("invalid action stack. did you forget to finish an action?"),vt=t.parentActionId,void 0!==t.error&&(Rt.suppressReactionErrors=!0),xt(t.prevAllowStateChanges),yt(t.prevAllowStateReads),Ht(),pt(t.prevDerivation),t.notifySpy,Rt.suppressReactionErrors=!1}function Et(t,e){var r,n=jt(t);try{r=e()}finally{xt(n)}return r}function jt(t){var e=Rt.allowStateChanges;return Rt.allowStateChanges=t,e}function xt(t){Rt.allowStateChanges=t}var St=function(t){function e(e,r,n,o,i){void 0===n&&(n="ObservableValue@"+a()),void 0===o&&(o=!0),void 0===i&&(i=x.default);var u=t.call(this,n)||this;return u.enhancer=r,u.name=n,u.equals=i,u.hasUnreportedChange=!1,u.value=r(e,void 0,n),u}return function(t,e){function r(){this.constructor=t}S(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}(e,t),e.prototype.dehanceValue=function(t){return void 0!==this.dehancer?this.dehancer(t):t},e.prototype.set=function(t){this.value;if((t=this.prepareNewValue(t))!==Rt.UNCHANGED){false,this.setNewValue(t)}},e.prototype.prepareNewValue=function(t){if(ut(this),Ge(this)){var e=Ye(this,{object:this,type:"update",newValue:t});if(!e)return Rt.UNCHANGED;t=e.newValue}return t=this.enhancer(t,this.value,this.name),this.equals(this.value,t)?Rt.UNCHANGED:t},e.prototype.setNewValue=function(t){var e=this.value;this.value=t,this.reportChanged(),Ve(this)&&Ke(this,{type:"update",object:this,newValue:t,oldValue:e})},e.prototype.get=function(){return this.reportObserved(),this.dehanceValue(this.value)},e.prototype.intercept=function(t){return Fe(this,t)},e.prototype.observe=function(t,e){return e&&t({object:this,type:"update",newValue:this.value,oldValue:void 0}),We(this,t)},e.prototype.toJSON=function(){return this.get()},e.prototype.toString=function(){return this.name+"["+this.value+"]"},e.prototype.valueOf=function(){return m(this.get())},e.prototype[Symbol.toPrimitive]=function(){return this.valueOf()},e}(_),Pt=y("ObservableValue",St),kt=function(){function t(t){this.dependenciesState=J.NOT_TRACKING,this.observing=[],this.newObserving=null,this.isBeingObserved=!1,this.isPendingUnobservation=!1,this.observers=new Set,this.diffValue=0,this.runId=0,this.lastAccessedBy=0,this.lowestObserverState=J.UP_TO_DATE,this.unboundDepsCount=0,this.__mapid="#"+a(),this.value=new nt(null),this.isComputing=!1,this.isRunningSetter=!1,this.isTracing=Q.NONE,c(t.get,"missing option for computed: get"),this.derivation=t.get,this.name=t.name||"ComputedValue@"+a(),t.set&&(this.setter=mt(this.name+"-setter",t.set)),this.equals=t.equals||(t.compareStructural||t.struct?x.structural:x.default),this.scope=t.context,this.requiresReaction=!!t.requiresReaction,this.keepAlive=!!t.keepAlive}return t.prototype.onBecomeStale=function(){!function(t){if(t.lowestObserverState!==J.UP_TO_DATE)return;t.lowestObserverState=J.POSSIBLY_STALE,t.observers.forEach((function(e){e.dependenciesState===J.UP_TO_DATE&&(e.dependenciesState=J.POSSIBLY_STALE,e.isTracing!==Q.NONE&&Xt(e,t),e.onBecomeStale())}))}(this)},t.prototype.onBecomeObserved=function(){this.onBecomeObservedListeners&&this.onBecomeObservedListeners.forEach((function(t){return t()}))},t.prototype.onBecomeUnobserved=function(){this.onBecomeUnobservedListeners&&this.onBecomeUnobservedListeners.forEach((function(t){return t()}))},t.prototype.get=function(){this.isComputing&&u("Cycle detected in computation "+this.name+": "+this.derivation),0!==Rt.inBatch||0!==this.observers.size||this.keepAlive?(Ut(this),it(this)&&this.trackAndCompute()&&function(t){if(t.lowestObserverState===J.STALE)return;t.lowestObserverState=J.STALE,t.observers.forEach((function(e){e.dependenciesState===J.POSSIBLY_STALE?e.dependenciesState=J.STALE:e.dependenciesState===J.UP_TO_DATE&&(t.lowestObserverState=J.UP_TO_DATE)}))}(this)):it(this)&&(this.warnAboutUntrackedRead(),Bt(),this.value=this.computeValue(!1),Ht());var t=this.value;if(ot(t))throw t.cause;return t},t.prototype.peek=function(){var t=this.computeValue(!1);if(ot(t))throw t.cause;return t},t.prototype.set=function(t){if(this.setter){c(!this.isRunningSetter,"The setter of computed value '"+this.name+"' is trying to update itself. Did you intend to update an _observable_ value, instead of the computed property?"),this.isRunningSetter=!0;try{this.setter.call(this.scope,t)}finally{this.isRunningSetter=!1}}else c(!1,!1)},t.prototype.trackAndCompute=function(){var t=this.value,e=this.dependenciesState===J.NOT_TRACKING,r=this.computeValue(!0),n=e||ot(t)||ot(r)||!this.equals(t,r);return n&&(this.value=r),n},t.prototype.computeValue=function(t){var e;if(this.isComputing=!0,Rt.computationDepth++,t)e=ct(this,this.derivation,this.scope);else if(!0===Rt.disableErrorBoundaries)e=this.derivation.call(this.scope);else try{e=this.derivation.call(this.scope)}catch(t){e=new nt(t)}return Rt.computationDepth--,this.isComputing=!1,e},t.prototype.suspend=function(){this.keepAlive||(st(this),this.value=void 0)},t.prototype.observe=function(t,e){var r=this,n=!0,o=void 0;return oe((function(){var i=r.get();if(!n||e){var a=ft();t({type:"update",object:r,newValue:i,oldValue:o}),pt(a)}n=!1,o=i}))},t.prototype.warnAboutUntrackedRead=function(){},t.prototype.toJSON=function(){return this.get()},t.prototype.toString=function(){return this.name+"["+this.derivation.toString()+"]"},t.prototype.valueOf=function(){return m(this.get())},t.prototype[Symbol.toPrimitive]=function(){return this.valueOf()},t}(),At=y("ComputedValue",kt),Dt=function(){this.version=5,this.UNCHANGED={},this.trackingDerivation=null,this.computationDepth=0,this.runId=0,this.mobxGuid=0,this.inBatch=0,this.pendingUnobservations=[],this.pendingReactions=[],this.isRunningReactions=!1,this.allowStateChanges=!0,this.allowStateReads=!0,this.enforceActions=!1,this.spyListeners=[],this.globalReactionErrorHandlers=[],this.computedRequiresReaction=!1,this.reactionRequiresObservable=!1,this.observableRequiresReaction=!1,this.computedConfigurable=!1,this.disableErrorBoundaries=!1,this.suppressReactionErrors=!1},Tt={};function Mt(){return"undefined"!=typeof window?window:void 0!==n?n:"undefined"!=typeof self?self:Tt}var Nt=!0,Ct=!1,Rt=function(){var t=Mt();return t.__mobxInstanceCount>0&&!t.__mobxGlobals&&(Nt=!1),t.__mobxGlobals&&t.__mobxGlobals.version!==(new Dt).version&&(Nt=!1),Nt?t.__mobxGlobals?(t.__mobxInstanceCount+=1,t.__mobxGlobals.UNCHANGED||(t.__mobxGlobals.UNCHANGED={}),t.__mobxGlobals):(t.__mobxInstanceCount=1,t.__mobxGlobals=new Dt):(setTimeout((function(){Ct||u("There are multiple, different versions of MobX active. Make sure MobX is loaded only once or use `configure({ isolateGlobalState: true })`")}),1),new Dt)}();function It(t,e){t.observers.add(e),t.lowestObserverState>e.dependenciesState&&(t.lowestObserverState=e.dependenciesState)}function Lt(t,e){t.observers.delete(e),0===t.observers.size&&zt(t)}function zt(t){!1===t.isPendingUnobservation&&(t.isPendingUnobservation=!0,Rt.pendingUnobservations.push(t))}function Bt(){Rt.inBatch++}function Ht(){if(0==--Rt.inBatch){Vt();for(var t=Rt.pendingUnobservations,e=0;e0&&zt(t),!1)}function Xt(t,e){if(t.isTracing===Q.BREAK){var r=[];Gt(ye(t),r,1),new Function("debugger;\n/*\nTracing '"+t.name+"'\n\nYou are entering this break point because derivation '"+t.name+"' is being traced and '"+e.name+"' is now forcing it to update.\nJust follow the stacktrace you should now see in the devtools to see precisely what piece of your code is causing this update\nThe stackframe you are looking for is at least ~6-8 stack-frames up.\n\n"+(t instanceof kt?t.derivation.toString().replace(/[*]\//g,"/"):"")+"\n\nThe dependencies for this derivation are:\n\n"+r.join("\n")+"\n*/\n ")()}}function Gt(t,e,r){e.length>=1e3?e.push("(and many more)"):(e.push(""+new Array(r).join("\t")+t.name),t.dependencies&&t.dependencies.forEach((function(t){return Gt(t,e,r+1)})))}var Ft=function(){function t(t,e,r,n){void 0===t&&(t="Reaction@"+a()),void 0===n&&(n=!1),this.name=t,this.onInvalidate=e,this.errorHandler=r,this.requiresObservable=n,this.observing=[],this.newObserving=[],this.dependenciesState=J.NOT_TRACKING,this.diffValue=0,this.runId=0,this.unboundDepsCount=0,this.__mapid="#"+a(),this.isDisposed=!1,this._isScheduled=!1,this._isTrackPending=!1,this._isRunning=!1,this.isTracing=Q.NONE}return t.prototype.onBecomeStale=function(){this.schedule()},t.prototype.schedule=function(){this._isScheduled||(this._isScheduled=!0,Rt.pendingReactions.push(this),Vt())},t.prototype.isScheduled=function(){return this._isScheduled},t.prototype.runReaction=function(){if(!this.isDisposed){if(Bt(),this._isScheduled=!1,it(this)){this._isTrackPending=!0;try{this.onInvalidate(),this._isTrackPending}catch(t){this.reportExceptionInDerivation(t)}}Ht()}},t.prototype.track=function(t){if(!this.isDisposed){Bt();false,this._isRunning=!0;var e=ct(this,t,void 0);this._isRunning=!1,this._isTrackPending=!1,this.isDisposed&&st(this),ot(e)&&this.reportExceptionInDerivation(e.cause),Ht()}},t.prototype.reportExceptionInDerivation=function(t){var e=this;if(this.errorHandler)this.errorHandler(t,this);else{if(Rt.disableErrorBoundaries)throw t;Rt.suppressReactionErrors,Rt.globalReactionErrorHandlers.forEach((function(r){return r(t,e)}))}},t.prototype.dispose=function(){this.isDisposed||(this.isDisposed=!0,this._isRunning||(Bt(),st(this),Ht()))},t.prototype.getDisposer=function(){var t=this.dispose.bind(this);return t[w]=this,t},t.prototype.toString=function(){return"Reaction["+this.name+"]"},t.prototype.trace=function(t){void 0===t&&(t=!1),function(){for(var t=[],e=0;e0||Rt.isRunningReactions||Yt(Wt)}function Wt(){Rt.isRunningReactions=!0;for(var t=Rt.pendingReactions,e=0;t.length>0;){100==++e&&t.splice(0);for(var r=t.splice(0),n=0,o=r.length;n",t):2===arguments.length&&"function"==typeof e?mt(t,e):1===arguments.length&&"string"==typeof t?Jt(t):!0!==n?Jt(e).apply(null,arguments):void d(t,e,mt(t.name||e,r.value,this))};function ee(t,e){return Ot("string"==typeof t?t:t.name||"","function"==typeof t?t:e,this,void 0)}function re(t){return"function"==typeof t&&!0===t.isMobxAction}function ne(t,e,r){d(t,e,mt(e,r.bind(t)))}function oe(t,e){void 0===e&&(e=i);var r,n=e&&e.name||t.name||"Autorun@"+a();if(!e.scheduler&&!e.delay)r=new Ft(n,(function(){this.track(c)}),e.onError,e.requiresObservable);else{var o=ae(e),u=!1;r=new Ft(n,(function(){u||(u=!0,o((function(){u=!1,r.isDisposed||r.track(c)})))}),e.onError,e.requiresObservable)}function c(){t(r)}return r.schedule(),r.getDisposer()}te.bound=function(t,e,r,n){return!0===n?(ne(t,e,r.value),null):r?{configurable:!0,enumerable:!1,get:function(){return ne(this,e,r.value||r.initializer.call(this)),this[e]},set:qt}:{enumerable:!1,configurable:!0,set:function(t){ne(this,e,t)},get:function(){}}};var ie=function(t){return t()};function ae(t){return t.scheduler?t.scheduler:t.delay?function(e){return setTimeout(e,t.delay)}:ie}function ue(t,e,r){void 0===r&&(r=i);var n,o,u,c=r.name||"Reaction@"+a(),s=te(c,r.onError?(n=r.onError,o=e,function(){try{return o.apply(this,arguments)}catch(t){n.call(this,t)}}):e),l=!r.scheduler&&!r.delay,f=ae(r),p=!0,d=!1,y=r.compareStructural?x.structural:r.equals||x.default,h=new Ft(c,(function(){p||l?v():d||(d=!0,f(v))}),r.onError,r.requiresObservable);function v(){if(d=!1,!h.isDisposed){var e=!1;h.track((function(){var r=t(h);e=p||!y(u,r),u=r})),p&&r.fireImmediately&&s(u,h),p||!0!==e||s(u,h),p&&(p=!1)}}return h.schedule(),h.getDisposer()}function ce(t,e,r){return se("onBecomeUnobserved",t,e,r)}function se(t,e,r,n){var o="function"==typeof n?vr(e,r):vr(e),i="function"==typeof n?n:r,a=t+"Listeners";return o[a]?o[a].add(i):o[a]=new Set([i]),"function"!=typeof o[t]?u(!1):function(){var t=o[a];t&&(t.delete(i),0===t.size&&delete o[a])}}function le(t){var e=t.enforceActions,r=t.computedRequiresReaction,n=t.computedConfigurable,o=t.disableErrorBoundaries,i=t.reactionScheduler,a=t.reactionRequiresObservable,c=t.observableRequiresReaction;if(!0===t.isolateGlobalState&&((Rt.pendingReactions.length||Rt.inBatch||Rt.isRunningReactions)&&u("isolateGlobalState should be called before MobX is running any reactions"),Ct=!0,Nt&&(0==--Mt().__mobxInstanceCount&&(Mt().__mobxGlobals=void 0),Rt=new Dt)),void 0!==e){var s=void 0;switch(e){case!0:case"observed":s=!0;break;case!1:case"never":s=!1;break;case"strict":case"always":s="strict";break;default:u("Invalid value for 'enforceActions': '"+e+"', expected 'never', 'always' or 'observed'")}Rt.enforceActions=s,Rt.allowStateChanges=!0!==s&&"strict"!==s}void 0!==r&&(Rt.computedRequiresReaction=!!r),void 0!==a&&(Rt.reactionRequiresObservable=!!a),void 0!==c&&(Rt.observableRequiresReaction=!!c,Rt.allowStateReads=!Rt.observableRequiresReaction),void 0!==n&&(Rt.computedConfigurable=!!n),void 0!==o&&(Rt.disableErrorBoundaries=!!o),i&&$t(i)}function fe(t,e,r,n){var o=pe(n=G(n));return I(t),lr(t,n.name,o.enhancer),e&&de(t,e,r,o),t}function pe(t){return t.defaultDecorator||(!1===t.deep?V:F)}function de(t,e,r,n){var o,i;Bt();try{var a=O(e);try{for(var u=k(a),c=u.next();!c.done;c=u.next()){var s=c.value,l=Object.getOwnPropertyDescriptor(e,s);0;var f=(r&&s in r?r[s]:l.get?tt:n)(t,s,l,!0);f&&Object.defineProperty(t,s,f)}}catch(t){o={error:t}}finally{try{c&&!c.done&&(i=u.return)&&i.call(u)}finally{if(o)throw o.error}}}finally{Ht()}}function ye(t,e){return he(vr(t,e))}function he(t){var e,r,n={name:t.name};return t.observing&&t.observing.length>0&&(n.dependencies=(e=t.observing,r=[],e.forEach((function(t){-1===r.indexOf(t)&&r.push(t)})),r).map(he)),n}var ve=0;function ge(){this.message="FLOW_CANCELLED"}function be(t){1!==arguments.length&&u("Flow expects 1 argument and cannot be used as decorator");var e=t.name||"";return function(){var r,n=this,o=arguments,i=++ve,a=te(e+" - runid: "+i+" - init",t).apply(n,o),u=void 0,c=new Promise((function(t,n){var o=0;function c(t){var r;u=void 0;try{r=te(e+" - runid: "+i+" - yield "+o++,a.next).call(a,t)}catch(t){return n(t)}l(r)}function s(t){var r;u=void 0;try{r=te(e+" - runid: "+i+" - yield "+o++,a.throw).call(a,t)}catch(t){return n(t)}l(r)}function l(e){if(!e||"function"!=typeof e.then)return e.done?t(e.value):(u=Promise.resolve(e.value)).then(c,s);e.then(l,n)}r=n,c(void 0)}));return c.cancel=te(e+" - runid: "+i+" - cancel",(function(){try{u&&me(u);var t=a.return(void 0),e=Promise.resolve(t.value);e.then(l,l),me(e),r(new ge)}catch(t){r(t)}})),c}}function me(t){"function"==typeof t.cancel&&t.cancel()}function Oe(t,e){if(null==t)return!1;if(void 0!==e){if(!1===hr(t))return!1;if(!t[w].values.has(e))return!1;var r=vr(t,e);return At(r)}return At(t)}function we(t){return arguments.length>1?u(!1):Oe(t)}function _e(t,e){return"string"!=typeof e?u(!1):Oe(t,e)}function Ee(t,e){return null!=t&&(void 0!==e?!!hr(t)&&t[w].values.has(e):hr(t)||!!t[w]||E(t)||Kt(t)||At(t))}function je(t){return 1!==arguments.length&&u(!1),Ee(t)}function xe(t){return hr(t)?t[w].getKeys():ir(t)||cr(t)?Array.from(t.keys()):er(t)?t.map((function(t,e){return e})):u(!1)}function Se(t){return hr(t)?xe(t).map((function(e){return t[e]})):ir(t)?xe(t).map((function(e){return t.get(e)})):cr(t)?Array.from(t.values()):er(t)?t.slice():u(!1)}function Pe(t){return hr(t)?xe(t).map((function(e){return[e,t[e]]})):ir(t)?xe(t).map((function(e){return[e,t.get(e)]})):cr(t)?Array.from(t.entries()):er(t)?t.map((function(t,e){return[e,t]})):u(!1)}function ke(t,e,r){if(2!==arguments.length||cr(t))if(hr(t)){var n=t[w],o=n.values.get(e);o?n.write(e,r):n.addObservableProp(e,r,n.defaultEnhancer)}else if(ir(t))t.set(e,r);else if(cr(t))t.add(e);else{if(!er(t))return u(!1);"number"!=typeof e&&(e=parseInt(e,10)),c(e>=0,"Not a valid index: '"+e+"'"),Bt(),e>=t.length&&(t.length=e+1),t[e]=r,Ht()}else{Bt();var i=e;try{for(var a in i)ke(t,a,i[a])}finally{Ht()}}}function Ae(t,e,r,n){return"function"==typeof r?function(t,e,r,n){return gr(t,e).observe(r,n)}(t,e,r,n):function(t,e,r){return gr(t).observe(e,r)}(t,e,r)}ge.prototype=Object.create(Error.prototype);var De={detectCycles:!0,exportMapsAsObjects:!0,recurseEverything:!1};function Te(t,e,r,n){return n.detectCycles&&t.set(e,r),r}function Me(t,e,r){if(!e.recurseEverything&&!je(t))return t;if("object"!=typeof t)return t;if(null===t)return null;if(t instanceof Date)return t;if(Pt(t))return Me(t.get(),e,r);if(je(t)&&xe(t),!0===e.detectCycles&&null!==t&&r.has(t))return r.get(t);if(er(t)||Array.isArray(t)){var n=Te(r,t,[],e),o=t.map((function(t){return Me(t,e,r)}));n.length=o.length;for(var i=0,a=o.length;i0}function Fe(t,e){var r=t.interceptors||(t.interceptors=[]);return r.push(e),s((function(){var t=r.indexOf(e);-1!==t&&r.splice(t,1)}))}function Ye(t,e){var r=ft();try{for(var n=D(t.interceptors||[]),o=0,i=n.length;o0}function We(t,e){var r=t.changeListeners||(t.changeListeners=[]);return r.push(e),s((function(){var t=r.indexOf(e);-1!==t&&r.splice(t,1)}))}function Ke(t,e){var r=ft(),n=t.changeListeners;if(n){for(var o=0,i=(n=n.slice()).length;o0?t.map(this.dehancer):t},t.prototype.intercept=function(t){return Fe(this,t)},t.prototype.observe=function(t,e){return void 0===e&&(e=!1),e&&t({object:this.proxy,type:"splice",index:0,added:this.values.slice(),addedCount:this.values.length,removed:[],removedCount:0}),We(this,t)},t.prototype.getArrayLength=function(){return this.atom.reportObserved(),this.values.length},t.prototype.setArrayLength=function(t){if("number"!=typeof t||t<0)throw new Error("[mobx.array] Out of range: "+t);var e=this.values.length;if(t!==e)if(t>e){for(var r=new Array(t-e),n=0;ni?t=i:t<0&&(t=Math.max(0,i+t)),e=1===arguments.length?i-t:null==e?0:Math.max(0,Math.min(e,i-t)),void 0===r&&(r=o),Ge(this)){var a=Ye(this,{object:this.proxy,type:"splice",index:t,removedCount:e,added:r});if(!a)return o;e=a.removedCount,r=a.added}r=0===r.length?r:r.map((function(t){return n.enhancer(t,void 0)}));var u=this.spliceItemsIntoValues(t,e,r);return 0===e&&0===r.length||this.notifyArraySplice(t,r,u),this.dehanceValues(u)},t.prototype.spliceItemsIntoValues=function(t,e,r){var n;if(r.length<1e4)return(n=this.values).splice.apply(n,D([t,e],r));var o=this.values.slice(t,t+e);return this.values=this.values.slice(0,t).concat(r,this.values.slice(t+e)),o},t.prototype.notifyArrayChildUpdate=function(t,e,r){var n=!this.owned&&!1,o=Ve(this),i=o||n?{object:this.proxy,type:"update",index:t,newValue:e,oldValue:r}:null;this.atom.reportChanged(),o&&Ke(this,i)},t.prototype.notifyArraySplice=function(t,e,r){var n=!this.owned&&!1,o=Ve(this),i=o||n?{object:this.proxy,type:"splice",index:t,removed:r,added:e,removedCount:r.length,addedCount:e.length}:null;this.atom.reportChanged(),o&&Ke(this,i)},t}(),Je={intercept:function(t){return this[w].intercept(t)},observe:function(t,e){return void 0===e&&(e=!1),this[w].observe(t,e)},clear:function(){return this.splice(0)},replace:function(t){var e=this[w];return e.spliceWithArray(0,e.values.length,t)},toJS:function(){return this.slice()},toJSON:function(){return this.toJS()},splice:function(t,e){for(var r=[],n=2;n-1&&(this.splice(r,1),!0)},get:function(t){var e=this[w];if(e&&t=0&&r++}t=wr(t),e=wr(e);var u="[object Array]"===a;if(!u){if("object"!=typeof t||"object"!=typeof e)return!1;var c=t.constructor,s=e.constructor;if(c!==s&&!("function"==typeof c&&c instanceof c&&"function"==typeof s&&s instanceof s)&&"constructor"in t&&"constructor"in e)return!1}if(0===r)return!1;r<0&&(r=-1),o=o||[];for(var l=(n=n||[]).length;l--;)if(n[l]===t)return o[l]===e;if(n.push(t),o.push(e),u){if((l=t.length)!==e.length)return!1;for(;l--;)if(!Or(t[l],e[l],r-1,n,o))return!1}else{var f=Object.keys(t),p=void 0;if(l=f.length,Object.keys(e).length!==l)return!1;for(;l--;)if(!_r(e,p=f[l])||!Or(t[p],e[p],r-1,n,o))return!1}return n.pop(),o.pop(),!0}function wr(t){return er(t)?t.slice():h(t)||ir(t)||v(t)||cr(t)?Array.from(t.entries()):t}function _r(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function Er(t){return t[Symbol.iterator]=jr,t}function jr(){return this}if("undefined"==typeof Proxy||"undefined"==typeof Symbol)throw new Error("[mobx] MobX 5+ requires Proxy and Symbol objects. If your environment doesn't support Symbol or Proxy objects, please downgrade to MobX 4. For React Native Android, consider upgrading JSCore.");"object"==typeof __MOBX_DEVTOOLS_GLOBAL_HOOK__&&__MOBX_DEVTOOLS_GLOBAL_HOOK__.injectMobx({spy:Zt,extras:{getDebugName:function(t,e){return(void 0!==e?vr(t,e):hr(t)||ir(t)||cr(t)?gr(t):vr(t)).name}},$mobx:w})}).call(this,r(155),r(81))},function(t,e,r){var n=r(112),o=r(43),i=r(174);n||o(Object.prototype,"toString",i,{unsafe:!0})},function(t,e,r){"use strict";var n=r(40),o=r(99),i=r(75),a=r(56),u=r(115),c="Array Iterator",s=a.set,l=a.getterFor(c);t.exports=u(Array,"Array",(function(t,e){s(this,{type:c,target:n(t),index:0,kind:e})}),(function(){var t=l(this),e=t.target,r=t.kind,n=t.index++;return!e||n>=e.length?(t.target=void 0,{value:void 0,done:!0}):"keys"==r?{value:n,done:!1}:"values"==r?{value:e[n],done:!1}:{value:[n,e[n]],done:!1}}),"values"),i.Arguments=i.Array,o("keys"),o("values"),o("entries")},function(t,e,r){"use strict";var n=r(17),o=r(7),i=r(46),a=r(71),u=r(34),c=r(15),s=r(66),l=r(36),f=r(107),p=r(19),d=r(35),y=r(95),h=r(28),v=r(32),g=r(58),b=r(85),m=r(33),O=r(39),w=r(40),_=r(84),E=r(41),j=r(64),x=r(57),S=r(72),P=r(68),k=r(136),A=r(111),D=r(50),T=r(37),M=r(82),N=r(97),C=r(43),R=r(87),I=r(91),L=r(67),z=r(88),B=r(27),H=r(137),U=r(138),X=r(73),G=r(56),F=r(74).forEach,Y=I("hidden"),V="Symbol",W=B("toPrimitive"),K=G.set,$=G.getterFor(V),Z=Object.prototype,q=o.Symbol,J=q&&q.prototype,Q=o.TypeError,tt=o.QObject,et=i("JSON","stringify"),rt=D.f,nt=T.f,ot=k.f,it=M.f,at=c([].push),ut=R("symbols"),ct=R("op-symbols"),st=R("string-to-symbol-registry"),lt=R("symbol-to-string-registry"),ft=R("wks"),pt=!tt||!tt.prototype||!tt.prototype.findChild,dt=l&&p((function(){return 7!=x(nt({},"a",{get:function(){return nt(this,"a",{value:7}).a}})).a}))?function(t,e,r){var n=rt(Z,e);n&&delete Z[e],nt(t,e,r),n&&t!==Z&&nt(Z,e,n)}:nt,yt=function(t,e){var r=ut[t]=x(J);return K(r,{type:V,tag:t,description:e}),l||(r.description=e),r},ht=function(t,e,r){t===Z&&ht(ct,e,r),m(t);var n=_(e);return m(r),d(ut,n)?(r.enumerable?(d(t,Y)&&t[Y][n]&&(t[Y][n]=!1),r=x(r,{enumerable:j(0,!1)})):(d(t,Y)||nt(t,Y,j(1,{})),t[Y][n]=!0),dt(t,n,r)):nt(t,n,r)},vt=function(t,e){m(t);var r=w(e),n=S(r).concat(Ot(r));return F(n,(function(e){l&&!u(gt,r,e)||ht(t,e,r[e])})),t},gt=function(t){var e=_(t),r=u(it,this,e);return!(this===Z&&d(ut,e)&&!d(ct,e))&&(!(r||!d(this,e)||!d(ut,e)||d(this,Y)&&this[Y][e])||r)},bt=function(t,e){var r=w(t),n=_(e);if(r!==Z||!d(ut,n)||d(ct,n)){var o=rt(r,n);return!o||!d(ut,n)||d(r,Y)&&r[Y][n]||(o.enumerable=!0),o}},mt=function(t){var e=ot(w(t)),r=[];return F(e,(function(t){d(ut,t)||d(L,t)||at(r,t)})),r},Ot=function(t){var e=t===Z,r=ot(e?ct:w(t)),n=[];return F(r,(function(t){!d(ut,t)||e&&!d(Z,t)||at(n,ut[t])})),n};(f||(q=function(){if(g(J,this))throw Q("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?E(arguments[0]):void 0,e=z(t),r=function(t){this===Z&&u(r,ct,t),d(this,Y)&&d(this[Y],e)&&(this[Y][e]=!1),dt(this,e,j(1,t))};return l&&pt&&dt(Z,e,{configurable:!0,set:r}),yt(e,t)},C(J=q.prototype,"toString",(function(){return $(this).tag})),C(q,"withoutSetter",(function(t){return yt(z(t),t)})),M.f=gt,T.f=ht,D.f=bt,P.f=k.f=mt,A.f=Ot,H.f=function(t){return yt(B(t),t)},l&&(nt(J,"description",{configurable:!0,get:function(){return $(this).description}}),s||C(Z,"propertyIsEnumerable",gt,{unsafe:!0}))),n({global:!0,wrap:!0,forced:!f,sham:!f},{Symbol:q}),F(S(ft),(function(t){U(t)})),n({target:V,stat:!0,forced:!f},{for:function(t){var e=E(t);if(d(st,e))return st[e];var r=q(e);return st[e]=r,lt[r]=e,r},keyFor:function(t){if(!b(t))throw Q(t+" is not a symbol");if(d(lt,t))return lt[t]},useSetter:function(){pt=!0},useSimple:function(){pt=!1}}),n({target:"Object",stat:!0,forced:!f,sham:!l},{create:function(t,e){return void 0===e?x(t):vt(x(t),e)},defineProperty:ht,defineProperties:vt,getOwnPropertyDescriptor:bt}),n({target:"Object",stat:!0,forced:!f},{getOwnPropertyNames:mt,getOwnPropertySymbols:Ot}),n({target:"Object",stat:!0,forced:p((function(){A.f(1)}))},{getOwnPropertySymbols:function(t){return A.f(O(t))}}),et)&&n({target:"JSON",stat:!0,forced:!f||p((function(){var t=q();return"[null]"!=et([t])||"{}"!=et({a:t})||"{}"!=et(Object(t))}))},{stringify:function(t,e,r){var n=N(arguments),o=e;if((v(e)||void 0!==t)&&!b(t))return y(e)||(e=function(t,e){if(h(o)&&(e=u(o,this,t,e)),!b(e))return e}),n[1]=e,a(et,null,n)}});if(!J[W]){var wt=J.valueOf;C(J,W,(function(t){return u(wt,this)}))}X(q,V),L[Y]=!0},function(t,e,r){var n=r(7),o=r(149),i=r(150),a=r(3),u=r(55),c=r(27),s=c("iterator"),l=c("toStringTag"),f=a.values,p=function(t,e){if(t){if(t[s]!==f)try{u(t,s,f)}catch(e){t[s]=f}if(t[l]||u(t,l,e),o[e])for(var r in a)if(t[r]!==a[r])try{u(t,r,a[r])}catch(e){t[r]=a[r]}}};for(var d in o)p(n[d]&&n[d].prototype,d);p(i,"DOMTokenList")},function(t,e,r){"use strict";var n=r(148).charAt,o=r(41),i=r(56),a=r(115),u="String Iterator",c=i.set,s=i.getterFor(u);a(String,"String",(function(t){c(this,{type:u,string:o(t),index:0})}),(function(){var t,e=s(this),r=e.string,o=e.index;return o>=r.length?{value:void 0,done:!0}:(t=n(r,o),e.index+=t.length,{value:t,done:!1})}))},function(t,e,r){(function(e){var r=function(t){return t&&t.Math==Math&&t};t.exports=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof e&&e)||function(){return this}()||Function("return this")()}).call(this,r(81))},function(t,e,r){"use strict";var n=r(17),o=r(36),i=r(7),a=r(15),u=r(35),c=r(28),s=r(58),l=r(41),f=r(37).f,p=r(131),d=i.Symbol,y=d&&d.prototype;if(o&&c(d)&&(!("description"in y)||void 0!==d().description)){var h={},v=function(){var t=arguments.length<1||void 0===arguments[0]?void 0:l(arguments[0]),e=s(y,this)?new d(t):void 0===t?d():d(t);return""===t&&(h[e]=!0),e};p(v,d),v.prototype=y,y.constructor=v;var g="Symbol(test)"==String(d("test")),b=a(y.toString),m=a(y.valueOf),O=/^Symbol\((.*)\)[^)]+$/,w=a("".replace),_=a("".slice);f(y,"description",{configurable:!0,get:function(){var t=m(this),e=b(t);if(u(h,t))return"";var r=g?_(e,7,-1):w(e,O,"$1");return""===r?void 0:r}}),n({global:!0,forced:!0},{Symbol:v})}},function(t,e,r){r(138)("iterator")},function(t,e,r){"use strict";r.d(e,"a",(function(){return a.a})),r.d(e,"c",(function(){return a.e})),r.d(e,"h",(function(){return O})),r.d(e,"i",(function(){return g})),r.d(e,"j",(function(){return h})),r.d(e,"b",(function(){return D})),r.d(e,"e",(function(){return C})),r.d(e,"f",(function(){return T})),r.d(e,"g",(function(){return ut}));var n,o,i,a=r(0),u=0,c=[],s=a.i.__b,l=a.i.__r,f=a.i.diffed,p=a.i.__c,d=a.i.unmount;function y(t,e){a.i.__h&&a.i.__h(o,t,u||e),u=0;var r=o.__H||(o.__H={__:[],__h:[]});return t>=r.__.length&&r.__.push({}),r.__[t]}function h(t){return u=1,v(P,t)}function v(t,e,r){var i=y(n++,2);return i.t=t,i.__c||(i.__=[r?r(e):P(void 0,e),function(t){var e=i.t(i.__[0],t);i.__[0]!==e&&(i.__=[e,i.__[1]],i.__c.setState({}))}],i.__c=o),i.__}function g(t,e){var r=y(n++,3);!a.i.__s&&S(r.__H,e)&&(r.__=t,r.__H=e,o.__H.__h.push(r))}function b(t,e){var r=y(n++,4);!a.i.__s&&S(r.__H,e)&&(r.__=t,r.__H=e,o.__h.push(r))}function m(t,e){var r=y(n++,7);return S(r.__H,e)&&(r.__=t(),r.__H=e,r.__h=t),r.__}function O(t,e){return u=8,m((function(){return t}),e)}function w(){var t;for(c.sort((function(t,e){return t.__v.__b-e.__v.__b}));t=c.pop();)if(t.__P)try{t.__H.__h.forEach(j),t.__H.__h.forEach(x),t.__H.__h=[]}catch(e){t.__H.__h=[],a.i.__e(e,t.__v)}}a.i.__b=function(t){o=null,s&&s(t)},a.i.__r=function(t){l&&l(t),n=0;var e=(o=t.__c).__H;e&&(e.__h.forEach(j),e.__h.forEach(x),e.__h=[])},a.i.diffed=function(t){f&&f(t);var e=t.__c;e&&e.__H&&e.__H.__h.length&&(1!==c.push(e)&&i===a.i.requestAnimationFrame||((i=a.i.requestAnimationFrame)||E)(w)),o=null},a.i.__c=function(t,e){e.some((function(t){try{t.__h.forEach(j),t.__h=t.__h.filter((function(t){return!t.__||x(t)}))}catch(r){e.some((function(t){t.__h&&(t.__h=[])})),e=[],a.i.__e(r,t.__v)}})),p&&p(t,e)},a.i.unmount=function(t){d&&d(t);var e,r=t.__c;r&&r.__H&&(r.__H.__.forEach((function(t){try{j(t)}catch(t){e=t}})),e&&a.i.__e(e,r.__v))};var _="function"==typeof requestAnimationFrame;function E(t){var e,r=function(){clearTimeout(n),_&&cancelAnimationFrame(e),setTimeout(t)},n=setTimeout(r,100);_&&(e=requestAnimationFrame(r))}function j(t){var e=o,r=t.__c;"function"==typeof r&&(t.__c=void 0,r()),o=e}function x(t){var e=o;t.__c=t.__(),o=e}function S(t,e){return!t||t.length!==e.length||e.some((function(e,r){return e!==t[r]}))}function P(t,e){return"function"==typeof e?e(t):e}function k(t,e){for(var r in e)t[r]=e[r];return t}function A(t,e){for(var r in t)if("__source"!==r&&!(r in e))return!0;for(var n in e)if("__source"!==n&&t[n]!==e[n])return!0;return!1}function D(t){this.props=t}function T(t,e){function r(t){var r=this.props.ref,n=r==t.ref;return!n&&r&&(r.call?r(null):r.current=null),e?!e(this.props,t)||!n:A(this.props,t)}function n(e){return this.shouldComponentUpdate=r,Object(a.e)(t,e)}return n.displayName="Memo("+(t.displayName||t.name)+")",n.prototype.isReactComponent=!0,n.__f=!0,n}(D.prototype=new a.a).isPureReactComponent=!0,D.prototype.shouldComponentUpdate=function(t,e){return A(this.props,t)||A(this.state,e)};var M=a.i.__b;a.i.__b=function(t){t.type&&t.type.__f&&t.ref&&(t.props.ref=t.ref,t.ref=null),M&&M(t)};var N="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.forward_ref")||3911;function C(t){function e(e,r){var n=k({},e);return delete n.ref,t(n,!(r=e.ref||r)||"object"==typeof r&&!("current"in r)?null:r)}return e.$$typeof=N,e.render=e,e.prototype.isReactComponent=e.__f=!0,e.displayName="ForwardRef("+(t.displayName||t.name)+")",e}var R=function(t,e){return null==t?null:Object(a.k)(Object(a.k)(t).map(e))},I={map:R,forEach:R,count:function(t){return t?Object(a.k)(t).length:0},only:function(t){var e=Object(a.k)(t);if(1!==e.length)throw"Children.only";return e[0]},toArray:a.k},L=a.i.__e;a.i.__e=function(t,e,r){if(t.then)for(var n,o=e;o=o.__;)if((n=o.__c)&&n.__c)return null==e.__e&&(e.__e=r.__e,e.__k=r.__k),n.__c(t,e);L(t,e,r)};var z=a.i.unmount;function B(t,e,r){return t&&(t.__c&&t.__c.__H&&(t.__c.__H.__.forEach((function(t){"function"==typeof t.__c&&t.__c()})),t.__c.__H=null),null!=(t=k({},t)).__c&&(t.__c.__P===r&&(t.__c.__P=e),t.__c=null),t.__k=t.__k&&t.__k.map((function(t){return B(t,e,r)}))),t}function H(t,e,r){return t&&(t.__v=null,t.__k=t.__k&&t.__k.map((function(t){return H(t,e,r)})),t.__c&&t.__c.__P===e&&(t.__e&&r.insertBefore(t.__e,t.__d),t.__c.__e=!0,t.__c.__P=r)),t}function U(){this.__u=0,this.t=null,this.__b=null}function X(t){var e=t.__.__c;return e&&e.__e&&e.__e(t)}function G(){this.u=null,this.o=null}a.i.unmount=function(t){var e=t.__c;e&&e.__R&&e.__R(),e&&!0===t.__h&&(t.type=null),z&&z(t)},(U.prototype=new a.a).__c=function(t,e){var r=e.__c,n=this;null==n.t&&(n.t=[]),n.t.push(r);var o=X(n.__v),i=!1,a=function(){i||(i=!0,r.__R=null,o?o(u):u())};r.__R=a;var u=function(){if(!--n.__u){if(n.state.__e){var t=n.state.__e;n.__v.__k[0]=H(t,t.__c.__P,t.__c.__O)}var e;for(n.setState({__e:n.__b=null});e=n.t.pop();)e.forceUpdate()}},c=!0===e.__h;n.__u++||c||n.setState({__e:n.__b=n.__v.__k[0]}),t.then(a,a)},U.prototype.componentWillUnmount=function(){this.t=[]},U.prototype.render=function(t,e){if(this.__b){if(this.__v.__k){var r=document.createElement("div"),n=this.__v.__k[0].__c;this.__v.__k[0]=B(this.__b,r,n.__O=n.__P)}this.__b=null}var o=e.__e&&Object(a.e)(a.b,null,t.fallback);return o&&(o.__h=null),[Object(a.e)(a.b,null,e.__e?null:t.children),o]};var F=function(t,e,r){if(++r[1]===r[0]&&t.o.delete(e),t.props.revealOrder&&("t"!==t.props.revealOrder[0]||!t.o.size))for(r=t.u;r;){for(;r.length>3;)r.pop()();if(r[1]>>1,1),e.i.removeChild(t)}}),Object(a.j)(Object(a.e)(Y,{context:e.context},t.__v),e.l)):e.l&&e.componentWillUnmount()}(G.prototype=new a.a).__e=function(t){var e=this,r=X(e.__v),n=e.o.get(t);return n[0]++,function(o){var i=function(){e.props.revealOrder?(n.push(o),F(e,t,n)):o()};r?r(i):i()}},G.prototype.render=function(t){this.u=null,this.o=new Map;var e=Object(a.k)(t.children);t.revealOrder&&"b"===t.revealOrder[0]&&e.reverse();for(var r=e.length;r--;)this.o.set(e[r],this.u=[1,0,this.u]);return t.children},G.prototype.componentDidUpdate=G.prototype.componentDidMount=function(){var t=this;this.o.forEach((function(e,r){F(t,r,e)}))};var W="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,K=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,$="undefined"!=typeof document,Z=function(t){return("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/i:/fil|che|ra/i).test(t)};a.a.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach((function(t){Object.defineProperty(a.a.prototype,t,{configurable:!0,get:function(){return this["UNSAFE_"+t]},set:function(e){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:e})}})}));var q=a.i.event;function J(){}function Q(){return this.cancelBubble}function tt(){return this.defaultPrevented}a.i.event=function(t){return q&&(t=q(t)),t.persist=J,t.isPropagationStopped=Q,t.isDefaultPrevented=tt,t.nativeEvent=t};var et,rt={configurable:!0,get:function(){return this.class}},nt=a.i.vnode;a.i.vnode=function(t){var e=t.type,r=t.props,n=r;if("string"==typeof e){var o=-1===e.indexOf("-");for(var i in n={},r){var u=r[i];$&&"children"===i&&"noscript"===e||"value"===i&&"defaultValue"in r&&null==u||("defaultValue"===i&&"value"in r&&null==r.value?i="value":"download"===i&&!0===u?u="":/ondoubleclick/i.test(i)?i="ondblclick":/^onchange(textarea|input)/i.test(i+e)&&!Z(r.type)?i="oninput":/^onfocus$/i.test(i)?i="onfocusin":/^onblur$/i.test(i)?i="onfocusout":/^on(Ani|Tra|Tou|BeforeInp)/.test(i)?i=i.toLowerCase():o&&K.test(i)?i=i.replace(/[A-Z0-9]/,"-$&").toLowerCase():null===u&&(u=void 0),n[i]=u)}"select"==e&&n.multiple&&Array.isArray(n.value)&&(n.value=Object(a.k)(r.children).forEach((function(t){t.props.selected=-1!=n.value.indexOf(t.props.value)}))),"select"==e&&null!=n.defaultValue&&(n.value=Object(a.k)(r.children).forEach((function(t){t.props.selected=n.multiple?-1!=n.defaultValue.indexOf(t.props.value):n.defaultValue==t.props.value}))),t.props=n,r.class!=r.className&&(rt.enumerable="className"in r,null!=r.className&&(n.class=r.className),Object.defineProperty(n,"className",rt))}t.$$typeof=W,nt&&nt(t)};var ot=a.i.__r;a.i.__r=function(t){ot&&ot(t),et=t.__c};var it={ReactCurrentDispatcher:{current:{readContext:function(t){return et.__n[t.__c].props.value}}}};function at(t){return!!t&&t.$$typeof===W}var ut=function(t,e){return t(e)},ct=a.b,st={useState:h,useReducer:v,useEffect:g,useLayoutEffect:b,useRef:function(t){return u=5,m((function(){return{current:t}}),[])},useImperativeHandle:function(t,e,r){u=6,b((function(){"function"==typeof t?t(e()):t&&(t.current=e())}),null==r?r:r.concat(t))},useMemo:m,useCallback:O,useContext:function(t){var e=o.context[t.__c],r=y(n++,9);return r.c=t,e?(null==r.__&&(r.__=!0,e.sub(o)),e.props.value):t.__},useDebugValue:function(t,e){a.i.useDebugValue&&a.i.useDebugValue(e?e(t):t)},version:"17.0.2",Children:I,render:function(t,e,r){return null==e.__k&&(e.textContent=""),Object(a.j)(t,e),"function"==typeof r&&r(),t?t.__c:null},hydrate:function(t,e,r){return Object(a.h)(t,e),"function"==typeof r&&r(),t?t.__c:null},unmountComponentAtNode:function(t){return!!t.__k&&(Object(a.j)(null,t),!0)},createPortal:function(t,e){return Object(a.e)(V,{__v:t,i:e})},createElement:a.e,createContext:a.d,createFactory:function(t){return a.e.bind(null,t)},cloneElement:function(t){return at(t)?a.c.apply(null,arguments):t},createRef:a.f,Fragment:a.b,isValidElement:at,findDOMNode:function(t){return t&&(t.base||1===t.nodeType&&t)||null},Component:a.a,PureComponent:D,memo:T,forwardRef:C,flushSync:function(t,e){return t(e)},unstable_batchedUpdates:ut,StrictMode:ct,Suspense:U,SuspenseList:G,lazy:function(t){var e,r,n;function o(o){if(e||(e=t()).then((function(t){r=t.default||t}),(function(t){n=t})),n)throw n;if(!r)throw e;return Object(a.e)(r,o)}return o.displayName="Lazy",o.__f=!0,o},__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:it};e.d=st},function(t,e,r){var n=r(7),o=r(149),i=r(150),a=r(182),u=r(55),c=function(t){if(t&&t.forEach!==a)try{u(t,"forEach",a)}catch(e){t.forEach=a}};for(var s in o)o[s]&&c(n[s]&&n[s].prototype);c(i)},function(t,e,r){r(17)({target:"Object",stat:!0},{setPrototypeOf:r(101)})},function(t,e,r){var n=r(17),o=r(19),i=r(39),a=r(100),u=r(140);n({target:"Object",stat:!0,forced:o((function(){a(1)})),sham:!u},{getPrototypeOf:function(t){return a(i(t))}})},function(t,e,r){var n=r(17),o=r(46),i=r(71),a=r(200),u=r(157),c=r(33),s=r(32),l=r(57),f=r(19),p=o("Reflect","construct"),d=Object.prototype,y=[].push,h=f((function(){function t(){}return!(p((function(){}),[],t)instanceof t)})),v=!f((function(){p((function(){}))})),g=h||v;n({target:"Reflect",stat:!0,forced:g,sham:g},{construct:function(t,e){u(t),c(e);var r=arguments.length<3?t:u(arguments[2]);if(v&&!h)return p(t,e,r);if(t==r){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var n=[null];return i(y,n,e),new(i(a,t,n))}var o=r.prototype,f=l(s(o)?o:d),g=i(t,f,e);return s(g)?g:f}})},function(t,e){var r=Function.prototype,n=r.bind,o=r.call,i=n&&n.bind(o);t.exports=n?function(t){return t&&i(o,t)}:function(t){return t&&function(){return o.apply(t,arguments)}}},function(t,e,r){"use strict";var n=r(17),o=r(7),i=r(95),a=r(98),u=r(32),c=r(69),s=r(44),l=r(40),f=r(60),p=r(27),d=r(76),y=r(97),h=d("slice"),v=p("species"),g=o.Array,b=Math.max;n({target:"Array",proto:!0,forced:!h},{slice:function(t,e){var r,n,o,p=l(this),d=s(p),h=c(t,d),m=c(void 0===e?d:e,d);if(i(p)&&(r=p.constructor,(a(r)&&(r===g||i(r.prototype))||u(r)&&null===(r=r[v]))&&(r=void 0),r===g||void 0===r))return y(p,h,m);for(n=new(void 0===r?g:r)(b(m-h,0)),o=0;h1?arguments[1]:void 0)}})},function(t,e,r){var n=r(17),o=r(183);n({target:"Array",stat:!0,forced:!r(119)((function(t){Array.from(t)}))},{from:o})},function(t,e,r){var n=r(17),o=r(36),i=r(132),a=r(40),u=r(50),c=r(60);n({target:"Object",stat:!0,sham:!o},{getOwnPropertyDescriptors:function(t){for(var e,r,n=a(t),o=u.f,s=i(n),l={},f=0;s.length>f;)void 0!==(r=o(n,e=s[f++]))&&c(l,e,r);return l}})},,function(t,e,r){var n=r(7),o=r(87),i=r(35),a=r(88),u=r(107),c=r(129),s=o("wks"),l=n.Symbol,f=l&&l.for,p=c?l:l&&l.withoutSetter||a;t.exports=function(t){if(!i(s,t)||!u&&"string"!=typeof s[t]){var e="Symbol."+t;u&&i(l,t)?s[t]=l[t]:s[t]=c&&f?f(e):p(e)}return s[t]}},function(t,e){t.exports=function(t){return"function"==typeof t}},function(t,e,r){"use strict";var n=r(17),o=r(7),i=r(19),a=r(95),u=r(32),c=r(39),s=r(44),l=r(60),f=r(114),p=r(76),d=r(27),y=r(65),h=d("isConcatSpreadable"),v=9007199254740991,g="Maximum allowed index exceeded",b=o.TypeError,m=y>=51||!i((function(){var t=[];return t[h]=!1,t.concat()[0]!==t})),O=p("concat"),w=function(t){if(!u(t))return!1;var e=t[h];return void 0!==e?!!e:a(t)};n({target:"Array",proto:!0,forced:!m||!O},{concat:function(t){var e,r,n,o,i,a=c(this),u=f(a,0),p=0;for(e=-1,n=arguments.length;ev)throw b(g);for(r=0;r=v)throw b(g);l(u,p++,i)}return u.length=p,u}})},function(t,e,r){var n=r(17),o=r(199);n({target:"Object",stat:!0,forced:Object.assign!==o},{assign:o})},function(t,e,r){"use strict";var n=r(105),o="object"==typeof self&&self&&self.Object===Object&&self,i=n.a||o||Function("return this")();e.a=i},function(t,e,r){var n=r(28);t.exports=function(t){return"object"==typeof t?null!==t:n(t)}},function(t,e,r){var n=r(7),o=r(32),i=n.String,a=n.TypeError;t.exports=function(t){if(o(t))return t;throw a(i(t)+" is not an object")}},function(t,e){var r=Function.prototype.call;t.exports=r.bind?r.bind(r):function(){return r.apply(r,arguments)}},function(t,e,r){var n=r(15),o=r(39),i=n({}.hasOwnProperty);t.exports=Object.hasOwn||function(t,e){return i(o(t),e)}},function(t,e,r){var n=r(19);t.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},function(t,e,r){var n=r(7),o=r(36),i=r(130),a=r(33),u=r(84),c=n.TypeError,s=Object.defineProperty;e.f=o?s:function(t,e,r){if(a(t),e=u(e),a(r),i)try{return s(t,e,r)}catch(t){}if("get"in r||"set"in r)throw c("Accessors not supported");return"value"in r&&(t[e]=r.value),t}},function(t,e,r){"use strict";var n=r(17),o=r(74).map;n({target:"Array",proto:!0,forced:!r(76)("map")},{map:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,r){var n=r(7),o=r(45),i=n.Object;t.exports=function(t){return i(o(t))}},function(t,e,r){var n=r(83),o=r(45);t.exports=function(t){return n(o(t))}},function(t,e,r){var n=r(7),o=r(96),i=n.String;t.exports=function(t){if("Symbol"===o(t))throw TypeError("Cannot convert a Symbol value to a string");return i(t)}},function(t,e,r){"use strict";(function(t){r.d(e,"d",(function(){return i})),r.d(e,"c",(function(){return a})),r.d(e,"b",(function(){return u})),r.d(e,"a",(function(){return s}));var n=r(10),o=function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a};function i(){var t=o(Object(n.j)(0),2)[1];return Object(n.h)((function(){t((function(t){return t+1}))}),[])}function a(t){if(!t||"object"!=typeof t)return!1;var e=Object.getPrototypeOf(t);return!e||e===Object.prototype}function u(t){return"function"==typeof Symbol?Symbol.for(t):"__$mobx-react "+t+"__"}var c={};function s(){return"undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:c}}).call(this,r(81))},function(t,e,r){var n=r(7),o=r(28),i=r(35),a=r(55),u=r(109),c=r(90),s=r(56),l=r(92).CONFIGURABLE,f=s.get,p=s.enforce,d=String(String).split("String");(t.exports=function(t,e,r,c){var s,f=!!c&&!!c.unsafe,y=!!c&&!!c.enumerable,h=!!c&&!!c.noTargetGet,v=c&&void 0!==c.name?c.name:e;o(r)&&("Symbol("===String(v).slice(0,7)&&(v="["+String(v).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),(!i(r,"name")||l&&r.name!==v)&&a(r,"name",v),(s=p(r)).source||(s.source=d.join("string"==typeof v?v:""))),t!==n?(f?!h&&t[e]&&(y=!0):delete t[e],y?t[e]=r:a(t,e,r)):y?t[e]=r:u(e,r)})(Function.prototype,"toString",(function(){return o(this)&&f(this).source||c(this)}))},function(t,e,r){var n=r(93);t.exports=function(t){return n(t.length)}},function(t,e,r){var n=r(7).TypeError;t.exports=function(t){if(null==t)throw n("Can't call method on "+t);return t}},function(t,e,r){var n=r(7),o=r(28),i=function(t){return o(t)?t:void 0};t.exports=function(t,e){return arguments.length<2?i(n[t]):n[t]&&n[t][e]}},function(t,e,r){var n=r(17),o=r(34),i=r(32),a=r(33),u=r(201),c=r(50),s=r(100);n({target:"Reflect",stat:!0},{get:function t(e,r){var n,l,f=arguments.length<3?e:arguments[2];return a(e)===f?e[r]:(n=c.f(e,r))?u(n)?n.value:void 0===n.get?void 0:o(n.get,f):i(l=s(e))?t(l,r,f):void 0}})},function(t,e,r){"use strict";(function(t){var n=r(31),o=r(166),i="object"==typeof exports&&exports&&!exports.nodeType&&exports,a=i&&"object"==typeof t&&t&&!t.nodeType&&t,u=a&&a.exports===i?n.a.Buffer:void 0,c=(u?u.isBuffer:void 0)||o.a;e.a=c}).call(this,r(121)(t))},function(t,e,r){"use strict";(function(t){var n=r(105),o="object"==typeof exports&&exports&&!exports.nodeType&&exports,i=o&&"object"==typeof t&&t&&!t.nodeType&&t,a=i&&i.exports===o&&n.a.process,u=function(){try{var t=i&&i.require&&i.require("util").types;return t||a&&a.binding&&a.binding("util")}catch(t){}}();e.a=u}).call(this,r(121)(t))},function(t,e,r){var n=r(36),o=r(34),i=r(82),a=r(64),u=r(40),c=r(84),s=r(35),l=r(130),f=Object.getOwnPropertyDescriptor;e.f=n?f:function(t,e){if(t=u(t),e=c(e),l)try{return f(t,e)}catch(t){}if(s(t,e))return a(!o(i.f,t,e),t[e])}},function(t,e,r){var n=r(15),o=n({}.toString),i=n("".slice);t.exports=function(t){return i(o(t),8,-1)}},function(t,e,r){var n=r(17),o=r(213).entries;n({target:"Object",stat:!0},{entries:function(t){return o(t)}})},function(t,e,r){var n=r(46);t.exports=n("navigator","userAgent")||""},function(t,e,r){var n=r(7),o=r(28),i=r(86),a=n.TypeError;t.exports=function(t){if(o(t))return t;throw a(i(t)+" is not a function")}},function(t,e,r){var n=r(36),o=r(37),i=r(64);t.exports=n?function(t,e,r){return o.f(t,e,i(1,r))}:function(t,e,r){return t[e]=r,t}},function(t,e,r){var n,o,i,a=r(170),u=r(7),c=r(15),s=r(32),l=r(55),f=r(35),p=r(108),d=r(91),y=r(67),h="Object already initialized",v=u.TypeError,g=u.WeakMap;if(a||p.state){var b=p.state||(p.state=new g),m=c(b.get),O=c(b.has),w=c(b.set);n=function(t,e){if(O(b,t))throw new v(h);return e.facade=t,w(b,t,e),e},o=function(t){return m(b,t)||{}},i=function(t){return O(b,t)}}else{var _=d("state");y[_]=!0,n=function(t,e){if(f(t,_))throw new v(h);return e.facade=t,l(t,_,e),e},o=function(t){return f(t,_)?t[_]:{}},i=function(t){return f(t,_)}}t.exports={set:n,get:o,has:i,enforce:function(t){return i(t)?o(t):n(t,{})},getterFor:function(t){return function(e){var r;if(!s(e)||(r=o(e)).type!==t)throw v("Incompatible receiver, "+t+" required");return r}}}},function(t,e,r){var n,o=r(33),i=r(171),a=r(110),u=r(67),c=r(135),s=r(89),l=r(91),f=l("IE_PROTO"),p=function(){},d=function(t){return" diff --git a/src/main/resources/static/components/plugins/sysImport/excelImport.vue b/src/main/resources/static/components/plugins/sysImport/excelImport.vue index 527afc33..6dce196a 100644 --- a/src/main/resources/static/components/plugins/sysImport/excelImport.vue +++ b/src/main/resources/static/components/plugins/sysImport/excelImport.vue @@ -1,994 +1,1012 @@ diff --git a/src/main/resources/views/layouts/v4/home2.html b/src/main/resources/views/layouts/v4/home2.html index 7bd0028e..055cc3c9 100644 --- a/src/main/resources/views/layouts/v4/home2.html +++ b/src/main/resources/views/layouts/v4/home2.html @@ -727,6 +727,9 @@ layout("/layouts/v4/baseLayout.html"){
工会: + + ${@auth.getPrincipalProperty('union').getName()} +
diff --git a/src/main/resources/views/platform/flow/design/designer.html b/src/main/resources/views/platform/flow/design/designer.html index 85ce1718..fdcf02e7 100644 --- a/src/main/resources/views/platform/flow/design/designer.html +++ b/src/main/resources/views/platform/flow/design/designer.html @@ -8,13 +8,15 @@ - + - - + + + + +
- + - + - + @@ -26,7 +39,8 @@ layout("/layouts/platform.html"){ 新建角色 - 排序 + 排序 +
@@ -49,25 +63,27 @@ layout("/layouts/platform.html"){ - + - - - + + +