From 330036b27285b4a389f728fd2f804f947f08fd00 Mon Sep 17 00:00:00 2001 From: 86156 <823267011@qq.com> Date: Sun, 23 Feb 2025 16:24:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=81=E7=A8=8B+=E4=BB=BB=E5=8A=A1=E5=88=86?= =?UTF-8?q?=E5=8F=91+=E6=8A=A5=E9=94=80=E5=8A=9F=E8=83=BD=E5=AE=8C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/oa/SysOaClaimController.java | 12 + .../workflow/WfProcessController.java | 5 +- .../src/main/resources/application.yml | 2 +- .../com/ruoyi/common/config/RuoYiConfig.java | 6 +- .../java/com/ruoyi/oa/domain/SysOaClaim.java | 12 + .../com/ruoyi/oa/domain/SysOaClaimDetail.java | 6 + .../com/ruoyi/oa/domain/bo/SysOaClaimBo.java | 18 + .../oa/domain/bo/SysOaClaimDetailBo.java | 16 +- .../com/ruoyi/oa/domain/bo/SysOaFileBo.java | 4 - .../oa/domain/vo/SysOaClaimDetailVo.java | 6 + .../com/ruoyi/oa/domain/vo/SysOaClaimVo.java | 17 + .../com/ruoyi/oa/mapper/SysOaClaimMapper.java | 10 +- .../ruoyi/oa/service/ISysOaClaimService.java | 8 + .../ruoyi/oa/service/ISysOaFileService.java | 2 + .../service/impl/SysOaClaimServiceImpl.java | 38 +- .../oa/service/impl/SysOaFileServiceImpl.java | 15 + .../resources/mapper/oa/SysOaClaimMapper.xml | 77 +- .../service/impl/WfProcessServiceImpl.java | 21 +- ruoyi-ui/src/api/oa/claim.js | 9 + ruoyi-ui/src/api/workflow/process.js | 9 + ruoyi-ui/src/components/Editor/index.vue | 2 +- ruoyi-ui/src/components/FileUpload/index.vue | 2 +- ruoyi-ui/src/router/index.js | 20 + ruoyi-ui/src/utils/generator/config.js | 2 +- .../views/components/ClaimDetail/index.vue | 203 +++++ ruoyi-ui/src/views/oa/claim/add.vue | 314 +++++++ ruoyi-ui/src/views/oa/claim/detail.vue | 764 ++++++++++++++++++ ruoyi-ui/src/views/oa/claim/index.vue | 40 +- ruoyi-ui/src/views/oa/costing/list.vue | 1 - ruoyi-ui/src/views/workflow/work/detail.vue | 52 +- ruoyi-ui/src/views/workflow/work/finished.vue | 18 +- ruoyi-ui/src/views/workflow/work/todo.vue | 14 +- ruoyi-ui/temp.txt | 68 ++ 33 files changed, 1669 insertions(+), 124 deletions(-) create mode 100644 ruoyi-ui/src/views/components/ClaimDetail/index.vue create mode 100644 ruoyi-ui/src/views/oa/claim/add.vue create mode 100644 ruoyi-ui/src/views/oa/claim/detail.vue create mode 100644 ruoyi-ui/temp.txt diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/SysOaClaimController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/SysOaClaimController.java index c440aab..51b6541 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/SysOaClaimController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/oa/SysOaClaimController.java @@ -69,6 +69,18 @@ public class SysOaClaimController extends BaseController { return R.ok(iSysOaClaimService.queryById(claimId)); } + /** + * 通过实例id查询报销表单 + * + * @param procInsId 主键 + */ + @SaCheckPermission("system:oaClaim:query") + @GetMapping("/process/{procInsId}") + public R getInfoByProcInsId(@NotNull(message = "主键不能为空") + @PathVariable String procInsId) { + return R.ok(iSysOaClaimService.queryByProcInsId(procInsId)); + } + /** * 新增差旅费报销 */ diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfProcessController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfProcessController.java index 33247cb..4eae2aa 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfProcessController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/workflow/WfProcessController.java @@ -21,6 +21,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -211,11 +212,11 @@ public class WfProcessController extends BaseController { /** * 根据流程定义id启动流程实例 * - * @param variables 变量集合,json对象 */ @SaCheckPermission("workflow:process:start") @PostMapping("/startClaim") - public R startClaim(@RequestBody Map variables) { + public R startClaim() { + Map variables = new HashMap(); String procInsId = processService.startClaim(variables); return R.ok("流程启动成功",procInsId); } diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 09e5475..d182db0 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -13,7 +13,7 @@ ruoyi: # 缓存懒加载 cacheLazy: false # 文件路径 - profile: /home/wangyu/oa/uploadPath + profile: F:\work\fad_oa系统\fad_oa\temp captcha: # 页面 <参数设置> 可开启关闭 验证码校验 diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java index 8c83291..13ab8cc 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java @@ -41,9 +41,13 @@ public class RuoYiConfig { */ private boolean cacheLazy; +// /** 上传路径 */ +// @Getter +// private static String profile = "/home/wangyu/oa/uploadPath"; + /** 上传路径 */ @Getter - private static String profile = "/home/wangyu/oa/uploadPath"; + private static String profile = "F:\\work\\fad_oa系统\\fad_oa\\temp"; /** * 获取地址开关 diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaClaim.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaClaim.java index d03328b..404e429 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaClaim.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaClaim.java @@ -1,12 +1,14 @@ package com.ruoyi.oa.domain; import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import lombok.EqualsAndHashCode; import java.util.Date; import com.ruoyi.common.core.domain.BaseEntity; +import org.springframework.format.annotation.DateTimeFormat; /** * 差旅费报销对象 sys_oa_claim @@ -41,10 +43,14 @@ public class SysOaClaim extends BaseEntity { /** * 开始时间 */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") private Date startTime; /** * 结束时间 */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") private Date endTime; /** * 出差天数 @@ -74,6 +80,12 @@ public class SysOaClaim extends BaseEntity { /** * 报销时间 */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") private Date completedTime; + /** + * 出差地点 + */ + private String address; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaClaimDetail.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaClaimDetail.java index 21ebaac..49508cd 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaClaimDetail.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaClaimDetail.java @@ -1,12 +1,14 @@ package com.ruoyi.oa.domain; import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import lombok.EqualsAndHashCode; import java.util.Date; import com.ruoyi.common.core.domain.BaseEntity; +import org.springframework.format.annotation.DateTimeFormat; /** * 报销明细对象 sys_oa_claim_detail @@ -37,10 +39,14 @@ public class SysOaClaimDetail extends BaseEntity { /** * 开始时间 */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") private Date beginTime; /** * 结束时间 */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") private Date endTime; /** * 入住地点 diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaClaimBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaClaimBo.java index 8683489..d111622 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaClaimBo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaClaimBo.java @@ -1,8 +1,10 @@ package com.ruoyi.oa.domain.bo; +import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.core.validate.AddGroup; import com.ruoyi.common.core.validate.EditGroup; import com.ruoyi.oa.domain.SysOaClaimDetail; +import com.ruoyi.oa.domain.SysOaFile; import lombok.Data; import lombok.EqualsAndHashCode; import javax.validation.constraints.*; @@ -11,6 +13,7 @@ import java.util.Date; import java.util.List; import com.ruoyi.common.core.domain.BaseEntity; +import org.springframework.format.annotation.DateTimeFormat; /** * 差旅费报销业务对象 sys_oa_claim @@ -46,11 +49,15 @@ public class SysOaClaimBo extends BaseEntity { /** * 开始时间 */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") private Date startTime; /** * 结束时间 */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") private Date endTime; /** @@ -72,6 +79,10 @@ public class SysOaClaimBo extends BaseEntity { * 关联项目 */ private Long projectId; + /** + * 关联项目 + */ + private String address; /** * 关联流程id @@ -81,6 +92,8 @@ public class SysOaClaimBo extends BaseEntity { /** * 报销时间 */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") private Date completedTime; /** @@ -88,5 +101,10 @@ public class SysOaClaimBo extends BaseEntity { */ private List claimDetailList; + /** + * 文件列表 + */ + private List fileList; + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaClaimDetailBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaClaimDetailBo.java index 602aea8..d9de7c7 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaClaimDetailBo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaClaimDetailBo.java @@ -1,5 +1,6 @@ package com.ruoyi.oa.domain.bo; +import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.core.validate.AddGroup; import com.ruoyi.common.core.validate.EditGroup; import lombok.Data; @@ -9,6 +10,7 @@ import javax.validation.constraints.*; import java.util.Date; import com.ruoyi.common.core.domain.BaseEntity; +import org.springframework.format.annotation.DateTimeFormat; /** * 报销明细业务对象 sys_oa_claim_detail @@ -24,61 +26,55 @@ public class SysOaClaimDetailBo extends BaseEntity { /** * 主键id */ - @NotNull(message = "主键id不能为空", groups = { EditGroup.class }) private Long claimDetailId; /** * 外键id */ - @NotNull(message = "外键id不能为空", groups = { AddGroup.class, EditGroup.class }) private Long claimId; /** * 报销类型 */ - @NotNull(message = "报销类型不能为空", groups = { AddGroup.class, EditGroup.class }) private Long claimType; /** * 开始时间 */ - @NotNull(message = "开始时间不能为空", groups = { AddGroup.class, EditGroup.class }) + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") private Date beginTime; /** * 结束时间 */ - @NotNull(message = "结束时间不能为空", groups = { AddGroup.class, EditGroup.class }) + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") private Date endTime; /** * 入住地点 */ - @NotBlank(message = "入住地点不能为空", groups = { AddGroup.class, EditGroup.class }) private String lodgingAddress; /** * 备注 */ - @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) private String remark; /** * 文件id列表 */ - @NotBlank(message = "文件id列表不能为空", groups = { AddGroup.class, EditGroup.class }) private String fileIds; /** * 报销金额 */ - @NotNull(message = "报销金额不能为空", groups = { AddGroup.class, EditGroup.class }) private Double cost; /** * 报销金额大写 */ - @NotBlank(message = "报销金额大写不能为空", groups = { AddGroup.class, EditGroup.class }) private String bigCost; diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaFileBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaFileBo.java index ab8731e..0d98e73 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaFileBo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaFileBo.java @@ -26,25 +26,21 @@ public class SysOaFileBo extends BaseEntity { /** * 主键id */ - @NotNull(message = "主键id不能为空", groups = { EditGroup.class }) private Long fileId; /** * 文件存储路径 */ - @NotBlank(message = "文件存储路径不能为空", groups = { AddGroup.class, EditGroup.class }) private String fileUrl; /** * 文件类型0打卡1出入库 */ - @NotNull(message = "文件类型0打卡1出入库不能为空", groups = { AddGroup.class, EditGroup.class }) private Long status; /** * 备注 */ - @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) private String remark; diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaClaimDetailVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaClaimDetailVo.java index e504562..22806dd 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaClaimDetailVo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaClaimDetailVo.java @@ -4,9 +4,11 @@ import java.util.Date; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; +import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.annotation.ExcelDictFormat; import com.ruoyi.common.convert.ExcelDictConvert; import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; /** @@ -43,12 +45,16 @@ public class SysOaClaimDetailVo { /** * 开始时间 */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") @ExcelProperty(value = "开始时间") private Date beginTime; /** * 结束时间 */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") @ExcelProperty(value = "结束时间") private Date endTime; diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaClaimVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaClaimVo.java index b5c9265..66150e9 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaClaimVo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaClaimVo.java @@ -5,9 +5,11 @@ import java.util.List; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; +import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.oa.domain.SysOaClaim; import com.ruoyi.oa.domain.SysOaFile; import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; /** @@ -49,12 +51,16 @@ public class SysOaClaimVo extends SysOaClaim { /** * 开始时间 */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") @ExcelProperty(value = "开始时间") private Date startTime; /** * 结束时间 */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") @ExcelProperty(value = "结束时间") private Date endTime; @@ -91,6 +97,8 @@ public class SysOaClaimVo extends SysOaClaim { /** * 报销时间 */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") @ExcelProperty(value = "报销时间") private Date completedTime; @@ -109,4 +117,13 @@ public class SysOaClaimVo extends SysOaClaim { */ private Long status; + /** + * 关联项目 + */ + private String projectName; + /** + * 出差地点 + */ + private String address; + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaClaimMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaClaimMapper.java index 0d7e899..1847832 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaClaimMapper.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaClaimMapper.java @@ -1,10 +1,14 @@ package com.ruoyi.oa.mapper; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.oa.domain.SysOaClaim; import com.ruoyi.oa.domain.vo.SysOaClaimVo; import com.ruoyi.common.core.mapper.BaseMapperPlus; +import org.apache.ibatis.annotations.Param; + +import javax.validation.constraints.NotNull; /** * 差旅费报销Mapper接口 @@ -16,5 +20,7 @@ public interface SysOaClaimMapper extends BaseMapperPlus selectPageVo(Page build, LambdaQueryWrapper lqw); + Page selectPageVo(Page build, @Param(Constants.WRAPPER) Wrapper lqw); + + SysOaClaimVo selectSysOaClaimVoByProcInsId(String procInsId); } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaClaimService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaClaimService.java index e8bfee6..0a5578c 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaClaimService.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaClaimService.java @@ -5,6 +5,7 @@ import com.ruoyi.oa.domain.bo.SysOaClaimBo; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.domain.PageQuery; +import javax.validation.constraints.NotNull; import java.util.Collection; import java.util.List; @@ -45,4 +46,11 @@ public interface ISysOaClaimService { * 校验并批量删除差旅费报销信息 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 查询报销表单 + * @param procInsId 实例id + * @return vo对象 + */ + SysOaClaimVo queryByProcInsId(String procInsId); } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaFileService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaFileService.java index c2f6af5..4c4811a 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaFileService.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaFileService.java @@ -46,4 +46,6 @@ public interface ISysOaFileService { * 校验并批量删除文件存储信息 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + Long insertByBoReturnId(SysOaFileBo bo); } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaClaimServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaClaimServiceImpl.java index 1a19cbe..1150c14 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaClaimServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaClaimServiceImpl.java @@ -8,9 +8,10 @@ import com.ruoyi.common.core.domain.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.ruoyi.oa.domain.SysOaClaimDetail; import com.ruoyi.oa.domain.bo.SysOaClaimDetailBo; +import com.ruoyi.oa.domain.bo.SysOaFileBo; import com.ruoyi.oa.service.ISysOaClaimDetailService; +import com.ruoyi.oa.service.ISysOaFileService; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -20,6 +21,8 @@ import com.ruoyi.oa.domain.SysOaClaim; import com.ruoyi.oa.mapper.SysOaClaimMapper; import com.ruoyi.oa.service.ISysOaClaimService; +import javax.validation.constraints.NotNull; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Collection; @@ -39,6 +42,9 @@ public class SysOaClaimServiceImpl implements ISysOaClaimService { @Autowired private ISysOaClaimDetailService sysOaClaimDetailService; + @Autowired + private ISysOaFileService sysOaFileService; + /** * 查询差旅费报销 */ @@ -47,11 +53,22 @@ public class SysOaClaimServiceImpl implements ISysOaClaimService { return baseMapper.selectSysOaClaimVoById(claimId); } + /** + * 根据实例id返回vo + * @param procInsId 实例id + * @return vo + */ + @Override + public SysOaClaimVo queryByProcInsId(String procInsId) { + return baseMapper.selectSysOaClaimVoByProcInsId(procInsId); + } + /** * 查询差旅费报销列表 */ @Override public TableDataInfo queryPageList(SysOaClaimBo bo, PageQuery pageQuery) { + bo.setUserId(LoginHelper.getUserId()); LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectPageVo(pageQuery.build(), lqw); return TableDataInfo.build(result); @@ -79,6 +96,7 @@ public class SysOaClaimServiceImpl implements ISysOaClaimService { lqw.eq(bo.getProjectId() != null, SysOaClaim::getProjectId, bo.getProjectId()); lqw.eq(StringUtils.isNotBlank(bo.getProcInsId()), SysOaClaim::getProcInsId, bo.getProcInsId()); lqw.eq(bo.getCompletedTime() != null, SysOaClaim::getCompletedTime, bo.getCompletedTime()); + lqw.eq(SysOaClaim::getDelFlag, 0L); return lqw; } @@ -90,10 +108,26 @@ public class SysOaClaimServiceImpl implements ISysOaClaimService { bo.setUserId(LoginHelper.getUserId()); SysOaClaim add = BeanUtil.toBean(bo, SysOaClaim.class); validEntityBeforeSave(add); + + // 处理文件 + List fileIds = new ArrayList<>(); + for (SysOaFileBo sysOaFile : bo.getFileList()) { + Long fileId = sysOaFileService.insertByBoReturnId(sysOaFile); + fileIds.add(fileId); + } + String fileIdsString = fileIds.stream() + .map(String::valueOf) // 将 Long 转换为 String + .reduce((id1, id2) -> id1 + "," + id2) // 合并为一个逗号分隔的字符串 + .orElse(""); // 如果列表为空,返回空字符串 + add.setFileIds(fileIdsString); + add.setUserId(LoginHelper.getUserId()); boolean flag = baseMapper.insert(add) > 0; + for (SysOaClaimDetailBo sysOaClaimDetail : bo.getClaimDetailList()) { + sysOaClaimDetail.setClaimId(add.getClaimId()); sysOaClaimDetailService.insertByBo(sysOaClaimDetail); } + if (flag) { bo.setClaimId(add.getClaimId()); } @@ -127,4 +161,6 @@ public class SysOaClaimServiceImpl implements ISysOaClaimService { } return baseMapper.deleteBatchIds(ids) > 0; } + + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaFileServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaFileServiceImpl.java index b8e5de6..14202eb 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaFileServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaFileServiceImpl.java @@ -81,6 +81,21 @@ public class SysOaFileServiceImpl implements ISysOaFileService { return flag; } + /** + * 新增文件存储 + */ + @Override + public Long insertByBoReturnId(SysOaFileBo bo) { + SysOaFile add = BeanUtil.toBean(bo, SysOaFile.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setFileId(add.getFileId()); + } + return add.getFileId(); + } + + /** * 修改文件存储 */ diff --git a/ruoyi-oa/src/main/resources/mapper/oa/SysOaClaimMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/SysOaClaimMapper.xml index 8c5cacb..336df36 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/SysOaClaimMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/SysOaClaimMapper.xml @@ -23,8 +23,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + - + @@ -32,16 +34,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + - - - - - - - + @@ -58,13 +54,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - SELECT soc.claim_id, soc.user_id, soc.file_ids, soc.remark, soc.start_time, soc.end_time, + soc.address, soc.trip_days, soc.cost, soc.detail_number, @@ -81,8 +78,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" status, socd.claim_detail_id, claim_type, - begin_time, - socd.end_time, + socd.begin_time , + socd.end_time as detail_end, socd.lodging_address, socd.create_time, socd.create_by, @@ -91,11 +88,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" socd.del_flag, socd.remark, socd.file_ids, - socd.cost, - socd.big_cost + socd.cost as detail_cost, + socd.big_cost, + sop.project_name FROM sys_oa_claim soc - left join sys_oa_claim_detail socd on soc.claim_id = socd.claim_detail_id + left join sys_oa_claim_detail socd on soc.claim_id = socd.claim_id left JOIN sys_oa_file sof ON FIND_IN_SET(sof.file_id, soc.file_ids) > 0 + left join sys_oa_project sop on soc.project_id = sop.project_id + where soc.claim_id = #{claimId} + + diff --git a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfProcessServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfProcessServiceImpl.java index cdd1255..e6dad7e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfProcessServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfProcessServiceImpl.java @@ -345,6 +345,7 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce taskVo.setCreateTime(task.getCreateTime()); taskVo.setProcDefId(task.getProcessDefinitionId()); taskVo.setTaskName(task.getName()); + // 流程定义信息 ProcessDefinition pd = repositoryService.createProcessDefinitionQuery() .processDefinitionId(task.getProcessDefinitionId()) @@ -353,7 +354,7 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce taskVo.setProcDefName(pd.getName()); taskVo.setProcDefVersion(pd.getVersion()); taskVo.setProcInsId(task.getProcessInstanceId()); - + taskVo.setCategory(pd.getCategory()); // 流程发起人信息 HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() .processInstanceId(task.getProcessInstanceId()) @@ -479,6 +480,7 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce WfTaskVo flowTask = new WfTaskVo(); // 当前流程信息 flowTask.setTaskId(histTask.getId()); + flowTask.setCategory(histTask.getCategory()); // 审批人员信息 flowTask.setCreateTime(histTask.getCreateTime()); flowTask.setFinishTime(histTask.getEndTime()); @@ -496,6 +498,7 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce flowTask.setProcDefVersion(pd.getVersion()); flowTask.setProcInsId(histTask.getProcessInstanceId()); flowTask.setHisProcInsId(histTask.getProcessInstanceId()); + flowTask.setCategory(pd.getCategory()); // 流程发起人信息 HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() @@ -518,9 +521,6 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce } page.setTotal(taskInstanceQuery.count()); page.setRecords(hisTaskList); -// Map result = new HashMap<>(); -// result.put("result",page); -// result.put("finished",true); return TableDataInfo.build(page); } @@ -632,9 +632,12 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce public String startClaim(Map variables) { try { - ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() - .processDefinitionCategory("claim").singleResult(); - return startProcess(processDefinition, variables); + List processDefinition = repositoryService.createProcessDefinitionQuery() + .processDefinitionCategory("claim").list(); + + // 拿到最新版本的模型 + return startProcess(processDefinition.get(processDefinition.size()-1), variables); + } catch (Exception e) { e.printStackTrace(); throw new ServiceException("流程启动错误"); @@ -697,6 +700,7 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce @Override public WfDetailVo queryProcessDetail(String procInsId, String taskId) { WfDetailVo detailVo = new WfDetailVo(); + // 获取流程实例 HistoricProcessInstance historicProcIns = historyService.createHistoricProcessInstanceQuery() .processInstanceId(procInsId) @@ -715,6 +719,8 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce detailVo.setTaskFormData(currTaskFormData(historicProcIns.getDeploymentId(), taskIns)); } // 获取Bpmn模型信息 + System.out.println("--------------------------"); + System.out.println(historicProcIns); InputStream inputStream = repositoryService.getProcessModel(historicProcIns.getProcessDefinitionId()); String bpmnXmlStr = StrUtil.utf8Str(IoUtil.readBytes(inputStream, false)); BpmnModel bpmnModel = ModelUtils.getBpmnModel(bpmnXmlStr); @@ -971,6 +977,7 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce } else if (identityLink.getGroupId().startsWith(TaskConstants.DEPT_GROUP_PREFIX)) { Long deptId = Long.parseLong(StringUtils.stripStart(identityLink.getGroupId(), TaskConstants.DEPT_GROUP_PREFIX)); SysDept dept = deptService.selectDeptById(deptId); + System.out.println(dept); stringBuilder.append(dept.getDeptName()).append(","); } } diff --git a/ruoyi-ui/src/api/oa/claim.js b/ruoyi-ui/src/api/oa/claim.js index 29f40c3..27233fd 100644 --- a/ruoyi-ui/src/api/oa/claim.js +++ b/ruoyi-ui/src/api/oa/claim.js @@ -17,6 +17,15 @@ export function getOaClaim(claimId) { }) } + +// 查询差旅费报销详细 +export function getOaClaimByProcInsId(procInsId) { + return request({ + url: '/system/oaClaim/process/' + procInsId, + method: 'get' + }) +} + // 新增差旅费报销 export function addOaClaim(data) { return request({ diff --git a/ruoyi-ui/src/api/workflow/process.js b/ruoyi-ui/src/api/workflow/process.js index a6a8862..c9ba745 100644 --- a/ruoyi-ui/src/api/workflow/process.js +++ b/ruoyi-ui/src/api/workflow/process.js @@ -27,6 +27,15 @@ export function startProcess(processDefId, data) { }) } +// 部署流程实例 +export function startClaim(data) { + return request({ + url: '/workflow/process/startClaim', + method: 'post', + data: data + }) +} + // 删除流程实例 export function delProcess(ids) { return request({ diff --git a/ruoyi-ui/src/components/Editor/index.vue b/ruoyi-ui/src/components/Editor/index.vue index 1f2e15e..f639639 100644 --- a/ruoyi-ui/src/components/Editor/index.vue +++ b/ruoyi-ui/src/components/Editor/index.vue @@ -60,7 +60,7 @@ export default { }, data() { return { - uploadUrl: process.env.VUE_APP_BASE_API + "/system/oss/upload", // 上传的图片服务器地址 + uploadUrl: process.env.VUE_APP_BASE_API + "/common/upload", // 上传的图片服务器地址 headers: { Authorization: "Bearer " + getToken() }, diff --git a/ruoyi-ui/src/components/FileUpload/index.vue b/ruoyi-ui/src/components/FileUpload/index.vue index d2b23ea..6697cf9 100644 --- a/ruoyi-ui/src/components/FileUpload/index.vue +++ b/ruoyi-ui/src/components/FileUpload/index.vue @@ -60,7 +60,7 @@ export default { // 文件类型, 例如['png', 'jpg', 'jpeg'] fileType: { type: Array, - default: () => ["doc", "xls", "ppt", "txt", "pdf","docx", "xlsx"], + default: () => ["doc", "xls", "ppt", "txt", "pdf","docx", "xlsx",'png', 'jpg', 'jpeg'], }, // 是否显示提示 isShowTip: { diff --git a/ruoyi-ui/src/router/index.js b/ruoyi-ui/src/router/index.js index 7f45c26..85db4d8 100644 --- a/ruoyi-ui/src/router/index.js +++ b/ruoyi-ui/src/router/index.js @@ -131,6 +131,26 @@ export const constantRoutes = [ ] }, + { + path: '/claim', + component: Layout, + hidden: true, + children: [ + { + path: 'addTripClaim', + component: () => import('@/views/oa/claim/add'), + name: 'addTripClaim', + meta: { title: '新增差旅报销' ,activeMenu: '/claim/oaClaim' } + }, + { + path: 'detail/:claimId(\\d+)', + component: () => import('@/views/oa/claim/detail'), + name: 'detail', + meta: { title: '报销单审批' ,activeMenu: '/claim/oaClaim' } + }, + ] + }, + // { // path: '/people/updateOffboarding/:offboardingId(\\d+)', // component: () => import('@/views/oa/offboarding/update'), diff --git a/ruoyi-ui/src/utils/generator/config.js b/ruoyi-ui/src/utils/generator/config.js index 9ab35fa..04f34f8 100644 --- a/ruoyi-ui/src/utils/generator/config.js +++ b/ruoyi-ui/src/utils/generator/config.js @@ -499,7 +499,7 @@ export const selectComponents = [ __slot__: { 'list-type': true }, - action: process.env.VUE_APP_BASE_API + "/system/oss/upload", + action: process.env.VUE_APP_BASE_API + "/common/upload", disabled: false, accept: '', name: 'file', diff --git a/ruoyi-ui/src/views/components/ClaimDetail/index.vue b/ruoyi-ui/src/views/components/ClaimDetail/index.vue new file mode 100644 index 0000000..7341c2b --- /dev/null +++ b/ruoyi-ui/src/views/components/ClaimDetail/index.vue @@ -0,0 +1,203 @@ + + + + + diff --git a/ruoyi-ui/src/views/oa/claim/add.vue b/ruoyi-ui/src/views/oa/claim/add.vue new file mode 100644 index 0000000..f1cabda --- /dev/null +++ b/ruoyi-ui/src/views/oa/claim/add.vue @@ -0,0 +1,314 @@ + + + + + diff --git a/ruoyi-ui/src/views/oa/claim/detail.vue b/ruoyi-ui/src/views/oa/claim/detail.vue new file mode 100644 index 0000000..bbad49c --- /dev/null +++ b/ruoyi-ui/src/views/oa/claim/detail.vue @@ -0,0 +1,764 @@ + + + + diff --git a/ruoyi-ui/src/views/oa/claim/index.vue b/ruoyi-ui/src/views/oa/claim/index.vue index 407765c..489907f 100644 --- a/ruoyi-ui/src/views/oa/claim/index.vue +++ b/ruoyi-ui/src/views/oa/claim/index.vue @@ -17,17 +17,6 @@ v-hasPermi="['system:oaClaim:add']" >新增 - - 修改 - - + - - - + + + + + +