代码提交 用章
This commit is contained in:
parent
ec7100db91
commit
3069c1bc44
@ -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<LxOaSealVVo> 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<LxOaSealVVo> list = lxOaSealService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "用章", LxOaSealVVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用章详细信息
|
||||
*
|
||||
* @param id 主键
|
||||
*/
|
||||
@SaCheckPermission("workflow:seal:query")
|
||||
@GetMapping("/{id}")
|
||||
public R<LxOaSealVVo> 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<LxOaSealVVo> 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<LxOaSealVVo> 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<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] ids) {
|
||||
return toAjax(lxOaSealService.deleteWithValidByIds(List.of(ids)));
|
||||
}
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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<Long> 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;
|
||||
|
||||
|
||||
}
|
@ -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<LxOaSealVo> 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;
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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<LxOaSeal, LxOaSealVVo> {
|
||||
|
||||
|
||||
Page<LxOaSealVVo> queryPageOaSealVoList(@Param("page") Page<LxOaSealVo> page, @Param(Constants.WRAPPER) Wrapper<LxOaSeal> queryWrapper);
|
||||
}
|
@ -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<LxOaSealRelation> {
|
||||
|
||||
}
|
@ -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<LxOaSealVVo> queryPageList(LxOaSealBo bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询用章列表
|
||||
*/
|
||||
List<LxOaSealVVo> queryList(LxOaSealBo bo);
|
||||
|
||||
/**
|
||||
* 新增用章
|
||||
*/
|
||||
LxOaSealVVo insertByBo(LxOaSealBo bo);
|
||||
|
||||
/**
|
||||
* 修改用章
|
||||
*/
|
||||
LxOaSealVVo updateByBo(LxOaSealBo bo);
|
||||
|
||||
/**
|
||||
* 校验并批量删除用章信息
|
||||
*/
|
||||
Boolean deleteWithValidByIds(List<Long> ids);
|
||||
}
|
@ -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<LxOaSealVVo> queryPageList(LxOaSealBo bo, PageQuery pageQuery) {
|
||||
Page<LxOaSealVVo> page = baseMapper.queryPageOaSealVoList(pageQuery.build(), buildQueryWrapper(bo));
|
||||
return TableDataInfo.build(page);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<LxOaSealVVo> queryList(LxOaSealBo bo) {
|
||||
return null;
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<LxOaSeal> buildQueryWrapper(LxOaSealBo bo) {
|
||||
LambdaQueryWrapper<LxOaSeal> 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<Long> sealIds = bo.getSealIds();
|
||||
if (CollectionUtil.isNotEmpty(sealIds)) {
|
||||
List<LxOaSealRelation> 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<String, Object> 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<LxOaSealRelation> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(LxOaSealRelation::getOaSealId, bo.getId());
|
||||
lxOaSealRelationMapper.delete(lqw);
|
||||
// 保存公章id
|
||||
List<Long> sealIds = bo.getSealIds();
|
||||
if (CollectionUtil.isNotEmpty(sealIds)) {
|
||||
List<LxOaSealRelation> 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<Long> 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<String, Object> 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());
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.dromara.workflow.mapper.LxOaBusinessTripMapper">
|
||||
|
||||
</mapper>
|
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.dromara.workflow.mapper.LxOaLeaveMapper">
|
||||
|
||||
</mapper>
|
@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.dromara.workflow.mapper.LxOaSealMapper">
|
||||
<resultMap id="sealUsageWithSealsResultMap" type="org.dromara.workflow.domain.vo.LxOaSealVVo">
|
||||
<id property="id" column="id"/>
|
||||
<result property="businessType" column="business_type"/>
|
||||
<result property="businessType" column="business_type"/>
|
||||
<result property="sealDate" column="seal_date"/>
|
||||
<result property="takeOutFlag" column="take_out_flag"/>
|
||||
<result property="sealMoney" column="seal_money"/>
|
||||
<result property="fileName" column="file_name"/>
|
||||
<result property="fileCode" column="file_code"/>
|
||||
<result property="sealMoney" column="file_code"/>
|
||||
<result property="takeOutStartDate" column="take_out_start_date"/>
|
||||
<result property="takeOutEndDate" column="take_out_end_date"/>
|
||||
<result property="fileCount" column="file_count"/>
|
||||
<result property="initiatorType" column="initiator_type"/>
|
||||
<!-- 关联的公章列表 -->
|
||||
<collection property="sealInfos" ofType="org.dromara.workflow.domain.vo.LxOaSealVo">
|
||||
<id property="sealId" column="seal_id"/>
|
||||
<result property="sealName" column="seal_name"/>
|
||||
<result property="sealType" column="seal_type"/>
|
||||
</collection>
|
||||
</resultMap>
|
||||
<select id="queryPageOaSealVoList" resultMap="sealUsageWithSealsResultMap">
|
||||
select oa.id,
|
||||
oa.tenant_id,
|
||||
oa.business_type,
|
||||
oa.seal_date,
|
||||
oa.take_out_flag,
|
||||
oa.seal_money,
|
||||
oa.remark,
|
||||
oa.status,
|
||||
oa.create_dept,
|
||||
oa.create_by,
|
||||
oa.create_time,
|
||||
oa.update_by,
|
||||
oa.update_time,
|
||||
oa.attachment,
|
||||
oa.seal_id,
|
||||
oa.file_name,
|
||||
oa.file_code,
|
||||
oa.take_out_start_date,
|
||||
oa.take_out_end_date,
|
||||
oa.file_count,
|
||||
oa.initiator_type,
|
||||
m_seal.id,
|
||||
m_seal.seal_type,
|
||||
m_seal.seal_name
|
||||
from lx_oa_seal oa
|
||||
left join lx_oa_seal_relation rel on oa.id = rel.oa_seal_id
|
||||
left join lx_material_seal m_seal
|
||||
on m_seal.id = rel.seal_id
|
||||
${ew.getCustomSqlSegment}
|
||||
</select>
|
||||
</mapper>
|
89
script/leave/seal1.json
Normal file
89
script/leave/seal1.json
Normal file
@ -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": "[]"
|
||||
}
|
||||
]
|
||||
}
|
89
script/leave/trip1.json
Normal file
89
script/leave/trip1.json
Normal file
@ -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": "[]"
|
||||
}
|
||||
]
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user