Browse Source

1、用印信息管理CRUD

dongpo 8 months ago
parent
commit
98a6b45a3d

+ 3 - 0
yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java

@@ -117,6 +117,9 @@ public interface ErrorCodeConstants {
     ErrorCode OA_MEETING_ROOM_NOT_EXISTS = new ErrorCode(1_009_017_012, "会议室信息管理不存在");
     // ========== 会议室预定管理信息 1_009_017_013 ==========
     ErrorCode OA_MEETING_RESERVE_NOT_EXISTS = new ErrorCode(1_009_017_013, "会议室预定管理信息不存在");
+    // ========== 用印信息 1_009_017_014 ==========
+    ErrorCode OA_STAMP_INFO_NOT_EXISTS = new ErrorCode(1_009_017_014, "用印信息不存在");
+
 
     // ========== 员工信息 1_009_018_000 ==========
     ErrorCode OA_EMPLOYEE_NOT_EXISTS = new ErrorCode(1_009_018_000, "员工信息不存在");

+ 154 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/stamp/stampinfo/OaStampInfoController.java

@@ -0,0 +1,154 @@
+package cn.iocoder.yudao.module.bpm.controller.admin.stamp.stampinfo;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.module.bpm.controller.admin.stamp.stampinfo.vo.OaStampInfoPageReqVO;
+import cn.iocoder.yudao.module.bpm.controller.admin.stamp.stampinfo.vo.OaStampInfoRespVO;
+import cn.iocoder.yudao.module.bpm.controller.admin.stamp.stampinfo.vo.OaStampInfoSaveReqVO;
+import cn.iocoder.yudao.module.bpm.dal.dataobject.stamp.stampinfo.OaStampInfoDO;
+import cn.iocoder.yudao.module.bpm.service.stamp.stampinfo.OaStampInfoService;
+import cn.iocoder.yudao.module.system.api.dept.DeptApi;
+import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
+import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
+import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springdoc.api.annotations.ParameterObject;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "管理后台 - 用印信息")
+@RestController
+@RequestMapping("/bpm/oa-stamp-info")
+@Validated
+public class OaStampInfoController {
+
+    @Resource
+    private OaStampInfoService oaStampInfoService;
+
+    @Resource
+    private AdminUserApi adminUserApi;
+
+    @Resource
+    private DeptApi deptApi;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建用印信息")
+    // @PreAuthorize("@ss.hasPermission('bpm:oa-stamp-info:create')")
+    public CommonResult<Long> createOaStampInfo(@Valid @RequestBody OaStampInfoSaveReqVO createReqVO) {
+        return success(oaStampInfoService.createOaStampInfo(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新用印信息")
+    // @PreAuthorize("@ss.hasPermission('bpm:oa-stamp-info:update')")
+    public CommonResult<Boolean> updateOaStampInfo(@Valid @RequestBody OaStampInfoSaveReqVO updateReqVO) {
+        oaStampInfoService.updateOaStampInfo(updateReqVO);
+        return success(true);
+    }
+
+    @PutMapping("/invalid")
+    @Operation(summary = "作废用印信息")
+    @Parameter(name = "id", description = "编号", required = true)
+    // @PreAuthorize("@ss.hasPermission('bpm:oa-stamp-info:invalid')")
+    public CommonResult<Boolean> invalidOaStampInfo(@RequestParam("id") Long id) {
+        oaStampInfoService.invalidOaStampInfo(id);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除用印信息")
+    @Parameter(name = "id", description = "编号", required = true)
+    // @PreAuthorize("@ss.hasPermission('bpm:oa-stamp-info:delete')")
+    public CommonResult<Boolean> deleteOaStampInfo(@RequestParam("id") Long id) {
+        oaStampInfoService.deleteOaStampInfo(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得用印信息")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    // @PreAuthorize("@ss.hasPermission('bpm:oa-stamp-info:query')")
+    public CommonResult<OaStampInfoRespVO> getOaStampInfo(@RequestParam("id") Long id) {
+        OaStampInfoDO oaStampInfo = oaStampInfoService.getOaStampInfo(id);
+        OaStampInfoRespVO oaStampInfoRespVO = BeanUtils.toBean(oaStampInfo, OaStampInfoRespVO.class);
+        // 状态描述
+        String status = oaStampInfoRespVO.getStatus();
+        switch (status) {
+            case "0":
+                oaStampInfoRespVO.setStatusDesc("已完成");
+                break;
+            case "1":
+                oaStampInfoRespVO.setStatusDesc("已作废");
+                break;
+            default:
+                oaStampInfoRespVO.setStatusDesc("未知");
+                break;
+        }
+        // 数据来源描述
+        String infoSource = oaStampInfoRespVO.getInfoSource();
+        switch (infoSource) {
+            case "0":
+                oaStampInfoRespVO.setInfoSourceDesc("流程添加");
+                break;
+            case "1":
+                oaStampInfoRespVO.setInfoSourceDesc("手动添加");
+                break;
+            default:
+                oaStampInfoRespVO.setInfoSourceDesc("未知");
+                break;
+        }
+        // 创建人名字
+        Long createEmployeeId = oaStampInfoRespVO.getCreateEmployeeId();
+        AdminUserRespDTO createEmployee = adminUserApi.getUser(createEmployeeId);
+        oaStampInfoRespVO.setCreateEmployeeName(createEmployee.getNickname());
+        // 用印人信息
+        Long employeeId = oaStampInfoRespVO.getEmployeeId();
+        AdminUserRespDTO employee = adminUserApi.getUser(employeeId);
+        oaStampInfoRespVO.setEmployeeName(employee.getNickname());
+        oaStampInfoRespVO.setEmployeePhone(employee.getMobile());
+        oaStampInfoRespVO.setPosition("职位信息");
+        // 部门名称
+        Long deptId = oaStampInfoRespVO.getDeptId();
+        DeptRespDTO dept = deptApi.getDept(deptId);
+        oaStampInfoRespVO.setDeptName(dept.getName());
+
+        return success(oaStampInfoRespVO);
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得用印信息分页")
+    // @PreAuthorize("@ss.hasPermission('bpm:oa-stamp-info:query')")
+    public CommonResult<PageResult<OaStampInfoRespVO>> getOaStampInfoPage(@Valid @ParameterObject OaStampInfoPageReqVO pageReqVO) {
+        PageResult<OaStampInfoRespVO> pageResult = oaStampInfoService.getOaStampInfoPage(pageReqVO);
+        return success(pageResult);
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出用印信息 Excel")
+    // @PreAuthorize("@ss.hasPermission('bpm:oa-stamp-info:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportOaStampInfoExcel(@Valid OaStampInfoPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<OaStampInfoRespVO> list = oaStampInfoService.getOaStampInfoPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "用印信息.xls", "数据", OaStampInfoRespVO.class,
+                        list);
+    }
+
+}

+ 50 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/stamp/stampinfo/vo/OaStampInfoPageReqVO.java

@@ -0,0 +1,50 @@
+package cn.iocoder.yudao.module.bpm.controller.admin.stamp.stampinfo.vo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 用印信息分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class OaStampInfoPageReqVO extends PageParam {
+
+    @Schema(description = "用印申请员工姓名", example = "竽道")
+    private String employeeName;
+
+    @Schema(description = "用印申请员工手机号", example = "13")
+    private String employeePhone;
+
+    @Schema(description = "部门id", example = "101")
+    private Long deptId;
+
+    @Schema(description = "员工职位")
+    private String position;
+
+    @Schema(description = "用印标题", example = "用印标题")
+    private String stampTitle;
+
+    @Schema(description = "状态(0已完成、1已作废、2已生效)", example = "1")
+    private String status;
+
+    @Schema(description = "数据来源,0流程添加、1手动添加", example = "1")
+    private String infoSource;
+
+    @Schema(description = "创建员工姓名", example = "创建员工姓名")
+    @ExcelProperty("创建员工姓名")
+    private String createEmployeeName;
+
+    @Schema(description = "创建时间", example = "2024-08-01 00:00:00,2024-08-01 23:59:59")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 100 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/stamp/stampinfo/vo/OaStampInfoRespVO.java

@@ -0,0 +1,100 @@
+package cn.iocoder.yudao.module.bpm.controller.admin.stamp.stampinfo.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Schema(description = "管理后台 - 用印信息 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class OaStampInfoRespVO {
+
+    @Schema(description = "表单主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "16622")
+    @ExcelProperty("表单主键")
+    private Long id;
+
+    @Schema(description = "uuid", example = "24566")
+    @ExcelProperty("uuid")
+    private String stampUuid;
+
+    @Schema(description = "用印申请人id", example = "12863")
+    @ExcelProperty("用印申请人id")
+    private Long employeeId;
+
+    @Schema(description = "用印申请人uuid", example = "2808")
+    @ExcelProperty("用印申请人uuid")
+    private String employeeUuid;
+
+    @Schema(description = "用印申请员工姓名", example = "赵六")
+    @ExcelProperty("用印申请员工姓名")
+    private String employeeName;
+
+    @Schema(description = "用印申请员工手机号")
+    @ExcelProperty("用印申请员工手机号")
+    private String employeePhone;
+
+    @Schema(description = "用户账号id", example = "25125")
+    @ExcelProperty("用户账号id")
+    private Long userId;
+
+    @Schema(description = "部门id", example = "23009")
+    @ExcelProperty("部门id")
+    private Long deptId;
+
+    @Schema(description = "部门名称", example = "部门A")
+    @ExcelProperty("部门名称")
+    private String deptName;
+
+    @Schema(description = "员工职位")
+    @ExcelProperty("员工职位")
+    private String position;
+
+    @Schema(description = "用印标题")
+    @ExcelProperty("用印标题")
+    private String stampTitle;
+
+    @Schema(description = "印章id,多个用逗号分隔", example = "24683")
+    @ExcelProperty("印章id,多个用逗号分隔")
+    private List<Long> stampSealId;
+
+    @Schema(description = "用印事由", example = "不喜欢")
+    @ExcelProperty("用印事由")
+    private String reason;
+
+    @Schema(description = "备注")
+    @ExcelProperty("备注")
+    private String remarks;
+
+    @Schema(description = "状态(0已完成、1已作废、2已生效)", example = "1")
+    @ExcelProperty("状态(0已完成、1已作废、2已生效)")
+    private String status;
+
+    @Schema(description = "状态名称(0已完成、1已作废)", example = "1")
+    @ExcelProperty("状态名称(0已完成、1已作废)")
+    private String statusDesc;
+
+    @Schema(description = "数据来源,0流程添加、1手动添加")
+    @ExcelProperty("数据来源,0流程添加、1手动添加")
+    private String infoSource;
+
+    @Schema(description = "数据来源名称,0流程添加、1手动添加")
+    @ExcelProperty("数据来源名称,0流程添加、1手动添加")
+    private String infoSourceDesc;
+
+    @Schema(description = "创建员工id", example = "27984")
+    @ExcelProperty("创建员工id")
+    private Long createEmployeeId;
+
+    @Schema(description = "创建员工姓名", example = "创建员工姓名")
+    @ExcelProperty("创建员工姓名")
+    private String createEmployeeName;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 37 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/stamp/stampinfo/vo/OaStampInfoSaveReqVO.java

@@ -0,0 +1,37 @@
+package cn.iocoder.yudao.module.bpm.controller.admin.stamp.stampinfo.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@Schema(description = "管理后台 - 用印信息新增/修改 Request VO")
+@Data
+public class OaStampInfoSaveReqVO {
+
+    @Schema(description = "表单主键")
+    private Long id;
+
+    @Schema(description = "用印员工id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "用印员工id不能为空")
+    private Long employeeId;
+
+    @Schema(description = "用印标题", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotBlank(message = "用印标题不能为空")
+    private String stampTitle;
+
+    @Schema(description = "印章id集合", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1,2]")
+    @NotEmpty(message = "印章id集合不能为空")
+    private List<Long> stampSealId;
+
+    @Schema(description = "用印事由", requiredMode = Schema.RequiredMode.REQUIRED, example = "不喜欢")
+    @NotBlank(message = "用印事由不能为空")
+    private String reason;
+
+    @Schema(description = "备注")
+    private String remarks;
+
+}

+ 99 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/stamp/stampinfo/OaStampInfoDO.java

@@ -0,0 +1,99 @@
+package cn.iocoder.yudao.module.bpm.dal.dataobject.stamp.stampinfo;
+
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 用印信息 DO
+ *
+ * @author dp
+ */
+@TableName("bpm_oa_stamp_info")
+@KeySequence("bpm_oa_stamp_info_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class OaStampInfoDO extends BaseDO {
+
+    /**
+     * 表单主键
+     */
+    @TableId
+    private Long id;
+    /**
+     * uuid
+     */
+    private String stampUuid;
+    /**
+     * 用印申请人id
+     */
+    private Long employeeId;
+    /**
+     * 用印申请人uuid
+     */
+    private String employeeUuid;
+    /**
+     * 用印申请员工姓名
+     */
+    private String employeeName;
+    /**
+     * 用印申请员工手机号
+     */
+    private String employeePhone;
+    /**
+     * 用户账号id
+     */
+    private Long userId;
+    /**
+     * 用户账号uuid
+     */
+    private String userUuid;
+    /**
+     * 部门id
+     */
+    private Long deptId;
+    /**
+     * 部门uuid
+     */
+    private String deptUuid;
+    /**
+     * 员工职位
+     */
+    private String position;
+    /**
+     * 用印标题
+     */
+    private String stampTitle;
+    /**
+     * 印章id,多个用逗号分隔
+     */
+    private String stampSealId;
+    /**
+     * 用印事由
+     */
+    private String reason;
+    /**
+     * 备注
+     */
+    private String remarks;
+    /**
+     * 状态(0已完成、1已作废、2已生效)
+     */
+    private String status;
+    /**
+     * 数据来源,0流程添加、1手动添加
+     */
+    private String infoSource;
+    /**
+     * 创建员工id
+     */
+    private Long createEmployeeId;
+
+}

+ 39 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/stamp/stampinfo/OaStampInfoMapper.java

@@ -0,0 +1,39 @@
+package cn.iocoder.yudao.module.bpm.dal.mysql.stamp.stampinfo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
+import cn.iocoder.yudao.module.bpm.controller.admin.stamp.stampinfo.vo.OaStampInfoPageReqVO;
+import cn.iocoder.yudao.module.bpm.controller.admin.stamp.stampinfo.vo.OaStampInfoRespVO;
+import cn.iocoder.yudao.module.bpm.dal.dataobject.stamp.stampinfo.OaStampInfoDO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 用印信息 Mapper
+ *
+ * @author dp
+ */
+@Mapper
+public interface OaStampInfoMapper extends BaseMapperX<OaStampInfoDO> {
+
+    default PageResult<OaStampInfoDO> selectPage(OaStampInfoPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<OaStampInfoDO>()
+                .likeIfPresent(OaStampInfoDO::getEmployeeName, reqVO.getEmployeeName())
+                .eqIfPresent(OaStampInfoDO::getEmployeePhone, reqVO.getEmployeePhone())
+                .eqIfPresent(OaStampInfoDO::getDeptId, reqVO.getDeptId())
+                .eqIfPresent(OaStampInfoDO::getPosition, reqVO.getPosition())
+                .eqIfPresent(OaStampInfoDO::getStampTitle, reqVO.getStampTitle())
+                .eqIfPresent(OaStampInfoDO::getStatus, reqVO.getStatus())
+                .eqIfPresent(OaStampInfoDO::getInfoSource, reqVO.getInfoSource())
+                .betweenIfPresent(OaStampInfoDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(OaStampInfoDO::getId));
+    }
+
+    long selectPageCount(@Param("page") OaStampInfoPageReqVO pageReqVO);
+
+    List<OaStampInfoRespVO> selectPageList(@Param("page") OaStampInfoPageReqVO pageReqVO);
+}

+ 60 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/stamp/stampinfo/OaStampInfoService.java

@@ -0,0 +1,60 @@
+package cn.iocoder.yudao.module.bpm.service.stamp.stampinfo;
+
+import javax.validation.*;
+
+import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
+import cn.iocoder.yudao.module.bpm.controller.admin.stamp.stampinfo.vo.OaStampInfoPageReqVO;
+import cn.iocoder.yudao.module.bpm.controller.admin.stamp.stampinfo.vo.OaStampInfoRespVO;
+import cn.iocoder.yudao.module.bpm.controller.admin.stamp.stampinfo.vo.OaStampInfoSaveReqVO;
+import cn.iocoder.yudao.module.bpm.dal.dataobject.stamp.stampinfo.OaStampInfoDO;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+
+/**
+ * 用印信息 Service 接口
+ *
+ * @author dp
+ */
+public interface OaStampInfoService {
+
+    /**
+     * 创建用印信息
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createOaStampInfo(@Valid OaStampInfoSaveReqVO createReqVO);
+
+    /**
+     * 更新用印信息
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateOaStampInfo(@Valid OaStampInfoSaveReqVO updateReqVO);
+
+    /**
+     * 删除用印信息
+     *
+     * @param id 编号
+     */
+    void deleteOaStampInfo(Long id);
+
+
+    void invalidOaStampInfo(Long id);
+
+    /**
+     * 获得用印信息
+     *
+     * @param id 编号
+     * @return 用印信息
+     */
+    OaStampInfoDO getOaStampInfo(Long id);
+
+    /**
+     * 获得用印信息分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 用印信息分页
+     */
+    PageResult<OaStampInfoRespVO> getOaStampInfoPage(OaStampInfoPageReqVO pageReqVO);
+
+}

+ 165 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/stamp/stampinfo/OaStampInfoServiceImpl.java

@@ -0,0 +1,165 @@
+package cn.iocoder.yudao.module.bpm.service.stamp.stampinfo;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.IdUtil;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.security.core.LoginUser;
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
+import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
+import cn.iocoder.yudao.module.bpm.controller.admin.stamp.stampinfo.vo.OaStampInfoPageReqVO;
+import cn.iocoder.yudao.module.bpm.controller.admin.stamp.stampinfo.vo.OaStampInfoRespVO;
+import cn.iocoder.yudao.module.bpm.controller.admin.stamp.stampinfo.vo.OaStampInfoSaveReqVO;
+import cn.iocoder.yudao.module.bpm.dal.dataobject.stamp.stampinfo.OaStampInfoDO;
+import cn.iocoder.yudao.module.bpm.dal.mysql.stamp.stampinfo.OaStampInfoMapper;
+import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
+import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_LOGIN_USER_NOT_EXISTS;
+import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_STAMP_INFO_NOT_EXISTS;
+
+/**
+ * 用印信息 Service 实现类
+ *
+ * @author dp
+ */
+@Service
+@Validated
+public class OaStampInfoServiceImpl implements OaStampInfoService {
+
+    @Resource
+    private OaStampInfoMapper oaStampInfoMapper;
+
+    @Resource
+    private AdminUserApi adminUserApi;
+
+    @Override
+    public Long createOaStampInfo(OaStampInfoSaveReqVO createReqVO) {
+        // 登录人
+        LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
+        if (loginUser == null) {
+            throw exception(OA_LOGIN_USER_NOT_EXISTS);
+        }
+        // 创建员工
+        Long createEmployeeId = loginUser.getId();
+        AdminUserRespDTO createEmployee = adminUserApi.getUser(createEmployeeId);
+        // 插入准备
+        OaStampInfoDO oaStampInfo = BeanUtils.toBean(createReqVO, OaStampInfoDO.class);
+        // uuid
+        oaStampInfo.setStampUuid(IdUtil.fastSimpleUUID());
+        // 创建员工
+        oaStampInfo.setCreateEmployeeId(createEmployeeId);
+        oaStampInfo.setDeptId(createEmployee.getDeptId());
+        // 部门
+        // 印章
+        List<Long> stampSealId = createReqVO.getStampSealId();
+        if (CollUtil.isNotEmpty(stampSealId)) {
+            String stampSealIdStr = stampSealId.stream().map(String::valueOf).collect(Collectors.joining(","));
+            oaStampInfo.setStampSealId(stampSealIdStr);
+        } else {
+            oaStampInfo.setStampSealId(null);
+        }
+        // 状态
+        oaStampInfo.setStatus("0"); // 已完成
+        oaStampInfoMapper.insert(oaStampInfo);
+        // 返回
+        return oaStampInfo.getId();
+    }
+
+    @Override
+    public void updateOaStampInfo(OaStampInfoSaveReqVO updateReqVO) {
+        // 校验存在
+        validateOaStampInfoExists(updateReqVO.getId());
+        // 更新准备
+        OaStampInfoDO updateObj = BeanUtils.toBean(updateReqVO, OaStampInfoDO.class);
+        // 印章
+        List<Long> stampSealId = updateReqVO.getStampSealId();
+        if (CollUtil.isNotEmpty(stampSealId)) {
+            String stampSealIdStr = stampSealId.stream().map(String::valueOf).collect(Collectors.joining(","));
+            updateObj.setStampSealId(stampSealIdStr);
+        } else {
+            updateObj.setStampSealId(null);
+        }
+
+        oaStampInfoMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteOaStampInfo(Long id) {
+        // 校验存在
+        validateOaStampInfoExists(id);
+        // 删除
+        oaStampInfoMapper.deleteById(id);
+    }
+
+    @Override
+    public void invalidOaStampInfo(Long id) {
+        // 校验存在
+        validateOaStampInfoExists(id);
+        OaStampInfoDO oaStampInfoDO = OaStampInfoDO.builder()
+                .status("1")
+                .id(id)
+                .build();
+        oaStampInfoMapper.updateById(oaStampInfoDO);
+
+    }
+
+    private OaStampInfoDO validateOaStampInfoExists(Long id) {
+        OaStampInfoDO oaStampInfoDO = oaStampInfoMapper.selectById(id);
+        if (oaStampInfoDO == null) {
+            throw exception(OA_STAMP_INFO_NOT_EXISTS);
+        }
+        return oaStampInfoDO;
+    }
+
+    @Override
+    public OaStampInfoDO getOaStampInfo(Long id) {
+        return oaStampInfoMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<OaStampInfoRespVO> getOaStampInfoPage(OaStampInfoPageReqVO pageReqVO) {
+        pageReqVO.setPageNo(pageReqVO.getPageNo() - 1);
+
+        long pageCount = oaStampInfoMapper.selectPageCount(pageReqVO);
+        List<OaStampInfoRespVO> pageList = oaStampInfoMapper.selectPageList(pageReqVO);
+
+        for (OaStampInfoRespVO oaStampInfoRespVO : pageList) {
+            // 状态描述
+            String status = oaStampInfoRespVO.getStatus();
+            switch (status) {
+                case "0":
+                    oaStampInfoRespVO.setStatusDesc("已完成");
+                    break;
+                case "1":
+                    oaStampInfoRespVO.setStatusDesc("已作废");
+                    break;
+                default:
+                    oaStampInfoRespVO.setStatusDesc("未知");
+                    break;
+            }
+            // 数据来源描述
+            String infoSource = oaStampInfoRespVO.getInfoSource();
+            switch (infoSource) {
+                case "0":
+                    oaStampInfoRespVO.setInfoSourceDesc("流程添加");
+                    break;
+                case "1":
+                    oaStampInfoRespVO.setInfoSourceDesc("手动添加");
+                    break;
+                default:
+                    oaStampInfoRespVO.setInfoSourceDesc("未知");
+                    break;
+            }
+        }
+        return new PageResult<>(pageList, pageCount);
+    }
+
+}

+ 92 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/stamp/stampinfo/OaStampInfoMapper.xml

@@ -0,0 +1,92 @@
+<?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="cn.iocoder.yudao.module.bpm.dal.mysql.stamp.stampinfo.OaStampInfoMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+    <select id="selectPageCount" resultType="java.lang.Long">
+        SELECT COUNT(si.id)
+        FROM
+        bpm_oa_stamp_info si
+        LEFT JOIN system_users su ON si.employee_id = su.id and su.deleted = 0
+        LEFT JOIN system_users su2 ON si.create_employee_id = su2.id and su2.deleted = 0
+        LEFT JOIN system_dept sd ON si.dept_id = sd.id and sd.deleted = 0
+        WHERE si.deleted = 0
+        <if test="page.employeeName != null and page.employeeName != ''">
+            AND su.nickname like concat('%',#{page.employeeName},'%')
+        </if>
+        <if test="page.deptId != null">
+            AND si.dept_id = #{page.deptId}
+        </if>
+        <if test="page.position != null">
+            AND si.position = #{page.position}
+        </if>
+        <if test="page.employeePhone != null and page.employeePhone != ''">
+            AND su.mobile like concat('%',#{page.employeePhone},'%')
+        </if>
+        <if test="page.stampTitle != null and page.stampTitle != ''">
+            AND si.stamp_title like concat('%',#{page.stampTitle},'%')
+        </if>
+        <if test="page.createEmployeeName != null and page.createEmployeeName != ''">
+            AND si.stamp_title like concat('%',#{page.createEmployeeName},'%')
+        </if>
+        <if test="page.createTime != null and page.createTime.length > 0">
+            AND si.create_time BETWEEN #{page.createTime[0]} AND #{page.createTime[1]}
+        </if>
+    </select>
+    <select id="selectPageList"
+            resultType="cn.iocoder.yudao.module.bpm.controller.admin.stamp.stampinfo.vo.OaStampInfoRespVO">
+        SELECT
+        si.id,
+        si.stamp_uuid,
+        si.employee_id,
+        '职位' AS "position",
+        si.dept_id,
+        si.stamp_title,
+        si.stamp_seal_id,
+        si.reason,
+        si.remarks,
+        si.status,
+        si.info_source,
+        si.create_employee_id,
+        si.create_time,
+        su2.nickname createEmployeeName,
+        su.nickname employeeName,
+        su.mobile employeePhone,
+        sd.`name` deptName
+        FROM
+        bpm_oa_stamp_info si
+        LEFT JOIN system_users su ON si.employee_id = su.id and su.deleted = 0
+        LEFT JOIN system_users su2 ON si.create_employee_id = su2.id and su2.deleted = 0
+        LEFT JOIN system_dept sd ON si.dept_id = sd.id and sd.deleted = 0
+        WHERE si.deleted = 0
+        <if test="page.employeeName != null and page.employeeName != ''">
+            AND su.nickname like concat('%',#{page.employeeName},'%')
+        </if>
+        <if test="page.deptId != null">
+            AND si.dept_id = #{page.deptId}
+        </if>
+        <if test="page.position != null">
+            AND si.position = #{page.position}
+        </if>
+        <if test="page.employeePhone != null and page.employeePhone != ''">
+            AND su.mobile like concat('%',#{page.employeePhone},'%')
+        </if>
+        <if test="page.stampTitle != null and page.stampTitle != ''">
+            AND si.stamp_title like concat('%',#{page.stampTitle},'%')
+        </if>
+        <if test="page.createEmployeeName != null and page.createEmployeeName != ''">
+            AND su2.nickname like concat('%',#{page.createEmployeeName},'%')
+        </if>
+        <if test="page.createTime != null and page.createTime.length > 0">
+            AND si.create_time BETWEEN #{page.createTime[0]} AND #{page.createTime[1]}
+        </if>
+        ORDER BY si.create_time DESC
+        LIMIT #{page.pageNo}, #{page.pageSize}
+    </select>
+</mapper>