From 3069c1bc44139359d98e8d0639eca95a8c82ae15 Mon Sep 17 00:00:00 2001 From: 123 <123@qq.com> Date: Fri, 16 May 2025 16:28:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4=20?= =?UTF-8?q?=E7=94=A8=E7=AB=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workflow/controller/OASealController.java | 108 ++++++++ .../org/dromara/workflow/domain/LxOaSeal.java | 113 +++++++++ .../workflow/domain/LxOaSealRelation.java | 46 ++++ .../workflow/domain/bo/LxOaSealBo.java | 121 +++++++++ .../workflow/domain/vo/LxOaSealVVo.java | 125 +++++++++ .../workflow/domain/vo/LxOaSealVo.java | 51 ++++ .../workflow/mapper/LxOaSealMapper.java | 22 ++ .../mapper/LxOaSealRelationMapper.java | 14 + .../workflow/service/ILxOaSealService.java | 47 ++++ .../service/impl/LxOaSealServiceImpl.java | 240 ++++++++++++++++++ .../workflow/LxOaBusinessTripMapper.xml | 7 + .../mapper/workflow/LxOaLeaveMapper.xml | 7 + .../mapper/workflow/LxOaSealMapper.xml | 58 +++++ script/leave/seal1.json | 89 +++++++ script/leave/trip1.json | 89 +++++++ 15 files changed, 1137 insertions(+) create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/OASealController.java create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/LxOaSeal.java create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/LxOaSealRelation.java create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/LxOaSealBo.java create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/LxOaSealVVo.java create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/LxOaSealVo.java create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/LxOaSealMapper.java create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/LxOaSealRelationMapper.java create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/ILxOaSealService.java create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/LxOaSealServiceImpl.java create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/LxOaBusinessTripMapper.xml create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/LxOaLeaveMapper.xml create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/LxOaSealMapper.xml create mode 100644 script/leave/seal1.json create mode 100644 script/leave/trip1.json diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/OASealController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/OASealController.java new file mode 100644 index 000000000..0914ffe88 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/OASealController.java @@ -0,0 +1,108 @@ +package org.dromara.workflow.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.workflow.common.ConditionalOnEnable; +import org.dromara.workflow.domain.bo.LxOaSealBo; +import org.dromara.workflow.domain.vo.LxOaSealVVo; +import org.dromara.workflow.service.ILxOaSealService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 用章 + * + * @author may + * @date 2023-07-21 + */ +@ConditionalOnEnable +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/workflow/seal") +public class OASealController extends BaseController { + + private final ILxOaSealService lxOaSealService; + + /** + * 查询用章列表 + */ + @SaCheckPermission("workflow:seal:list") + @GetMapping("/list") + public TableDataInfo list(LxOaSealBo bo, PageQuery pageQuery) { + return lxOaSealService.queryPageList(bo, pageQuery); + } + + /** + * 导出用章列表 + */ + @SaCheckPermission("workflow:seal:export") + @Log(title = "用章", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(LxOaSealBo bo, HttpServletResponse response) { + List list = lxOaSealService.queryList(bo); + ExcelUtil.exportExcel(list, "用章", LxOaSealVVo.class, response); + } + + /** + * 获取用章详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("workflow:seal:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(lxOaSealService.queryById(id)); + } + + /** + * 新增用章 + */ + @SaCheckPermission("workflow:seal:add") + @Log(title = "用章", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody LxOaSealBo bo) { + return R.ok(lxOaSealService.insertByBo(bo)); + } + + /** + * 修改用章 + */ + @SaCheckPermission("workflow:seal:edit") + @Log(title = "用章", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody LxOaSealBo bo) { + return R.ok(lxOaSealService.updateByBo(bo)); + } + + /** + * 删除用章 + * + * @param ids 主键串 + */ + @SaCheckPermission("workflow:seal:remove") + @Log(title = "用章", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(lxOaSealService.deleteWithValidByIds(List.of(ids))); + } +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/LxOaSeal.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/LxOaSeal.java new file mode 100644 index 000000000..1a8624a51 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/LxOaSeal.java @@ -0,0 +1,113 @@ +package org.dromara.workflow.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.tenant.core.TenantEntity; + +import java.io.Serial; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 盖章申请对象 lx_oa_seal + * + * @author Lion Li + * @date 2025-05-15 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("lx_oa_seal") +public class LxOaSeal extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 业务类型 + */ + private String businessType; + + /** + * 用章时间 + */ + private Date sealDate; + + /** + * 是否外带 + */ + private Integer takeOutFlag; + + /** + * 金额 + */ + private BigDecimal sealMoney; + + /** + * 备注 + */ + private String remark; + + /** + * 状态 + */ + private String status; + + /** + * 附件 + */ + private String attachment; + + /** + * 公章id + */ + private Long sealId; + + /** + * 文件名称 + */ + private String fileName; + + /** + * 文件编号 + */ + private String fileCode; + + /** + * 外带开始时间 + */ + private Date takeOutStartDate; + + /** + * 外带结束时间 + */ + private Date takeOutEndDate; + + /** + * 文件份数 + */ + private Integer fileCount; + + /** + * 发起人类别 + */ + private Integer initiatorType; + + /** + * 是否删除 + */ + private Integer delFlag; + + /** + * 外带地址 + */ + private String takeOutAddress; + +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/LxOaSealRelation.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/LxOaSealRelation.java new file mode 100644 index 000000000..48fd85708 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/LxOaSealRelation.java @@ -0,0 +1,46 @@ +package org.dromara.workflow.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.tenant.core.TenantEntity; + +import java.io.Serial; + +/** + * 盖章申请对象 lx_oa_seal_relation + * + * @author Lion Li + * @date 2025-05-15 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("lx_oa_seal_relation") +public class LxOaSealRelation extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 公章id + */ + private Long sealId; + + /** + * 申请单id + */ + private Long oaSealId; + + /** + * 是否删除 + */ + private Integer delFlag; + +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/LxOaSealBo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/LxOaSealBo.java new file mode 100644 index 000000000..30ef9cb53 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/LxOaSealBo.java @@ -0,0 +1,121 @@ +package org.dromara.workflow.domain.bo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.workflow.domain.LxOaSeal; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * 盖章申请业务对象 lx_oa_seal + * + * @author Lion Li + * @date 2025-05-15 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = LxOaSeal.class, reverseConvertGenerate = false) +public class LxOaSealBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = {EditGroup.class}) + private Long id; + + /** + * 业务类型 + */ + @NotBlank(message = "业务类型不能为空", groups = {AddGroup.class, EditGroup.class}) + private String businessType; + + /** + * 用章日期 + */ + @NotNull(message = "用章日期不能为空", groups = {AddGroup.class, EditGroup.class}) + @JsonFormat(pattern = "yyyy-MM-dd") + private Date sealDate; + + /** + * 是否外带 + */ + private Integer takeOutFlag; + + /** + * 金额 + */ + private BigDecimal sealMoney; + + /** + * 备注 + */ + private String remark; + + /** + * 状态 + */ + private String status; + + /** + * 附件 + */ + private String attachment; + + /** + * 公章ids + */ + private List sealIds; + + /** + * 文件名称 + */ + private String fileName; + + /** + * 文件编号 + */ + private String fileCode; + + /** + * 外带开始时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + private Date takeOutStartDate; + + /** + * 外带结束时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + private Date takeOutEndDate; + + /** + * 文件份数 + */ + private Integer fileCount; + + /** + * 发起人类别 + */ + private Integer initiatorType; + + /** + * 是否删除 + */ + private Integer delFlag; + + /** + * 外带地址 + */ + private String takeOutAddress; + + +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/LxOaSealVVo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/LxOaSealVVo.java new file mode 100644 index 000000000..694c3b3ea --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/LxOaSealVVo.java @@ -0,0 +1,125 @@ +package org.dromara.workflow.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.workflow.domain.LxOaSeal; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + + +/** + * 盖章申请视图对象 lx_oa_seal + * + * @author Lion Li + * @date 2025-05-15 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = LxOaSeal.class) +public class LxOaSealVVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 业务类型 + */ + @ExcelProperty(value = "业务类型") + private String businessType; + + /** + * 用章时间 + */ + @ExcelProperty(value = "用章时间") + private Date sealDate; + + /** + * 是否外带 + */ + @ExcelProperty(value = "是否外带") + private String takeOutFlag; + + /** + * 金额 + */ + @ExcelProperty(value = "金额") + private BigDecimal sealMoney; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 状态 + */ + @ExcelProperty(value = "状态") + private String status; + + /** + * 附件 + */ + @ExcelProperty(value = "附件") + private String attachment; + + /** + * 公章信息 + */ + @ExcelProperty(value = "公章信息") + private List sealInfos; + + /** + * 文件名称 + */ + @ExcelProperty(value = "文件名称") + private String fileName; + + /** + * 文件编号 + */ + @ExcelProperty(value = "文件编号") + private String fileCode; + + /** + * 外带开始时间 + */ + @ExcelProperty(value = "外带开始时间") + private Date takeOutStartDate; + + /** + * 外带结束时间 + */ + @ExcelProperty(value = "外带结束时间") + private Date takeOutEndDate; + + /** + * 文件份数 + */ + @ExcelProperty(value = "文件份数") + private Integer fileCount; + + /** + * 发起人类别 + */ + @ExcelProperty(value = "发起人类别") + private String initiatorType; + + /** + * 外带地址 + */ + @ExcelProperty(value = "外带地址") + private String takeOutAddress; +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/LxOaSealVo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/LxOaSealVo.java new file mode 100644 index 000000000..7634bec04 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/LxOaSealVo.java @@ -0,0 +1,51 @@ +package org.dromara.workflow.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.workflow.domain.LxOaSeal; + +import java.io.Serial; +import java.io.Serializable; + + +/** + * 盖章申请视图对象 lx_oa_seal + * + * @author Lion Li + * @date 2025-05-15 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = LxOaSeal.class) +public class LxOaSealVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 公章id + */ + @ExcelProperty(value = "公章id") + private Long sealId; + + /** + * 公章名称 + */ + @ExcelProperty(value = "公章名称") + private String sealName; + + /** + * 公章名称 + */ + @ExcelProperty(value = "公章类别") + private String sealType; + +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/LxOaSealMapper.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/LxOaSealMapper.java new file mode 100644 index 000000000..68ecc0110 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/LxOaSealMapper.java @@ -0,0 +1,22 @@ +package org.dromara.workflow.mapper; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.workflow.domain.LxOaSeal; +import org.dromara.workflow.domain.vo.LxOaSealVVo; +import org.dromara.workflow.domain.vo.LxOaSealVo; + +/** + * 用章Mapper接口 + * + * @author may + * @date 2023-07-21 + */ +public interface LxOaSealMapper extends BaseMapperPlus { + + + Page queryPageOaSealVoList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/LxOaSealRelationMapper.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/LxOaSealRelationMapper.java new file mode 100644 index 000000000..39ba6626e --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/LxOaSealRelationMapper.java @@ -0,0 +1,14 @@ +package org.dromara.workflow.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.dromara.workflow.domain.LxOaSealRelation; + +/** + * 用章关联Mapper接口 + * + * @author may + * @date 2023-07-21 + */ +public interface LxOaSealRelationMapper extends BaseMapper { + +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/ILxOaSealService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/ILxOaSealService.java new file mode 100644 index 000000000..2c81125cc --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/ILxOaSealService.java @@ -0,0 +1,47 @@ +package org.dromara.workflow.service; + +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.workflow.domain.bo.LxOaSealBo; +import org.dromara.workflow.domain.vo.LxOaSealVVo; + +import java.util.List; + +/** + * 用章Service接口 + * + * @author may + * @date 2023-07-21 + */ +public interface ILxOaSealService { + + /** + * 查询用章 + */ + LxOaSealVVo queryById(Long id); + + /** + * 查询用章列表 + */ + TableDataInfo queryPageList(LxOaSealBo bo, PageQuery pageQuery); + + /** + * 查询用章列表 + */ + List queryList(LxOaSealBo bo); + + /** + * 新增用章 + */ + LxOaSealVVo insertByBo(LxOaSealBo bo); + + /** + * 修改用章 + */ + LxOaSealVVo updateByBo(LxOaSealBo bo); + + /** + * 校验并批量删除用章信息 + */ + Boolean deleteWithValidByIds(List ids); +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/LxOaSealServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/LxOaSealServiceImpl.java new file mode 100644 index 000000000..34760fcc6 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/LxOaSealServiceImpl.java @@ -0,0 +1,240 @@ +package org.dromara.workflow.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.convert.Convert; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.domain.event.ProcessCreateTaskEvent; +import org.dromara.common.core.domain.event.ProcessDeleteEvent; +import org.dromara.common.core.domain.event.ProcessEvent; +import org.dromara.common.core.enums.BusinessStatusEnum; +import org.dromara.common.core.service.WorkflowService; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.workflow.common.ConditionalOnEnable; +import org.dromara.workflow.domain.LxOaSeal; +import org.dromara.workflow.domain.LxOaSealRelation; +import org.dromara.workflow.domain.bo.LxOaSealBo; +import org.dromara.workflow.domain.vo.LxOaSealVVo; +import org.dromara.workflow.mapper.LxOaSealMapper; +import org.dromara.workflow.mapper.LxOaSealRelationMapper; +import org.dromara.workflow.service.ILxOaSealService; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 用章Service业务层处理 + * + * @author may + * @date 2023-07-21 + */ +@ConditionalOnEnable +@RequiredArgsConstructor +@Service +@Slf4j +public class LxOaSealServiceImpl implements ILxOaSealService { + + private final LxOaSealMapper baseMapper; + + private final LxOaSealRelationMapper lxOaSealRelationMapper; + private final WorkflowService workflowService; + + /** + * spel条件表达:判断小于2 + * + * @param leaveDays 待判断的变量(可不传自行返回true或false) + * @return boolean + */ + public boolean eval(Integer leaveDays) { + if (leaveDays <= 2) { + return true; + } + return false; + } + + /** + * 查询用章 + */ + @Override + public LxOaSealVVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 查询用章列表 + */ + @Override + public TableDataInfo queryPageList(LxOaSealBo bo, PageQuery pageQuery) { + Page page = baseMapper.queryPageOaSealVoList(pageQuery.build(), buildQueryWrapper(bo)); + return TableDataInfo.build(page); + } + + @Override + public List queryList(LxOaSealBo bo) { + return null; + } + + private LambdaQueryWrapper buildQueryWrapper(LxOaSealBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); +// lqw.eq(LxOaSeal::getDelFlag, SystemConstants.NORMAL); +// lqw.eq(StringUtils.isNotBlank(bo.getTripType()), LxOaSeal::getTripType, bo.getTripType()); +// lqw.ge(bo.getStartTripDays() != null, LxOaSeal::getTripDays, bo.getStartTripDays()); +// lqw.le(bo.getEndTripDays() != null, LxOaSeal::getTripDays, bo.getEndTripDays()); + lqw.orderByDesc(BaseEntity::getCreateTime); + return lqw; + } + + /** + * 新增用章 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public LxOaSealVVo insertByBo(LxOaSealBo bo) { +// long day = DateUtil.between(bo.getStartDate(), bo.getEndDate(), DateUnit.DAY); +// // 截止日期也算一天 +// bo.setTripDays((int) day + 1); + LxOaSeal add = MapstructUtils.convert(bo, LxOaSeal.class); + if (StringUtils.isBlank(add.getStatus())) { + add.setStatus(BusinessStatusEnum.DRAFT.getStatus()); + } + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + // 保存公章id + List sealIds = bo.getSealIds(); + if (CollectionUtil.isNotEmpty(sealIds)) { + List relations = new ArrayList<>(); + for (Long sealId : sealIds) { + LxOaSealRelation sealRelation = new LxOaSealRelation(); + sealRelation.setOaSealId(add.getId()); + sealRelation.setSealId(sealId); + relations.add(sealRelation); + } + lxOaSealRelationMapper.insert(relations); + } + // 流程变量 + Map variable = new HashMap<>(); + +// variable.put("testLeave", testLeave); +// variable.put("flag", String.valueOf(testLeave.getDay())); +// flowParams.variable(variable); +// Instance instance = insService.start(id, flowParams); + return MapstructUtils.convert(add, LxOaSealVVo.class); + } + + /** + * 修改用章 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public LxOaSealVVo updateByBo(LxOaSealBo bo) { + LxOaSeal update = MapstructUtils.convert(bo, LxOaSeal.class); + baseMapper.updateById(update); + // 去除原有的id + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(LxOaSealRelation::getOaSealId, bo.getId()); + lxOaSealRelationMapper.delete(lqw); + // 保存公章id + List sealIds = bo.getSealIds(); + if (CollectionUtil.isNotEmpty(sealIds)) { + List relations = new ArrayList<>(); + for (Long sealId : sealIds) { + LxOaSealRelation sealRelation = new LxOaSealRelation(); + sealRelation.setOaSealId(bo.getId()); + sealRelation.setSealId(sealId); + relations.add(sealRelation); + } + lxOaSealRelationMapper.insert(relations); + } + return MapstructUtils.convert(update, LxOaSealVVo.class); + } + + /** + * 批量删除用章 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean deleteWithValidByIds(List ids) { + workflowService.deleteInstance(ids); + return baseMapper.deleteByIds(ids) > 0; + } + + /** + * 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等) + * 正常使用只需#processEvent.flowCode=='leave1' + * 示例为了方便则使用startsWith匹配了全部示例key + * + * @param processEvent 参数 + */ + @EventListener(condition = "#processEvent.flowCode=='seal1'") + public void processHandler(ProcessEvent processEvent) { + log.info("当前任务执行了{}", processEvent.toString()); + LxOaSeal lxOaSeal = baseMapper.selectById(Long.valueOf(processEvent.getBusinessId())); + lxOaSeal.setStatus(processEvent.getStatus()); + // 用于例如审批附件 审批意见等 存储到业务表内 自行根据业务实现存储流程 + Map params = processEvent.getParams(); + if (MapUtil.isNotEmpty(params)) { + // 历史任务扩展(通常为附件) + String hisTaskExt = Convert.toStr(params.get("hisTaskExt")); + // 办理人 + String handler = Convert.toStr(params.get("handler")); + // 办理意见 + String message = Convert.toStr(params.get("message")); + } + if (processEvent.isSubmit()) { + lxOaSeal.setStatus(BusinessStatusEnum.WAITING.getStatus()); + } + baseMapper.updateById(lxOaSeal); + } + + /** + * 执行任务创建监听 + * 示例:也可通过 @EventListener(condition = "#processCreateTaskEvent.flowCode=='leave1'")进行判断 + * 在方法中判断流程节点key + * if ("xxx".equals(processCreateTaskEvent.getNodeCode())) { + * //执行业务逻辑 + * } + * + * @param processCreateTaskEvent 参数 + */ + @EventListener(condition = "#processCreateTaskEvent.flowCode=='seal1'") + public void processCreateTaskHandler(ProcessCreateTaskEvent processCreateTaskEvent) { + log.info("当前任务创建了{}", processCreateTaskEvent.toString()); + LxOaSeal Seal = baseMapper.selectById(Long.valueOf(processCreateTaskEvent.getBusinessId())); + Seal.setStatus(BusinessStatusEnum.WAITING.getStatus()); + baseMapper.updateById(Seal); + } + + /** + * 监听删除流程事件 + * 正常使用只需#processDeleteEvent.flowCode=='leave1' + * 示例为了方便则使用startsWith匹配了全部示例key + * + * @param processDeleteEvent 参数 + */ + @EventListener(condition = "#processDeleteEvent.flowCode=='seal1'") + public void processDeleteHandler(ProcessDeleteEvent processDeleteEvent) { + log.info("监听删除流程事件,当前任务执行了{}", processDeleteEvent.toString()); + LxOaSeal Seal = baseMapper.selectById(Long.valueOf(processDeleteEvent.getBusinessId())); + if (ObjectUtil.isNull(Seal)) { + return; + } + baseMapper.deleteById(Seal.getId()); + } + +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/LxOaBusinessTripMapper.xml b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/LxOaBusinessTripMapper.xml new file mode 100644 index 000000000..e22f93ed4 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/LxOaBusinessTripMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/LxOaLeaveMapper.xml b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/LxOaLeaveMapper.xml new file mode 100644 index 000000000..8766f5bac --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/LxOaLeaveMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/LxOaSealMapper.xml b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/LxOaSealMapper.xml new file mode 100644 index 000000000..31481c338 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/LxOaSealMapper.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/script/leave/seal1.json b/script/leave/seal1.json new file mode 100644 index 000000000..d78bf720b --- /dev/null +++ b/script/leave/seal1.json @@ -0,0 +1,89 @@ +{ + "flowCode": "seal1", + "flowName": "用章申请-普通", + "category": "100", + "version": "1", + "formCustom": "N", + "formPath": "/workflow/sealEdit/index", + "nodeList": [ + { + "nodeType": 0, + "nodeCode": "d5ee3ddf-3968-4379-a86f-9ceabde5faac", + "nodeName": "开始", + "nodeRatio": 0.000, + "coordinate": "200,200|200,200", + "formCustom": "N", + "ext": "[]", + "skipList": [ + { + "nowNodeCode": "d5ee3ddf-3968-4379-a86f-9ceabde5faac", + "nextNodeCode": "dd515cdd-59f6-446f-94ca-25ca062afb42", + "skipType": "PASS", + "coordinate": "220,200;310,200" + } + ] + }, + { + "nodeType": 1, + "nodeCode": "dd515cdd-59f6-446f-94ca-25ca062afb42", + "nodeName": "申请人", + "nodeRatio": 0.000, + "coordinate": "360,200|360,200", + "formCustom": "N", + "ext": "[]", + "skipList": [ + { + "nowNodeCode": "dd515cdd-59f6-446f-94ca-25ca062afb42", + "nextNodeCode": "78fa8e5b-e809-44ed-978a-41092409ebcf", + "skipType": "PASS", + "coordinate": "410,200;490,200" + } + ] + }, + { + "nodeType": 1, + "nodeCode": "78fa8e5b-e809-44ed-978a-41092409ebcf", + "nodeName": "组长", + "permissionFlag": "role:1", + "nodeRatio": 0.000, + "coordinate": "540,200|540,200", + "formCustom": "N", + "ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]", + "skipList": [ + { + "nowNodeCode": "78fa8e5b-e809-44ed-978a-41092409ebcf", + "nextNodeCode": "a8abf15f-b83e-428a-86cc-033555ea9bbe", + "skipType": "PASS", + "coordinate": "590,200;670,200" + } + ] + }, + { + "nodeType": 1, + "nodeCode": "a8abf15f-b83e-428a-86cc-033555ea9bbe", + "nodeName": "部门主管", + "permissionFlag": "role:3,role:4", + "nodeRatio": 0.000, + "coordinate": "720,200|720,200", + "formCustom": "N", + "ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]", + "skipList": [ + { + "nowNodeCode": "a8abf15f-b83e-428a-86cc-033555ea9bbe", + "nextNodeCode": "8b82b7d7-8660-455e-b880-d6d22ea3eb6d", + "skipType": "PASS", + "coordinate": "770,200;880,200" + } + ] + }, + { + "nodeType": 2, + "nodeCode": "8b82b7d7-8660-455e-b880-d6d22ea3eb6d", + "nodeName": "结束", + "nodeRatio": 0.000, + "coordinate": "900,200|900,200", + "formCustom": "N", + "ext": "[]" + } + ] +} diff --git a/script/leave/trip1.json b/script/leave/trip1.json new file mode 100644 index 000000000..cd8544170 --- /dev/null +++ b/script/leave/trip1.json @@ -0,0 +1,89 @@ +{ + "flowCode": "trip1", + "flowName": "出差申请-普通", + "category": "100", + "version": "1", + "formCustom": "N", + "formPath": "/workflow/tripEdit/index", + "nodeList": [ + { + "nodeType": 0, + "nodeCode": "d5ee3ddf-3968-4379-a86f-9ceabde5faac", + "nodeName": "开始", + "nodeRatio": 0.000, + "coordinate": "200,200|200,200", + "formCustom": "N", + "ext": "[]", + "skipList": [ + { + "nowNodeCode": "d5ee3ddf-3968-4379-a86f-9ceabde5faac", + "nextNodeCode": "dd515cdd-59f6-446f-94ca-25ca062afb42", + "skipType": "PASS", + "coordinate": "220,200;310,200" + } + ] + }, + { + "nodeType": 1, + "nodeCode": "dd515cdd-59f6-446f-94ca-25ca062afb42", + "nodeName": "申请人", + "nodeRatio": 0.000, + "coordinate": "360,200|360,200", + "formCustom": "N", + "ext": "[]", + "skipList": [ + { + "nowNodeCode": "dd515cdd-59f6-446f-94ca-25ca062afb42", + "nextNodeCode": "78fa8e5b-e809-44ed-978a-41092409ebcf", + "skipType": "PASS", + "coordinate": "410,200;490,200" + } + ] + }, + { + "nodeType": 1, + "nodeCode": "78fa8e5b-e809-44ed-978a-41092409ebcf", + "nodeName": "组长", + "permissionFlag": "role:1", + "nodeRatio": 0.000, + "coordinate": "540,200|540,200", + "formCustom": "N", + "ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]", + "skipList": [ + { + "nowNodeCode": "78fa8e5b-e809-44ed-978a-41092409ebcf", + "nextNodeCode": "a8abf15f-b83e-428a-86cc-033555ea9bbe", + "skipType": "PASS", + "coordinate": "590,200;670,200" + } + ] + }, + { + "nodeType": 1, + "nodeCode": "a8abf15f-b83e-428a-86cc-033555ea9bbe", + "nodeName": "部门主管", + "permissionFlag": "role:3,role:4", + "nodeRatio": 0.000, + "coordinate": "720,200|720,200", + "formCustom": "N", + "ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]", + "skipList": [ + { + "nowNodeCode": "a8abf15f-b83e-428a-86cc-033555ea9bbe", + "nextNodeCode": "8b82b7d7-8660-455e-b880-d6d22ea3eb6d", + "skipType": "PASS", + "coordinate": "770,200;880,200" + } + ] + }, + { + "nodeType": 2, + "nodeCode": "8b82b7d7-8660-455e-b880-d6d22ea3eb6d", + "nodeName": "结束", + "nodeRatio": 0.000, + "coordinate": "900,200|900,200", + "formCustom": "N", + "ext": "[]" + } + ] +}