This commit is contained in:
2025-12-09 09:58:25 +08:00
parent ade83bf8d5
commit 7e4fd94817
44 changed files with 1548 additions and 774 deletions
@@ -92,6 +92,11 @@ RoleConstant {
PSYCHOLOGY_DOCTOR("心理咨询师"),
LEGAL_DOCTOR("法律顾问"),
UNION_REIMBURSEMENT_MANAGER("分工会报销负责人"),
CLUB_REIMBURSEMENT_MANAGER("协会报销负责人"),
SCHOOL_REIMBURSEMENT_MANAGER("校工会报销负责人"),
;
/**
* 避免和枚举类的name冲突
@@ -3,6 +3,7 @@ package com.budwk.app.zhgh.activity.declarereimbursement.declare.models;
import cn.hutool.json.JSONObject;
import com.budwk.app.base.model.BaseModel;
import com.budwk.app.zhgh.activity.declarereimbursement.vo.ActivityBudgetVO;
import io.swagger.annotations.ApiOperation;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*;
@@ -22,6 +23,7 @@ import java.util.List;
@Data
@Table
@EqualsAndHashCode(callSuper = true)
@ApiOperation(value = "活动经费申报信息")
public class ActivityDeclareInfo extends BaseModel {
@Name
@@ -6,6 +6,7 @@ import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.constant.RoleConstant;
import com.budwk.app.base.page.Pagination;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.utils.PageUtil;
@@ -15,11 +16,13 @@ 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.AuthUtil;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.activity.declarereimbursement.declare.models.ActivityDeclareInfo;
import com.budwk.app.zhgh.activity.declarereimbursement.vo.CommonPageParam;
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.dayofficework.outlay.outlayReimburse.service.OutlayReimburseApplyService;
import io.swagger.annotations.ApiOperation;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
@@ -38,7 +41,9 @@ import org.nutz.mvc.annotation.Param;
import javax.validation.Valid;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
* @version 1.0
@@ -61,6 +66,8 @@ public class ActivityReimbursementApplyController {
private FlowCommonService flowCommonService;
@Inject
private ActivityReimbursementService activityReimbursementService;
@Inject
private OutlayReimburseApplyService outlayReimburseApplyService;
@At("")
@SaCheckPermission("activityReimbursement.apply")
@@ -80,6 +87,10 @@ public class ActivityReimbursementApplyController {
@SaCheckPermission("member.apply.submit")
@SLog(tag = "活动申报", msg = "保存申请,申请人: ${args[0].username}")
public Result save(@Param("data") ActivityReimbursementInfo activityReimbursementInfo) {
activityReimbursementInfo.setUserId(SecurityUtil.getUserId());
activityReimbursementInfo.setLoginName(SecurityUtil.getUserLoginname());
activityReimbursementInfo.setUserName(SecurityUtil.getUserUsername());
activityReimbursementInfo.setApplyTime(new Date());
if (StrUtil.isBlank(activityReimbursementInfo.getDeclareId())) {
activityReimbursementInfo.setDeclareId(activityReimbursementInfo.getDeclareId());
}
@@ -88,6 +99,12 @@ public class ActivityReimbursementApplyController {
.mapToDouble(v -> ObjectUtil.defaultIfNull(v.getActualPrice(), 0D))
.sum();
activityReimbursementInfo.setActualMoney(new BigDecimal(sum));
// 验证金额
Result result = activityReimbursementService.bxAddValidate(activityReimbursementInfo.getDeductionBudgetId(), activityReimbursementInfo.getActualMoney(), activityReimbursementInfo.getOutlayManageSource(), activityReimbursementInfo.getClubId());
if (Lang.isNotEmpty(result)) {
return result;
}
dao.insertOrUpdate(activityReimbursementInfo);
return Result.success();
}
@@ -98,7 +115,11 @@ public class ActivityReimbursementApplyController {
@Aop(TransAop.READ_COMMITTED)
@SaCheckPermission("member.apply.submit")
@SLog(tag = "活动申报", msg = "提交申请,申请人: ${args[0].username}")
public Result submit(@Param("data") ActivityReimbursementInfo activityReimbursementInfo){
public Result submit(@Param("data") ActivityReimbursementInfo activityReimbursementInfo) {
activityReimbursementInfo.setUserId(SecurityUtil.getUserId());
activityReimbursementInfo.setLoginName(SecurityUtil.getUserLoginname());
activityReimbursementInfo.setUserName(SecurityUtil.getUserUsername());
activityReimbursementInfo.setApplyTime(new Date());
if (StrUtil.isBlank(activityReimbursementInfo.getDeclareId())) {
activityReimbursementInfo.setDeclareId(activityReimbursementInfo.getDeclareId());
}
@@ -108,13 +129,20 @@ public class ActivityReimbursementApplyController {
.mapToDouble(v -> ObjectUtil.defaultIfNull(v.getActualPrice(), 0D))
.sum();
activityReimbursementInfo.setActualMoney(new BigDecimal(sum));
// 验证金额
Result result = activityReimbursementService.bxAddValidate(activityReimbursementInfo.getDeductionBudgetId(), activityReimbursementInfo.getActualMoney(), activityReimbursementInfo.getOutlayManageSource(), activityReimbursementInfo.getClubId());
if (Lang.isNotEmpty(result)) {
return result;
}
dao.insertOrUpdate(activityReimbursementInfo);
// 开启流程实例
Dict args = Dict.create();
args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode());
args.set(FlowConst.FORM_DATA, activityReimbursementInfo);
args.set("type", activityReimbursementInfo.getActivityType());
args.set("outlayManageSource", activityReimbursementInfo.getOutlayManageSource());
ProcessInstance instance = flowEngine.startProcessInstanceByKey("HDBX", activityReimbursementInfo.getId(), SecurityUtil.getUserId(), args);
// 自动完成第一个申请任务
@@ -141,6 +169,13 @@ public class ActivityReimbursementApplyController {
.mapToDouble(v -> ObjectUtil.defaultIfNull(v.getActualPrice(), 0D))
.sum();
activityReimbursementInfo.setActualMoney(new BigDecimal(sum));
// 验证金额
Result result = activityReimbursementService.bxAddValidate(activityReimbursementInfo.getDeductionBudgetId(), activityReimbursementInfo.getActualMoney(), activityReimbursementInfo.getOutlayManageSource(), activityReimbursementInfo.getClubId());
if (Lang.isNotEmpty(result)) {
return result;
}
dao.insertOrUpdate(activityReimbursementInfo);
Dict dict = Dict.create();
@@ -154,29 +189,48 @@ public class ActivityReimbursementApplyController {
@At
@ApiOperation("获取当前用户活动报销")
@SaCheckPermission("activityReimbursement.apply")
public Result getActivityReimbursementByUser(String id) {
public Result getActivityReimbursementByUser(String id, String outlayManageSource, String clubId) {
String activityType = "";
if (StrUtil.isNotBlank(id)) {
ActivityReimbursementInfo reimbursementInfo = dao.fetch(ActivityReimbursementInfo.class, id);
if (Objects.equals(reimbursementInfo.getActivityReimbursementMode(), "daily")) {
return Result.success();
}
ActivityDeclareInfo info = dao.fetch(ActivityDeclareInfo.class, reimbursementInfo.getDeclareId());
return Result.success().addData(List.of(info));
}
// 查询已经报销成功的记录
Cnd reiCnd = Cnd.NEW();
reiCnd.and("info.outlayManageSource", "=", outlayManageSource);
if (Objects.equals(outlayManageSource, "ACTIVITY_BUDGET_TYPE_TWO")) {
reiCnd.and("info.unionId", "=", SecurityUtil.getUnionId());
} else if (Objects.equals(outlayManageSource, "ACTIVITY_BUDGET_TYPE_THREE")) {
reiCnd.and("info.clubId", "=", clubId);
}
reiCnd.and("ins.state", "in", List.of(10, 20));
Sql reiSql = Sqls.create("""
SELECT
info.declareId
FROM
activity_reimbursement_info info
LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id
WHERE
userId = @userId
AND ins.state IN (10, 20)
""").setParam("userId", SecurityUtil.getUserId());
$condition
""");
reiSql.setCondition(reiCnd);
reiSql.setCallback(Sqls.callback.strList());
dao.execute(reiSql);
List<String> reiDecIdList = reiSql.getList(String.class);
Sql sql = Sqls.create("select declareId from activity_reimbursement_info where userId = @userId").setParam("userId", SecurityUtil.getUserId());
Cnd cnd = Cnd.NEW();
cnd.and("outlayManageSource", "=", outlayManageSource);
if (Objects.equals(outlayManageSource, "ACTIVITY_BUDGET_TYPE_TWO")) {
cnd.and("unionId", "=", SecurityUtil.getUnionId());
} else if (Objects.equals(outlayManageSource, "ACTIVITY_BUDGET_TYPE_THREE")) {
cnd.and("clubId", "=", clubId);
}
Sql sql = Sqls.create("select declareId from activity_reimbursement_info $condition");
sql.setCondition(cnd);
sql.setCallback(Sqls.callback.strList());
dao.execute(sql);
List<String> declareIdList = sql.getList(String.class);
@@ -189,23 +243,32 @@ public class ActivityReimbursementApplyController {
LEFT JOIN wf_process_instance ins ON info.id = ins.businessNo
$condition
""");
Cnd cnd = Cnd.NEW();
Cnd applyCnd = Cnd.NEW();
if (Objects.equals(outlayManageSource, "ACTIVITY_BUDGET_TYPE_TWO")) {
applyCnd.and("info.unionId", "=", SecurityUtil.getUnionId());
activityType="BRANCH_UNION";
} else if (Objects.equals(outlayManageSource, "ACTIVITY_BUDGET_TYPE_THREE")) {
applyCnd.and("info.clubId", "=", clubId);
activityType="CLUB";
}else{
activityType="SCHOOL_UNION";
}
applyCnd.and("info.activityType", "=", activityType);
if (Lang.isNotEmpty(declareIdList)) {
cnd.and("info.id", "not in", declareIdList);
applyCnd.and("info.id", "not in", declareIdList);
}
if (Lang.isNotEmpty(reiDecIdList)) {
cnd.and("info.id", "not in", reiDecIdList);
applyCnd.and("info.id", "not in", reiDecIdList);
}
cnd.and("info.userId", "=", SecurityUtil.getUserId());
cnd.and("ins.state", "=", 20);
applySql.setCondition(cnd);
applyCnd.and("ins.state", "=", 20);
applySql.setCondition(applyCnd);
List<NutMap> resultList = activityReimbursementService.listMap(applySql);
return Result.success().addData(resultList);
}
@At
@ApiOperation("获取收款人卡号")
@SaCheckPermission("activityReimbursement.apply")
@@ -234,4 +297,13 @@ public class ActivityReimbursementApplyController {
return Result.success().addData(map);
}
@At
@ApiOperation("获取申报的记录")
@SaCheckPermission("activityReimbursement.apply")
public Result getBudgetByYear(String outlayManageSource, String clubId) {
List<NutMap> budgetMoney = activityReimbursementService.getBudgetMoney(outlayManageSource, clubId);
return Result.success(budgetMoney);
}
}
@@ -69,6 +69,11 @@ public class ActivityReimbursementBranchUnionController {
info.activityType,
info.activityContent,
info.activityNumber,
info.activityReimbursementMode,
info.outlayManageSource,
info.deductionBudgetId,
info.actualMoney,
outlay.budgetReimburseType,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
@@ -89,6 +94,7 @@ public class ActivityReimbursementBranchUnionController {
wf_process_task t
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
LEFT JOIN activity_reimbursement_info info ON info.id = ins.businessNo
LEFT JOIN activity_budget outlay on info.deductionBudgetId=outlay.id
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
@@ -99,6 +105,9 @@ public class ActivityReimbursementBranchUnionController {
cnd.and("t.taskName", "=", "1e4cc473-beae-427d-b9dc-c1c4d0eb07c8");
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
cnd.andEX("outlay.budgetReimburseType", "=" , pageParam.getBudgetReimburseType());
cnd.andEX("info.outlayManageSource", "=", pageParam.getOutlayManageSource());
cnd.andEX("info.activityReimbursementMode", "=", pageParam.getActivityReimbursementMode());
if (pageParam.getAudit()) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
@@ -69,6 +69,11 @@ public class ActivityReimbursementClubPrincipalController {
info.activityType,
info.activityContent,
info.activityNumber,
info.activityReimbursementMode,
info.outlayManageSource,
info.deductionBudgetId,
info.actualMoney,
outlay.budgetReimburseType,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
@@ -89,6 +94,7 @@ public class ActivityReimbursementClubPrincipalController {
wf_process_task t
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
LEFT JOIN activity_reimbursement_info info ON info.id = ins.businessNo
LEFT JOIN activity_budget outlay on info.deductionBudgetId=outlay.id
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
@@ -99,6 +105,9 @@ public class ActivityReimbursementClubPrincipalController {
cnd.and("t.taskName", "=", "5afcf810-7a8b-4896-9aa7-c99995e0856b");
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
cnd.andEX("outlay.budgetReimburseType", "=" , pageParam.getBudgetReimburseType());
cnd.andEX("info.outlayManageSource", "=", pageParam.getOutlayManageSource());
cnd.andEX("info.activityReimbursementMode", "=", pageParam.getActivityReimbursementMode());
if (pageParam.getAudit()) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
@@ -97,6 +97,10 @@ public class ActivityReimbursementMineController {
info.activityType,
info.activityContent,
info.activityNumber,
info.activityReimbursementMode,
info.outlayManageSource,
info.deductionBudgetId,
info.actualMoney,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
@@ -144,7 +148,19 @@ public class ActivityReimbursementMineController {
@ApiOperation("活动报销,查看活动报销")
@SaCheckPermission("activityReimbursement.mine")
public Result findOne(@Valid String id) {
ActivityReimbursementInfo info = dao.fetch(ActivityReimbursementInfo.class, id);
Sql sql = Sqls.create("""
SELECT
info.*,
ab.activityMatter deductionBudgetName
FROM
`activity_reimbursement_info` info
LEFT JOIN activity_budget ab ON ab.id = info.deductionBudgetId
WHERE
info.id = @id
""").setParam("id", id);
sql.setCallback(Sqls.callback.map());
dao.execute(sql);
NutMap info = (NutMap) sql.getResult();
return Result.success().addData(info);
}
@@ -69,6 +69,11 @@ public class ActivityReimbursementSchoolPrincipalController {
info.activityType,
info.activityContent,
info.activityNumber,
info.activityReimbursementMode,
info.outlayManageSource,
info.deductionBudgetId,
info.actualMoney,
outlay.budgetReimburseType,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
@@ -89,6 +94,7 @@ public class ActivityReimbursementSchoolPrincipalController {
wf_process_task t
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
LEFT JOIN activity_reimbursement_info info ON info.id = ins.businessNo
LEFT JOIN activity_budget outlay on info.deductionBudgetId=outlay.id
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
@@ -99,6 +105,9 @@ public class ActivityReimbursementSchoolPrincipalController {
cnd.and("t.taskName", "=", "6dd2e8b3-fd0d-4b35-bb2a-1eef227cba96");
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
cnd.andEX("outlay.budgetReimburseType", "=" , pageParam.getBudgetReimburseType());
cnd.andEX("info.outlayManageSource", "=", pageParam.getOutlayManageSource());
cnd.andEX("info.activityReimbursementMode", "=", pageParam.getActivityReimbursementMode());
if (pageParam.getAudit()) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
@@ -1,23 +1,34 @@
package com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.lang.Dict;
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.utils.PageUtil;
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.flow.service.FlowCommonService;
import com.budwk.app.sys.models.Sys_home_activity;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.activity.culture.models.ActivityTissue;
import com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.service.ActivityReimbursementSchoolUnionService;
import com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.service.ActivityReimbursementService;
import com.budwk.app.zhgh.activity.declarereimbursement.vo.CommonPageParam;
import io.swagger.annotations.ApiOperation;
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.json.Json;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import java.util.List;
@@ -37,6 +48,11 @@ public class ActivityReimbursementSchoolUnionController {
@Inject
private ActivityReimbursementService activityReimbursementService;
@Inject
private ActivityReimbursementSchoolUnionService activityReimbursementSchoolUnionService;
@At("")
@SaCheckPermission("activityReimbursement.schoolUnion")
@Ok("beetl:/platform/zhgh/activity/declarereimbursement/reimbursement/schoolunion/index.html")
@@ -69,6 +85,11 @@ public class ActivityReimbursementSchoolUnionController {
info.activityType,
info.activityContent,
info.activityNumber,
info.activityReimbursementMode,
info.outlayManageSource,
info.deductionBudgetId,
info.actualMoney,
outlay.budgetReimburseType,
ins.id AS instanceId,
ins.businessNo,
ins.state instanceState,
@@ -89,6 +110,7 @@ public class ActivityReimbursementSchoolUnionController {
wf_process_task t
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
LEFT JOIN activity_reimbursement_info info ON info.id = ins.businessNo
LEFT JOIN activity_budget outlay on info.deductionBudgetId=outlay.id
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
@@ -99,6 +121,9 @@ public class ActivityReimbursementSchoolUnionController {
cnd.and("t.taskName", "=", "47bfdf53-288c-4352-a403-0653483b54eb");
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
cnd.andEX("outlay.budgetReimburseType", "=" , pageParam.getBudgetReimburseType());
cnd.andEX("info.outlayManageSource", "=", pageParam.getOutlayManageSource());
cnd.andEX("info.activityReimbursementMode", "=", pageParam.getActivityReimbursementMode());
if (pageParam.getAudit()) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
@@ -116,4 +141,13 @@ public class ActivityReimbursementSchoolUnionController {
Pagination<NutMap> pagination = activityReimbursementService.listPageMap(pageParam.getPageNumber(), pageParam.getPageSize(), sql);
return Result.success().addData(pagination);
}
@At
@SLog(tag = "报销", msg = "校工会审核了一条记录")
@SaCheckPermission("activityReimbursement.schoolUnion")
public Result doReview(@Param("data") String param, String id) {
activityReimbursementSchoolUnionService.doReview( param, id);
return Result.success();
}
}
@@ -2,6 +2,7 @@ package com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.models;
import cn.hutool.json.JSONObject;
import com.budwk.app.zhgh.activity.declarereimbursement.declare.models.ActivityDeclareInfo;
import io.swagger.annotations.ApiOperation;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.nutz.dao.entity.annotation.*;
@@ -19,8 +20,9 @@ import java.util.List;
* @注释
*/
@Data
@Table
@Table("activity_reimbursement_info")
@EqualsAndHashCode(callSuper = true)
@ApiOperation(value = "报销信息")
public class ActivityReimbursementInfo extends ActivityDeclareInfo {
@Name
@@ -34,6 +36,21 @@ public class ActivityReimbursementInfo extends ActivityDeclareInfo {
@ColDefine(type = ColType.VARCHAR, width = 32)
private String declareId;
@Column
@Comment("报销模式")
@ColDefine(type = ColType.VARCHAR, width = 30)
private String activityReimbursementMode;
@Column
@Comment("经费类型")
@ColDefine(type = ColType.VARCHAR, width = 30)
private String outlayManageSource;
@Column
@Comment("扣款预算")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String deductionBudgetId;
@Column
@Comment("实际总金额")
@ColDefine(customType = "decimal(10,2)")
@@ -0,0 +1,10 @@
package com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.service;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.models.ActivityReimbursementInfo;
public interface ActivityReimbursementSchoolUnionService extends BaseService<ActivityReimbursementInfo> {
void doReview(String param, String id);
}
@@ -1,8 +1,13 @@
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.zhgh.activity.declarereimbursement.reimbursement.models.ActivityReimbursementInfo;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.util.NutMap;
import java.math.BigDecimal;
import java.util.List;
/**
* @version 1.0
@@ -15,4 +20,18 @@ public interface ActivityReimbursementService extends BaseService<ActivityReimbu
Sql getActivityUserNumAndMoneySql(Integer startYear, Integer endYear, Boolean isActivityMoney);
List<NutMap> getBudgetMoney(String outlayManageSource, String clubId);
/**
* 预算扣除预算验证
* @param deductionBudgetId
* @param moneyBig
* @param outlayManageSource
* @param clubId
* @return
*/
Result bxAddValidate(String deductionBudgetId, BigDecimal moneyBig, String outlayManageSource, String clubId);
}
@@ -0,0 +1,130 @@
package com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.ObjectUtil;
import com.budwk.app.base.exception.BaseException;
import com.budwk.app.base.service.impl.BaseServiceImpl;
import com.budwk.app.flow.service.FlowCommonService;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.activity.culture.models.ActivityTissue;
import com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.models.ActivityReimbursementInfo;
import com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.service.ActivityReimbursementSchoolUnionService;
import com.budwk.app.zhgh.dayofficework.outlay.activityBudget.models.ActivityBudget;
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.club.model.OutlayManageClub;
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.model.OutlayUseDetail;
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.school.model.OutlayManageSchool;
import com.budwk.app.zhgh.dayofficework.outlay.outlayManage.union.model.OutlayManageUnion;
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;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.json.Json;
/**
* @author zhf
* @date 2025/12/4 18:06
* @description
*/
@IocBean(args = {"refer:dao"})
public class ActivityReimbursementSchoolUnionServiceImpl extends BaseServiceImpl<ActivityReimbursementInfo> implements ActivityReimbursementSchoolUnionService {
public ActivityReimbursementSchoolUnionServiceImpl(Dao dao) {
super(dao);
}
@Inject
private FlowCommonService flowCommonService;
@Override
@Aop(TransAop.READ_COMMITTED)
public void doReview(String param, String id) {
Dict args = Json.fromJson(Dict.class, param);
if (args.getInt("submitType") == 1) {
ActivityReimbursementInfo info = dao().fetch(ActivityReimbursementInfo.class, id);
OutlayUseDetail detail = new OutlayUseDetail();
detail.setProjectName(info.getActivityName());
detail.setAdjustMoney(info.getActualMoney());
detail.setAdjustReason(info.getActivityName());
detail.setAdjustUserId(SecurityUtil.getUserId());
detail.setAdjustUserName(SecurityUtil.getUserUsername());
detail.setAdjustLoginName(SecurityUtil.getUserLoginname());
detail.setOutlayReimburseId(info.getId());
detail.setActivityTime(String.valueOf(info.getStartTime()));
// 更新校工会经费表
if (info.getOutlayManageSource().equals("ACTIVITY_BUDGET_TYPE_ONE")) {
detail.setActivityTime(String.valueOf(info.getApplyTime()));
OutlayManageSchool school = dao().fetch(OutlayManageSchool.class, Cnd.where("year", "=", DateUtil.thisYear()));
if (ObjectUtil.isEmpty(school)) {
throw new BaseException("该年份没有设置金额!");
}
if (school.getTotalQuota().subtract(school.getUsedQuota()).compareTo(info.getActualMoney()) < 0) {
throw new BaseException("剩余配额不足!剩余:" + school.getTotalQuota().subtract(school.getUsedQuota()));
}
school.setUsedQuota(school.getUsedQuota().add(info.getActualMoney()));
dao().updateIgnoreNull(school);
//添加使用记录到经费管理表
detail.setOutlayManageId(school.getId());
dao().insert(detail);
} else if (info.getOutlayManageSource().equals("ACTIVITY_BUDGET_TYPE_TWO")) {
ActivityBudget budget = dao().fetch(ActivityBudget.class, Cnd.where("id", "=", info.getDeductionBudgetId()));
if (ObjectUtil.isNotEmpty(budget)&&budget.getIsSchoolBudget()){
//如果分工会报销了校工会的余额
OutlayManageSchool school = dao().fetch(OutlayManageSchool.class, Cnd.where("year", "=", DateUtil.thisYear()));
if (ObjectUtil.isEmpty(school)) {
throw new BaseException("该年份没有设置金额!");
}
if (school.getTotalQuota().subtract(school.getUsedQuota()).compareTo(info.getActualMoney()) < 0) {
throw new BaseException("剩余配额不足!剩余:" + school.getTotalQuota().subtract(school.getUsedQuota()));
}
school.setUsedQuota(school.getUsedQuota().add(info.getActualMoney()));
dao().updateIgnoreNull(school);
//添加使用记录到经费管理表
detail.setOutlayManageId(school.getId());
dao().insert(detail);
}else{
// 更新分工会活动经费表
OutlayManageUnion manageUnion = dao().fetch(OutlayManageUnion.class,
Cnd.where("year", "=", DateUtil.thisYear())
.and("unionId", "=", info.getUnionId()));
if (ObjectUtil.isEmpty(manageUnion)) {
throw new BaseException("该年份没有设置金额!");
}
if (manageUnion.getTotalQuota().subtract(manageUnion.getUsedQuota()).compareTo(info.getActualMoney()) < 0) {
throw new BaseException("剩余配额不足!剩余:" + manageUnion.getTotalQuota().subtract(manageUnion.getUsedQuota()));
}
manageUnion.setUsedQuota(manageUnion.getUsedQuota().add(info.getActualMoney()));
dao().updateIgnoreNull(manageUnion);
//添加使用记录到经费管理表
detail.setOutlayManageId(manageUnion.getId());
dao().insert(detail);
}
}else if (info.getOutlayManageSource().equals("ACTIVITY_BUDGET_TYPE_THREE")){
// 更新分工会活动经费表
OutlayManageClub manageClub = dao().fetch(OutlayManageClub.class,
Cnd.where("year", "=", DateUtil.thisYear())
.and("clubId", "=", info.getClubId()));
if (ObjectUtil.isEmpty(manageClub)) {
throw new BaseException("该年份没有设置金额!");
}
if (manageClub.getTotalQuota().subtract(manageClub.getUsedQuota()).compareTo(info.getActualMoney()) < 0) {
throw new BaseException("剩余配额不足!剩余:" + manageClub.getTotalQuota().subtract(manageClub.getUsedQuota()));
}
manageClub.setUsedQuota(manageClub.getUsedQuota().add(info.getActualMoney()));
dao().updateIgnoreNull(manageClub);
//添加使用记录到经费管理表
detail.setOutlayManageId(manageClub.getId());
dao().insert(detail);
}
}
flowCommonService.executeTask(args);
}
}
@@ -1,12 +1,25 @@
package com.budwk.app.zhgh.activity.declarereimbursement.reimbursement.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.service.impl.BaseServiceImpl;
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.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.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.lang.util.NutMap;
import java.math.BigDecimal;
import java.util.List;
import java.util.Objects;
/**
* @version 1.0
@@ -53,4 +66,87 @@ public class ActivityReimbursementServiceImpl extends BaseServiceImpl<ActivityRe
""").setParam("startYear", startYear).setParam("endYear", endYear);
}
}
@Override
public List<NutMap> getBudgetMoney(String outlayManageSource, String clubId) {
String sqlStr = """
SELECT
ab.id,
ab.isSchoolBudget,
ab.schoolBudgetId,
ab.totalBudgetMoney,
ab.activityMatter
FROM
activity_budget ab
LEFT JOIN wf_process_instance ins ON ins.businessNo = ab.id
$condition
""";
//找出今年的预算
Sql sql = Sqls.create(sqlStr);
Cnd cnd = Cnd.NEW();
cnd.and("YEAR(ab.applyDate)", "=", DateUtil.thisYear());
cnd.and("ins.state", "=", 20);
cnd.and("ab.outlayManageSource", "=", outlayManageSource);
if (Objects.equals("ACTIVITY_BUDGET_TYPE_TWO", outlayManageSource)) {
cnd.and("ab.unionId", "=", SecurityUtil.getUnionId());
} else if (Objects.equals("ACTIVITY_BUDGET_TYPE_THREE", outlayManageSource)) {
cnd.and("ab.clubId", "=", clubId);
}
sql.setCondition(cnd);
List<NutMap> budgetList = listMap(sql);
Sql sql1 = Sqls.create("""
SELECT
info.deductionBudgetId,
info.actualMoney
FROM
`activity_reimbursement_info` info
LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id
WHERE
ins.state = 20
""");
List<NutMap> infoList = listMap(sql1);
budgetList.forEach(v -> {
double usedBudgetMoney = infoList.stream().filter(info -> info.getString("deductionBudgetId").equals(v.getString("id")))
.mapToDouble(info -> info.getDouble("actualMoney")).sum();
v.setv("usedBudgetMoney", usedBudgetMoney);
});
return budgetList;
}
@Override
@ApiOperation("预算验证")
public Result bxAddValidate(String deductionBudgetId, BigDecimal moneyBig, String outlayManageSource, String clubId) {
if (StrUtil.isAllEmpty(deductionBudgetId, outlayManageSource)) {
return Result.error("参数错误");
}
ActivityBudget budget = dao().fetch(ActivityBudget.class, deductionBudgetId);
if (Lang.isEmpty(budget)) {
return Result.error("预算不存在");
}
Sql sql = Sqls.create("""
SELECT
info.actualMoney
FROM
`activity_reimbursement_info` info
LEFT JOIN wf_process_instance ins ON ins.businessNo = info.id
WHERE
ins.state = 20 and info.deductionBudgetId=@deductionBudgetId
""").setParam("deductionBudgetId", budget.getId());
List<NutMap> infoList = listMap(sql);
double usedBudgetMoney = infoList.stream().mapToDouble(info -> info.getDouble("actualMoney")).sum();
BigDecimal usedBudgetMoneyBig = BigDecimal.valueOf(usedBudgetMoney);
if (usedBudgetMoneyBig.add(moneyBig).compareTo(budget.getTotalBudgetMoney()) > 0) {
BigDecimal subtract = budget.getTotalBudgetMoney().subtract(usedBudgetMoneyBig);
return Result.error("您申报的金额已超过总金额!当前预算还剩下:" + subtract);
}
return null;
}
}
@@ -30,6 +30,11 @@ public class CommonPageParam extends PageForm {
private String unionId;
private String activityReimbursementMode;
private String outlayManageSource;
private String budgetReimburseType;
public void buildSearch(Cnd cnd, String prefix) {
if (cnd == null) {
@@ -60,5 +65,6 @@ public class CommonPageParam extends PageForm {
cnd.andEX(prefix + "clubId", "=", this.getClubId());
}
}
}
@@ -57,8 +57,8 @@ public class ActivityBudgetApplyListController {
@At
@ApiOperation("分页查询")
@SaCheckPermission("activity.budget.applyList")
public Result pageData(PageForm pageForm, Integer year, String activityMatter) {
Sql sqlByApplyList = activityBudgetService.getSqlByApplyList(pageForm, year, activityMatter, Cnd.NEW());
public Result pageData(PageForm pageForm, Integer year, String activityMatter, String budgetReimburseType) {
Sql sqlByApplyList = activityBudgetService.getSqlByApplyList(pageForm, year, activityMatter, budgetReimburseType, Cnd.NEW());
Pagination pagination = activityBudgetService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sqlByApplyList);
return Result.success(pagination);
}
@@ -67,7 +67,7 @@ public class ActivityBudgetApplyListController {
@ApiOperation("批量删除申报数据")
@SaCheckPermission("activity.budget.applyList")
@Aop(TransAop.READ_COMMITTED)
@SLog( 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));
@@ -80,7 +80,7 @@ public class ActivityBudgetApplyListController {
@ApiOperation("删除一条申报数据")
@SaCheckPermission("activity.budget.applyList")
@Aop(TransAop.READ_COMMITTED)
@SLog( 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));
@@ -90,7 +90,7 @@ public class ActivityBudgetApplyListController {
@At
@ApiOperation("提交申报数据")
@SaCheckPermission("activity.budget.applyList")
@SLog( 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 ->
@@ -121,11 +121,11 @@ public class ActivityBudgetApplyListController {
@At
@ApiOperation("查询申报的金额")
@SaCheckPermission("activity.budget.applyList")
public Result getApplyMoney(Integer year, String activityMatter) {
public Result getApplyMoney(Integer year, String activityMatter, String budgetReimburseType) {
Cnd cnd = Cnd.NEW();
cnd.andEX("info.isSchoolBudget", "=", 0);
cnd.andEX("ins.state", "=", 20);
Sql sql = activityBudgetService.getSqlByApplyList(null, year, activityMatter, cnd);
Sql sql = activityBudgetService.getSqlByApplyList(null, year, activityMatter, budgetReimburseType, cnd);
sql.setCondition(cnd);
List<NutMap> list = activityBudgetService.listMap(sql);
double declareTotalBudgetMoney = list.stream().mapToDouble(map -> map.getDouble("declareTotalBudgetMoney")).sum();
@@ -137,9 +137,9 @@ public class ActivityBudgetApplyListController {
@At
@Ok("void")
@SaCheckPermission("activity.budget.applyList")
public void doExport(@Valid Integer year, String activityMatter, HttpServletResponse response) {
public void doExport(@Valid Integer year, String activityMatter, String budgetReimburseType,HttpServletResponse response) {
activityBudgetService.doExport(year, activityMatter, response);
activityBudgetService.doExport(year, activityMatter, budgetReimburseType,response);
}
@@ -61,8 +61,8 @@ public class ActivityBudgetApplyStatisticsController {
@At
@ApiOperation("分页查询")
@SaCheckPermission("activity.budget.applyStatistics")
public Result pageData(PageForm pageForm, Integer year, String unionId, String clubId, String outlayManageSource, String activityMatter) {
Sql sql = activityBudgetService.getsql(year, unionId, clubId, outlayManageSource, activityMatter);
public Result pageData(PageForm pageForm, Integer year, String unionId, String clubId, String outlayManageSource, String budgetReimburseType, String activityMatter) {
Sql sql = activityBudgetService.getsql(year, unionId, clubId, outlayManageSource, activityMatter, budgetReimburseType);
Pagination pagination = activityBudgetService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@@ -70,8 +70,8 @@ public class ActivityBudgetApplyStatisticsController {
@At
@ApiOperation("查询预算有多少钱")
@SaCheckPermission("activity.budget.applyStatistics")
public Result getApplyMoney(Integer year, String unionId, String clubId, String outlayManageSource, String activityMatter) {
Sql sql = activityBudgetService.getsql(year, unionId, clubId, outlayManageSource, activityMatter);
public Result getApplyMoney(Integer year, String unionId, String clubId, String outlayManageSource, String activityMatter, String budgetReimburseType) {
Sql sql = activityBudgetService.getsql(year, unionId, clubId, outlayManageSource, activityMatter, budgetReimburseType);
List<NutMap> list = activityBudgetService.listMap(sql);
list = list.stream().filter(v -> !v.getBoolean("isSchoolBudget")).toList();
double declareTotalBudgetMoney = list.stream().mapToDouble(map -> map.getDouble("declareTotalBudgetMoney")).sum();
@@ -83,13 +83,16 @@ public class ActivityBudgetApplyStatisticsController {
@Ok("void")
@ApiOperation("导出")
@SaCheckPermission("activity.budget.applyStatistics")
public void doExport(@Valid Integer year, String clubId, String unionId, @Valid String outlayManageSource, HttpServletResponse response) {
Sql sql = activityBudgetService.getsql(year, unionId, clubId, outlayManageSource, null);
public void doExport(@Valid Integer year, String clubId, String unionId, @Valid String outlayManageSource, String budgetReimburseType, HttpServletResponse response) {
Sql sql = activityBudgetService.getsql(year, unionId, clubId, outlayManageSource, null, budgetReimburseType);
List<NutMap> mapList = activityBudgetService.listMap(sql);
List<Sys_dict> dictList = sysDictService.getSubListByCode("ACTIVITY_BUDGET_TYPE");
List<Sys_dict> dictList2 = sysDictService.getSubListByCode("ACTIVITY_BUDGET_REIMBURSE_TYPE");
mapList.forEach(map -> {
Sys_dict dict = dictList.stream().filter(d -> d.getCode().equals(map.getString("outlayManageSource"))).findFirst().orElse(null);
map.put("outlayManageSource", dict.getName());
Sys_dict dict2 = dictList2.stream().filter(d -> d.getCode().equals(map.getString("budgetReimburseType"))).findFirst().orElse(null);
map.put("budgetReimburseType", dict2.getName());
});
ArrayList<ExcelExportEntity> entities = new ArrayList<>();
entities.add(new ExcelExportEntity("年度", "year", 20));
@@ -97,6 +100,7 @@ public class ActivityBudgetApplyStatisticsController {
entities.add(new ExcelExportEntity("申报人工号", "loginName", 20));
entities.add(new ExcelExportEntity("联系方式", "mobile", 20));
entities.add(new ExcelExportEntity("申报类型", "outlayManageSource", 20));
entities.add(new ExcelExportEntity("预算条目", "budgetReimburseType", 20));
entities.add(new ExcelExportEntity("申报单位", "helpUnitName", 20));
entities.add(new ExcelExportEntity("事项", "activityMatter", 20));
ExcelExportEntity draftCodeEntity = new ExcelExportEntity("申报预算金额", "declareTotalBudgetMoney", 20);
@@ -52,16 +52,16 @@ public class ActivityBudgetQueryStatisticsController {
@At
@ApiOperation("分页查询")
@SaCheckPermission("activity.budget.queryStatistics")
public Result pageData(@Valid Integer year, String clubId, String unionId, @Valid String outlayManageSource) {
return Result.success(statisticsService.getDataByBudgetTypeCode(year, clubId, unionId, outlayManageSource));
public Result pageData(@Valid Integer year, String clubId, String unionId, @Valid String outlayManageSource,String budgetReimburseType) {
return Result.success(statisticsService.getDataByBudgetTypeCode(year, clubId, unionId, outlayManageSource,budgetReimburseType));
}
@At
@Ok("void")
@ApiOperation("导出")
@SaCheckPermission("activity.budget.queryStatistics")
public void doExport(@Valid Integer year, String clubId, String unionId, @Valid String outlayManageSource, HttpServletResponse response) {
List<NutMap> mapList = statisticsService.getDataByBudgetTypeCode(year, clubId, unionId, outlayManageSource);
public void doExport(@Valid Integer year, String clubId, String unionId, @Valid String outlayManageSource, String budgetReimburseType,HttpServletResponse response) {
List<NutMap> mapList = statisticsService.getDataByBudgetTypeCode(year, clubId, unionId, outlayManageSource,budgetReimburseType);
if (outlayManageSource.equals("ACTIVITY_BUDGET_TYPE_TWO")){
mapList.forEach(m->{
if (StrUtil.isEmpty(m.getString("unionName"))){
@@ -54,6 +54,7 @@ public class ActivityBudgetSchoolAuditController {
Integer year,
String unionId,
String clubId,
String budgetReimburseType,
Boolean approval,
String outlayManageSource,
String activityMatter) {
@@ -88,9 +89,10 @@ public class ActivityBudgetSchoolAuditController {
""");
Cnd cnd = Cnd.NEW();
cnd.and("t.taskName", "=", "b6f29037-972d-4b97-8677-c3b3672ef0dc");
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
// cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
cnd.andEX("info.unionId", "=", unionId);
cnd.andEX("info.outlayManageSource", "=", outlayManageSource);
cnd.andEX("info.budgetReimburseType", "=", budgetReimburseType);
if (approval) {
cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode()));
@@ -78,6 +78,10 @@ public class ActivityBudget extends BaseModel implements Serializable {
@ColDefine(type = ColType.VARCHAR, width = 200)
private String outlayManageSource;
@Column
@Comment("预算条目")
@ColDefine(type = ColType.VARCHAR, width = 200)
private String budgetReimburseType;
@Column
@Comment("创建人工会")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String unionId;
@@ -5,7 +5,7 @@ import org.nutz.dao.sql.Sql;
public interface ActivityBudgetApplyStatisticsService extends BaseService {
Sql getsql(Integer year, String unionId,String clubId, String outlayManageSource,String activityMatter);
Sql getsql(Integer year, String unionId,String clubId, String outlayManageSource,String activityMatter,String budgetReimburseType);
void doDelete(String id);
@@ -7,5 +7,5 @@ import java.util.List;
public interface ActivityBudgetQueryStatisticsService extends BaseService {
List<NutMap> getDataByBudgetTypeCode(Integer year, String clubId, String unionId, String outlayManageSource);
List<NutMap> getDataByBudgetTypeCode(Integer year, String clubId, String unionId, String outlayManageSource,String budgetReimburseType);
}
@@ -13,10 +13,11 @@ import javax.servlet.http.HttpServletResponse;
public interface ActivityBudgetService extends BaseService<ActivityBudget> {
Sql getSqlByApplyList(PageForm pageForm, Integer year, String activityMatter, Cnd cnd);
Sql getSqlByApplyList(PageForm pageForm, Integer year, String activityMatter, String budgetReimburseType, Cnd cnd);
/**
* 提交年度预算申报
*
* @param activityBudget
*/
Result submit(ActivityBudget activityBudget);
@@ -24,5 +25,5 @@ public interface ActivityBudgetService extends BaseService<ActivityBudget> {
NutMap findOne(String id);
void doExport(Integer year, String activityMatter, HttpServletResponse response);
void doExport(Integer year, String activityMatter, String budgetReimburseType, HttpServletResponse response);
}
@@ -35,7 +35,7 @@ public class ActivityBudgetApplyStatisticsServiceImpl extends BaseServiceImpl im
@Override
public Sql getsql(Integer year, String unionId, String clubId, String outlayManageSource, String activityMatter) {
public Sql getsql(Integer year, String unionId, String clubId, String outlayManageSource, String activityMatter,String budgetReimburseType) {
Sql sql = Sqls.create("""
SELECT
YEAR(ab.applyDate) year,
@@ -60,6 +60,7 @@ public class ActivityBudgetApplyStatisticsServiceImpl extends BaseServiceImpl im
}*/
cnd.andEX("ab.clubId", "=", clubId);
cnd.andEX("ab.outlayManageSource", "=", outlayManageSource);
cnd.andEX("ab.budgetReimburseType", "=", budgetReimburseType);
cnd.andEX("ins.state", "=", 20);
cnd.desc("ab.applyDate");
sql.setCondition(cnd);
@@ -19,7 +19,7 @@ public class ActivityBudgetQueryStatisticsServiceImpl extends BaseServiceImpl im
}
@Override
public List<NutMap> getDataByBudgetTypeCode(Integer year, String clubId, String unionId, String outlayManageSource) {
public List<NutMap> getDataByBudgetTypeCode(Integer year, String clubId, String unionId, String outlayManageSource,String budgetReimburseType) {
if (List.of("ACTIVITY_BUDGET_TYPE_ONE").contains(outlayManageSource)) {
Sql sql = Sqls.create("""
SELECT
@@ -34,6 +34,7 @@ public class ActivityBudgetQueryStatisticsServiceImpl extends BaseServiceImpl im
Cnd cnd = Cnd.NEW();
cnd.andEX("YEAR(ab.applyDate)", "=", year);
cnd.andEX("ab.outlayManageSource", "=", outlayManageSource);
cnd.andEX("ab.budgetReimburseType", "=", budgetReimburseType);
cnd.andEX("wpi.state", "=", 20);
sql.setCondition(cnd);
return listMap(sql);
@@ -56,6 +57,7 @@ public class ActivityBudgetQueryStatisticsServiceImpl extends BaseServiceImpl im
cnd.andEX("ab.unionId", "=", unionId);
cnd.andEX("ab.isSchoolBudget", "=", 0);
cnd.andEX("ab.outlayManageSource", "=", "ACTIVITY_BUDGET_TYPE_TWO");
cnd.andEX("ab.budgetReimburseType", "=", budgetReimburseType);
cnd.andEX("wpi.state", "=", 20);
cnd.andEX("YEAR(ab.applyDate)", "=", year);
cnd.groupBy("ab.unionId");
@@ -81,6 +83,7 @@ public class ActivityBudgetQueryStatisticsServiceImpl extends BaseServiceImpl im
cnd.andEX("ab.clubId", "=", clubId);
cnd.andEX("ab.isSchoolBudget", "=", 0);
cnd.andEX("ab.outlayManageSource", "=", "ACTIVITY_BUDGET_TYPE_THREE");
cnd.andEX("ab.budgetReimburseType", "=", budgetReimburseType);
cnd.andEX("wpi.state", "=", 20);
cnd.andEX("YEAR(ab.applyDate)", "=", year);
cnd.groupBy("ab.clubId");
@@ -59,7 +59,7 @@ public class ActivityBudgetServiceImpl extends BaseServiceImpl<ActivityBudget> i
private FlowEngine flowEngine;
@Override
public Sql getSqlByApplyList(PageForm pageForm, Integer year, String activityMatter,Cnd cnd) {
public Sql getSqlByApplyList(PageForm pageForm, Integer year, String activityMatter,String budgetReimburseType,Cnd cnd) {
Sql sql = Sqls.create("""
SELECT
@@ -117,6 +117,7 @@ public class ActivityBudgetServiceImpl extends BaseServiceImpl<ActivityBudget> i
cnd.and(group);
}
cnd.andEX("YEAR(info.applyDate)", "=", year);
cnd.andEX("info.budgetReimburseType", "=", budgetReimburseType);
cnd.desc("info.applyDate");
sql.setCondition(cnd);
return sql;
@@ -245,9 +246,9 @@ public class ActivityBudgetServiceImpl extends BaseServiceImpl<ActivityBudget> i
}
@Override
public void doExport(Integer year, String activityMatter, HttpServletResponse response) {
public void doExport(Integer year, String activityMatter, String budgetReimburseType,HttpServletResponse response) {
Sql sql = getSqlByApplyList(null, year, activityMatter,Cnd.NEW());
Sql sql = getSqlByApplyList(null, year, activityMatter,budgetReimburseType,Cnd.NEW());
List<NutMap> mapList = listMap(sql);
List<Sys_dict> dictList = sysDictService.getSubListByCode("ACTIVITY_BUDGET_TYPE");
mapList.forEach(map -> {
@@ -112,7 +112,7 @@ public class OutlayManageClubController {
@SaCheckPermission("outlay.outlayManage.club.manage")
@SLog(tag = "协会预算分配", msg = "根据申报的金额修改本年的预算预算")
public Result issuedOutlay() {
Sql sql = Sqls.create("""
/* Sql sql = Sqls.create("""
SELECT
ab.clubId,
ab.totalBudgetMoney
@@ -122,11 +122,11 @@ public class OutlayManageClubController {
WHERE
YEAR(ab.applyDate) = @year
AND ab.outlayManageSource = 'ACTIVITY_BUDGET_TYPE_THREE'
AND ab.isSchoolBudget =0
AND ab.isSchoolBudget =0
AND wpi.state = 20
""").setParam("year", DateUtil.thisYear());
List<NutMap> budgetList = baseService.listMap(sql);
*/
Sql sqlClub = Sqls.create("""
SELECT
c.*
@@ -141,16 +141,16 @@ public class OutlayManageClubController {
List<OutlayManageClub> insertUnionList = new ArrayList<>();
clubList.forEach(v -> {
BigDecimal totalBudgetMoney = budgetList.stream()
/* 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);
.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);
// outlayManageClub.setTotalQuota(totalBudgetMoney);
insertUnionList.add(outlayManageClub);
});
baseService.insert(insertUnionList);
@@ -95,7 +95,7 @@ public class OutlayManageSchoolController {
@SaCheckPermission("outlay.outlayManage.school.manage")
@SLog(tag = "校工会预算分配", msg = "下发预算的金额:${args[0]}")
public Result issuedOutlay() {
Sql sql = Sqls.create("""
/* Sql sql = Sqls.create("""
SELECT
totalBudgetMoney
FROM
@@ -109,10 +109,10 @@ public class OutlayManageSchoolController {
List<NutMap> budgetList = baseService.listMap(sql);
BigDecimal totalBudgetMoney = budgetList.stream()
.map(v->new BigDecimal(v.getString("totalBudgetMoney"))) // 提取 money 属性
.reduce(BigDecimal.ZERO, BigDecimal::add);
.reduce(BigDecimal.ZERO, BigDecimal::add);*/
OutlayManageSchool outlayManageSchool = new OutlayManageSchool();
outlayManageSchool.setYear(DateUtil.thisYear());
outlayManageSchool.setTotalQuota(totalBudgetMoney);
// outlayManageSchool.setTotalQuota(totalBudgetMoney);
baseService.insert(outlayManageSchool);
return Result.success();
}
@@ -106,7 +106,7 @@ public class OutlayManageUnionController {
@SaCheckPermission("outlay.outlayManage.union.manage")
@SLog(tag = "分工会预算分配", msg = "根据申报的金额修改本年的预算预算")
public Result issuedOutlay() {
Sql sql = Sqls.create("""
/* Sql sql = Sqls.create("""
SELECT
unionId,
totalBudgetMoney
@@ -116,25 +116,25 @@ public class OutlayManageUnionController {
WHERE
YEAR(ab.applyDate) = @year
AND ab.outlayManageSource = 'ACTIVITY_BUDGET_TYPE_TWO'
AND ab.isSchoolBudget =0
AND ab.isSchoolBudget =0
AND wpi.state = 20
""").setParam("year", DateUtil.thisYear());
List<NutMap> budgetList = baseService.listMap(sql);
List<NutMap> budgetList = baseService.listMap(sql);*/
List<Sys_union> unionList = baseService.dao().query(Sys_union.class, Cnd.NEW());
List<OutlayManageUnion> insertUnionList = new ArrayList<>();
unionList.forEach(v -> {
BigDecimal totalBudgetMoney = budgetList.stream()
/*BigDecimal totalBudgetMoney = budgetList.stream()
.filter(budget -> budget.getString("unionId").equals(v.getId()))
.map(budget -> new BigDecimal(budget.getString("totalBudgetMoney"))) // 提取 money 属性
.reduce(BigDecimal.ZERO, BigDecimal::add);
.reduce(BigDecimal.ZERO, BigDecimal::add);*/
OutlayManageUnion outlayManageUnion = new OutlayManageUnion();
outlayManageUnion.setYear(DateUtil.thisYear());
outlayManageUnion.setUnionName(v.getName());
outlayManageUnion.setUnionCode(v.getUnionCode());
outlayManageUnion.setUnionId(v.getId());
outlayManageUnion.setTotalQuota(totalBudgetMoney);
// outlayManageUnion.setTotalQuota(totalBudgetMoney);
insertUnionList.add(outlayManageUnion);
});
baseService.insert(insertUnionList);