From 65eb86c0dc648525498dd76ac1d344ee1dc7d33c Mon Sep 17 00:00:00 2001 From: zhouhefeng Date: Wed, 20 Aug 2025 15:16:40 +0800 Subject: [PATCH] commit --- .../impl/AssetStocktakingServiceImpl.java | 1 + .../HealthCheckupCampusController.java | 3 +- .../HealthCheckupListController.java | 19 +- .../HealthCheckupSingleController.java | 2 + .../impl/HealthCheckupProjectServiceImpl.java | 5 +- .../controller/IntegralManageController.java | 88 ++++- .../zhgh/integral/model/IntegralDetail.java | 1 + .../ActivityBudgetApplyController.java | 20 +- .../ActivityBudgetSchoolAuditController.java | 19 +- .../OutlayActBudgetSchoolPostInterceptor.java | 5 +- .../service/ActivityBudgetService.java | 3 +- .../impl/ActivityBudgetServiceImpl.java | 48 ++- .../OutlayReimburseApplyController.java | 144 +++++++ .../OutlayReimburseApplyListController.java | 88 ++--- ...utlayReimburseSchoolCnAuditController.java | 116 ++++++ ...utlayReimburseSchoolKjAuditController.java | 155 ++++++++ ...utlayReimburseSchoolZxAuditController.java | 124 ++++++ ...ReimburseSchoolKjAuditPostInterceptor.java | 29 ++ .../model/OutlayReimburse.java | 7 +- ....java => OutlayReimburseApplyService.java} | 5 +- ...a => OutlayReimburseApplyServiceImpl.java} | 15 +- .../controller/ThirtyTeachController.java | 9 + .../service/impl/ThirtyTeachServiceImpl.java | 1 + .../platform/zhgh/asset/common/assetInfo.js | 10 +- .../zhgh/asset/stocktaking/index.html | 9 + .../zhgh/healthCheckup/listMange/index.html | 2 +- .../healthCheckup/projectMange/index.html | 28 +- .../platform/zhgh/integral/manage/index.html | 11 + .../outlay/activityBudget/apply/index.html | 342 +++++++++++++++++ .../activityBudget/applyList/index.html | 38 +- .../activityBudget/applyStatistics/index.html | 17 +- .../zhgh/outlay/activityBudget/info.js | 115 ++++++ .../activityBudget/schoolAudit/index.html | 109 +++++- .../outlay/outlayReimburse/apply/form.html | 120 ------ .../outlay/outlayReimburse/apply/index.html | 361 ++++++++++++++++-- .../outlayReimburse/applyList/index.html | 108 ++++++ .../zhgh/outlay/outlayReimburse/info.js | 135 +++++++ .../outlayReimburse/schoolCnAudit/index.html | 184 +++++++++ .../outlayReimburse/schoolKjAudit/index.html | 342 +++++++++++++++++ .../outlayReimburse/schoolZxAudit/index.html | 184 +++++++++ .../zhgh/thirtyTeach/manage/index.html | 51 ++- 41 files changed, 2774 insertions(+), 299 deletions(-) create mode 100644 src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseApplyController.java create mode 100644 src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseSchoolCnAuditController.java create mode 100644 src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseSchoolKjAuditController.java create mode 100644 src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseSchoolZxAuditController.java create mode 100644 src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/interceptor/OutlayReimburseSchoolKjAuditPostInterceptor.java rename src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/service/{OutlayReimburseApplyListService.java => OutlayReimburseApplyService.java} (89%) rename src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/service/impl/{OutlayReimburseApplyListServiceImpl.java => OutlayReimburseApplyServiceImpl.java} (97%) create mode 100644 src/main/resources/views/platform/zhgh/outlay/activityBudget/apply/index.html create mode 100644 src/main/resources/views/platform/zhgh/outlay/activityBudget/info.js create mode 100644 src/main/resources/views/platform/zhgh/outlay/outlayReimburse/applyList/index.html create mode 100644 src/main/resources/views/platform/zhgh/outlay/outlayReimburse/info.js create mode 100644 src/main/resources/views/platform/zhgh/outlay/outlayReimburse/schoolCnAudit/index.html create mode 100644 src/main/resources/views/platform/zhgh/outlay/outlayReimburse/schoolKjAudit/index.html create mode 100644 src/main/resources/views/platform/zhgh/outlay/outlayReimburse/schoolZxAudit/index.html diff --git a/src/main/java/com/budwk/app/zhgh/asset/service/impl/AssetStocktakingServiceImpl.java b/src/main/java/com/budwk/app/zhgh/asset/service/impl/AssetStocktakingServiceImpl.java index a9473e08..1d9090ad 100644 --- a/src/main/java/com/budwk/app/zhgh/asset/service/impl/AssetStocktakingServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/asset/service/impl/AssetStocktakingServiceImpl.java @@ -65,6 +65,7 @@ public class AssetStocktakingServiceImpl extends BaseServiceImpl campusList = baseService.dao().query(HealthCheckupCampus.class, Cnd.NEW().asc("campusCode")); diff --git a/src/main/java/com/budwk/app/zhgh/healthCheckup/controller/HealthCheckupListController.java b/src/main/java/com/budwk/app/zhgh/healthCheckup/controller/HealthCheckupListController.java index f44751b3..d081d452 100644 --- a/src/main/java/com/budwk/app/zhgh/healthCheckup/controller/HealthCheckupListController.java +++ b/src/main/java/com/budwk/app/zhgh/healthCheckup/controller/HealthCheckupListController.java @@ -65,6 +65,7 @@ import org.nutz.mvc.upload.UploadAdaptor; import javax.servlet.http.HttpServletResponse; import java.io.ByteArrayOutputStream; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -170,6 +171,9 @@ public class HealthCheckupListController { public Result doAuditUser(String projectId, String unionId, Boolean flag) { + if (StrUtil.isBlank(unionId)) { + unionId = SecurityUtil.getUnionId(); + } if (flag) { dao.update(HealthCheckupUnionConfirm.class, Chain.make("isAudit", true) .add("auditTime", DateUtil.date()) @@ -281,15 +285,12 @@ public class HealthCheckupListController { @ApiOperation("下载体检参加人员导入模版") @SaCheckPermission("healthCheckup.list.mange") public void downloadTem(HttpServletResponse response) { - try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();) { - - EasyExcel.write(byteArrayOutputStream, HealthCheckupImportTemp.class) - .sheet("参加人员导入模版") - .doWrite(ArrayList::new); - CommonDownloadUtil.download("参加人员导入模版.xlsx", byteArrayOutputStream.toByteArray(), response); - } catch (Exception e) { - log.error("下载参加人员导入模版失败", e); - } + List entities = new ArrayList<>(); + entities.add(new ExcelExportEntity("工号", "loginName", 20)); + entities.add(new ExcelExportEntity("姓名", "userName", 20)); + ExportParams exportParams = new ExportParams(); + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entities, Collections.emptyList()); + CommonDownloadUtil.download("参加人员导入模版.xlsx", workbook, response); } } diff --git a/src/main/java/com/budwk/app/zhgh/healthCheckup/controller/HealthCheckupSingleController.java b/src/main/java/com/budwk/app/zhgh/healthCheckup/controller/HealthCheckupSingleController.java index f2a6bab5..cc59391b 100644 --- a/src/main/java/com/budwk/app/zhgh/healthCheckup/controller/HealthCheckupSingleController.java +++ b/src/main/java/com/budwk/app/zhgh/healthCheckup/controller/HealthCheckupSingleController.java @@ -35,6 +35,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; import java.util.Calendar; +import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -270,6 +271,7 @@ public class HealthCheckupSingleController { selection.setSelectUserId(v); selection.setCampus(campus); selection.setSubjectId(optionId); + selection.setSelectTime(new Date()); return selection; }).collect(Collectors.toList()); manyAddOrRenewUtil.asyncExecuteFastInsert(selections,null); diff --git a/src/main/java/com/budwk/app/zhgh/healthCheckup/service/impl/HealthCheckupProjectServiceImpl.java b/src/main/java/com/budwk/app/zhgh/healthCheckup/service/impl/HealthCheckupProjectServiceImpl.java index 6c2407ea..f874509f 100644 --- a/src/main/java/com/budwk/app/zhgh/healthCheckup/service/impl/HealthCheckupProjectServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/healthCheckup/service/impl/HealthCheckupProjectServiceImpl.java @@ -53,9 +53,10 @@ public class HealthCheckupProjectServiceImpl extends BaseServiceImpl entities = new ArrayList<>(); + entities.add(new ExcelExportEntity("工号", "loginName", 20)); + entities.add(new ExcelExportEntity("姓名", "userName", 20)); + entities.add(new ExcelExportEntity("增加积分", "integral", 20)); + ExportParams exportParams = new ExportParams(); + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entities, Collections.emptyList()); + CommonDownloadUtil.download("积分增加导入模板.xlsx", workbook, response); + } + + + @At + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission("integral.manage") + @ApiOperation("导入扣减积分名单") + @AdaptBy(type = UploadAdaptor.class, args = {"ioc:fileUpload"}) + public Result doImportAdd(TempFile file){ + try { + List ts = EasyExcelUtil.syncReadModel(file.getFile(), IntegralAddTemp.class, 0, 1); + List integralTempList = JSONUtil.parseArray(JSONUtil.toJsonStr(ts)).toList(IntegralAddTemp.class); + + List loginNames = integralTempList.stream().map(IntegralAddTemp::getLoginName).toList(); + List userList = integralManageService.dao().query(View_user.class, Cnd.NEW().andEX(View_user::getLoginname, "in", loginNames)); + Map userMap = userList.stream().collect(Collectors.toMap(View_user::getLoginname, View_user::getId)); + + List errorInfos = new ArrayList<>(); + List insertInfos = new ArrayList<>(); + integralTempList.forEach(v -> { + if (userMap.containsKey(v.getLoginName().trim())) { + View_user viewUser = userList.stream().filter(user -> user.getLoginname().equals(v.getLoginName())).findFirst().orElse(null); + IntegralDetail detail = new IntegralDetail(); + detail.setYear(String.valueOf(DateUtil.thisYear())); + detail.setIntegral(v.getIntegral()); + detail.setIntegralTime(new Date()); + detail.setIntegralNotes("增加积分导入"); + detail.setUserId(viewUser.getId()); + detail.setUnionId(viewUser.getUnionId()); + detail.setUnitId(viewUser.getUnitId()); + detail.setUnionName(viewUser.getUnionName()); + detail.setUnitName(viewUser.getUnitName()); + insertInfos.add(detail); + } else { + v.setResult("获取不到该用户信息,请检查工号是否正确!"); + errorInfos.add(v); + } + }); + + int successCount = Lang.isNotEmpty(insertInfos) ? integralManageService.insert(insertInfos).size() : 0; + + if (Lang.isNotEmpty(errorInfos)) { + NutMap nutMap = new NutMap(); + nutMap.setv("totalCount", integralTempList.size()); + nutMap.setv("successCount", successCount); + nutMap.setv("errorCount", errorInfos.size()); + nutMap.setv("errorList", errorInfos.stream().map(v -> { + return NutMap.NEW().addv("工号", v.getLoginName()).addv("姓名", v.getUserName()).addv("错误原因", v.getResult()); + }).collect(Collectors.toList())); + return Result.success(nutMap); + } + return Result.success(); } catch (Exception e) { - log.error("下载福利名单导入模版失败", e); + e.printStackTrace(); + return Result.error(); } } @@ -358,6 +416,22 @@ public class IntegralManageController { @ExcelProperty("扣减时间") private Date integralTime; + @ExcelIgnore + private String result; + } + @Data + @EqualsAndHashCode + public static class IntegralAddTemp { + + @ExcelProperty("工号") + private String loginName; + + @ExcelProperty("姓名") + private String userName; + + @ExcelProperty("积分") + private String integral; + @ExcelIgnore private String result; } diff --git a/src/main/java/com/budwk/app/zhgh/integral/model/IntegralDetail.java b/src/main/java/com/budwk/app/zhgh/integral/model/IntegralDetail.java index 086aa2b2..95dfc55c 100644 --- a/src/main/java/com/budwk/app/zhgh/integral/model/IntegralDetail.java +++ b/src/main/java/com/budwk/app/zhgh/integral/model/IntegralDetail.java @@ -24,6 +24,7 @@ public class IntegralDetail extends BaseModel implements Serializable { @Column @Name @Comment("id") + @Prev(els = {@EL("uuid()")}) @ColDefine(type = ColType.VARCHAR, width = 32) private String id; diff --git a/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/conteoller/ActivityBudgetApplyController.java b/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/conteoller/ActivityBudgetApplyController.java index 7ba81c87..7cd55b09 100644 --- a/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/conteoller/ActivityBudgetApplyController.java +++ b/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/conteoller/ActivityBudgetApplyController.java @@ -1,11 +1,14 @@ package com.budwk.app.zhgh.outlay.activityBudget.conteoller; +import cn.dev33.satoken.annotation.SaCheckLogin; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.date.DateUtil; import com.alibaba.excel.EasyExcel; import com.budwk.app.base.annotation.SLog; import com.budwk.app.base.result.Result; import com.budwk.app.base.utils.CommonDownloadUtil; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.democratic.suggestionBox.models.SuggestionBox; import com.budwk.app.zhgh.integral.controller.IntegralManageController; import com.budwk.app.zhgh.outlay.activityBudget.models.ActivityBudget; import com.budwk.app.zhgh.outlay.activityBudget.service.ActivityBudgetService; @@ -68,8 +71,21 @@ public class ActivityBudgetApplyController { @SaCheckPermission("activity.budget.apply") @Aop(TransAop.READ_COMMITTED) @SLog(type = "activityBudgetApply", tag = "年度预算申报-预算申报", msg = "提交年度预算申报") - public Result doSubmit(@Param("activityBudget") ActivityBudget activityBudget, Boolean flag) { - return activityBudgetService.doSubmit(activityBudget, flag); + public Result submit(@Param("data") ActivityBudget activityBudget) { + return activityBudgetService.submit(activityBudget); + } + + + @At + @SaCheckPermission("activity.budget.apply") + @ApiOperation("保存申请") + @SLog(type = "activityBudgetApply", tag = "年度预算申报-预算申报", msg = "保存年度预算申报") + public Result save(@Param("data") ActivityBudget activityBudget) { + activityBudget.setUserId(SecurityUtil.getUserId()); + activityBudget.setLoginName(SecurityUtil.getUserLoginname()); + activityBudget.setUserName(SecurityUtil.getUserUsername()); + activityBudgetService.insertOrUpdate(activityBudget); + return Result.success(); } diff --git a/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/conteoller/ActivityBudgetSchoolAuditController.java b/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/conteoller/ActivityBudgetSchoolAuditController.java index a6522382..98cea854 100644 --- a/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/conteoller/ActivityBudgetSchoolAuditController.java +++ b/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/conteoller/ActivityBudgetSchoolAuditController.java @@ -45,12 +45,6 @@ public class ActivityBudgetSchoolAuditController { public void index() { } - @At("/form") - @Ok("beetl:/platform/zhgh/outlay/activityBudget/schoolAudit/form.html") - @SaCheckPermission("activity.budget.schoolAudit") - public void form() { - } - @At @ApiOperation("分页查询") @@ -70,6 +64,7 @@ public class ActivityBudgetSchoolAuditController { ins.businessNo, ins.state instanceState, ins.variable instanceVariale, + ins.processDefineId instanceProcessDefineId, t.id taskId, t.taskName AS taskKey, t.displayName taskName, @@ -78,12 +73,16 @@ public class ActivityBudgetSchoolAuditController { t.taskState, t.finishTime, t.taskParentId, - t.variable taskVariale + 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 activity_budget 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(); @@ -98,16 +97,16 @@ public class ActivityBudgetSchoolAuditController { cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); } - cnd.desc("t.createdAt"); cnd.andEX("YEAR(info.applyDate)", "=", year); cnd.and(Cnd.likeEX("info.activityMatter", activityMatter)); - + cnd.groupBy("t.id"); if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { - cnd.desc("info.applyDate"); + cnd.desc("t.createdAt").desc("info.applyDate"); } else { cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); } + sql.setCondition(cnd); Pagination pageVO = activityBudgetService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); return Result.success(pageVO); diff --git a/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/interceptor/OutlayActBudgetSchoolPostInterceptor.java b/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/interceptor/OutlayActBudgetSchoolPostInterceptor.java index 5c03d4b3..c0f7f2df 100644 --- a/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/interceptor/OutlayActBudgetSchoolPostInterceptor.java +++ b/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/interceptor/OutlayActBudgetSchoolPostInterceptor.java @@ -23,13 +23,12 @@ public class OutlayActBudgetSchoolPostInterceptor implements FlowInterceptor { String formDataStr = execution.getArgs().getStr(FlowConst.FORM_DATA); NutMap activityBudget = Json.fromJson(NutMap.class, formDataStr); - Dao dao = ServiceContext.find(Dao.class); dao.update(ActivityBudget.class, Chain.make("totalBudgetMoney", execution.getArgs().getStr("tf_totalBudgetMoney")), Cnd.where("id", "=", activityBudget.getString("id"))); - execution.getArgs().set(FlowConst.FORM_DATA, Json.toJson(activityBudget)); + /*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.getString("id")), Cnd.where(ProcessInstance::getId, "=", instanceId)); + dao.update(ProcessInstance.class, Chain.make("businessNo", activityBudget.getString("id")), Cnd.where(ProcessInstance::getId, "=", instanceId));*/ } } diff --git a/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/service/ActivityBudgetService.java b/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/service/ActivityBudgetService.java index 0b9f66f7..98729a9b 100644 --- a/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/service/ActivityBudgetService.java +++ b/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/service/ActivityBudgetService.java @@ -17,9 +17,8 @@ public interface ActivityBudgetService extends BaseService { /** * 提交年度预算申报 * @param activityBudget - * @param flag */ - Result doSubmit(ActivityBudget activityBudget, Boolean flag); + Result submit(ActivityBudget activityBudget); ActivityBudget findOne(String id); diff --git a/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/service/impl/ActivityBudgetServiceImpl.java b/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/service/impl/ActivityBudgetServiceImpl.java index b3daa80a..aeb8309d 100644 --- a/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/service/impl/ActivityBudgetServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/outlay/activityBudget/service/impl/ActivityBudgetServiceImpl.java @@ -5,6 +5,7 @@ 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.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Dict; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.budwk.app.base.constant.RoleConstant; @@ -13,6 +14,11 @@ import com.budwk.app.base.param.PageForm; import com.budwk.app.base.result.Result; import com.budwk.app.base.service.impl.BaseServiceImpl; import com.budwk.app.base.utils.CommonDownloadUtil; +import com.budwk.app.flow.constant.FlowConst; +import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.flow.entity.ProcessInstance; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.enums.ProcessSubmitTypeEnum; import com.budwk.app.sys.models.Sys_dict; import com.budwk.app.sys.services.SysDictService; import com.budwk.app.web.commons.auth.utils.AuthUtil; @@ -51,6 +57,9 @@ public class ActivityBudgetServiceImpl extends BaseServiceImpl i @Inject private SysDictService sysDictService; + @Inject + private FlowEngine flowEngine; + @Override public Sql getSqlByApplyList(PageForm pageForm, Integer year, String activityMatter,Cnd cnd) { @@ -62,6 +71,7 @@ public class ActivityBudgetServiceImpl extends BaseServiceImpl i ins.businessNo, ins.state instanceState, ins.variable instanceVariale, + ins.processDefineId instanceProcessDefineId, t.id taskId, t.taskName AS taskKey, t.displayName taskName, @@ -70,7 +80,9 @@ public class ActivityBudgetServiceImpl extends BaseServiceImpl i t.taskState, t.finishTime, t.taskParentId, - t.variable taskVariale + t.variable taskVariale, + IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke, + (select MAX(id) from wf_process_task where processInstanceId = ins.id and taskName = 'startTask' AND taskState in (10,20)) AS startTaskId FROM activity_budget info LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id @@ -113,10 +125,7 @@ public class ActivityBudgetServiceImpl extends BaseServiceImpl i } @Override - public Result doSubmit(ActivityBudget activityBudget, Boolean flag) { - if (flag) { - activityBudget.setAuditState(1); - } + public Result submit(ActivityBudget activityBudget) { if (StrUtil.isEmpty(activityBudget.getId())) { activityBudget.setUserId(SecurityUtil.getUserId()); @@ -126,7 +135,7 @@ public class ActivityBudgetServiceImpl extends BaseServiceImpl i if (List.of("ACTIVITY_BUDGET_TYPE_TWO").contains(activityBudget.getOutlayManageSource())) { int activityMatterCount = count(Cnd.where("activityMatter", "=", activityBudget.getActivityMatter()).and("unionId", "=", SecurityUtil.getUnionId())); - if (flag && activityMatterCount > 0) { + if (activityMatterCount > 0) { return Result.error(activityBudget.getActivityMatter() + "已填写申请!"); } } @@ -136,9 +145,9 @@ public class ActivityBudgetServiceImpl extends BaseServiceImpl i dao().clear(ActivityBudgetDetails.class, Cnd.where("budgetId", "=", activityBudget.getId())); } - if (List.of("superadmin").contains(SecurityUtil.getUserLoginname())) { + /* if (List.of("superadmin").contains(SecurityUtil.getUserLoginname())) { //如果是超级管理员就可以直接提交不用审核 - if (flag) { + activityBudget.setAuditState(4); activityBudget.setTotalBudgetMoney(activityBudget.getDeclareTotalBudgetMoney()); ActivityBudget budget = null; @@ -173,7 +182,7 @@ public class ActivityBudgetServiceImpl extends BaseServiceImpl i //如果不等于校工会预算才往表里面加预算 //代表协会可能用的是校工会的预算 if (!activityBudget.getIsSchoolBudget()) { - /* jf_club jfClub = dao.fetch(jf_club.class, Cnd.where("year", "=", DateUtil.getYear()) + *//* 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())) { @@ -181,21 +190,21 @@ public class ActivityBudgetServiceImpl extends BaseServiceImpl i } 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())); + *//*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); - }*/ - } + }*//* + } - } + }*/ insertOrUpdate(activityBudget); @@ -204,14 +213,23 @@ public class ActivityBudgetServiceImpl extends BaseServiceImpl i } //添加预算详情表 insert(activityBudget.getBudgetDetails()); + // 开启流程实例 + Dict args = Dict.create(); + args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode()); + args.set(FlowConst.FORM_DATA, activityBudget); + ProcessInstance instance = flowEngine.startProcessInstanceByKey("NDYSSB", activityBudget.getId(), SecurityUtil.getUserId(), args); + // 自动完成第一个申请任务 + List doingTaskList = flowEngine.processTaskService().getDoingTaskList(instance.getId(), null); + for (ProcessTask task : doingTaskList) { + flowEngine.executeProcessTask(task.getId(), SecurityUtil.getUserId(), args); + } return Result.success(); } @Override public ActivityBudget findOne(String id) { ActivityBudget activityBudget = fetchLinks(fetch(id), "budgetDetails", Cnd.NEW().asc("detailsOrder")); - activityBudget.setSchoolAudit(dao().fetch(Audit.class, Cnd.where("id", "=", activityBudget.getSchoolAuditId()))); // activityBudget.setAllocationEditAuditList(dao().query(Audit.class, Cnd.where("parentId", "=", activityBudget.getId()))); return activityBudget; } diff --git a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseApplyController.java b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseApplyController.java new file mode 100644 index 00000000..ba688796 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseApplyController.java @@ -0,0 +1,144 @@ +package com.budwk.app.zhgh.outlay.outlayReimburse.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Dict; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.result.Result; +import com.budwk.app.flow.constant.FlowConst; +import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.flow.entity.ProcessInstance; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.enums.ProcessSubmitTypeEnum; +import com.budwk.app.sys.views.View_user; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.outlay.activityBudget.models.ActivityBudget; +import com.budwk.app.zhgh.outlay.outlayReimburse.model.OutlayReimburse; +import com.budwk.app.zhgh.outlay.outlayReimburse.service.OutlayReimburseApplyService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.ioc.aop.Aop; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import javax.swing.*; +import java.util.List; + +/** + * @author zhf + * @date 2025/8/19 10:14 + * @description 费用报销申请 + */ +@IocBean +@At("/platform/outlay/reimburse/apply") +@Ok("json:full") +@Api("费用报销申请") +public class OutlayReimburseApplyController { + + + @Inject + private OutlayReimburseApplyService outlayReimburseApplyService; + + @Inject + private Dao dao; + + @Inject + private FlowEngine flowEngine; + + @At("/index") + @Ok("beetl:/platform/zhgh/outlay/outlayReimburse/apply/index.html") + @SaCheckPermission("outlay.reimburse.apply") + public void index() { + + } + + + @At + @ApiOperation("获取预算金额或活动") + @SaCheckPermission("outlay.reimburse.apply") + public Result getBudgetMoneyOrActivity(String outlayManageSource, String clubId, String unionId, String id) { + return Result.success(outlayReimburseApplyService.getBudgetMoneyOrActivity(outlayManageSource, clubId, unionId, id)); + } + + @At + @ApiOperation("查询这个预算已经报销了的金额") + @SaCheckPermission("outlay.reimburse.apply") + public Result getBxMoneyByBudgetId(String budgetId) { + return Result.success(outlayReimburseApplyService.getBxMoneyByActivityId(budgetId)); + } + + + @At + @ApiOperation("判断这个报销的记录预算是否充足") + @SaCheckPermission("outlay.reimburse.apply") + public Result bxAddValidate(String budgetId, String money, String outlayManageSource, String clubId) { + return outlayReimburseApplyService.bxAddValidate(budgetId, money, outlayManageSource, clubId); + } + + @At + @ApiOperation("提交报销申请") + @SaCheckPermission("activity.budget.apply") + @Aop(TransAop.READ_COMMITTED) + @SLog(type = "outlayReimburseApply", tag = "费用报销管理-报销申请", msg = "提交年度预算申报") + public Result submit(@Param("data") OutlayReimburse outlayReimburse) { + //添加预算详情表 + if (StrUtil.isBlank(outlayReimburse.getId())){ + View_user user = dao.fetch(View_user.class, Cnd.where("id", "=", SecurityUtil.getUserId())); + outlayReimburse.setUserId(SecurityUtil.getUserId()); + outlayReimburse.setUserName(SecurityUtil.getUserUsername()); + outlayReimburse.setLoginName(SecurityUtil.getUserLoginname()); + outlayReimburse.setUnitId(SecurityUtil.getUnitId()); + outlayReimburse.setUnitName(user.getUnitName()); + outlayReimburse.setUnionId(SecurityUtil.getUnionId()); + outlayReimburse.setUnionName(user.getUnionName()); + outlayReimburse.setApplyTime(DateUtil.now()); + } + outlayReimburseApplyService.insertOrUpdate(outlayReimburse); + // 开启流程实例 + Dict args = Dict.create(); + args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode()); + args.set(FlowConst.FORM_DATA, outlayReimburse); + args.set("outlayManageSource", outlayReimburse.getOutlayManageSource()); + ProcessInstance instance = flowEngine.startProcessInstanceByKey("FYBXSQ", outlayReimburse.getId(), SecurityUtil.getUserId(), args); + + // 自动完成第一个申请任务 + List doingTaskList = flowEngine.processTaskService().getDoingTaskList(instance.getId(), null); + for (ProcessTask task : doingTaskList) { + flowEngine.executeProcessTask(task.getId(), SecurityUtil.getUserId(), args); + } + return Result.success(); + } + + + @At + @SaCheckPermission("outlay.reimburse.apply") + @ApiOperation("保存申请") + @SLog(type = "outlayReimburseApply", tag = "费用报销管理-报销申请", msg = "保存年度预算申报") + public Result save(@Param("data") OutlayReimburse outlayReimburse) { + View_user user = dao.fetch(View_user.class, Cnd.where("id", "=", SecurityUtil.getUserId())); + outlayReimburse.setUserId(SecurityUtil.getUserId()); + outlayReimburse.setUserName(SecurityUtil.getUserUsername()); + outlayReimburse.setLoginName(SecurityUtil.getUserLoginname()); + outlayReimburse.setUnitId(SecurityUtil.getUnitId()); + outlayReimburse.setUnitName(user.getUnitName()); + outlayReimburse.setUnionId(SecurityUtil.getUnionId()); + outlayReimburse.setUnionName(user.getUnionName()); + outlayReimburse.setApplyTime(DateUtil.now()); + outlayReimburseApplyService.insertOrUpdate(outlayReimburse); + return Result.success(); + } + + @At + @SaCheckPermission("outlay.reimburse.apply") + @ApiOperation("保存申请") + public Result findOne(String id){ + return Result.success(outlayReimburseApplyService.fetch(id)); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseApplyListController.java b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseApplyListController.java index a0e31920..ef1a7c17 100644 --- a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseApplyListController.java +++ b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseApplyListController.java @@ -1,12 +1,17 @@ package com.budwk.app.zhgh.outlay.outlayReimburse.controller; -import cn.dev33.satoken.annotation.SaCheckLogin; import cn.dev33.satoken.annotation.SaCheckPermission; +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.zhgh.outlay.outlayReimburse.service.OutlayReimburseApplyListService; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.outlay.outlayReimburse.service.OutlayReimburseApplyService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +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.mvc.annotation.At; @@ -18,63 +23,60 @@ import org.nutz.mvc.annotation.Ok; * @description 我的报销 */ @IocBean -@At("/platform/outlay/reimburse/apply") +@At("/platform/outlay/reimburse/applyList") @Ok("json:full") @Api("我的报销") public class OutlayReimburseApplyListController { @Inject - private OutlayReimburseApplyListService outlayReimburseApplyListService; + private BaseService baseService; + @At("/index") - @Ok("beetl:/platform/zhgh/outlay/outlayReimburse/apply/index.html") - @SaCheckPermission("outlay.reimburse.apply") + @Ok("beetl:/platform/zhgh/outlay/outlayReimburse/applyList/index.html") + @SaCheckPermission("outlay.reimburse.applyList") public void index() { } - @At("/form") - @Ok("beetl:/platform/zhgh/outlay/outlayReimburse/apply/form.html") - @SaCheckPermission("outlay.reimburse.apply") - public void form() { - } - - @At("/view") - @Ok("beetl:/platform/zhgh/outlay/outlayReimburse/view/index.html") - @SaCheckPermission("outlay.reimburse.apply") - public void view() { - } - @At @ApiOperation("分页查询") - @SaCheckPermission("outlay.reimburse.apply") - public Result pageData(PageForm pageForm) { + @SaCheckPermission("outlay.reimburse.applyList") + public Result pageData(PageForm pageForm, Integer year) { - return Result.success(); + Sql sql = Sqls.create(""" + SELECT + info.*, + 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 taskVariale, + IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke, + (SELECT MAX(id) FROM wf_process_task WHERE processInstanceId = ins.id AND taskName = 'startTask' AND taskState IN (10, 20)) AS startTaskId + FROM + outlay_reimburse info + LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id + LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id + AND t.taskState = 10 + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + """); + Cnd cnd = Cnd.NEW(); + cnd.and("info.userId", "=", SecurityUtil.getUserId()); + + Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); } - @At - @ApiOperation("获取预算金额或活动") - @SaCheckPermission("outlay.reimburse.apply") - public Result getBudgetMoneyOrActivity(String outlayManageSource, String clubId, String unionId, String id) { - return Result.success(outlayReimburseApplyListService.getBudgetMoneyOrActivity(outlayManageSource, clubId, unionId, id)); - } - - @At - @ApiOperation("查询这个预算已经报销了的金额") - @SaCheckPermission("outlay.reimburse.apply") - public Result getBxMoneyByBudgetId(String budgetId) { - return Result.success(outlayReimburseApplyListService.getBxMoneyByActivityId(budgetId)); - } - - - @At - @ApiOperation("判断这个报销的记录预算是否充足") - @SaCheckPermission("outlay.reimburse.apply") - public Result bxAddValidate(String budgetId, String money, String outlayManageSource,String clubId) { - return outlayReimburseApplyListService.bxAddValidate(budgetId,money, outlayManageSource,clubId); - } - } diff --git a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseSchoolCnAuditController.java b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseSchoolCnAuditController.java new file mode 100644 index 00000000..ca16b9c9 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseSchoolCnAuditController.java @@ -0,0 +1,116 @@ +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.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 15:18 + * @description 出纳审核 + */ +@IocBean +@Ok("json:full") +@Slf4j +@Api(tags = "费用报销管理-出纳审核") +@At("/platform/outlay/reimburse/schoolCnAudit") +public class OutlayReimburseSchoolCnAuditController { + + @Inject + private BaseService baseService; + + + @At("/index") + @Ok("beetl:/platform/zhgh/outlay/outlayReimburse/schoolCnAudit/index.html") + @SaCheckPermission("outlay.reimburse.schoolCnAudit") + public void index() { + + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission("outlay.reimburse.schoolCnAudit") + public Result pageData(PageForm pageForm, + Integer year, + String unionId, + String clubId, + Boolean approval, + String outlayManageSource, + String activityMatter) { + 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", "=", "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.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); + 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 pageVO = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pageVO); + } + + + + +} diff --git a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseSchoolKjAuditController.java b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseSchoolKjAuditController.java new file mode 100644 index 00000000..da02435c --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseSchoolKjAuditController.java @@ -0,0 +1,155 @@ +package com.budwk.app.zhgh.outlay.outlayReimburse.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.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 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 org.nutz.mvc.annotation.Param; + +import java.util.List; + +/** + * @author zhf + * @date 2025/8/19 16:50 + * @description 会计审核 + */ +@IocBean +@Ok("json:full") +@Slf4j +@Api(tags = "费用报销管理-出纳审核") +@At("/platform/outlay/reimburse/schoolKjAudit") +public class OutlayReimburseSchoolKjAuditController { + + @Inject + private BaseService baseService; + @Inject + private SysDictService sysDictService; + + @At("/index") + @Ok("beetl:/platform/zhgh/outlay/outlayReimburse/schoolKjAudit/index.html") + @SaCheckPermission("outlay.reimburse.schoolKjAudit") + public void index() { + + } + + + @At + @ApiOperation("分页查询") + @SaCheckPermission("outlay.reimburse.schoolKjAudit") + public Result pageData(PageForm pageForm, + Integer year, + String unionId, + String clubId, + Boolean approval, + String outlayManageSource, + String activityMatter) { + 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", "=", "930aed03-677b-41d7-8920-7d9b45a7abc9"); + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + cnd.andEX("info.unionId", "=", unionId); + 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()); + } + + 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 pageVO = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pageVO); + } + + + + @At + @ApiOperation("删除字典表内容") + @SaCheckPermission("outlay.reimburse.schoolKjAudit") + @SLog(type = "outlayReimburseSchoolKjAudit", tag = "费用报销管理-校工会会计审核", msg = "删除字典表内容") + public Result doDeleteDetailsType(@Param("id") String id) { + Sys_dict dict = sysDictService.fetch(id); + sysDictService.deleteAndChild(dict); + sysDictService.clearCache(); + return Result.success(); + } + + @At + @ApiOperation("添加字典表内容") + @SaCheckPermission("outlay.reimburse.schoolKjAudit") + @SLog(type = "outlayReimburseSchoolKjAudit", tag = "费用报销管理-校工会会计审核", msg = "添加字典表内容") + public Result doSubmitDetailsType(@Param("detailsTypeList") Sys_dict[] detailsTypeList) { + Sys_dict fetch = sysDictService.fetch(Cnd.where("code", "=", "ACTIVITY_BUDGET_DETAILS_TYPE")); + + if (ObjectUtil.isEmpty(fetch)) { + return Result.error("字典父类不存在!"); + } + for (Sys_dict dict : detailsTypeList) { + if (ObjectUtil.isEmpty(dict.getId())) { + sysDictService.save(dict, fetch.getId()); + } else { + sysDictService.updateIgnoreNull(dict); + } + } + return Result.success(); + } + + + +} diff --git a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseSchoolZxAuditController.java b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseSchoolZxAuditController.java new file mode 100644 index 00000000..06b3671d --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/controller/OutlayReimburseSchoolZxAuditController.java @@ -0,0 +1,124 @@ +package com.budwk.app.zhgh.outlay.outlayReimburse.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.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 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 org.nutz.mvc.annotation.Param; + +import java.util.List; + +/** + * @author zhf + * @date 2025/8/19 16:50 + * @description 主席审核 + */ +@IocBean +@Ok("json:full") +@Slf4j +@Api(tags = "费用报销管理-主席审核") +@At("/platform/outlay/reimburse/schoolZxAudit") +public class OutlayReimburseSchoolZxAuditController { + + @Inject + private BaseService baseService; + @Inject + private SysDictService sysDictService; + + @At("/index") + @Ok("beetl:/platform/zhgh/outlay/outlayReimburse/schoolZxAudit/index.html") + @SaCheckPermission("outlay.reimburse.schoolZxAudit") + public void index() { + + } + + + @At + @ApiOperation("分页查询") + @SaCheckPermission("outlay.reimburse.schoolZxAudit") + public Result pageData(PageForm pageForm, + Integer year, + String unionId, + String clubId, + Boolean approval, + String outlayManageSource, + String activityMatter) { + 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", "=", "c433d966-05f4-45b4-b845-755b600d852a"); + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + cnd.andEX("info.unionId", "=", unionId); + 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()); + } + + 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 pageVO = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pageVO); + } + + + + + +} diff --git a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/interceptor/OutlayReimburseSchoolKjAuditPostInterceptor.java b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/interceptor/OutlayReimburseSchoolKjAuditPostInterceptor.java new file mode 100644 index 00000000..e5cfff62 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/interceptor/OutlayReimburseSchoolKjAuditPostInterceptor.java @@ -0,0 +1,29 @@ +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.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/8/20 11:48 + * @description 校工会会计审核 + */ +public class OutlayReimburseSchoolKjAuditPostInterceptor implements FlowInterceptor { + @Override + public void intercept(Execution execution) { + String formDataStr = execution.getArgs().getStr(FlowConst.FORM_DATA); + OutlayReimburse outlayReimburse = Json.fromJson(OutlayReimburse.class, formDataStr); + String detailsTypeId = execution.getArgs().getStr("detailsTypeId"); + outlayReimburse.setDetailsTypeId(detailsTypeId); + Dao dao = ServiceContext.find(Dao.class); + dao.update(outlayReimburse); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/model/OutlayReimburse.java b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/model/OutlayReimburse.java index 0ea7798f..14a1d439 100644 --- a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/model/OutlayReimburse.java +++ b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/model/OutlayReimburse.java @@ -86,7 +86,7 @@ public class OutlayReimburse extends BaseModel implements Serializable { @Column @Comment("支付内容") - @ColDefine(type = ColType.VARCHAR, width = 30) + @ColDefine(type = ColType.TEXT) private String paymentContent; @Column @@ -120,5 +120,10 @@ public class OutlayReimburse extends BaseModel implements Serializable { @ColDefine(type = ColType.VARCHAR, width = 100) private String userSign; + @Column + @Comment("明细类") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String detailsTypeId; + } diff --git a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/service/OutlayReimburseApplyListService.java b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/service/OutlayReimburseApplyService.java similarity index 89% rename from src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/service/OutlayReimburseApplyListService.java rename to src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/service/OutlayReimburseApplyService.java index 09054156..c704ae50 100644 --- a/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/service/OutlayReimburseApplyListService.java +++ b/src/main/java/com/budwk/app/zhgh/outlay/outlayReimburse/service/OutlayReimburseApplyService.java @@ -7,7 +7,7 @@ import org.nutz.lang.util.NutMap; import java.math.BigDecimal; -public interface OutlayReimburseApplyListService extends BaseService { +public interface OutlayReimburseApplyService extends BaseService { /** @@ -37,4 +37,7 @@ public interface OutlayReimburseApplyListService extends BaseService implements OutlayReimburseApplyListService { - public OutlayReimburseApplyListServiceImpl(Dao dao) { +public class OutlayReimburseApplyServiceImpl extends BaseServiceImpl implements OutlayReimburseApplyService { + public OutlayReimburseApplyServiceImpl(Dao dao) { super(dao); } @@ -255,6 +254,14 @@ public class OutlayReimburseApplyListServiceImpl extends BaseServiceImpl + label="原责任人" prop="oldAssetUseUserName"> + label="原使用/管理部门" prop="oldAssetUseUnionName"> + label="原存放地点" prop="oldAssetStorageLocation"> + label="原使用状况" prop="oldAssetUsageStateName"> + label="操作时间" prop="createdAt"> diff --git a/src/main/resources/views/platform/zhgh/asset/stocktaking/index.html b/src/main/resources/views/platform/zhgh/asset/stocktaking/index.html index 5577dce5..d10555f1 100644 --- a/src/main/resources/views/platform/zhgh/asset/stocktaking/index.html +++ b/src/main/resources/views/platform/zhgh/asset/stocktaking/index.html @@ -68,6 +68,14 @@ layout("/layouts/platform.html"){ ref="table" row-key="id" style="width: 100%"> + 查看 + + 二维码 + @@ -93,9 +96,7 @@ layout("/layouts/platform.html"){ 删除 - + @@ -296,7 +297,18 @@ layout("/layouts/platform.html"){ > - + +
+ +
+ + 关 闭 + +
+ 增加导入 批量扣减 @@ -170,6 +171,12 @@ layout("/layouts/platform.html"){ post_url="/platform/integral/manage/doImport" @flush="$refs.guava.index();pageData()" > + + @@ -283,6 +290,10 @@ layout("/layouts/platform.html"){ "file-import": httpVueLoader("/components/plugins/sysImport/index.vue?v=" + new Date().getTime()) }, methods: { + openImportAdd(){ + this.$refs.guava.public() + this.$refs.viewImport.resetImportData() + }, openImport() { this.$refs.guava.edit() this.$refs.viewImport.resetImportData() diff --git a/src/main/resources/views/platform/zhgh/outlay/activityBudget/apply/index.html b/src/main/resources/views/platform/zhgh/outlay/activityBudget/apply/index.html new file mode 100644 index 00000000..bc6332e0 --- /dev/null +++ b/src/main/resources/views/platform/zhgh/outlay/activityBudget/apply/index.html @@ -0,0 +1,342 @@ + + +
+ + + + + {{formData.userName}} + {{formData.applyDate}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 属于 + 不属于 + + + + + + + + + + + + + + + + + + + + + + 保存 + 提交 + 提交 + + +
+ + + + + + diff --git a/src/main/resources/views/platform/zhgh/outlay/activityBudget/applyList/index.html b/src/main/resources/views/platform/zhgh/outlay/activityBudget/applyList/index.html index 9c110598..640b4b14 100644 --- a/src/main/resources/views/platform/zhgh/outlay/activityBudget/applyList/index.html +++ b/src/main/resources/views/platform/zhgh/outlay/activityBudget/applyList/index.html @@ -87,11 +87,13 @@ layout("/layouts/platform.html"){ 查看 - + 编辑 + 撤回 + + v-if="row.taskKey === 'startTask' || !row.instanceId"> 删除 @@ -101,12 +103,15 @@ layout("/layouts/platform.html"){
- +
@@ -122,7 +141,8 @@ layout("/layouts/platform.html"){ @@ -175,7 +195,7 @@ layout("/layouts/platform.html"){ {prop: 'unitName', label: '所属单位', sortable: true}, {prop: 'member', label: '是否会员', sortable: true}, {prop: 'mobile', label: '联系电话'}, - {prop: 'thirtyCertificateProcessingTime', label: '《30年教龄荣誉证》办理年月'}, + {prop: 'thirtyCertificateProcessingTime', label: '《30年教龄荣誉证》办理年月', width: 200}, ], setThirtyTeachVisible: false, @@ -197,8 +217,25 @@ layout("/layouts/platform.html"){ "file-import": httpVueLoader("/components/plugins/sysImport/index.vue?v=" + new Date().getTime()) }, methods: { + rowThirtyCertificateProcessingTimeChange(row) { + row.isEditThirtyCertificateProcessingTime = false + this.$axios.post('/platform/thirtyTeach/manage/doEditThirtyCertificateProcessingTime', { + thirtyCertificateProcessingTime: row.thirtyCertificateProcessingTime, + id: row.id, + }).then(resp => { + if (resp.code === 0) { + this.doSearch() + this.notifySuccess(resp.msg) + } else { + this.notifyWarning(resp.msg) + } + }) + }, + openEdit(row) { + + }, openImport() { - this.$refs.guava.edit(()=>{ + this.$refs.guava.edit(() => { this.$refs.viewImport.resetImportData() }) @@ -263,7 +300,7 @@ layout("/layouts/platform.html"){ }, openView() { }, - async doDelete(userId) { + async doDelete(userId) { const confirm = await this.$confirm('您确定要删除吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消',