This commit is contained in:
2025-08-29 16:19:13 +08:00
parent aa6c9c7f8e
commit 67082d07bd
58 changed files with 2501 additions and 1091 deletions
@@ -1,12 +1,12 @@
package com.budwk.app.zhgh.dayofficework.evaluation.controller;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.lang.tree.TreeNode;
import cn.hutool.core.lang.tree.TreeUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
@@ -150,4 +150,12 @@ public class EvaluateActivityController {
return Result.success();
}
@At
@SaCheckLogin
@ApiOperation("根据年查询荣誉申请事项")
public Result listEvaluateActivityByYear(Integer year) {
List<EvaluateActivity> list = dao.query(EvaluateActivity.class, Cnd.NEW().andEX(EvaluateActivity::getYear,"=",year));
return Result.success(list);
}
}
@@ -1,16 +1,18 @@
package com.budwk.app.zhgh.dayofficework.evaluation.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.lang.Dict;
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.page.Pagination;
import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.bpm.service.BpmService;
import com.budwk.app.sys.models.Sys_user_role;
import com.budwk.app.web.controllers.open.commons.service.CommonService;
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.ProcessSubmitTypeEnum;
import com.budwk.app.flow.service.FlowCommonService;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.dayofficework.evaluation.models.EvaluateApply;
import com.budwk.app.zhgh.dayofficework.evaluation.service.EvaluateActivityService;
import com.budwk.app.zhgh.dayofficework.evaluation.service.EvaluateService;
@@ -45,9 +47,9 @@ public class EvaluateApplyController {
@Inject
private EvaluateService evaluateService;
@Inject
private BpmService bpmService;
private FlowEngine flowEngine;
@Inject
private CommonService commonService;
private FlowCommonService flowCommonService;
@At("")
@Ok("beetl:/platform/zhgh/dayofficework/evaluation/apply/index.html")
@@ -96,12 +98,25 @@ public class EvaluateApplyController {
@At
@SaCheckPermission("evaluation.apply")
@ApiOperation("保存")
@Aop(TransAop.READ_COMMITTED)
@SLog(tag = "评优评先申请", msg = "保存申请")
public Result save(@Param("evaluateApply") EvaluateApply evaluateApply) {
public Result save(@Param("data") EvaluateApply evaluateApply) {
evaluateApply.setApplyDateTime(new Date());
evaluateService.insertOrUpdate(evaluateApply);
bpmService.startSaveProcessInstance(BpmProcessConstant.PERSON_EVALUATE.name(), evaluateApply.getUserName() + "的申请", evaluateApply.getId(), null);
return Result.success();
}
@At
@SaCheckPermission("evaluation.apply")
@ApiOperation("重新提交申请")
@Aop(TransAop.READ_COMMITTED)
@SLog( tag = "评优评先申请", msg = "重新提交申请")
public Result submitAgain(@Param("data") EvaluateApply evaluateApply, @Param("taskId") Long taskId) {
evaluateService.insertOrUpdate(evaluateApply);
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();
}
@@ -110,15 +125,21 @@ public class EvaluateApplyController {
@ApiOperation("提交")
@Aop(TransAop.READ_COMMITTED)
@SLog(tag = "评优评先申请", msg = "提交申请")
public Result submit(@Param("evaluateApply") EvaluateApply evaluateApply) {
public Result submit(@Param("data") EvaluateApply evaluateApply) {
evaluateApply.setApplyDateTime(new Date());
evaluateService.insertOrUpdate(evaluateApply);
//查询分工会审批人工号
String branchUnionApprovalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.BRANCH_UNION_CHAIRMAN, Cnd.where(Sys_user_role::getUnionId, "=", evaluateApply.getUnionId()));
if (StrUtil.isBlank(branchUnionApprovalLoginName)) {
return Result.error("分工会未配置审批人,请联系校工会!");
// 开启流程实例
Dict args = Dict.create();
args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode());
args.set(FlowConst.FORM_DATA, evaluateApply);
ProcessInstance instance = flowEngine.startProcessInstanceByKey("PYPX", evaluateApply.getId(), SecurityUtil.getUserId(), args);
// 自动完成第一个申请任务
List<ProcessTask> doingTaskList = flowEngine.processTaskService().getDoingTaskList(instance.getId(), null);
for (ProcessTask task : doingTaskList) {
flowEngine.executeProcessTask(task.getId(), SecurityUtil.getUserId(), args);
}
bpmService.startSubmitProcessInstance(BpmProcessConstant.PERSON_EVALUATE.name(), evaluateApply.getUserName() + "的申请", evaluateApply.getId(), List.of(branchUnionApprovalLoginName), null);
return Result.success();
}
@@ -1,44 +1,29 @@
package com.budwk.app.zhgh.dayofficework.evaluation.controller;
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.utils.PageUtil;
import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum;
import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum;
import com.budwk.app.bpm.param.BpmTaskApprovalParam;
import com.budwk.app.bpm.service.BpmService;
import com.budwk.app.sys.models.Sys_user_role;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.web.controllers.open.commons.service.CommonService;
import com.budwk.app.zhgh.dayofficework.evaluation.models.EvaluateApply;
import com.budwk.app.zhgh.dayofficework.evaluation.service.EvaluateService;
import com.budwk.app.zhgh.dayofficework.evaluation.vo.EvaluateApplyPageVO;
import com.budwk.app.zhgh.dayofficework.evaluation.vo.EvaluatePageForm;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.Static;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.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.ArrayList;
import java.util.List;
import java.util.Map;
@IocBean
@At("/platform/evaluate/branchUnionApproval")
@@ -65,87 +50,63 @@ public class EvaluateBranchUnionApprovalController {
@SaCheckPermission("evaluation.branchUnionApproval")
@ApiOperation("数据列表")
@Ok("json")
public Result pageData(@Valid EvaluatePageForm pageForm, boolean approval){
public Result pageData(@Valid EvaluatePageForm pageForm, Boolean approval){
Sql sql = Sqls.create("""
SELECT
info.*,
ea.name AS evaluateName,
hb.name AS honorName,
bs.name as honorTypeName,
inst.id processInstanceId,
inst.processInstanceNodeId,
inst.processInstanceNodeName,
inst.processInstanceTaskIds,
inst.processInstanceStatus,
task.id processInstanceTaskId,
task.taskStatus processInstanceTaskStatus,
COUNT(nt.id) OVER (PARTITION BY task.id) > 0 AS nextTaskIsComplete
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
bpm_process_task task
INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId
INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId
INNER JOIN evaluate_apply info ON info.id = inst.processInstanceBusinessId
wf_process_task t
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
LEFT JOIN evaluate_apply info ON info.id = ins.businessNo
LEFT JOIN evaluate_activity ea ON ea.id = info.evaluateId
LEFT JOIN honor_basic_settings hb ON hb.id = info.honorId
LEFT JOIN honor_basic_settings bs ON bs.id = info.honorTypeId
LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id AND nt.taskStatus = 'COMPLETE'
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();
if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){
cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname())));
cnd.and("t.taskName", "=", "3bdaa29d-e5eb-4e3e-b7f1-14d03bedd078");
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
if (approval) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
} else {
cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode());
}
cnd.and("nd.nodeCode","=",20);
if(approval){
cnd.and("task.taskStatus","=", BpmProcessTaskStatusEnum.COMPLETE);
}else{
cnd.and("task.taskStatus","=",BpmProcessTaskStatusEnum.ACTIVE);
if (StrUtil.isAllNotEmpty(pageForm.getSearchName(), pageForm.getSearchKeyword())) {
cnd.where().andLike(pageForm.getSearchName(), pageForm.getSearchKeyword());
}
cnd.andEX("eva.year", "=", pageForm.getYear());
cnd.and(Cnd.likeEX("info.userName", pageForm.getUserName()));
cnd.and(Cnd.likeEX("info.loginName", pageForm.getLoginName()));
cnd.andEX("info.unionId","=",pageForm.getUnionId());
cnd.andEX("info.unitId","=",pageForm.getUnitId());
cnd.andEX("YEAR(info.applyDateTime)", "=", pageForm.getYear());
cnd.groupBy("t.id");
if(StrUtil.isAllBlank(pageForm.getPageOrderName(),pageForm.getPageOrderBy())){
cnd.desc("info.applyDateTime");
cnd.desc("t.createdAt").desc("info.applyDateTime");
}else{
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
}
sql.setCondition(cnd);
Pagination<EvaluateApplyPageVO> pageVO = evaluateService.listPageVO(pageForm, sql, EvaluateApplyPageVO.class);
return Result.success(pageVO);
}
@At
@SaCheckPermission("evaluation.branchUnionApproval")
@ApiOperation("审核")
@SLog(tag = "评优评先分工会审核", msg = "分工会审核")
@Aop(TransAop.READ_COMMITTED)
public Result approval(@Valid @Param("approval") BpmTaskApprovalParam approvalParam){
approvalParam.getBpmTaskApprovalTypeEnum();
Map<String, Object> variables = BeanUtil.beanToMap(approvalParam);
EvaluateApply evaluateApply = evaluateService.fetch(approvalParam.getProcessInstanceBusinessId());
List<String> assignments = new ArrayList<>();
if(approvalParam.getBpmTaskApprovalTypeEnum().equals(BpmTaskApprovalTypeEnum.PASS)){
String schoolUnionApprovalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.SCHOOL_UNION_ADMIN, Cnd.where(Sys_user_role::getUnionId, "=", evaluateApply.getUnionId()));
assignments.add(schoolUnionApprovalLoginName);
}
bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, assignments);
return Result.success();
}
@At
@SaCheckPermission("evaluation.branchUnionApproval")
@ApiOperation("撤回")
@SLog(tag = "评优评先分工会审核", msg = "撤回")
@Aop(TransAop.READ_COMMITTED)
public Result revoke(@Valid String taskId){
bpmService.revokeTask(taskId);
return Result.success();
Pagination pagination = evaluateService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
}
@@ -7,7 +7,6 @@ import com.budwk.app.base.result.Result;
import com.budwk.app.bpm.service.BpmService;
import com.budwk.app.zhgh.dayofficework.evaluation.models.EvaluateApply;
import com.budwk.app.zhgh.dayofficework.evaluation.service.EvaluateService;
import com.budwk.app.zhgh.dayofficework.evaluation.vo.EvaluateApplyVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.nutz.ioc.loader.annotation.Inject;
@@ -33,8 +32,6 @@ public class EvaluateCommonController {
@SaCheckPermission("evaluation")
public Result info(@Valid String id){
EvaluateApply evaluateApply = evaluateService.fetch(id);
EvaluateApplyVO vo = BeanUtil.copyProperties(evaluateApply, EvaluateApplyVO.class);
vo.setNodeTasks(bpmService.getNodeTasks(BpmProcessConstant.PERSON_EVALUATE, id));
return Result.success(vo);
return Result.success(evaluateApply);
}
}
@@ -2,23 +2,18 @@ package com.budwk.app.zhgh.dayofficework.evaluation.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
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.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.bpm.service.BpmService;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.dayofficework.evaluation.service.EvaluateService;
import com.budwk.app.zhgh.dayofficework.evaluation.vo.EvaluateApplyPageVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
@@ -48,66 +43,56 @@ public class EvaluateMineController {
@At
@SaCheckPermission("evaluation.mine")
public Result pageData(@Valid PageForm pageForm, Integer year) {
Sql sql = Sqls.create("""
SELECT
info.*,
ea.name AS evaluateName,
hb.name AS honorName,
bs.name as honorTypeName,
inst.processInstanceNodeId,
inst.processInstanceNodeCode,
inst.processInstanceNodeName,
inst.processInstanceTaskIds,
inst.processInstanceStatus,
nd.nodeType AS processInstanceTaskNodeType,
(
SELECT
count( 1 ) > 0
FROM
bpm_process_task
WHERE
prevTaskId = ( SELECT id FROM bpm_process_task WHERE processInstanceId = inst.id AND processTaskNodeCode IN ( 10, 40, 70 ) ORDER BY createdAt DESC LIMIT 1 )
AND taskStatus = 'COMPELTE'
) AS nextTaskIsComplete
info.*,
ea.name AS evaluateName,
hb.name AS honorName,
bs.name as honorTypeName,
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
evaluate_apply info
LEFT JOIN evaluate_activity ea ON ea.id = info.evaluateId
LEFT JOIN honor_basic_settings hb ON hb.id = info.honorId
LEFT JOIN honor_basic_settings bs ON bs.id = info.honorTypeId
LEFT JOIN bpm_process_instance inst ON inst.processInstanceBusinessId = info.id
LEFT JOIN bpm_process_node_define nd ON nd.id = inst.processInstanceNodeId
evaluate_apply info
LEFT JOIN evaluate_activity ea ON ea.id = info.evaluateId
LEFT JOIN honor_basic_settings hb ON hb.id = info.honorId
LEFT JOIN honor_basic_settings bs ON bs.id = info.honorTypeId
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.loginName", "=", SecurityUtil.getUserLoginname());
}
cnd.andEX("ea.year", "=", year);
cnd.groupBy("info.id");
cnd.andEX("YEAR(info.year)", "=", year);
cnd.and("info.loginName", "=", SecurityUtil.getUserLoginname());
sql.setCondition(cnd);
Pagination<EvaluateApplyPageVO> pageVO = evaluateService.listPageVO(pageForm, sql, EvaluateApplyPageVO.class);
return Result.success(pageVO);
Pagination pagination = evaluateService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@SaCheckPermission("evaluation.mine")
@ApiOperation("删除")
@Aop(TransAop.READ_COMMITTED)
@SLog(tag = "评优评先申请", msg = "删除申请")
public Result delete(@Valid String id) {
evaluateService.delete(id);
bpmService.deleteInstance(id);
return Result.success();
}
@At
@SaCheckPermission("evaluation.mine")
@ApiOperation("撤回")
@Aop(TransAop.READ_COMMITTED)
@SLog(tag = "评优评先申请", msg = "撤回申请")
public Result revokeApply(@Valid String id) {
bpmService.revokeApply(id);
return Result.success();
}
}
@@ -8,17 +8,15 @@ 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.utils.PageUtil;
import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum;
import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum;
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.models.Sys_user_role;
import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.web.controllers.open.commons.service.CommonService;
import com.budwk.app.zhgh.dayofficework.evaluation.models.EvaluateApply;
import com.budwk.app.zhgh.dayofficework.evaluation.service.EvaluateService;
import com.budwk.app.zhgh.dayofficework.evaluation.vo.EvaluateApplyPageVO;
import com.budwk.app.zhgh.dayofficework.evaluation.vo.EvaluatePageForm;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -27,7 +25,6 @@ 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;
@@ -65,59 +62,65 @@ public class EvaluateSchoolUnionApprovalController {
@SaCheckPermission("evaluation.schoolUnionApproval")
@ApiOperation("数据列表")
@Ok("json")
public Result pageData(@Valid EvaluatePageForm pageForm, boolean approval){
public Result pageData(@Valid EvaluatePageForm pageForm, Boolean approval){
Sql sql = Sqls.create("""
SELECT
info.*,
ea.name AS evaluateName,
hb.name AS honorName,
bs.name as honorTypeName,
inst.id processInstanceId,
inst.processInstanceNodeId,
inst.processInstanceNodeName,
inst.processInstanceTaskIds,
inst.processInstanceStatus,
task.id processInstanceTaskId,
task.taskStatus processInstanceTaskStatus,
COUNT(nt.id) OVER (PARTITION BY task.id) > 0 AS nextTaskIsComplete
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
bpm_process_task task
INNER JOIN bpm_process_node_define nd ON nd.id = task.processTaskNodeId
INNER JOIN bpm_process_instance inst ON inst.id = task.processInstanceId
INNER JOIN evaluate_apply info ON info.id = inst.processInstanceBusinessId
wf_process_task t
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
LEFT JOIN evaluate_apply info ON info.id = ins.businessNo
LEFT JOIN evaluate_activity ea ON ea.id = info.evaluateId
LEFT JOIN honor_basic_settings hb ON hb.id = info.honorId
LEFT JOIN honor_basic_settings bs ON bs.id = info.honorTypeId
LEFT JOIN bpm_process_task nt ON nt.prevTaskId = task.id AND nt.taskStatus = 'COMPLETE'
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();
if(!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())){
cnd.and(new Static("JSON_CONTAINS( task.assignments, '\"%s\"' )".formatted(SecurityUtil.getUserLoginname())));
}
cnd.and("nd.nodeCode","=",50);
if(approval){
cnd.and("task.taskStatus","=", BpmProcessTaskStatusEnum.COMPLETE);
}else{
cnd.and("task.taskStatus","=",BpmProcessTaskStatusEnum.ACTIVE);
}
cnd.andEX("eva.year", "=", pageForm.getYear());
cnd.and(Cnd.likeEX("info.userName", pageForm.getUserName()));
cnd.and(Cnd.likeEX("info.loginName", pageForm.getLoginName()));
cnd.and("t.taskName", "=", "3c158aca-89ef-4188-bbc3-e8db201f02a1");
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
cnd.andEX("info.unionId","=",pageForm.getUnionId());
cnd.andEX("info.unitId","=",pageForm.getUnitId());
if (approval) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
} else {
cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode());
}
if (StrUtil.isAllNotEmpty(pageForm.getSearchName(), pageForm.getSearchKeyword())) {
cnd.where().andLike(pageForm.getSearchName(), pageForm.getSearchKeyword());
}
cnd.andEX("YEAR(info.applyDateTime)", "=", pageForm.getYear());
cnd.groupBy("t.id");
if(StrUtil.isAllBlank(pageForm.getPageOrderName(),pageForm.getPageOrderBy())){
cnd.desc("info.applyDateTime");
cnd.desc("t.createdAt").desc("info.applyDateTime");
}else{
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
}
sql.setCondition(cnd);
Pagination<EvaluateApplyPageVO> pageVO = evaluateService.listPageVO(pageForm, sql, EvaluateApplyPageVO.class);
return Result.success(pageVO);
Pagination pagination = evaluateService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@@ -5,23 +5,19 @@ import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog;
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.base.utils.PageUtil;
import com.budwk.app.bpm.service.BpmService;
import com.budwk.app.flow.engine.FlowEngine;
import com.budwk.app.zhgh.dayofficework.evaluation.models.EvaluateActivity;
import com.budwk.app.zhgh.dayofficework.evaluation.service.EvaluateService;
import com.budwk.app.zhgh.dayofficework.evaluation.vo.EvaluateApplyPageVO;
import com.budwk.app.zhgh.dayofficework.evaluation.vo.EvaluatePageForm;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.ss.usermodel.Workbook;
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;
@@ -47,7 +43,7 @@ public class EvaluateSummaryController {
@Inject
private EvaluateService evaluateService;
@Inject
private BpmService bpmService;
private FlowEngine flowEngine;
@At("")
@Ok("beetl:/platform/zhgh/dayofficework/evaluation/summary/index.html")
@@ -60,69 +56,18 @@ public class EvaluateSummaryController {
@SaCheckPermission("evaluation.summary")
@ApiOperation("获取评优评先活动列表")
public Result pageData(@Valid EvaluatePageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
info.*,
eva.name as evaluateName,
hb.name AS honorName,
bs.name as honorTypeName,
ins.processInstanceNodeName
FROM
evaluate_apply info
LEFT JOIN evaluate_activity eva ON eva.id = info.evaluateId
LEFT JOIN honor_basic_settings hb ON hb.id = info.honorId
LEFT JOIN honor_basic_settings bs ON bs.id = info.honorTypeId
LEFT JOIN bpm_process_instance ins ON ins.processInstanceBusinessId = info.id
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("eva.year", "=", pageForm.getYear());
cnd.and(Cnd.likeEX("eva.id", pageForm.getEvaluateId()));
cnd.and(Cnd.likeEX("ea.userName", pageForm.getUserName()));
cnd.and(Cnd.likeEX("info.loginName", pageForm.getLoginName()));
cnd.andEX("info.unitId", "=", pageForm.getUnitId());
cnd.andEX("info.unionId", "=", pageForm.getUnionId());
if(StrUtil.isAllBlank(pageForm.getPageOrderName(),pageForm.getPageOrderBy())){
cnd.desc("info.applyDateTime");
}else{
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
}
sql.setCondition(cnd);
Pagination<EvaluateApplyPageVO> pageVO = evaluateService.listPageVO(pageForm, sql, EvaluateApplyPageVO.class);
return Result.success(pageVO);
Sql sql = evaluateService.getSummarySql(pageForm);
Pagination pagination = evaluateService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@Ok("void")
@SaCheckPermission("evaluation.summary")
@ApiOperation("导出评优评先活动列表")
public void exportExcel(@Valid EvaluatePageForm pageForm,HttpServletResponse response) {
Sql sql = Sqls.create("""
SELECT
info.userName,
info.loginName,
info.sex,
info.unitName,
eva.`name` as evaluateName,
hb.name AS honorName,
bs.name as honorTypeName
FROM
evaluate_apply info
LEFT JOIN evaluate_activity eva ON eva.id = info.evaluateId
LEFT JOIN honor_basic_settings hb ON hb.id = info.honorId
LEFT JOIN honor_basic_settings bs ON bs.id = info.honorTypeId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.andEX("eva.year", "=", pageForm.getYear());
cnd.and(Cnd.likeEX("eva.id", pageForm.getEvaluateId()));
cnd.and(Cnd.likeEX("ea.userName", pageForm.getUserName()));
cnd.and(Cnd.likeEX("info.loginName", pageForm.getLoginName()));
cnd.andEX("info.unitId", "=", pageForm.getUnitId());
cnd.andEX("info.unionId", "=", pageForm.getUnionId());
sql.setCondition(cnd);
public void exportExcel(@Valid EvaluatePageForm pageForm, HttpServletResponse response) {
EvaluateActivity activity = evaluateService.dao().fetch(EvaluateActivity.class, pageForm.getEvaluateId());
Sql sql = evaluateService.getSummarySql(pageForm);
List<NutMap> list = baseService.listMap(sql);
for (int i = 0; i < list.size(); i++) {
list.get(i).put("序号", (i + 1));
@@ -143,7 +88,7 @@ public class EvaluateSummaryController {
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, list);
CommonDownloadUtil.download("评优评先人员列表.xlsx", workbook, response);
CommonDownloadUtil.download(activity.getName() + "人员列表.xlsx", workbook, response);
} catch (Exception ignored) {
}
}
@@ -154,7 +99,7 @@ public class EvaluateSummaryController {
@SLog(tag = "评优评先活查询统计", msg = "删除")
public Result delete(@Valid String id) {
evaluateService.delete(id);
bpmService.deleteInstance(id);
flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id);
return Result.success();
}
@@ -2,6 +2,12 @@ package com.budwk.app.zhgh.dayofficework.evaluation.service;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.dayofficework.evaluation.models.EvaluateApply;
import com.budwk.app.zhgh.dayofficework.evaluation.vo.EvaluatePageForm;
import org.nutz.dao.sql.Sql;
public interface EvaluateService extends BaseService<EvaluateApply> {
Sql getSummarySql(EvaluatePageForm pageForm);
}
@@ -1,9 +1,16 @@
package com.budwk.app.zhgh.dayofficework.evaluation.service.impl;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.base.utils.PageUtil;
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.zhgh.dayofficework.evaluation.models.EvaluateApply;
import com.budwk.app.zhgh.dayofficework.evaluation.service.EvaluateService;
import com.budwk.app.zhgh.dayofficework.evaluation.vo.EvaluatePageForm;
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.IocBean;
@IocBean(args = {"refer:dao"})
@@ -11,4 +18,58 @@ public class EvaluateServiceImpl extends BaseServiceImpl<EvaluateApply> implemen
public EvaluateServiceImpl(Dao dao) {
super(dao);
}
@Override
public Sql getSummarySql(EvaluatePageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
info.*,
ea.name AS evaluateName,
hb.name AS honorName,
bs.name as honorTypeName,
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
evaluate_apply info
LEFT JOIN evaluate_activity ea ON ea.id = info.evaluateId
LEFT JOIN honor_basic_settings hb ON hb.id = info.honorId
LEFT JOIN honor_basic_settings bs ON bs.id = info.honorTypeId
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();
cnd.andEX("YEAR(info.year)", "=", pageForm.getYear());
cnd.andEX("info.evaluateId", "=", pageForm.getEvaluateId());
cnd.and("ins.state", "=", ProcessTaskStateEnum.FINISHED.getCode());
cnd.andEX("info.unitId", "=", pageForm.getUnitId());
cnd.andEX("info.unionId", "=", pageForm.getUnionId());
if (StrUtil.isAllNotEmpty(pageForm.getSearchName(), pageForm.getSearchKeyword())) {
cnd.where().andLike(pageForm.getSearchName(), pageForm.getSearchKeyword());
}
if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
cnd.desc("t.createdAt").desc("info.applyDateTime");
} else {
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
}
sql.setCondition(cnd);
return sql;
}
}
@@ -1,65 +0,0 @@
package com.budwk.app.zhgh.dayofficework.evaluation.vo;
import com.budwk.app.bpm.vo.BpmTaskApprovalVo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
@EqualsAndHashCode(callSuper = true)
@Data
public class EvaluateApplyPageVO extends BpmTaskApprovalVo {
private String id;
private String evaluateId;
private String honorId;
private String honorTypeId;
private String loginName;
private String userName;
private Integer age;
private String sex;
private String nation;
private String political;
private String education;
private String technicalTitle;
private String governmentPosition;
private String historyHonor;
private String briefDeeds;
private String unitName;
private String unitId;
private String unionName;
private String unionId;
private String clubName;
private String clubId;
private Date applyDateTime;
private Boolean isClub;
private String evaluateName;
private String honorName;
private String honorTypeName;
}
@@ -1,18 +0,0 @@
package com.budwk.app.zhgh.dayofficework.evaluation.vo;
import com.budwk.app.bpm.vo.BpmTaskApprovalRecordVo;
import com.budwk.app.zhgh.dayofficework.evaluation.models.EvaluateApply;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@EqualsAndHashCode(callSuper = true)
@Data
public class EvaluateApplyVO extends EvaluateApply {
@ApiModelProperty("节点审批记录")
private List<BpmTaskApprovalRecordVo> nodeTasks;
}
@@ -28,6 +28,7 @@ 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;
import java.util.Map;
@@ -226,9 +227,10 @@ public class ExecutiveCommitteeDelegationOnePushController {
@At
@SaCheckPermission("executiveCommittee.delegationOnePush")
@SLog( tag = "执委会推选-团长推选委员", msg = "删除推选的人")
public Result doDelete(String id) {
ExecutiveCommitteeConfig config = dao.fetch(ExecutiveCommitteeConfig.class, Cnd.NEW());
@SLog(tag = "执委会推选-团长推选委员", msg = "删除推选的人")
public Result doDelete(@Valid String id, @Valid String teacherMeetId) {
ExecutiveCommitteeConfig config = dao.fetch(ExecutiveCommitteeConfig.class,
Cnd.where("teacherMeetId", "=", teacherMeetId));
if (ObjectUtil.isEmpty(config)) {
return Result.error("请先配置基础信息");
}
@@ -16,7 +16,6 @@ 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.Strings;
@@ -25,6 +24,7 @@ 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;
import java.util.Map;
@@ -146,7 +146,7 @@ public class ExecutiveCommitteeDelegationTwoPushController {
@At
@SaCheckPermission("executiveCommittee.delegationTwoPush")
@ApiOperation("推选委员")
@SLog(type = "executiveCommitteePreparatoryGroupPush", tag = "执委会推选-团长二次推选", msg = "推选委员")
@SLog(tag = "执委会推选-团长二次推选", msg = "推选委员")
public Result addOnePush(@Param("userValue") String[] userValue,
String teacherMeetId) {
try {
@@ -177,7 +177,7 @@ public class ExecutiveCommitteeDelegationTwoPushController {
List<Teacher_congress_delegate> dbList = dao.query(Teacher_congress_delegate.class,
Cnd.where(Teacher_congress_delegate::getSessionId, "=", teacherMeetId)
.andEX(Teacher_congress_delegate::getUserId, "in", userValue));
.andEX(Teacher_congress_delegate::getUserId, "in", userValue));
List<ExecutiveCommitteeTwoPush> list = new ArrayList<>();
for (String id : userValue) {
Teacher_congress_delegate jdhDb = dbList.stream().filter(v -> v.getUserId().equals(id)).findFirst().orElse(null);
@@ -205,9 +205,10 @@ public class ExecutiveCommitteeDelegationTwoPushController {
@At
@ApiOperation("删除推选人员")
@SaCheckPermission("executiveCommittee.delegationTwoPush")
@SLog(type = "executiveCommitteePreparatoryGroupPush", tag = "执委会推选-团长二次推选", msg = "删除推选人员")
public Result doDelete( String id) {
ExecutiveCommitteeConfig config = dao.fetch(ExecutiveCommitteeConfig.class, Cnd.NEW());
@SLog(tag = "执委会推选-团长二次推选", msg = "删除推选人员")
public Result doDelete(@Valid String id, @Valid String teacherMeetId) {
ExecutiveCommitteeConfig config = dao.fetch(ExecutiveCommitteeConfig.class,
Cnd.where("teacherMeetId", "=", teacherMeetId));
if (ObjectUtil.isEmpty(config)) {
return Result.error("请先配置基础信息");
}
@@ -27,6 +27,7 @@ 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;
import java.util.Map;
@@ -125,7 +126,7 @@ public class ExecutiveCommitteePushController {
@At
@SaCheckPermission("executiveCommittee.preparatoryGroupPush")
@SLog(type = "executiveCommitteePreparatoryGroupPush", tag = "执委会推选-筹备组推选", msg = "推选委员")
@SLog(tag = "执委会推选-筹备组推选", msg = "推选委员")
public Result addOnePush(@Param("userValue") String[] userValue,
String teacherMeetId) {
try {
@@ -150,11 +151,11 @@ public class ExecutiveCommitteePushController {
}
Sql sql = Sqls.create("""
SELECT
t1.*
FROM
teacher_congress_delegate t1
$condition
SELECT
t1.*
FROM
teacher_congress_delegate t1
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("t1.sessionId", "=", teacherMeetId);
@@ -191,9 +192,10 @@ public class ExecutiveCommitteePushController {
@At
@SaCheckPermission("executiveCommittee.preparatoryGroupPush")
@SLog(type = "executiveCommitteePreparatoryGroupPush", tag = "执委会推选-筹备组推选", msg = "删除推选的人")
public Result doDelete(String id) {
ExecutiveCommitteeConfig config = dao.fetch(ExecutiveCommitteeConfig.class, Cnd.NEW());
@SLog(tag = "执委会推选-筹备组推选", msg = "删除推选的人")
public Result doDelete(@Valid String id, @Valid String teacherMeetId) {
ExecutiveCommitteeConfig config = dao.fetch(ExecutiveCommitteeConfig.class,
Cnd.where("teacherMeetId", "=", teacherMeetId));
if (ObjectUtil.isEmpty(config)) {
return Result.error("请先配置基础信息");
}
@@ -217,5 +219,4 @@ public class ExecutiveCommitteePushController {
}
}
@@ -13,17 +13,17 @@ 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.ProcessSubmitTypeEnum;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.sys.views.View_user;
import com.budwk.app.flow.service.FlowCommonService;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.enrollmentRegistration.model.EnrollmentRegistration;
import com.budwk.app.zhgh.outlay.activityBudget.models.ActivityBudget;
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.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;
@@ -51,6 +51,9 @@ public class EnrollmentRegistrationApplyController {
@Inject
private FlowEngine flowEngine;
@Inject
private FlowCommonService flowCommonService;
@At("/index")
@Ok("beetl:/platform/zhgh/enrollmentRegistration/apply/index.html")
@@ -81,35 +84,34 @@ public class EnrollmentRegistrationApplyController {
@At
@SaCheckPermission("enrollmentRegistration.apply")
@ApiOperation("保存申请")
@SLog(type = "enrollmentRegistrationApply", tag = "子女入学管理-子女入学登记", msg = "保存子女入学登记")
@SLog( tag = "子女入学管理-子女入学登记", msg = "保存子女入学登记")
public Result save(@Param("data") EnrollmentRegistration enrollmentRegistration) {
View_user user = baseService.dao().fetch(View_user.class, Cnd.where("id", "=", SecurityUtil.getUserId()));
enrollmentRegistration.setUserId(SecurityUtil.getUserId());
enrollmentRegistration.setLoginName(SecurityUtil.getUserLoginname());
enrollmentRegistration.setUserName(SecurityUtil.getUserUsername());
enrollmentRegistration.setUnitId(SecurityUtil.getUnitId());
enrollmentRegistration.setUnitName(user.getUnitName());
enrollmentRegistration.setUnionId(SecurityUtil.getUnionId());
enrollmentRegistration.setUnionName(user.getUnionName());
enrollmentRegistration.setApplyTime(DateUtil.now());
baseService.insertOrUpdate(enrollmentRegistration);
return Result.success();
}
@At
@SaCheckPermission("enrollmentRegistration.apply")
@ApiOperation("重新提交申请")
@Aop(TransAop.READ_COMMITTED)
@SLog( tag = "子女入学管理-子女入学登记", msg = "重新提交申请")
public Result submitAgain(@Param("data") EnrollmentRegistration enrollmentRegistration, @Param("taskId") Long taskId) {
baseService.insertOrUpdate(enrollmentRegistration);
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("enrollmentRegistration.apply")
@ApiOperation("提交申请")
@SLog(type = "enrollmentRegistrationApply", tag = "子女入学管理-子女入学登记", msg = "提交子女入学登记")
@SLog( tag = "子女入学管理-子女入学登记", msg = "提交子女入学登记")
public Result submit(@Param("data") EnrollmentRegistration enrollmentRegistration) {
if (StrUtil.isBlank(enrollmentRegistration.getId())) {
View_user user = baseService.dao().fetch(View_user.class, Cnd.where("id", "=", SecurityUtil.getUserId()));
enrollmentRegistration.setUserId(SecurityUtil.getUserId());
enrollmentRegistration.setLoginName(SecurityUtil.getUserLoginname());
enrollmentRegistration.setUserName(SecurityUtil.getUserUsername());
enrollmentRegistration.setUnitId(SecurityUtil.getUnitId());
enrollmentRegistration.setUnitName(user.getUnitName());
enrollmentRegistration.setUnionId(SecurityUtil.getUnionId());
enrollmentRegistration.setUnionName(user.getUnionName());
enrollmentRegistration.setApplyTime(DateUtil.now());
}
baseService.insertOrUpdate(enrollmentRegistration);
@@ -1,17 +1,21 @@
package com.budwk.app.zhgh.enrollmentRegistration.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.base.service.BaseService;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.enrollmentRegistration.model.EnrollmentRegistration;
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.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;
@@ -33,7 +37,6 @@ public class EnrollmentRegistrationApplyListController {
private BaseService baseService;
@At("/index")
@Ok("beetl:/platform/zhgh/enrollmentRegistration/applyList/index.html")
@SaCheckPermission("enrollmentRegistration.applyList")
@@ -81,6 +84,14 @@ public class EnrollmentRegistrationApplyListController {
return Result.success(pagination);
}
@At
@ApiOperation("删除子女入学信息")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("enrollmentRegistration.applyList")
@SLog(tag = "子女入学-我的填报", msg = "删除id: ${args[0]}")
public Result doDelete(String id) {
baseService.dao().delete(EnrollmentRegistration.class, id);
return Result.success();
}
}
@@ -63,7 +63,7 @@ public class EnrollmentRegistrationPlanController {
@ApiOperation("提交登记计划")
@SaCheckPermission("enrollmentRegistration.plan")
@Aop(TransAop.READ_COMMITTED)
@SLog(type = "outlayReimburseApply", tag = "子女入学管理-登记计划", msg = "提交登记计划")
@SLog( tag = "子女入学管理-登记计划", msg = "提交登记计划")
public Result onSubmit(@Param("data") EnrollmentRegistrationPlan enrollmentRegistrationPlan) {
baseService.insertOrUpdate(enrollmentRegistrationPlan);
@@ -34,6 +34,11 @@ public class EnrollmentRegistration extends BaseModel implements Serializable {
@Comment("登记类型(字典)")
private String registrationType;
@Column
@ColDefine(type = ColType.VARCHAR,width = 32)
@Comment("登记类型计划Id")
private String registrationTypeId;
@Column
@ColDefine(type = ColType.VARCHAR,width = 30)
@Comment("监护人(教工)姓名")
@@ -84,6 +89,11 @@ public class EnrollmentRegistration extends BaseModel implements Serializable {
@Comment("子女姓名")
private String childrenName;
@Column
@ColDefine(type = ColType.VARCHAR,width = 30)
@Comment("出身年月")
private String childrenBirthday;
@Column
@ColDefine(type = ColType.VARCHAR,width = 30)
@Comment("性别")
@@ -3,11 +3,15 @@ package com.budwk.app.zhgh.outlay.activityBudget.conteoller;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Dict;
import com.alibaba.excel.EasyExcel;
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.base.utils.CommonDownloadUtil;
import com.budwk.app.flow.constant.FlowConst;
import com.budwk.app.flow.enums.ProcessSubmitTypeEnum;
import com.budwk.app.flow.service.FlowCommonService;
import com.budwk.app.sys.models.Sys_role;
import com.budwk.app.sys.models.Sys_user_role;
import com.budwk.app.sys.services.SysRoleService;
@@ -15,15 +19,12 @@ import com.budwk.app.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.club.model.SysClub;
import com.budwk.app.zhgh.club.service.SysClubService;
import com.budwk.app.zhgh.democratic.suggestionBox.models.SuggestionBox;
import com.budwk.app.zhgh.integral.controller.IntegralManageController;
import com.budwk.app.zhgh.outlay.activityBudget.models.ActivityBudget;
import com.budwk.app.zhgh.outlay.activityBudget.service.ActivityBudgetService;
import com.budwk.app.zhgh.outlay.activityBudget.template.ActivityBudgetTemp;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
@@ -38,8 +39,6 @@ import org.nutz.mvc.annotation.Param;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
@@ -64,6 +63,9 @@ public class ActivityBudgetApplyController {
@Inject
private SysRoleService sysRoleService;
@Inject
private FlowCommonService flowCommonService;
@At("")
@Ok("beetl:/platform/zhgh/outlay/activityBudget/apply/index.html")
@@ -77,17 +79,32 @@ public class ActivityBudgetApplyController {
@ApiOperation("提交年度预算申报")
@SaCheckPermission("activity.budget.apply")
@Aop(TransAop.READ_COMMITTED)
@SLog(type = "activityBudgetApply", tag = "年度预算申报-预算申报", msg = "提交年度预算申报")
@SLog( tag = "年度预算申报-预算申报", msg = "提交年度预算申报")
public Result submit(@Param("data") ActivityBudget activityBudget) {
activityBudget.setApplyDate(DateUtil.now());
return activityBudgetService.submit(activityBudget);
}
@At
@SaCheckPermission("activity.budget.apply")
@ApiOperation("重新提交申请")
@Aop(TransAop.READ_COMMITTED)
@SLog( tag = "年度预算申报-预算申报", msg = "重新提交申请")
public Result submitAgain(@Param("data") ActivityBudget activityBudget, @Param("taskId") Long taskId) {
activityBudgetService.insertOrUpdate(activityBudget);
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("activity.budget.apply")
@ApiOperation("保存申请")
@SLog(type = "activityBudgetApply", tag = "年度预算申报-预算申报", msg = "保存年度预算申报")
@SLog( tag = "年度预算申报-预算申报", msg = "保存年度预算申报")
public Result save(@Param("data") ActivityBudget activityBudget) {
activityBudget.setUserId(SecurityUtil.getUserId());
activityBudget.setLoginName(SecurityUtil.getUserLoginname());
@@ -8,20 +8,15 @@ 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.flow.entity.ProcessInstance;
import com.budwk.app.flow.entity.ProcessTask;
import com.budwk.app.zhgh.outlay.activityBudget.models.ActivityBudget;
import com.budwk.app.zhgh.outlay.activityBudget.models.ActivityBudgetDetails;
import com.budwk.app.zhgh.outlay.activityBudget.service.ActivityBudgetService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.checkerframework.checker.units.qual.C;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.cri.SqlExpressionGroup;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
@@ -58,11 +53,6 @@ public class ActivityBudgetApplyListController {
public void index() {
}
@At("/view")
@Ok("beetl:/platform/zhgh/outlay/activityBudget/view/index.html")
@SaCheckPermission("activity.budget.applyList")
public void view() {
}
@At
@ApiOperation("分页查询")
@@ -78,17 +68,11 @@ public class ActivityBudgetApplyListController {
@ApiOperation("批量删除申报数据")
@SaCheckPermission("activity.budget.applyList")
@Aop(TransAop.READ_COMMITTED)
@SLog(type = "activityBudgetApplyList", tag = "年度预算申报-我的申报", msg = "删除了${ids.length}条数据,${ids}")
@SLog( tag = "年度预算申报-我的申报", msg = "删除了${ids.length}条数据,${ids}")
public Result batchDelete(@Param("ids[]") @Valid String[] ids) {
if (ObjectUtil.isNotEmpty(ids)) {
activityBudgetService.clear(Cnd.where("id", "in", ids));
activityBudgetService.dao().clear(ActivityBudgetDetails.class, Cnd.where("budgetId", "in", ids));
List<ProcessInstance> instanceList = activityBudgetService.dao().query(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "in", ids));
if (ObjectUtil.isNotEmpty(instanceList)) {
List<Long> instanceIds = instanceList.stream().map(ProcessInstance::getId).toList();
activityBudgetService.dao().clear(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "in", instanceIds));
activityBudgetService.dao().clear(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "in", ids));
}
}
return Result.success();
}
@@ -97,22 +81,17 @@ public class ActivityBudgetApplyListController {
@ApiOperation("删除一条申报数据")
@SaCheckPermission("activity.budget.applyList")
@Aop(TransAop.READ_COMMITTED)
@SLog(type = "activityBudgetApplyList", tag = "年度预算申报-我的申报", msg = "删除了一条条数据,${id}")
@SLog( tag = "年度预算申报-我的申报", msg = "删除了一条条数据,${id}")
public Result doDelete(String id) {
activityBudgetService.dao().delete(ActivityBudget.class, id);
activityBudgetService.dao().clear(ActivityBudgetDetails.class, Cnd.where("budgetId", "=", id));
ProcessInstance instance = activityBudgetService.dao().fetch(ProcessInstance.class, Cnd.where(ProcessInstance::getBusinessNo, "=", id));
if (ObjectUtil.isNotEmpty(instance)) {
activityBudgetService.dao().clear(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "=", instance.getId()));
activityBudgetService.dao().delete(ProcessInstance.class, instance.getId());
}
return Result.success();
}
@At
@ApiOperation("提交申报数据")
@SaCheckPermission("activity.budget.applyList")
@SLog(type = "activityBudgetApplyList", tag = "年度预算申报-我的申报", msg = "提交了${ids.length}条数据,${ids}")
@SLog( tag = "年度预算申报-我的申报", msg = "提交了${ids.length}条数据,${ids}")
public Result batchSubmit(@Valid @Param("ids[]") String[] ids) {
List<ActivityBudget> budgetList = activityBudgetService.query(Cnd.where("id", "in", ids));
List<ActivityBudget> budgets = budgetList.stream().filter(a ->
@@ -0,0 +1,159 @@
package com.budwk.app.zhgh.outlay.outlayManage.club.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.date.DateUtil;
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.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.flow.enums.ProcessInstanceStateEnum;
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.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.club.model.SysClub;
import com.budwk.app.zhgh.outlay.outlayManage.club.model.OutlayManageClub;
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.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
* @author zhf
* @date 2025/8/28 11:36
* @description
*/
@IocBean
@At("/platform/outlay/outlayManage/clubManage")
@Ok("json:full")
@Slf4j
@Api(tags = "分工会经费预算管理")
public class OutlayManageClubController {
@Inject
private BaseService baseService;
@Inject
private SysRoleService sysRoleService;
@At("")
@Ok("beetl:/platform/zhgh/outlay/outlayManage/club/manage/index.html")
@SaCheckPermission("outlay.outlayManage.club.manage")
public void index() {
}
@At
@ApiOperation("分页查询")
@SaCheckPermission("outlay.outlayManage.club.manage")
public Result pageData(PageForm pageForm, Integer year) {
Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create("""
SELECT * FROM `outlay_manage_club` $condition
""");
cnd.andEX("year", "=", year);
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
Sys_role sysRole = sysRoleService.getByCode(RoleConstant.CLUB_PRESIDENT);
List<Sys_user_role> userRoles = baseService.dao().query(Sys_user_role.class, Cnd.where("userId", "=", SecurityUtil.getUserId()).and("roleId", "=", sysRole.getId()));
List<String> myClubId = userRoles.stream().map(Sys_user_role::getClubId).toList();
cnd.andEX("clubId", "in", myClubId);
}
cnd.asc("clubCode");
sql.setCondition(cnd);
Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@ApiOperation("修改预算")
@SaCheckPermission("outlay.outlayManage.club.manage")
@SLog(tag = "分工会预算分配", msg = "修改了预算分配的金额:${args[0]},id:${args[1]}")
public Result doSubmit(String totalQuota, String id) {
OutlayManageClub outlayManageClub = baseService.dao().fetch(OutlayManageClub.class, id);
outlayManageClub.setTotalQuota(new BigDecimal(totalQuota));
baseService.updateIgnoreNull(outlayManageClub);
return Result.success();
}
@At
@ApiOperation("查看是否分配")
@SaCheckPermission("outlay.outlayManage.club.manage")
public Result getIsAllocationOutlay(Integer year) {
int count = baseService.dao().count(OutlayManageClub.class, Cnd.where("year", "=", year));
return Result.success(count);
}
@At
@ApiOperation("重置预算")
@SaCheckPermission("outlay.outlayManage.club.manage")
@SLog(tag = "协会预算分配", msg = "重置了预算分配的金额:${args[0]}")
public Result resetOutlay(Integer year) {
int count = baseService.dao().clear(OutlayManageClub.class, Cnd.where("year", "=", year));
return Result.success(count);
}
@At
@ApiOperation("下发预算")
@SaCheckPermission("outlay.outlayManage.club.manage")
@SLog(tag = "协会预算分配", msg = "根据申报的金额修改本年的预算预算")
public Result issuedOutlay() {
Sql sql = Sqls.create("""
SELECT
ab.clubId,
ab.totalBudgetMoney
FROM
activity_budget ab
LEFT JOIN wf_process_instance wpi ON wpi.businessNo = ab.id
WHERE
YEAR(ab.applyDate) = @year
AND ab.outlayManageSource = 'ACTIVITY_BUDGET_TYPE_THREE'
AND ab.isSchoolBudget =0
AND wpi.state = 20
""").setParam("year", DateUtil.thisYear());
List<NutMap> budgetList = baseService.listMap(sql);
Sql sqlClub = Sqls.create("""
SELECT
c.*
FROM
`sys_club` c
LEFT JOIN wf_process_instance inst ON inst.businessNo = c.id
WHERE
inst.state = @state
""").setParam("state", ProcessInstanceStateEnum.FINISHED.getCode());
List<SysClub> clubList = baseService.listVO(sqlClub, SysClub.class);
List<OutlayManageClub> insertUnionList = new ArrayList<>();
clubList.forEach(v -> {
BigDecimal totalBudgetMoney = budgetList.stream()
.filter(budget -> budget.getString("clubId").equals(v.getId()))
.map(budget -> new BigDecimal(budget.getString("totalBudgetMoney"))) // 提取 money 属性
.reduce(BigDecimal.ZERO, BigDecimal::add);
OutlayManageClub outlayManageClub = new OutlayManageClub();
outlayManageClub.setYear(DateUtil.thisYear());
outlayManageClub.setClubName(v.getClubName());
outlayManageClub.setClubCode(v.getClubCode());
outlayManageClub.setClubId(v.getId());
outlayManageClub.setTotalQuota(totalBudgetMoney);
insertUnionList.add(outlayManageClub);
});
baseService.insert(insertUnionList);
return Result.success();
}
}
@@ -0,0 +1,127 @@
package com.budwk.app.zhgh.outlay.outlayManage.club.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
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.param.PageForm;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.base.utils.PageUtil;
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.web.commons.auth.utils.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.outlay.outlayManage.model.OutlayUseDetail;
import com.budwk.app.zhgh.outlay.outlayManage.service.OutlayUseDetailService;
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.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.Strings;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import java.util.List;
/**
* @author zhf
* @date 2025/8/28 13:56
* @description
*/
@IocBean
@At("/platform/outlay/outlayManage/clubUseDetail")
@Ok("json:full")
@Slf4j
@Api(tags = "协会预算使用明细")
public class OutlayManageClubUseDetailController {
@Inject
private BaseService baseService;
@Inject
private SysRoleService sysRoleService;
@Inject
private OutlayUseDetailService outlayUseDetailService;
@At("")
@Ok("beetl:/platform/zhgh/outlay/outlayManage/club/useDetail/index.html")
@SaCheckPermission("outlay.outlayManage.club.useDetail")
public void index() {
}
@At
@ApiOperation("分页查询")
@SaCheckPermission("outlay.outlayManage.club.useDetail")
public Result pageData(PageForm pageForm,
Integer year,
String clubId) {
Sql sql = Sqls.create("""
select * from outlay_manage_club $condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("totalQuota", "IS NOT", null);
cnd.and("year", "=", year);
if (AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
cnd.andEX("clubId", "=", clubId);
} else {
Sys_role sysRole = sysRoleService.getByCode(RoleConstant.CLUB_PRESIDENT);
List<Sys_user_role> userRoles = baseService.dao().query(Sys_user_role.class, Cnd.where("userId", "=", SecurityUtil.getUserId()).and("roleId", "=", sysRole.getId()));
List<String> myClubId = userRoles.stream().map(Sys_user_role::getClubId).toList();
cnd.andEX("clubId", "in", myClubId);
}
if (Strings.isNotBlank(pageForm.getPageOrderBy()) && Strings.isNotBlank(pageForm.getPageOrderName())) {
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
} else {
cnd.asc("clubCode");
}
sql.setCondition(cnd);
Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@ApiOperation("某个协会预算使用详情")
@SaCheckPermission("outlay.outlayManage.club.useDetail")
public Result detailInfo(PageForm pageForm, String outlayManageId) {
Sql sql = Sqls.create("""
select * from outlay_use_detail where outlayManageId=@outlayManageId
""").setParam("outlayManageId", outlayManageId);
Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@ApiOperation("删除协会预算详情")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("outlay.outlayManage.club.useDetail")
@SLog(tag = "协会预算使用详情", msg = "删除了协会预算使用详情:${args[0]}")
public Result doDeleteDetail(String id) {
outlayUseDetailService.doDeleteDetail(id,"club");
return Result.success();
}
@At
@ApiOperation("编辑协会预算详情")
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("outlay.outlayManage.club.useDetail")
@SLog(tag = "协会预算使用详情", msg = "编辑了协会预算使用详情:${args[0]}")
public Result doEditDetail(OutlayUseDetail outlayUseDetail) {
outlayUseDetailService.doEditDetail(outlayUseDetail,"club");
return Result.success();
}
}
@@ -0,0 +1,62 @@
package com.budwk.app.zhgh.outlay.outlayManage.club.model;
import com.budwk.app.base.model.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @author zhf
* @date 2025/8/28 11:34
* @description
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Table("outlay_manage_club")
@TableMeta("{'mysql-charset':'utf8mb4'}")
@Comment("协会经费管理")
public class OutlayManageClub extends BaseModel implements Serializable {
@Column
@Name
@Comment("id")
@ColDefine(type = ColType.VARCHAR, width = 32)
@Prev(els = {@EL("uuid()")})
private String id;
@Column
@Comment("年份")
@ColDefine(type = ColType.INT)
private Integer year;
@Column
@Comment("总额度")
@Default("0")
@ColDefine(customType = "decimal(10,2)")
private BigDecimal totalQuota;
@Column
@Comment("已使用额度")
@Default("0")
@ColDefine(customType = "decimal(10,2)")
private BigDecimal usedQuota;
@Column
@Comment("协会ID")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String clubId;
@Column
@Comment("协会名称")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String clubName;
@Column
@Comment("协会code")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String clubCode;
}
@@ -12,15 +12,13 @@ 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.ProcessSubmitTypeEnum;
import com.budwk.app.sys.views.View_user;
import com.budwk.app.flow.service.FlowCommonService;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.outlay.activityBudget.models.ActivityBudget;
import com.budwk.app.zhgh.outlay.outlayReimburse.model.OutlayReimburse;
import com.budwk.app.zhgh.outlay.outlayReimburse.service.OutlayReimburseApplyService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
@@ -29,7 +27,6 @@ import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.swing.*;
import java.util.List;
/**
@@ -53,6 +50,9 @@ public class OutlayReimburseApplyController {
@Inject
private FlowEngine flowEngine;
@Inject
private FlowCommonService flowCommonService;
@At("/index")
@Ok("beetl:/platform/zhgh/outlay/outlayReimburse/apply/index.html")
@SaCheckPermission("outlay.reimburse.apply")
@@ -85,20 +85,11 @@ public class OutlayReimburseApplyController {
@At
@ApiOperation("提交报销申请")
@SaCheckPermission("activity.budget.apply")
@SaCheckPermission("activity.reimburse.apply")
@Aop(TransAop.READ_COMMITTED)
@SLog(type = "outlayReimburseApply", tag = "费用报销管理-报销申请", msg = "提交年度预算申报")
@SLog( tag = "费用报销管理-报销申请", msg = "提交年度预算申报")
public Result submit(@Param("data") OutlayReimburse outlayReimburse) {
//添加预算详情表
if (StrUtil.isBlank(outlayReimburse.getId())){
View_user user = dao.fetch(View_user.class, Cnd.where("id", "=", SecurityUtil.getUserId()));
outlayReimburse.setUserId(SecurityUtil.getUserId());
outlayReimburse.setUserName(SecurityUtil.getUserUsername());
outlayReimburse.setLoginName(SecurityUtil.getUserLoginname());
outlayReimburse.setUnitId(SecurityUtil.getUnitId());
outlayReimburse.setUnitName(user.getUnitName());
outlayReimburse.setUnionId(SecurityUtil.getUnionId());
outlayReimburse.setUnionName(user.getUnionName());
outlayReimburse.setApplyTime(DateUtil.now());
}
outlayReimburseApplyService.insertOrUpdate(outlayReimburse);
@@ -117,20 +108,27 @@ public class OutlayReimburseApplyController {
return Result.success();
}
@At
@SaCheckPermission("activity.reimburse.apply")
@ApiOperation("重新提交申请")
@Aop(TransAop.READ_COMMITTED)
@SLog( tag = "费用报销管理-报销申请", msg = "重新提交申请")
public Result submitAgain(@Param("data") OutlayReimburse outlayReimburse, @Param("taskId") Long taskId) {
outlayReimburseApplyService.insertOrUpdate(outlayReimburse);
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("outlay.reimburse.apply")
@ApiOperation("保存申请")
@SLog(type = "outlayReimburseApply", tag = "费用报销管理-报销申请", msg = "保存年度预算申报")
@SLog( tag = "费用报销管理-报销申请", msg = "保存年度预算申报")
public Result save(@Param("data") OutlayReimburse outlayReimburse) {
View_user user = dao.fetch(View_user.class, Cnd.where("id", "=", SecurityUtil.getUserId()));
outlayReimburse.setUserId(SecurityUtil.getUserId());
outlayReimburse.setUserName(SecurityUtil.getUserUsername());
outlayReimburse.setLoginName(SecurityUtil.getUserLoginname());
outlayReimburse.setUnitId(SecurityUtil.getUnitId());
outlayReimburse.setUnitName(user.getUnitName());
outlayReimburse.setUnionId(SecurityUtil.getUnionId());
outlayReimburse.setUnionName(user.getUnionName());
outlayReimburse.setApplyTime(DateUtil.now());
outlayReimburseApplyService.insertOrUpdate(outlayReimburse);
return Result.success();
@@ -0,0 +1,118 @@
package com.budwk.app.zhgh.outlay.outlayReimburse.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.StrUtil;
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.base.utils.PageUtil;
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.sys.services.SysDictService;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
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;
/**
* @author zhf
* @date 2025/8/19 16:50
* @description 分工会主席审核
*/
@IocBean
@Ok("json:full")
@Slf4j
@Api(tags = "费用报销管理-协会审核")
@At("/platform/outlay/reimburse/clubAudit")
public class OutlayReimburseClubAuditController {
@Inject
private BaseService baseService;
@Inject
private SysDictService sysDictService;
@At("/index")
@Ok("beetl:/platform/zhgh/outlay/outlayReimburse/clubAudit/index.html")
@SaCheckPermission("outlay.reimburse.clubAudit")
public void index() {
}
@At
@ApiOperation("分页查询")
@SaCheckPermission("outlay.reimburse.clubAudit")
public Result pageData(PageForm pageForm,
Integer year,
Boolean approval,
String outlayManageSource) {
Sql sql = Sqls.create("""
SELECT
info.*,
YEAR(info.applyTime) year,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
ins.variable instanceVariale,
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 outlay_reimburse 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", "=", "68a9af7f-f532-4866-aa09-24f0f802389f");
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
cnd.andEX("info.outlayManageSource", "=", outlayManageSource);
if (approval) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
} else {
cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode());
}
if (StrUtil.isAllNotEmpty(pageForm.getSearchName(), pageForm.getSearchKeyword())) {
cnd.where().andLike(pageForm.getSearchName(), pageForm.getSearchKeyword());
}
cnd.andEX("YEAR(info.applyTime)", "=", year);
cnd.groupBy("t.id");
if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
cnd.desc("t.createdAt").desc("info.applyTime");
} else {
cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy()));
}
sql.setCondition(cnd);
Pagination<NutMap> pageVO = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pageVO);
}
}
@@ -54,7 +54,6 @@ public class OutlayReimburseUnionAuditController {
@SaCheckPermission("outlay.reimburse.unionAudit")
public Result pageData(PageForm pageForm,
Integer year,
String clubId,
Boolean approval,
String outlayManageSource) {
Sql sql = Sqls.create("""
@@ -10,6 +10,7 @@ import com.budwk.app.flow.engine.core.Execution;
import com.budwk.app.flow.engine.core.ServiceContext;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.outlay.activityBudget.models.ActivityBudget;
import com.budwk.app.zhgh.outlay.outlayManage.club.model.OutlayManageClub;
import com.budwk.app.zhgh.outlay.outlayManage.model.OutlayUseDetail;
import com.budwk.app.zhgh.outlay.outlayManage.school.model.OutlayManageSchool;
import com.budwk.app.zhgh.outlay.outlayManage.union.model.OutlayManageUnion;
@@ -88,6 +89,23 @@ public class OutlayReimburseSchoolZxAuditPostInterceptor implements FlowIntercep
detail.setOutlayManageId(manageUnion.getId());
dao.insert(detail);
}
}else if (outlayReimburse.getOutlayManageSource().equals("ACTIVITY_BUDGET_TYPE_THREE")){
// 更新分工会活动经费表
OutlayManageClub manageClub = dao.fetch(OutlayManageClub.class,
Cnd.where("year", "=", DateUtil.thisYear())
.and("clubId", "=", outlayReimburse.getClubId()));
if (ObjectUtil.isEmpty(manageClub)) {
throw new BaseException("该年份没有设置金额!");
}
if (manageClub.getTotalQuota().subtract(manageClub.getUsedQuota()).compareTo(outlayReimburse.getMoney()) < 0) {
throw new BaseException("剩余配额不足!剩余:" + manageClub.getTotalQuota().subtract(manageClub.getUsedQuota()));
}
manageClub.setUsedQuota(manageClub.getUsedQuota().add(outlayReimburse.getMoney()));
dao.updateIgnoreNull(manageClub);
//添加使用记录到经费管理表
detail.setOutlayManageId(manageClub.getId());
dao.insert(detail);
}
}
@@ -74,6 +74,11 @@ public class OutlayReimburse extends BaseModel implements Serializable {
@ColDefine(type = ColType.VARCHAR, width = 32)
private String clubId;
@Column
@Comment("社团名称")
@ColDefine(type = ColType.VARCHAR, width = 50)
private String clubName;
@Column
@Comment("报销经费来源")
@ColDefine(type = ColType.VARCHAR, width = 32)
@@ -3,10 +3,15 @@ package com.budwk.app.zhgh.outlay.outlayReimburse.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.impl.BaseServiceImpl;
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.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.outlay.activityBudget.models.ActivityBudget;
import com.budwk.app.zhgh.outlay.outlayManage.club.model.OutlayManageClub;
import com.budwk.app.zhgh.outlay.outlayManage.school.model.OutlayManageSchool;
import com.budwk.app.zhgh.outlay.outlayManage.union.model.OutlayManageUnion;
import com.budwk.app.zhgh.outlay.outlayReimburse.model.OutlayReimburse;
@@ -15,6 +20,7 @@ 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.lang.util.NutMap;
@@ -33,6 +39,9 @@ public class OutlayReimburseApplyServiceImpl extends BaseServiceImpl<OutlayReimb
super(dao);
}
@Inject
private SysRoleService sysRoleService;
@Override
public NutMap getBudgetMoneyOrActivity(String outlayManageSource, String clubId, String unionId, String id) {
@@ -114,14 +123,20 @@ public class OutlayReimburseApplyServiceImpl extends BaseServiceImpl<OutlayReimb
.and("unionId", "=", StrUtil.isNotBlank(unionId) ? unionId : SecurityUtil.getUnionId()));
map.put("budgetMoney", ObjectUtil.isNotEmpty(union) ? union.getTotalQuota().subtract(union.getUsedQuota()) : 0);
} else if (outlayManageSource.equals("ACTIVITY_BUDGET_TYPE_THREE")) {
Sys_role sysRole = sysRoleService.getByCode(RoleConstant.CLUB_PRESIDENT);
List<Sys_user_role> userRoles = dao().query(Sys_user_role.class, Cnd.where("userId", "=", SecurityUtil.getUserId()).and("roleId", "=", sysRole.getId()));
List<String> myClubId = userRoles.stream().map(Sys_user_role::getClubId).toList();
OutlayManageClub club = dao().fetch(OutlayManageClub.class, Cnd.where("year", "=", DateUtil.thisYear())
.and("clubId", "in", StrUtil.isNotBlank(clubId) ? List.of(clubId) : myClubId));
map.put("budgetMoney", ObjectUtil.isNotEmpty(club) ? club.getTotalQuota().subtract(club.getUsedQuota()) : 0);
}
map.put("activityList", canBudgetList);
return map;
}
@Override
public BigDecimal getBxMoneyByActivityId(String budgetId,Boolean isSchoolBudget) {
public BigDecimal getBxMoneyByActivityId(String budgetId, Boolean isSchoolBudget) {
Sql sql = Sqls.create("""
SELECT
rei.money
@@ -133,9 +148,9 @@ public class OutlayReimburseApplyServiceImpl extends BaseServiceImpl<OutlayReimb
AND ins.state = 20
""").setParam("budgetId", budgetId);
Cnd cnd = Cnd.NEW();
if (isSchoolBudget!=null){
cnd.and("isSchoolBudget", "=", isSchoolBudget);
}
if (isSchoolBudget != null) {
cnd.and("isSchoolBudget", "=", isSchoolBudget);
}
List<NutMap> reiList = listMap(sql);
@@ -159,7 +174,7 @@ public class OutlayReimburseApplyServiceImpl extends BaseServiceImpl<OutlayReimb
if (budget.getIsRepeatReimburse()) {
//1.查询已经报销了的总金额
if (budget.getIsSchoolBudget()) {
BigDecimal bXMoney = getBxMoneyByActivityId(budgetId,budget.getIsSchoolBudget());
BigDecimal bXMoney = getBxMoneyByActivityId(budgetId, budget.getIsSchoolBudget());
//如果是分工会进来并且报销的活动是校会预算
// 1. 计算本次加上之前的报销总金额
BigDecimal totalReimbursement = bXMoney.add(moneyBig);
@@ -170,7 +185,7 @@ public class OutlayReimburseApplyServiceImpl extends BaseServiceImpl<OutlayReimb
return Result.success();
}
} else {
BigDecimal bXMoney = getBxMoneyByActivityId(budgetId,budget.getIsSchoolBudget());
BigDecimal bXMoney = getBxMoneyByActivityId(budgetId, budget.getIsSchoolBudget());
//如果是自己的项目就能超20%
//1.算出现在还能报销多少钱
BigDecimal twentyPercent = budget.getTotalBudgetMoney().multiply(new BigDecimal("20")).divide(new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_UP);
@@ -203,7 +218,7 @@ public class OutlayReimburseApplyServiceImpl extends BaseServiceImpl<OutlayReimb
//如果报销的项目是可以重复报销的
if (budget.getIsRepeatReimburse()) {
//这个预算已经报销了多少钱
BigDecimal totalMoney = getBxMoneyByActivityId(budgetId,null);
BigDecimal totalMoney = getBxMoneyByActivityId(budgetId, null);
//查出这个活动有没有跟其他预算关联如果跟其他预算关联了代表当前这条预算是分工会也能报校工会也能报
// schoolBudgetId字段不为空就代表这条预算是使用的校工会的金额
List<ActivityBudget> budgetList = dao().query(ActivityBudget.class,
@@ -257,18 +272,27 @@ public class OutlayReimburseApplyServiceImpl extends BaseServiceImpl<OutlayReimb
}
}
}else if ("ACTIVITY_BUDGET_TYPE_THREE".equals(outlayManageSource)) {
//如果进来的是协会
OutlayManageClub outlayManageClub = dao().fetch(OutlayManageClub.class, Cnd.where("year", "=", DateUtil.thisYear())
.and("clubId", "=", clubId));
if (ObjectUtil.isEmpty(outlayManageClub)) {
return Result.error("该年份没有设置金额!");
}
if (outlayManageClub.getTotalQuota().subtract(outlayManageClub.getUsedQuota()).compareTo(moneyBig) < 0) {
return Result.error("剩余配额不足!剩余:" + outlayManageClub.getTotalQuota().subtract(outlayManageClub.getUsedQuota()));
} else {
return Result.success();
}
}
return null;
return Result.error("经费查询错误!");
}
@Override
public NutMap findOne(String id) {
return null;
}
}