From b43147312707bbf4d3a8c14d9ea8fcae16b767cd Mon Sep 17 00:00:00 2001 From: zhouhefeng Date: Thu, 21 May 2026 11:55:32 +0800 Subject: [PATCH 1/2] commit --- .../sms/impl/jshvc/SmsJshvcServiceImpl.java | 19 ++++++- .../app/todo/platform/TodoPlatformConfig.java | 52 +++++++++++++------ .../todo/service/impl/TodoServiceImpl.java | 25 ++++++--- 3 files changed, 71 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/budwk/app/base/sms/impl/jshvc/SmsJshvcServiceImpl.java b/src/main/java/com/budwk/app/base/sms/impl/jshvc/SmsJshvcServiceImpl.java index b973050..4ad7682 100644 --- a/src/main/java/com/budwk/app/base/sms/impl/jshvc/SmsJshvcServiceImpl.java +++ b/src/main/java/com/budwk/app/base/sms/impl/jshvc/SmsJshvcServiceImpl.java @@ -14,6 +14,7 @@ import com.wisedu.casp.sdk.api.mc.recallMsg.RecallMsgResponse; import com.wisedu.casp.sdk.core.Client; import com.wisedu.casp.sdk.core.DefaultClient; import lombok.extern.slf4j.Slf4j; +import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.json.Json; import org.nutz.lang.Lang; @@ -31,6 +32,9 @@ import java.util.List; @IocBean public class SmsJshvcServiceImpl implements SmsService { + @Inject + private TodoPlatformConfig todoPlatformConfig; + @Override public void sendSingleMessage(String loginName, String content) { this.sendSingleMessage(loginName, "智慧工会", content); @@ -109,7 +113,7 @@ public class SmsJshvcServiceImpl implements SmsService { @Override public void recallMsg(String msgId) { try { - Client client = new DefaultClient(TodoPlatformConfig.TODO_PLATFORM_BASE_URL, TodoPlatformConfig.TODO_APP_ID, TodoPlatformConfig.TODO_APP_SECRET); + Client client = createClient(); RecallMsgRequest request = new RecallMsgRequest(); request.setMsgId(msgId); @@ -143,7 +147,7 @@ public class SmsJshvcServiceImpl implements SmsService { } try { // 创建客户端 - Client client = new DefaultClient(TodoPlatformConfig.TODO_PLATFORM_BASE_URL, TodoPlatformConfig.TODO_APP_ID, TodoPlatformConfig.TODO_APP_SECRET); + Client client = createClient(); SendMsgRequest request = new SendMsgRequest(); request.setSubject(title); request.setContent(content); @@ -179,4 +183,15 @@ public class SmsJshvcServiceImpl implements SmsService { log.error("发送企业微信通知失败", e); } } + + /** + * 创建待办平台消息客户端,平台地址、appId、appSecret 均从 application 配置读取。 + */ + private Client createClient() { + return new DefaultClient( + todoPlatformConfig.getTodoPlatformBaseUrl(), + todoPlatformConfig.getTodoAppId(), + todoPlatformConfig.getTodoAppSecret() + ); + } } diff --git a/src/main/java/com/budwk/app/todo/platform/TodoPlatformConfig.java b/src/main/java/com/budwk/app/todo/platform/TodoPlatformConfig.java index 13aa988..ab1fb82 100644 --- a/src/main/java/com/budwk/app/todo/platform/TodoPlatformConfig.java +++ b/src/main/java/com/budwk/app/todo/platform/TodoPlatformConfig.java @@ -1,30 +1,48 @@ package com.budwk.app.todo.platform; +import lombok.Getter; +import org.nutz.ioc.impl.PropertiesProxy; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; + /** * @ClassName TodoPlatformConfig * @Author JyuHsin * @Date 2026/2/25 16:26 * @Version 1.0 - * @Description TODO + * @Description 待办平台配置,从 application 配置文件读取平台地址、鉴权参数和接口路径。 */ +@IocBean(create = "init") +@Getter public class TodoPlatformConfig { - // token 获取 - public static final String TOKEN_URL = "/accessToken"; - // 待办平台基础地址 - public static final String TODO_PLATFORM_BASE_URL = "https://gateway.jshvc.edu.cn"; - // 待办平台新增或者修改 - public static final String TODO_PLATFORM_SAVE_OR_UPDATE_URL = "/saveOrUpdate"; - // 待办平台修改地址 - public static final String TODO_PLATFORM_MODIFY_URL = "/modifyInfo"; - // 待办平台删除任务地址 - public static final String TODO_PLATFORM_DELETE_TASK_URL = "/delete"; - // 待办平台删除实例地址 - public static final String TODO_PLATFORM_DELETE_INSTANCE_URL = "/realDelete"; + @Inject + private PropertiesProxy conf; + + private String tokenUrl; + private String todoPlatformBaseUrl; + private String todoPlatformSaveOrUpdateUrl; + private String todoPlatformModifyUrl; + private String todoPlatformDeleteTaskUrl; + private String todoPlatformDeleteInstanceUrl; + private String todoAppId; + private String todoAppSecret; + private String redisKeyTodoAccessToken; + private Long todoRequestTimeout; + + public void init() { + // 配置项缺失时保留原硬编码默认值,避免未补齐配置导致已有环境启动失败。 + tokenUrl = conf.get("todo-platform.token-url", "/accessToken"); + todoPlatformBaseUrl = conf.get("todo-platform.base-url", "https://gateway.jshvc.edu.cn"); + todoPlatformSaveOrUpdateUrl = conf.get("todo-platform.save-or-update-url", "/saveOrUpdate"); + todoPlatformModifyUrl = conf.get("todo-platform.modify-url", "/modifyInfo"); + todoPlatformDeleteTaskUrl = conf.get("todo-platform.delete-task-url", "/delete"); + todoPlatformDeleteInstanceUrl = conf.get("todo-platform.delete-instance-url", "/realDelete"); + todoAppId = conf.get("todo-platform.app-id", "XXXXXXXXXXXXXXXXXXXXXX"); + todoAppSecret = conf.get("todo-platform.app-secret", "XXXXXXXXXXXXXXXXXXXXXX"); + redisKeyTodoAccessToken = "todo:token:"; + todoRequestTimeout = conf.getLong("todo-platform.request-timeout", 5000L); + } - public static final String TODO_APP_ID = "XXXXXXXXXXXXXXXXXXXXXX"; - public static final String TODO_APP_SECRET = "XXXXXXXXXXXXXXXXXXXXXX"; - public static final String REDIS_KEY_TODO_ACCESS_TOKEN = "todo:token:"; - public static final Long TODO_REQUEST_TIMEOUT = 5000L; } diff --git a/src/main/java/com/budwk/app/todo/service/impl/TodoServiceImpl.java b/src/main/java/com/budwk/app/todo/service/impl/TodoServiceImpl.java index 1fe3810..0c68058 100644 --- a/src/main/java/com/budwk/app/todo/service/impl/TodoServiceImpl.java +++ b/src/main/java/com/budwk/app/todo/service/impl/TodoServiceImpl.java @@ -58,6 +58,8 @@ public class TodoServiceImpl implements TodoService { private RedisService redisService; @Inject private FlowEngine flowEngine; + @Inject + private TodoPlatformConfig todoPlatformConfig; @Override public void saveTask(ProcessTask task) { @@ -79,7 +81,7 @@ public class TodoServiceImpl implements TodoService { List processorList = taskActors.stream().map(o -> new Processor(o.getActorAccount())).toList(); // 创建客户端 - Client client = new DefaultClient(TodoPlatformConfig.TODO_PLATFORM_BASE_URL, TodoPlatformConfig.TODO_APP_ID, TodoPlatformConfig.TODO_APP_SECRET); + Client client = createClient(); // 创建请求对象 SaveOrUpdateRequest request = new SaveOrUpdateRequest(); // 发起任务 @@ -111,7 +113,7 @@ public class TodoServiceImpl implements TodoService { insertModel.setApplicationModel(applicationModel); request.setInsertModel(Collections.singletonList(insertModel)); - /*Client channelClient = new DefaultClient(TodoPlatformConfig.TODO_PLATFORM_BASE_URL, TodoPlatformConfig.TODO_APP_ID, TodoPlatformConfig.TODO_APP_SECRET); + /*Client channelClient = createClient(); GetEnableChannelByTypeRequest channelByTypeRequest = new GetEnableChannelByTypeRequest(); channelByTypeRequest.setChannelType(ChannelType_Constants.QYWECHAT); GetEnableChannelByTypeResponse channelByTypeResponse = channelClient.execute(channelByTypeRequest); @@ -152,7 +154,7 @@ public class TodoServiceImpl implements TodoService { ProcessTaskVO taskVO = flowEngine.processTaskService().findById(task.getId()); // 创建客户端 - Client client = new DefaultClient(TodoPlatformConfig.TODO_PLATFORM_BASE_URL, TodoPlatformConfig.TODO_APP_ID, TodoPlatformConfig.TODO_APP_SECRET); + Client client = createClient(); // 创建请求对象 SaveOrUpdateRequest request = new SaveOrUpdateRequest(); @@ -193,7 +195,7 @@ public class TodoServiceImpl implements TodoService { log.info("修改待办任务,任务数据:{}", Json.toJson(task)); try { // 创建客户端 - Client client = new DefaultClient(TodoPlatformConfig.TODO_PLATFORM_BASE_URL, TodoPlatformConfig.TODO_APP_ID, TodoPlatformConfig.TODO_APP_SECRET); + Client client = createClient(); // 创建请求对象 TaskModifyInfoRequest request = new TaskModifyInfoRequest(); // 需要修改什么后面扩展吧 @@ -218,7 +220,7 @@ public class TodoServiceImpl implements TodoService { log.info("删除待办任务,任务ID:{}", taskId); try { // 创建客户端 - Client client = new DefaultClient(TodoPlatformConfig.TODO_PLATFORM_BASE_URL, TodoPlatformConfig.TODO_APP_ID, TodoPlatformConfig.TODO_APP_SECRET); + Client client = createClient(); // 创建请求对象 TaskRealDeleteRequest request = new TaskRealDeleteRequest(); request.setTaskId(taskId); @@ -240,7 +242,7 @@ public class TodoServiceImpl implements TodoService { log.info("删除待办流程,实例ID:{}", processInstanceId); try { // 创建客户端 - Client client = new DefaultClient(TodoPlatformConfig.TODO_PLATFORM_BASE_URL, TodoPlatformConfig.TODO_APP_ID, TodoPlatformConfig.TODO_APP_SECRET); + Client client = createClient(); // 创建请求对象 ProcessInstanceRealDeleteRequest request = new ProcessInstanceRealDeleteRequest(); request.setProcessInstanceId(processInstanceId); @@ -252,4 +254,15 @@ public class TodoServiceImpl implements TodoService { log.error("删除流程实例失败", e); } } + + /** + * 创建待办平台 SDK 客户端,平台地址、appId、appSecret 均从 application 配置读取。 + */ + private Client createClient() { + return new DefaultClient( + todoPlatformConfig.getTodoPlatformBaseUrl(), + todoPlatformConfig.getTodoAppId(), + todoPlatformConfig.getTodoAppSecret() + ); + } } From 4df9780044033070de8c8d786016a3c865d08394 Mon Sep 17 00:00:00 2001 From: zhouhefeng Date: Thu, 21 May 2026 17:21:20 +0800 Subject: [PATCH 2/2] commit --- dependency-reduced-pom.xml | 13 +- .../sys/controller/SysLoginController.java | 2 - ...mbursementDeputySchoolUnionController.java | 23 ++ .../service/ActivityReimbursementService.java | 30 +++ .../ActivityReimbursementServiceImpl.java | 219 ++++++++++++++++++ src/main/resources/logback.xml | 98 +++++++- .../deputySchoolUnion/index.html | 144 +++++++++++- 7 files changed, 514 insertions(+), 15 deletions(-) diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml index d83f4c9..862c522 100644 --- a/dependency-reduced-pom.xml +++ b/dependency-reduced-pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.budwk - v4 + zhgh_jshvc 5.6.0-plus @@ -130,6 +130,13 @@ + + com.wisedu.casp + casp-sdk + latest + system + ${project.basedir}/lib/casp-sdk-java_20260114.jar + @@ -159,11 +166,11 @@ 2.0.8 1.12.2 4.1.2 - 3.8.1 + 3.18.0 UTF-8 2.5.1 2.6.0-SNAPSHOT - 1.5.8 + 1.5.13 1.r.70-SNAPSHOT 4.0.11 diff --git a/src/main/java/com/budwk/app/sys/controller/SysLoginController.java b/src/main/java/com/budwk/app/sys/controller/SysLoginController.java index 9e1f822..1a95de1 100644 --- a/src/main/java/com/budwk/app/sys/controller/SysLoginController.java +++ b/src/main/java/com/budwk/app/sys/controller/SysLoginController.java @@ -63,7 +63,6 @@ public class SysLoginController { @Inject protected PropertiesProxy conf; -/* @At("") @Ok("re") @ApiOperation("用户本地登录页面") @@ -71,7 +70,6 @@ public class SysLoginController { public String login(HttpServletRequest req, HttpSession session) { return "beetl:/platform/sys/login.html"; } -*/ @At @Ok("re") diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementDeputySchoolUnionController.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementDeputySchoolUnionController.java index ec73c7f..35095b4 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementDeputySchoolUnionController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/controller/ActivityReimbursementDeputySchoolUnionController.java @@ -15,6 +15,7 @@ import com.budwk.app.flow.service.FlowCommonService; import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.models.ActivityReimbursementInfo; import com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.service.ActivityReimbursementService; +import com.budwk.app.zhgh.activity.declarereimbursement.vo.ActivityReimbursementBudgetSummaryVO; import com.budwk.app.zhgh.activity.declarereimbursement.vo.CommonPageParam; import com.budwk.app.zhgh.dayofficework.outlay.activityBudget.models.ActivityBudget; import io.swagger.annotations.ApiOperation; @@ -67,6 +68,7 @@ public class ActivityReimbursementDeputySchoolUnionController { info.userName, info.mobile, info.loginName, + info.year, info.applyTime, info.activityName, info.activityAddress, @@ -78,6 +80,8 @@ public class ActivityReimbursementDeputySchoolUnionController { info.activityNumber, info.activityReimbursementMode, info.outlayManageSource, + info.unionId, + info.clubId, info.deductionBudgetId, info.actualMoney, outlay.budgetReimburseType, @@ -142,6 +146,25 @@ public class ActivityReimbursementDeputySchoolUnionController { return Result.success().addData(pagination); } + @At + @ApiOperation("预算/报销汇总表") + @SaCheckPermission("activityReimbursement.deputySchoolUnion") + public Result budgetSummaryData(CommonPageParam pageParam) { + if (pageParam.getYear() == null) { + return Result.error("请选择年度"); + } + if (!List.of("ACTIVITY_BUDGET_TYPE_TWO", "ACTIVITY_BUDGET_TYPE_THREE").contains(pageParam.getOutlayManageSource())) { + return Result.error("请选择分工会或协会"); + } + List list = activityReimbursementService.getBudgetSummary( + pageParam.getYear(), + pageParam.getUnionId(), + pageParam.getClubId(), + pageParam.getOutlayManageSource() + ); + return Result.success(list); + } + @At @SLog(tag = "报销", msg = "校工会副主席审核了一条记录") diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/service/ActivityReimbursementService.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/service/ActivityReimbursementService.java index 44f0527..ee5a59d 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/service/ActivityReimbursementService.java +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/service/ActivityReimbursementService.java @@ -2,7 +2,11 @@ package com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.service; import com.budwk.app.base.result.Result; import com.budwk.app.base.service.BaseService; +import com.budwk.app.base.page.Pagination; import com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.models.ActivityReimbursementInfo; +import com.budwk.app.zhgh.activity.declarereimbursement.vo.ActivityReimbursementRecordVO; +import com.budwk.app.zhgh.activity.declarereimbursement.vo.ActivityReimbursementBudgetSummaryVO; +import com.budwk.app.zhgh.activity.declarereimbursement.vo.CommonPageParam; import org.nutz.dao.sql.Sql; import org.nutz.lang.util.NutMap; @@ -34,4 +38,30 @@ public interface ActivityReimbursementService extends BaseService getBudgetSummary(Integer year, String unionId, String clubId, String outlayManageSource); + + /** + * 分页查询所有已完成的费用报销记录。 + * + * @param pageParam 查询参数,包含年度、申报人关键字、报销模式、经费类型、预算条目、分工会和协会筛选条件 + * @return 分页 VO,列表字段用于前端展示申报人、项目名称、报销模式、经费类型、预算条目、报销金额、申报单位/协会和申报时间 + */ + Pagination queryReimbursementRecordPage(CommonPageParam pageParam); + + /** + * 按费用报销记录列表的同一套查询条件统计报销金额合计。 + * + * @param pageParam 查询参数,包含年度、申报人关键字、报销模式、经费类型、预算条目、分工会和协会筛选条件 + * @return 当前查询条件下所有已完成报销记录的金额合计 + */ + BigDecimal queryReimbursementRecordSummaryMoney(CommonPageParam pageParam); + } diff --git a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/service/impl/ActivityReimbursementServiceImpl.java b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/service/impl/ActivityReimbursementServiceImpl.java index fa2560d..2d9dd76 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/service/impl/ActivityReimbursementServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/activity/declarereimbursement/reimbursement/service/impl/ActivityReimbursementServiceImpl.java @@ -3,18 +3,24 @@ package com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.service.i import cn.hutool.core.date.DateUtil; 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.result.Result; import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.base.utils.PageUtil; import com.budwk.app.web.commons.auth.utils.AuthUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.models.ActivityReimbursementInfo; import com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.service.ActivityReimbursementService; +import com.budwk.app.zhgh.activity.declarereimbursement.vo.ActivityReimbursementRecordVO; +import com.budwk.app.zhgh.activity.declarereimbursement.vo.ActivityReimbursementBudgetSummaryVO; +import com.budwk.app.zhgh.activity.declarereimbursement.vo.CommonPageParam; import com.budwk.app.zhgh.dayofficework.outlay.activityBudget.models.ActivityBudget; 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.dao.util.cri.SqlExpressionGroup; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.lang.Lang; import org.nutz.lang.util.NutMap; @@ -155,4 +161,217 @@ public class ActivityReimbursementServiceImpl extends BaseServiceImpl getBudgetSummary(Integer year, String unionId, String clubId, String outlayManageSource) { + if (Objects.equals("ACTIVITY_BUDGET_TYPE_TWO", outlayManageSource)) { + return getUnionBudgetSummary(year, unionId); + } + if (Objects.equals("ACTIVITY_BUDGET_TYPE_THREE", outlayManageSource)) { + return getClubBudgetSummary(year, clubId); + } + return List.of(); + } + + @Override + public Pagination queryReimbursementRecordPage(CommonPageParam pageParam) { + Sql sql = Sqls.create(""" + SELECT + info.id, + info.userName, + info.loginName, + info.activityName, + info.activityReimbursementMode, + info.outlayManageSource, + outlay.budgetReimburseType, + info.actualMoney, + info.declareUnitName, + info.applyTime, + ins.id AS instanceId, + ins.state AS instanceState, + ins.processDefineId AS instanceProcessDefineId + FROM + activity_reimbursement_info info + LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id + LEFT JOIN activity_budget outlay ON outlay.id = info.deductionBudgetId + $condition + """); + Cnd cnd = buildReimbursementRecordCondition(pageParam); + String orderName = getReimbursementRecordOrderName(pageParam.getPageOrderName()); + if (StrUtil.isAllBlank(orderName, pageParam.getPageOrderBy())) { + cnd.desc("info.applyTime"); + } else { + cnd.orderBy(orderName, PageUtil.getOrder(pageParam.getPageOrderBy())); + } + sql.setCondition(cnd); + return listPageVO(pageParam, sql, ActivityReimbursementRecordVO.class); + } + + @Override + public BigDecimal queryReimbursementRecordSummaryMoney(CommonPageParam pageParam) { + Sql sql = Sqls.create(""" + SELECT + COALESCE(SUM(info.actualMoney), 0) AS summaryMoney + FROM + activity_reimbursement_info info + LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id + LEFT JOIN activity_budget outlay ON outlay.id = info.deductionBudgetId + $condition + """); + sql.setCondition(buildReimbursementRecordCondition(pageParam)); + NutMap map = fetchMap(sql); + Object summaryMoney = map.get("summaryMoney"); + return summaryMoney == null ? BigDecimal.ZERO : new BigDecimal(summaryMoney.toString()); + } + + /** + * 前端表格排序字段白名单,避免任意字段拼接到 SQL。 + */ + private String getReimbursementRecordOrderName(String pageOrderName) { + if (StrUtil.isBlank(pageOrderName)) { + return ""; + } + if (Objects.equals("loginName", pageOrderName)) { + return "info.loginName"; + } + if (Objects.equals("declareUnitName", pageOrderName)) { + return "info.declareUnitName"; + } + if (Objects.equals("applyTime", pageOrderName)) { + return "info.applyTime"; + } + if (Objects.equals("actualMoney", pageOrderName)) { + return "info.actualMoney"; + } + return ""; + } + + /** + * 费用报销记录查询条件,列表和汇总金额共用,保证两处统计口径一致。 + */ + private Cnd buildReimbursementRecordCondition(CommonPageParam pageParam) { + Cnd cnd = Cnd.NEW(); + cnd.and("ins.state", "=", 20); + cnd.andEX("YEAR(info.applyTime)", "=", pageParam.getYear()); + cnd.andEX("info.activityReimbursementMode", "=", pageParam.getActivityReimbursementMode()); + cnd.andEX("info.outlayManageSource", "=", pageParam.getOutlayManageSource()); + cnd.andEX("outlay.budgetReimburseType", "=", pageParam.getBudgetReimburseType()); + cnd.andEX("info.unionId", "=", pageParam.getUnionId()); + cnd.andEX("info.clubId", "=", pageParam.getClubId()); + if (StrUtil.isNotBlank(pageParam.getSearchKeyword())) { + SqlExpressionGroup seg = new SqlExpressionGroup(); + seg.orLike("info.userName", pageParam.getSearchKeyword()); + seg.orLike("info.loginName", pageParam.getSearchKeyword()); + cnd.and(seg); + } + return cnd; + } + + /** + * 分工会维度汇总。 + * 预算金额取指定年度审核通过的分工会活动预算,费用报销汇总取指定年度已完成流程的报销实际金额。 + */ + private List getUnionBudgetSummary(Integer year, String unionId) { + Sql sql = Sqls.create(""" + SELECT + @year AS year, + su.name AS name, + COALESCE(budget.totalBudgetMoney, 0) AS budgetMoney, + COALESCE(reimburse.actualMoney, 0) AS reimbursementMoney + FROM + sys_union su + LEFT JOIN ( + SELECT + ab.unionId, + SUM(ab.totalBudgetMoney) AS totalBudgetMoney + FROM + activity_budget ab + LEFT JOIN wf_process_instance ins ON ins.businessNo = ab.id + WHERE + ins.state = 20 + AND ab.isSchoolBudget = 0 + AND ab.outlayManageSource = 'ACTIVITY_BUDGET_TYPE_TWO' + AND YEAR(ab.applyDate) = @year + GROUP BY + ab.unionId + ) budget ON budget.unionId = su.id + LEFT JOIN ( + SELECT + info.unionId, + SUM(info.actualMoney) AS actualMoney + FROM + activity_reimbursement_info info + LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id + WHERE + ins.state = 20 + AND info.outlayManageSource = 'ACTIVITY_BUDGET_TYPE_TWO' + AND info.`year` = @year + GROUP BY + info.unionId + ) reimburse ON reimburse.unionId = su.id + $condition + """).setParam("year", year); + Cnd cnd = Cnd.NEW(); + cnd.andEX("su.id", "=", unionId); + cnd.and(new SqlExpressionGroup() + .or("budget.totalBudgetMoney", "is not", null) + .or("reimburse.actualMoney", "is not", null)); + cnd.asc("su.unionCode"); + sql.setCondition(cnd); + return listVO(sql, ActivityReimbursementBudgetSummaryVO.class); + } + + /** + * 协会维度汇总。 + * 预算金额取指定年度审核通过的协会活动预算,费用报销汇总取指定年度已完成流程的报销实际金额。 + */ + private List getClubBudgetSummary(Integer year, String clubId) { + Sql sql = Sqls.create(""" + SELECT + @year AS year, + sc.clubName AS name, + COALESCE(budget.totalBudgetMoney, 0) AS budgetMoney, + COALESCE(reimburse.actualMoney, 0) AS reimbursementMoney + FROM + sys_club sc + LEFT JOIN ( + SELECT + ab.clubId, + SUM(ab.totalBudgetMoney) AS totalBudgetMoney + FROM + activity_budget ab + LEFT JOIN wf_process_instance ins ON ins.businessNo = ab.id + WHERE + ins.state = 20 + AND ab.isSchoolBudget = 0 + AND ab.outlayManageSource = 'ACTIVITY_BUDGET_TYPE_THREE' + AND YEAR(ab.applyDate) = @year + GROUP BY + ab.clubId + ) budget ON budget.clubId = sc.id + LEFT JOIN ( + SELECT + info.clubId, + SUM(info.actualMoney) AS actualMoney + FROM + activity_reimbursement_info info + LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id + WHERE + ins.state = 20 + AND info.outlayManageSource = 'ACTIVITY_BUDGET_TYPE_THREE' + AND info.`year` = @year + GROUP BY + info.clubId + ) reimburse ON reimburse.clubId = sc.id + $condition + """).setParam("year", year); + Cnd cnd = Cnd.NEW(); + cnd.andEX("sc.id", "=", clubId); + cnd.and(new SqlExpressionGroup() + .or("budget.totalBudgetMoney", "is not", null) + .or("reimburse.actualMoney", "is not", null)); + cnd.asc("sc.clubCode"); + sql.setCondition(cnd); + return listVO(sql, ActivityReimbursementBudgetSummaryVO.class); + } } diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index 4a00be9..87e2ef2 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -1,17 +1,85 @@ - + - + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - + + + + + + ${LOG_HOME}/app.log + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + ${LOG_HOME}/app-%d{yyyy-MM-dd}.log + 300 + + + + + + + + + + + + + + + + + + + + + + + + <!– ERROR级别日志文件配置 –> ${LOG_HOME}/error.log @@ -41,19 +109,31 @@ ${LOG_HOME}/error-%d{yyyy-MM-dd}.log - 30 + 300 - + <!– 框架日志级别 –> + <!– –> - + <!– 日志级别和appender的关联 –> + - + --> + + + + diff --git a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/deputySchoolUnion/index.html b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/deputySchoolUnion/index.html index d7a1091..7286a93 100644 --- a/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/deputySchoolUnion/index.html +++ b/src/main/resources/views/platform/zhgh/activity/declarereimbursement/reimbursement/deputySchoolUnion/index.html @@ -64,6 +64,7 @@ layout("/layouts/platform.html"){ 已审核 未审核 + 预算/报销汇总表 {{ row.activityReimbursementMode==='activity'?'活动报销' : '日常报销' }} +