This commit is contained in:
2025-08-28 11:29:13 +08:00
parent 0df2345b11
commit f364119414
116 changed files with 10189 additions and 850 deletions
@@ -5,9 +5,16 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.date.DateUtil;
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.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.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;
@@ -52,6 +59,11 @@ public class ActivityBudgetApplyController {
@Inject
private ActivityBudgetService activityBudgetService;
@Inject
private SysClubService sysClubService;
@Inject
private SysRoleService sysRoleService;
@At("")
@Ok("beetl:/platform/zhgh/outlay/activityBudget/apply/index.html")
@@ -59,11 +71,6 @@ public class ActivityBudgetApplyController {
public void index() {
}
@At("/form")
@Ok("beetl:/platform/zhgh/outlay/activityBudget/apply/form.html")
@SaCheckPermission("activity.budget.apply")
public void form() {
}
@At
@@ -72,6 +79,7 @@ public class ActivityBudgetApplyController {
@Aop(TransAop.READ_COMMITTED)
@SLog(type = "activityBudgetApply", tag = "年度预算申报-预算申报", msg = "提交年度预算申报")
public Result submit(@Param("data") ActivityBudget activityBudget) {
activityBudget.setApplyDate(DateUtil.now());
return activityBudgetService.submit(activityBudget);
}
@@ -84,6 +92,7 @@ public class ActivityBudgetApplyController {
activityBudget.setUserId(SecurityUtil.getUserId());
activityBudget.setLoginName(SecurityUtil.getUserLoginname());
activityBudget.setUserName(SecurityUtil.getUserUsername());
activityBudget.setApplyDate(DateUtil.now());
activityBudgetService.insertOrUpdate(activityBudget);
return Result.success();
}
@@ -125,6 +134,22 @@ public class ActivityBudgetApplyController {
}
@At
@ApiOperation("查询协会,超级管理员查全部的")
@SaCheckLogin
public Result listClub(){
Cnd cnd = Cnd.NEW();
if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_ADMIN.name())) {
Sys_role sysRole = sysRoleService.getByCode(RoleConstant.CLUB_PRESIDENT);
List<Sys_user_role> userRoles = sysClubService.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.and("id", "in", myClubId);
}
List<SysClub> list = sysClubService.query(cnd);
return Result.success(list);
}
}
@@ -1,5 +1,6 @@
package com.budwk.app.zhgh.outlay.activityBudget.conteoller;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
@@ -133,7 +134,7 @@ public class ActivityBudgetApplyListController {
@At
@ApiOperation("查询单个预算详细信息")
@SaCheckPermission("activity.budget.applyList")
@SaCheckLogin
public Result findOne(String id) {
return Result.success(activityBudgetService.findOne(id));
}
@@ -15,6 +15,7 @@ import lombok.extern.slf4j.Slf4j;
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.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.util.NutMap;
@@ -97,6 +98,13 @@ public class ActivityBudgetSchoolAuditController {
cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode());
}
if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) {
SqlExpressionGroup group = new SqlExpressionGroup();
group.orLike("info.loginName", pageForm.getSearchKeyword());
group.orLike("info.userName", pageForm.getSearchKeyword());
cnd.and(group);
}
cnd.andEX("YEAR(info.applyDate)", "=", year);
cnd.and(Cnd.likeEX("info.activityMatter", activityMatter));
@@ -1,130 +0,0 @@
package com.budwk.app.zhgh.outlay.activityBudget.interceptor;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.result.Result;
import com.budwk.app.flow.constant.FlowConst;
import com.budwk.app.flow.engine.FlowInterceptor;
import com.budwk.app.flow.engine.core.Execution;
import com.budwk.app.flow.engine.core.ServiceContext;
import com.budwk.app.flow.entity.ProcessInstance;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
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 com.budwk.app.zhgh.outlay.outlayManage.school.model.OutlayManageSchool;
import com.budwk.app.zhgh.outlay.outlayManage.union.model.OutlayManageUnion;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.json.Json;
import java.util.List;
/**
* @author zhf
* @date 2025/7/28 17:01
* @description 活动预算申报提交后置拦截器
*/
public class OutlayActBudgetApplyPostInterceptor implements FlowInterceptor {
@Override
public void intercept(Execution execution) {
String formDataStr = execution.getArgs().getStr(FlowConst.FORM_DATA);
ActivityBudget activityBudget = Json.fromJson(ActivityBudget.class, formDataStr);
Dao dao = ServiceContext.find(Dao.class);
if (StrUtil.isEmpty(activityBudget.getId())) {
activityBudget.setUserId(SecurityUtil.getUserId());
activityBudget.setLoginName(SecurityUtil.getUserLoginname());
activityBudget.setUserName(SecurityUtil.getUserUsername());
//查询分工会这个项目有没有申报过
// if (List.of("ACTIVITY_BUDGET_TYPE_TWO").contains(activityBudget.getBudgetTypeCode())) {
// int activityMatterCount = dao.count(ActivityBudget.class, Cnd.where("activityMatter", "=",
// activityBudget.getActivityMatter()).and("unionId", "=", SecurityUtil.getUnionId()));
// if (activityMatterCount > 0) {
// return Result.error(activityBudget.getActivityMatter() + "已填写申请!");
// }
// }
}
//删除预算详情表
if (StrUtil.isNotBlank(activityBudget.getId())) {
dao.clear(ActivityBudgetDetails.class, Cnd.where("budgetId", "=", activityBudget.getId()));
}
if (List.of("superadmin").contains(SecurityUtil.getUserLoginname())) {
//如果是超级管理员就可以直接提交不用审核
activityBudget.setTotalBudgetMoney(activityBudget.getDeclareTotalBudgetMoney());
ActivityBudget budget = null;
if (StrUtil.isNotBlank(activityBudget.getId())) {
budget = dao.fetch(ActivityBudget.class, activityBudget.getId());
}
//如果申报的是校工会预算
if (activityBudget.getOutlayManageSource().equals("ACTIVITY_BUDGET_TYPE_ONE")) {
OutlayManageSchool outlayManageSchool = dao.fetch(OutlayManageSchool.class, Cnd.where("year", "=", DateUtil.thisYear()));
if (ObjectUtil.isNotEmpty(outlayManageSchool)) {
if (StrUtil.isNotBlank(activityBudget.getId())) {
//如果传过来有预算Id,代表是修改的,那么就减去原来的金额
outlayManageSchool.setTotalQuota(outlayManageSchool.getTotalQuota().subtract(budget.getTotalBudgetMoney()));
}
//直接修改为现在传过来的金额
outlayManageSchool.setTotalQuota(outlayManageSchool.getTotalQuota().add(activityBudget.getTotalBudgetMoney()));
dao.updateIgnoreNull(outlayManageSchool);
}
} else if (activityBudget.getOutlayManageSource().equals("ACTIVITY_BUDGET_TYPE_TWO")) {
//如果申报的是分工会预算
OutlayManageUnion outlayManageUnion = dao.fetch(OutlayManageUnion.class,
Cnd.where("year", "=", DateUtil.thisYear())
.and("unionId", "=", activityBudget.getUnionId()));
if (ObjectUtil.isNotEmpty(outlayManageUnion)) {
if (StrUtil.isNotBlank(activityBudget.getId())) {
outlayManageUnion.setTotalQuota(outlayManageUnion.getTotalQuota().subtract(budget.getTotalBudgetMoney()));
}
outlayManageUnion.setTotalQuota(outlayManageUnion.getTotalQuota().add(activityBudget.getTotalBudgetMoney()));
dao.updateIgnoreNull(outlayManageUnion);
}
} else if (activityBudget.getOutlayManageSource().equals("ACTIVITY_BUDGET_TYPE_THREE")) {
//如果不等于校工会预算才往表里面加预算
//代表协会可能用的是校工会的预算
// if (!activityBudget.getIsSchoolBudget()) {
// jf_club jfClub = dao.fetch(jf_club.class, Cnd.where("year", "=", DateUtil.getYear())
// .and("club_id", "=", activityBudget.getClubId()));
// if (ObjectUtil.isNotEmpty(jfClub)) {
// if (StrUtil.isNotBlank(activityBudget.getId())) {
// jfClub.setTotalQuota(jfClub.getTotalQuota().subtract(budget.getTotalBudgetMoney()));
// }
// jfClub.setTotalQuota(jfClub.getTotalQuota().add(activityBudget.getTotalBudgetMoney()));
// dao.updateIgnoreNull(jfClub);
// }
// }
} else if (activityBudget.getOutlayManageSource().equals("ACTIVITY_BUDGET_TYPE_FOUR")) {
// 更新其他经费表
// JfOther jfOther = dao.fetch(JfOther.class, Cnd.where("year", "=", DateUtil.getYear()));
// if (ObjectUtil.isNotEmpty(jfOther)) {
// if (StrUtil.isNotBlank(activityBudget.getId())) {
// jfOther.setTotalQuota(jfOther.getTotalQuota().subtract(budget.getTotalBudgetMoney()));
// }
// jfOther.setTotalQuota(jfOther.getTotalQuota().add(activityBudget.getTotalBudgetMoney()));
// dao.updateIgnoreNull(jfOther);
// }
}
}
dao.insertOrUpdate(activityBudget);
// for (ActivityBudgetDetails details : activityBudget.getBudgetDetails()) {
// details.setBudgetId(activityBudget.getId());
// }
// //添加预算详情表
// dao.insert(activityBudget.getBudgetDetails());
execution.getArgs().set(FlowConst.FORM_DATA,Json.toJson(activityBudget));
int instanceId = execution.getArgs().getInt(FlowConst.PROCESS_INSTANCE_ID_KEY);
dao.update(ProcessInstance.class, Chain.make("businessNo", activityBudget.getId()), Cnd.where(ProcessInstance::getId, "=", instanceId));
}
}
@@ -6,6 +6,7 @@ import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.outlay.activityBudget.models.ActivityBudget;
import org.nutz.dao.Cnd;
import org.nutz.dao.sql.Sql;
import org.nutz.lang.util.NutMap;
import javax.servlet.http.HttpServletResponse;
@@ -20,7 +21,7 @@ public interface ActivityBudgetService extends BaseService<ActivityBudget> {
*/
Result submit(ActivityBudget activityBudget);
ActivityBudget findOne(String id);
NutMap findOne(String id);
void doExport(Integer year, String activityMatter, HttpServletResponse response);
@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.service.impl.BaseServiceImpl;
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.entity.ProcessTaskActor;
@@ -15,6 +16,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 java.util.List;
@@ -31,6 +33,11 @@ public class ActivityBudgetApplyStatisticsServiceImpl extends BaseServiceImpl im
super(dao);
}
@Inject
private FlowEngine flowEngine;
@Override
public Sql getsql(Integer year, String unionId, String clubId, String outlayManageSource, String activityMatter) {
Sql sql = Sqls.create("""
@@ -38,9 +45,11 @@ public class ActivityBudgetApplyStatisticsServiceImpl extends BaseServiceImpl im
YEAR(ab.applyDate) year,
ab.*,
ins.id AS instanceId,
ins.businessNo
ins.businessNo,
abb.activityMatter activityMatterTwo
FROM
activity_budget ab
LEFT JOIN activity_budget abb ON abb.id = ab.schoolBudgetId
LEFT JOIN wf_process_instance ins ON ins.businessNo = ab.id
$condition
""");
@@ -82,17 +91,9 @@ public class ActivityBudgetApplyStatisticsServiceImpl extends BaseServiceImpl im
//查出流程实例
ProcessInstance instance = dao().fetch(ProcessInstance.class, Cnd.where("businessNo", "=", id));
if (ObjectUtil.isNotEmpty(instance)) {
//查询流程任务
List<ProcessTask> taskList = dao().query(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "=", instance.getId()));
List<Long> taskIds = taskList.stream().map(ProcessTask::getId).toList();
//删除流程任务下面所有的人员
dao().clear(ProcessTask.class, Cnd.where(ProcessTaskActor::getProcessTaskId, "in", taskIds));
//删除流程任务
dao().clear(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "=", instance.getId()));
//删除流程实例
dao().delete(ProcessInstance.class, instance.getId());
//删除预算
dao().delete(ActivityBudget.class, id);
flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id);
}
}
@@ -64,26 +64,30 @@ public class ActivityBudgetQueryStatisticsServiceImpl extends BaseServiceImpl im
return listMap(sql);
} else if (outlayManageSource.equals("ACTIVITY_BUDGET_TYPE_THREE")) {
/* Sql sql = Sqls.create("""
Sql sql = Sqls.create("""
SELECT
@year `year`,
sc.`code` AS clubCode,
sc.`name` AS clubName,
COALESCE ( SUM( ab.totalBudgetMoney ), 0 ) AS totalBudgetMoney
@YEAR `year`,
sc.clubCode,
sc.clubName,
ab.clubId,
COALESCE(SUM(ab.totalBudgetMoney), 0) AS totalBudgetMoney
FROM
sys_club sc
LEFT JOIN activity_budget ab ON ab.clubId = sc.id
AND ab.outlayManageSource = 'ACTIVITY_BUDGET_TYPE_THREE'
AND ab.auditState = 4
AND YEAR(ab.applyDate)=@year
activity_budget ab
LEFT JOIN sys_club sc ON ab.clubId = sc.id
LEFT JOIN wf_process_instance wpi ON wpi.businessNo = ab.id
$condition
""").setParam("year", year);
Cnd cnd = Cnd.NEW();
cnd.andEX("sc.id", "=", clubId);
cnd.groupBy("sc.id");
cnd.asc("sc.`code`");
cnd.andEX("ab.clubId", "=", clubId);
cnd.andEX("ab.isSchoolBudget", "=", 0);
cnd.andEX("ab.outlayManageSource", "=", "ACTIVITY_BUDGET_TYPE_THREE");
cnd.andEX("wpi.state", "=", 20);
cnd.andEX("YEAR(ab.applyDate)", "=", year);
cnd.groupBy("ab.clubId");
cnd.asc("sc.clubCode");
sql.setCondition(cnd);
return listMap(sql);*/
sql.setCondition(cnd);
return listMap(sql);
}
return new ArrayList<>();
}
@@ -88,7 +88,6 @@ public class ActivityBudgetServiceImpl extends BaseServiceImpl<ActivityBudget> i
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
""");
if (StrUtil.isNotBlank(activityMatter)) {
@@ -136,7 +135,7 @@ public class ActivityBudgetServiceImpl extends BaseServiceImpl<ActivityBudget> i
int activityMatterCount = count(Cnd.where("activityMatter", "=",
activityBudget.getActivityMatter()).and("unionId", "=", SecurityUtil.getUnionId()));
if (activityMatterCount > 0) {
return Result.error(activityBudget.getActivityMatter() + "已填写申请!");
// return Result.error(activityBudget.getActivityMatter() + "已填写申请!");
}
}
}
@@ -228,9 +227,21 @@ public class ActivityBudgetServiceImpl extends BaseServiceImpl<ActivityBudget> i
}
@Override
public ActivityBudget findOne(String id) {
ActivityBudget activityBudget = fetchLinks(fetch(id), "budgetDetails", Cnd.NEW().asc("detailsOrder"));
// activityBudget.setAllocationEditAuditList(dao().query(Audit.class, Cnd.where("parentId", "=", activityBudget.getId())));
public NutMap findOne(String id) {
Sql sql = Sqls.create("""
SELECT
ab.*,
abb.activityMatter activityMatterTwo
FROM
activity_budget ab
LEFT JOIN activity_budget abb ON abb.id = ab.schoolBudgetId
WHERE
ab.id = @id
""").setParam("id",id);
sql.setCallback(Sqls.callback.map());
execute(sql);
NutMap activityBudget = (NutMap) sql.getResult();
activityBudget.put("budgetDetails", dao().query(ActivityBudgetDetails.class, Cnd.where("budgetId", "=", id)));
return activityBudget;
}
@@ -69,6 +69,11 @@ public class OutlayUseDetail extends BaseModel implements Serializable {
@ColDefine(type = ColType.VARCHAR, width = 32)
private String activityNumber;
@Column
@Comment("业务Id")
@ColDefine(type = ColType.VARCHAR, width = 32)
private String outlayReimburseId;
@Column
@Comment("活动时间")
@ColDefine(type = ColType.VARCHAR)
@@ -115,6 +115,7 @@ public class OutlayManageUnionController {
WHERE
YEAR(ab.applyDate) = @year
AND ab.outlayManageSource = 'ACTIVITY_BUDGET_TYPE_TWO'
AND ab.isSchoolBudget =0
AND wpi.state = 20
""").setParam("year", DateUtil.thisYear());
List<NutMap> budgetList = baseService.listMap(sql);
@@ -1,5 +1,6 @@
package com.budwk.app.zhgh.outlay.outlayReimburse.controller;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Dict;
@@ -71,7 +72,7 @@ public class OutlayReimburseApplyController {
@ApiOperation("查询这个预算已经报销了的金额")
@SaCheckPermission("outlay.reimburse.apply")
public Result getBxMoneyByBudgetId(String budgetId) {
return Result.success(outlayReimburseApplyService.getBxMoneyByActivityId(budgetId));
return Result.success(outlayReimburseApplyService.getBxMoneyByActivityId(budgetId,null));
}
@@ -136,8 +137,7 @@ public class OutlayReimburseApplyController {
}
@At
@SaCheckPermission("outlay.reimburse.apply")
@ApiOperation("保存申请")
@SaCheckLogin
public Result findOne(String id){
return Result.success(outlayReimburseApplyService.fetch(id));
}
@@ -70,10 +70,12 @@ public class OutlayReimburseApplyListController {
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.applyTime)", "=", year);
cnd.and("info.userId", "=", SecurityUtil.getUserId());
sql.setCondition(cnd);
Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@@ -9,6 +9,7 @@ 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.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.outlay.outlayReimburse.vo.OutlayReimbursePageForm;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@@ -49,13 +50,7 @@ public class OutlayReimburseSchoolCnAuditController {
@At
@ApiOperation("分页查询")
@SaCheckPermission("outlay.reimburse.schoolCnAudit")
public Result pageData(PageForm pageForm,
Integer year,
String unionId,
String clubId,
Boolean approval,
String outlayManageSource,
String activityMatter) {
public Result pageData(OutlayReimbursePageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
info.*,
@@ -88,16 +83,19 @@ public class OutlayReimburseSchoolCnAuditController {
Cnd cnd = Cnd.NEW();
cnd.and("t.taskName", "=", "714574d6-29c3-4a2c-bc63-ecef38a0d6d0");
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
cnd.andEX("info.unionId", "=", unionId);
cnd.andEX("info.outlayManageSource", "=", outlayManageSource);
if (approval) {
cnd.andEX("info.unionId", "=", pageForm.getUnionId());
cnd.andEX("info.outlayManageSource", "=", pageForm.getOutlayManageSource());
cnd.andEX("YEAR(info.applyTime)", "=", pageForm.getYear());
if (pageForm.getApproval()) {
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.andEX("YEAR(info.applyTime)", "=", year);
if (StrUtil.isAllNotEmpty(pageForm.getSearchName(), pageForm.getSearchKeyword())) {
cnd.where().andLike(pageForm.getSearchName(), pageForm.getSearchKeyword());
}
cnd.groupBy("t.id");
if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
cnd.desc("t.createdAt").desc("info.applyTime");
@@ -13,6 +13,7 @@ import com.budwk.app.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.sys.models.Sys_dict;
import com.budwk.app.sys.services.SysDictService;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.outlay.outlayReimburse.vo.OutlayReimbursePageForm;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@@ -56,13 +57,7 @@ public class OutlayReimburseSchoolKjAuditController {
@At
@ApiOperation("分页查询")
@SaCheckPermission("outlay.reimburse.schoolKjAudit")
public Result pageData(PageForm pageForm,
Integer year,
String unionId,
String clubId,
Boolean approval,
String outlayManageSource,
String activityMatter) {
public Result pageData(OutlayReimbursePageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
info.*,
@@ -95,16 +90,22 @@ public class OutlayReimburseSchoolKjAuditController {
Cnd cnd = Cnd.NEW();
cnd.and("t.taskName", "=", "930aed03-677b-41d7-8920-7d9b45a7abc9");
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
cnd.andEX("info.unionId", "=", unionId);
cnd.andEX("info.outlayManageSource", "=", outlayManageSource);
cnd.andEX("info.unionId", "=", pageForm.getUnionId());
cnd.andEX("info.outlayManageSource", "=", pageForm.getOutlayManageSource());
cnd.andEX("info.detailsTypeId", "=", pageForm.getDetailsTypeId());
cnd.andEX("YEAR(info.applyTime)", "=", pageForm.getYear());
if (approval) {
if (pageForm.getApproval()) {
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.andEX("YEAR(info.applyTime)", "=", year);
if (StrUtil.isAllNotEmpty(pageForm.getSearchName(), pageForm.getSearchKeyword())) {
cnd.where().andLike(pageForm.getSearchName(), pageForm.getSearchKeyword());
}
cnd.groupBy("t.id");
if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
cnd.desc("t.createdAt").desc("info.applyTime");
@@ -13,6 +13,7 @@ import com.budwk.app.flow.enums.ProcessTaskStateEnum;
import com.budwk.app.sys.models.Sys_dict;
import com.budwk.app.sys.services.SysDictService;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.outlay.outlayReimburse.vo.OutlayReimbursePageForm;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@@ -56,13 +57,7 @@ public class OutlayReimburseSchoolZxAuditController {
@At
@ApiOperation("分页查询")
@SaCheckPermission("outlay.reimburse.schoolZxAudit")
public Result pageData(PageForm pageForm,
Integer year,
String unionId,
String clubId,
Boolean approval,
String outlayManageSource,
String activityMatter) {
public Result pageData(OutlayReimbursePageForm pageForm) {
Sql sql = Sqls.create("""
SELECT
info.*,
@@ -95,16 +90,22 @@ public class OutlayReimburseSchoolZxAuditController {
Cnd cnd = Cnd.NEW();
cnd.and("t.taskName", "=", "c433d966-05f4-45b4-b845-755b600d852a");
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
cnd.andEX("info.unionId", "=", unionId);
cnd.andEX("info.outlayManageSource", "=", outlayManageSource);
cnd.andEX("info.unionId", "=", pageForm.getUnionId());
cnd.andEX("info.outlayManageSource", "=", pageForm.getOutlayManageSource());
cnd.andEX("YEAR(info.applyTime)", "=", pageForm.getYear());
cnd.andEX("info.detailsTypeId", "=", pageForm.getDetailsTypeId());
if (approval) {
if (pageForm.getApproval()) {
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.andEX("YEAR(info.applyTime)", "=", year);
if (StrUtil.isAllNotEmpty(pageForm.getSearchName(), pageForm.getSearchKeyword())) {
cnd.where().andLike(pageForm.getSearchName(), pageForm.getSearchKeyword());
}
cnd.groupBy("t.id");
if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
cnd.desc("t.createdAt").desc("info.applyTime");
@@ -0,0 +1,123 @@
package com.budwk.app.zhgh.outlay.outlayReimburse.controller;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
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.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.models.Sys_dict;
import com.budwk.app.sys.services.SysDictService;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import com.budwk.app.zhgh.outlay.outlayReimburse.service.OutlayReimburseSummaryService;
import com.budwk.app.zhgh.outlay.outlayReimburse.vo.OutlayReimbursePageForm;
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.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 org.nutz.mvc.annotation.Param;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
/**
* @author zhf
* @date 2025/8/20 17:43
* @description 报销汇总
*/
@IocBean
@At("/platform/outlay/reimburse/summary")
@Ok("json:full")
@Api("我的报销")
public class OutlayReimburseSummaryController {
@Inject
private OutlayReimburseSummaryService outlayReimburseSummaryService;
@Inject
private SysDictService sysDictService;
@At("/index")
@Ok("beetl:/platform/zhgh/outlay/outlayReimburse/summary/index.html")
@SaCheckPermission("outlay.reimburse.summary")
public void index() {
}
@At
@ApiOperation("分页查询")
@SaCheckPermission("outlay.reimburse.summary")
public Result pageData(OutlayReimbursePageForm pageForm) {
Sql sql = outlayReimburseSummaryService.getSql(pageForm);
Pagination pagination = outlayReimburseSummaryService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
return Result.success(pagination);
}
@At
@Ok("void")
@SaCheckPermission("outlay.reimburse.summary")
public void doExportUserExcel(@Param("data") OutlayReimbursePageForm pageForm, HttpServletResponse response) {
try {
Sql sql = outlayReimburseSummaryService.getSql(pageForm);
List<NutMap> map = outlayReimburseSummaryService.listMap(sql);
List<Sys_dict> dictList = sysDictService.getSubListByCode("ACTIVITY_BUDGET_TYPE");
List<Sys_dict> dictList2 = sysDictService.getSubListByCode("ACTIVITY_BUDGET_DETAILS_TYPE");
map.forEach(item -> {
Sys_dict dict = dictList.stream().filter(sys_dict -> sys_dict.getCode().equals(item.getString("outlayManageSource"))).findFirst().orElse(null);
item.put("outlayManageSourceName", dict.getName());
Sys_dict dict2 = dictList2.stream().filter(sys_dict -> sys_dict.getCode().equals(item.getString("detailsTypeId"))).findFirst().orElse(null);
item.put("detailsTypeName", dict2.getName());
if (List.of("ACTIVITY_BUDGET_TYPE_ONE", "ACTIVITY_BUDGET_TYPE_FOUR").contains(item.getString("outlayManageSource"))) {
item.put("helpUnitName", dict.getName());
}else if (item.getString("outlayManageSource").equals("ACTIVITY_BUDGET_TYPE_TWO")){
item.put("helpUnitName", item.getString("unionName"));
}else if (item.getString("outlayManageSource").equals("ACTIVITY_BUDGET_TYPE_THREE")){
item.put("helpUnitName", item.getString("clubName"));
}
});
List<ExcelExportEntity> entityList = new ArrayList<>();
ExcelExportEntity no = new ExcelExportEntity("序号", "no", 10);
no.setFormat("isAddIndex");
entityList.add(no);
entityList.add(new ExcelExportEntity("经办人工号", "loginName", 20));
entityList.add(new ExcelExportEntity("姓名", "userName", 20));
entityList.add(new ExcelExportEntity("活动类型", "outlayManageSourceName", 20));
entityList.add(new ExcelExportEntity("申报单位", "helpUnitName", 20));
entityList.add(new ExcelExportEntity("金额", "money", 20));
entityList.add(new ExcelExportEntity("明细类", "detailsTypeName", 50));
entityList.add(new ExcelExportEntity("申报时间", "applyTime", 20));
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("报销汇总名单.xlsx", "UTF-8"));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, map);
workbook.write(response.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}
}
}
@@ -0,0 +1,119 @@
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/unionAudit")
public class OutlayReimburseUnionAuditController {
@Inject
private BaseService baseService;
@Inject
private SysDictService sysDictService;
@At("/index")
@Ok("beetl:/platform/zhgh/outlay/outlayReimburse/unionAudit/index.html")
@SaCheckPermission("outlay.reimburse.unionAudit")
public void index() {
}
@At
@ApiOperation("分页查询")
@SaCheckPermission("outlay.reimburse.unionAudit")
public Result pageData(PageForm pageForm,
Integer year,
String clubId,
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", "=", "d818a045-14c9-4668-993c-e18a1f4fc0c7");
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);
}
}
@@ -1,34 +0,0 @@
package com.budwk.app.zhgh.outlay.outlayReimburse.interceptor;
import com.budwk.app.flow.constant.FlowConst;
import com.budwk.app.flow.engine.FlowInterceptor;
import com.budwk.app.flow.engine.core.Execution;
import com.budwk.app.flow.engine.core.ServiceContext;
import com.budwk.app.flow.entity.ProcessInstance;
import com.budwk.app.zhgh.democratic.suggestionBox.models.SuggestionBox;
import com.budwk.app.zhgh.outlay.outlayReimburse.model.OutlayReimburse;
import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.json.Json;
/**
* @author zhf
* @date 2025/7/30 15:58
* @description
*/
public class OutlayReimburseApplyPostInterceptor implements FlowInterceptor {
@Override
public void intercept(Execution execution) {
String formDataStr = execution.getArgs().getStr(FlowConst.FORM_DATA);
OutlayReimburse outlayReimburse = Json.fromJson(OutlayReimburse.class, formDataStr);
Dao dao = ServiceContext.find(Dao.class);
dao.insertOrUpdate(outlayReimburse);
execution.getArgs().set("outlayManageSource", outlayReimburse.getOutlayManageSource());
execution.getArgs().set(FlowConst.FORM_DATA, Json.toJson(outlayReimburse));
int instanceId = execution.getArgs().getInt(FlowConst.PROCESS_INSTANCE_ID_KEY);
dao.update(ProcessInstance.class, Chain.make("businessNo", outlayReimburse.getId()), Cnd.where(ProcessInstance::getId, "=", instanceId));
}
}
@@ -1,7 +1,25 @@
package com.budwk.app.zhgh.outlay.outlayReimburse.interceptor;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.budwk.app.base.exception.BaseException;
import com.budwk.app.base.result.Result;
import com.budwk.app.flow.constant.FlowConst;
import com.budwk.app.flow.engine.FlowInterceptor;
import com.budwk.app.flow.engine.core.Execution;
import com.budwk.app.flow.engine.core.ServiceContext;
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.model.OutlayUseDetail;
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;
import lombok.SneakyThrows;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.json.Json;
import java.io.IOException;
/**
* @author zhf
@@ -11,6 +29,66 @@ import com.budwk.app.flow.engine.core.Execution;
public class OutlayReimburseSchoolZxAuditPostInterceptor implements FlowInterceptor {
@Override
public void intercept(Execution execution) {
String formDataStr = execution.getArgs().getStr(FlowConst.FORM_DATA);
OutlayReimburse outlayReimburse = Json.fromJson(OutlayReimburse.class, formDataStr);
Dao dao = ServiceContext.find(Dao.class);
OutlayUseDetail detail = new OutlayUseDetail();
detail.setProjectName(outlayReimburse.getActivityMatter());
detail.setAdjustMoney(outlayReimburse.getMoney());
detail.setAdjustMoney(outlayReimburse.getMoney());
detail.setAdjustReason(outlayReimburse.getPaymentContent());
detail.setAdjustUserId(SecurityUtil.getUserId());
detail.setAdjustUserName(SecurityUtil.getUserUsername());
detail.setAdjustLoginName(SecurityUtil.getUserLoginname());
detail.setOutlayReimburseId(outlayReimburse.getId());
detail.setActivityTime(outlayReimburse.getActivityTime());
// 更新校工会经费表
if (outlayReimburse.getOutlayManageSource().equals("ACTIVITY_BUDGET_TYPE_ONE")) {
OutlayManageSchool school = dao.fetch(OutlayManageSchool.class, Cnd.where("year", "=", DateUtil.thisYear()));
if (ObjectUtil.isEmpty(school)) {
throw new BaseException("该年份没有设置金额!");
}
school.setUsedQuota(school.getUsedQuota().add(outlayReimburse.getMoney()));
dao.updateIgnoreNull(school);
//添加使用记录到经费管理表
detail.setOutlayManageId(school.getId());
dao.insert(detail);
} else if (outlayReimburse.getOutlayManageSource().equals("ACTIVITY_BUDGET_TYPE_TWO")) {
ActivityBudget budget = dao.fetch(ActivityBudget.class, Cnd.where("id", "=", outlayReimburse.getBudgetId()));
if (ObjectUtil.isNotEmpty(budget)&&budget.getIsSchoolBudget()){
//如果分工会报销了校工会的余额
OutlayManageSchool school = dao.fetch(OutlayManageSchool.class, Cnd.where("year", "=", DateUtil.thisYear()));
if (ObjectUtil.isEmpty(school)) {
throw new BaseException("该年份没有设置金额!");
}
school.setUsedQuota(school.getUsedQuota().add(outlayReimburse.getMoney()));
dao.updateIgnoreNull(school);
//添加使用记录到经费管理表
detail.setOutlayManageId(school.getId());
dao.insert(detail);
}else{
// 更新分工会活动经费表
OutlayManageUnion manageUnion = dao.fetch(OutlayManageUnion.class,
Cnd.where("year", "=", DateUtil.thisYear())
.and("unionId", "=", outlayReimburse.getUnionId()));
if (ObjectUtil.isEmpty(manageUnion)) {
throw new BaseException("该年份没有设置金额!");
}
if (manageUnion.getTotalQuota().subtract(manageUnion.getUsedQuota()).compareTo(outlayReimburse.getMoney()) < 0) {
throw new BaseException("剩余配额不足!剩余:" + manageUnion.getTotalQuota().subtract(manageUnion.getUsedQuota()));
}
manageUnion.setUsedQuota(manageUnion.getUsedQuota().add(outlayReimburse.getMoney()));
dao.updateIgnoreNull(manageUnion);
//添加使用记录到经费管理表
detail.setOutlayManageId(manageUnion.getId());
dao.insert(detail);
}
}
}
}
@@ -84,6 +84,12 @@ public class OutlayReimburse extends BaseModel implements Serializable {
@ColDefine(type = ColType.VARCHAR, width = 30)
private String activityTime;
@Column
@Comment("活动人数")
@ColDefine(type = ColType.VARCHAR, width = 30)
private String activityNumber;
@Column
@Comment("支付内容")
@ColDefine(type = ColType.TEXT)
@@ -24,9 +24,10 @@ public interface OutlayReimburseApplyService extends BaseService<OutlayReimburse
/**
* 查询这个预算已经报销了的金额
* @param budgetId
* @param isSchoolBudget 是否是校会预算
* @return
*/
BigDecimal getBxMoneyByActivityId(String budgetId);
BigDecimal getBxMoneyByActivityId(String budgetId,Boolean isSchoolBudget);
/**
* 判断这个报销的记录预算是否充足
@@ -0,0 +1,11 @@
package com.budwk.app.zhgh.outlay.outlayReimburse.service;
import com.budwk.app.base.service.BaseService;
import com.budwk.app.zhgh.outlay.outlayReimburse.vo.OutlayReimbursePageForm;
import org.nutz.dao.sql.Sql;
public interface OutlayReimburseSummaryService extends BaseService {
Sql getSql(OutlayReimbursePageForm outlayReimbursePageForm);
}
@@ -40,6 +40,7 @@ public class OutlayReimburseApplyServiceImpl extends BaseServiceImpl<OutlayReimb
String sqlStr = """
SELECT
ab.id,
ab.isSchoolBudget,
ab.schoolBudgetId,
ab.totalBudgetMoney,
ab.isRepeatReimburse,
@@ -120,7 +121,7 @@ public class OutlayReimburseApplyServiceImpl extends BaseServiceImpl<OutlayReimb
}
@Override
public BigDecimal getBxMoneyByActivityId(String budgetId) {
public BigDecimal getBxMoneyByActivityId(String budgetId,Boolean isSchoolBudget) {
Sql sql = Sqls.create("""
SELECT
rei.money
@@ -131,6 +132,11 @@ public class OutlayReimburseApplyServiceImpl extends BaseServiceImpl<OutlayReimb
rei.budgetId = @budgetId
AND ins.state = 20
""").setParam("budgetId", budgetId);
Cnd cnd = Cnd.NEW();
if (isSchoolBudget!=null){
cnd.and("isSchoolBudget", "=", isSchoolBudget);
}
List<NutMap> reiList = listMap(sql);
BigDecimal totalMoney = reiList.stream()
@@ -152,8 +158,8 @@ public class OutlayReimburseApplyServiceImpl extends BaseServiceImpl<OutlayReimb
//判断是否可以重复报
if (budget.getIsRepeatReimburse()) {
//1.查询已经报销了的总金额
BigDecimal bXMoney = getBxMoneyByActivityId(budgetId);
if (budget.getIsSchoolBudget()) {
BigDecimal bXMoney = getBxMoneyByActivityId(budgetId,budget.getIsSchoolBudget());
//如果是分工会进来并且报销的活动是校会预算
// 1. 计算本次加上之前的报销总金额
BigDecimal totalReimbursement = bXMoney.add(moneyBig);
@@ -164,6 +170,7 @@ public class OutlayReimburseApplyServiceImpl extends BaseServiceImpl<OutlayReimb
return Result.success();
}
} else {
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);
@@ -196,7 +203,7 @@ public class OutlayReimburseApplyServiceImpl extends BaseServiceImpl<OutlayReimb
//如果报销的项目是可以重复报销的
if (budget.getIsRepeatReimburse()) {
//这个预算已经报销了多少钱
BigDecimal totalMoney = getBxMoneyByActivityId(budgetId);
BigDecimal totalMoney = getBxMoneyByActivityId(budgetId,null);
//查出这个活动有没有跟其他预算关联,如果跟其他预算关联了,代表当前这条预算是分工会也能报校工会也能报,
// schoolBudgetId字段不为空就代表这条预算是使用的校工会的金额
List<ActivityBudget> budgetList = dao().query(ActivityBudget.class,
@@ -0,0 +1,20 @@
package com.budwk.app.zhgh.outlay.outlayReimburse.vo;
import com.budwk.app.base.param.PageForm;
import lombok.Data;
/**
* @author zhf
* @date 2025/8/21 09:19
* @description
*/
@Data
public class OutlayReimbursePageForm extends PageForm {
private Integer year;
private String unionId;
private String outlayManageSource;
private String detailsTypeId;
private Boolean approval;
private String clubId;
}