From b2579d1688969c528b4ed6e8c1ce1d13c0b4fe18 Mon Sep 17 00:00:00 2001 From: aikai Date: Thu, 29 Feb 2024 16:19:54 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E9=87=87=E8=B4=AD=E6=B8=85=E5=8D=95?= =?UTF-8?q?=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enums/GlobalErrorCodeConstants.java | 2 + .../admin/oa/BpmOALeaveController.http | 12 --- .../admin/oa/BpmOAProcureController.java | 64 +++++++++++ .../oa/vo/procure/BpmOAProcurePageReqVO.java | 58 ++++++++++ .../oa/vo/procure/BpmOAProcureRespVO.java | 58 ++++++++++ .../oa/vo/procure/BpmOAProcureSaveReqVO.java | 57 ++++++++++ .../oa/vo/reimbursement/ProcureDetail.java | 18 ++++ .../bpm/convert/oa/BpmOAProcureConvert.java | 25 +++++ .../bpm/dal/dataobject/oa/BpmOAProcureDO.java | 83 ++++++++++++++ .../dataobject/oa/BpmOAReimbursementDO.java | 2 +- .../bpm/dal/mysql/oa/BpmOaProcureMapper.java | 33 ++++++ .../bpm/service/oa/BpmOaProcureService.java | 55 ++++++++++ .../service/oa/BpmOaProcureServiceImpl.java | 102 ++++++++++++++++++ .../mapper/oa/BpmOaProcureMapper.xml | 12 +++ 14 files changed, 568 insertions(+), 13 deletions(-) delete mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOALeaveController.http create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAProcureController.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/procure/BpmOAProcurePageReqVO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/procure/BpmOAProcureRespVO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/procure/BpmOAProcureSaveReqVO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/reimbursement/ProcureDetail.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/BpmOAProcureConvert.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAProcureDO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOaProcureMapper.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOaProcureService.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOaProcureServiceImpl.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOaProcureMapper.xml diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/enums/GlobalErrorCodeConstants.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/enums/GlobalErrorCodeConstants.java index 3a8c4b2b..0e6b89ad 100644 --- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/enums/GlobalErrorCodeConstants.java +++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/enums/GlobalErrorCodeConstants.java @@ -37,4 +37,6 @@ public interface GlobalErrorCodeConstants { ErrorCode UNKNOWN = new ErrorCode(999, "未知错误"); + + ErrorCode OA_PROCURE_NOT_EXISTS = new ErrorCode(10001, "OA 采购申请不存在"); } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOALeaveController.http b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOALeaveController.http deleted file mode 100644 index 96bbf964..00000000 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOALeaveController.http +++ /dev/null @@ -1,12 +0,0 @@ -### 请求 /bpm/oa/leave/create 接口 => 成功 -POST {{baseUrl}}/bpm/oa/leave/create -Content-Type: application/json -tenant-id: 1 -Authorization: Bearer {{token}} - -{ - "startTime": "2022-03-01", - "endTime": "2022-03-05", - "type": 1, - "reason": "我要请假啦啦啦!" -} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAProcureController.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAProcureController.java new file mode 100644 index 00000000..5fbc9614 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAProcureController.java @@ -0,0 +1,64 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure.BpmOAProcureRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure.BpmOAProcureSaveReqVO; +import cn.iocoder.yudao.module.bpm.convert.oa.BpmOAProcureConvert; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAProcureDO; +import cn.iocoder.yudao.module.bpm.service.oa.BpmOaProcureService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - OA 采购申请") +@RestController +@RequestMapping("/bpm/oa-procure") +@Validated +public class BpmOAProcureController { + + @Resource + private BpmOaProcureService bpmOaProcureService; + + @PostMapping("/create") + @Operation(summary = "创建OA 采购申请") + @PreAuthorize("@ss.hasPermission('bpm:oa-procure:create')") + public CommonResult createOaProcure(@Valid @RequestBody BpmOAProcureSaveReqVO createReqVO) { + return success(bpmOaProcureService.createOaProcure(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新OA 采购申请") + @PreAuthorize("@ss.hasPermission('bpm:oa-procure:update')") + public CommonResult updateOaProcure(@Valid @RequestBody BpmOAProcureSaveReqVO updateReqVO) { + bpmOaProcureService.updateOaProcure(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除OA 采购申请") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('bpm:oa-procure:delete')") + public CommonResult deleteOaProcure(@RequestParam("id") Long id) { + bpmOaProcureService.deleteOaProcure(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得OA 采购申请") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('bpm:oa-procure:query')") + public CommonResult getOaProcure(@RequestParam("id") Long id) { + BpmOAProcureDO oaProcure = bpmOaProcureService.getOaProcure(id); + return success(BpmOAProcureConvert.INSTANCE.convert(oaProcure)); + } + +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/procure/BpmOAProcurePageReqVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/procure/BpmOAProcurePageReqVO.java new file mode 100644 index 00000000..c09cc2ab --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/procure/BpmOAProcurePageReqVO.java @@ -0,0 +1,58 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure; + +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.reimbursement.ProcureDetail; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.reimbursement.Reimbursement; +import lombok.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - OA 采购申请分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class BpmOAProcurePageReqVO extends PageParam { + + @Schema(description = "申请人的用户编号", example = "26976") + private Long userId; + + @Schema(description = "申请事由", example = "不喜欢") + private String reason; + + @Schema(description = "采购类型 (根据字典的来)", example = "2") + private Integer procureType; + + @Schema(description = "期望交付日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] expectedDeliveryDate; + + @Schema(description = "采购明细数据JSON") + private List procureDetailJson; + + @Schema(description = "备注") + private String remarks; + + @Schema(description = "采购总金额") + private String totalMoney; + + @Schema(description = "采购总金额大写") + private String totalMoneyChinese; + + @Schema(description = "附件信息") + private String fileItems; + + @Schema(description = "报销结果") + private Integer result; + + @Schema(description = "流程实例的编号", example = "15852") + private String processInstanceId; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/procure/BpmOAProcureRespVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/procure/BpmOAProcureRespVO.java new file mode 100644 index 00000000..ae66e86e --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/procure/BpmOAProcureRespVO.java @@ -0,0 +1,58 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure; + +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.reimbursement.ProcureDetail; +import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - OA 采购申请 Response VO") +@Data +public class BpmOAProcureRespVO { + + @Schema(description = "报销表单主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "25971") + private Long id; + + @Schema(description = "申请人的用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "26976") + private Long userId; + + @Schema(description = "申请事由", example = "不喜欢") + private String reason; + + @Schema(description = "采购类型 (根据字典的来)", example = "2") + private Integer procureType; + + @Schema(description = "期望交付日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime expectedDeliveryDate; + + @Schema(description = "采购明细数据JSON", requiredMode = Schema.RequiredMode.REQUIRED) + private List procureDetailJson; + + @Schema(description = "备注") + private String remarks; + + @Schema(description = "采购总金额") + private String totalMoney; + + @Schema(description = "采购总金额大写") + private String totalMoneyChinese; + + @Schema(description = "附件信息") + private List fileItems; + + @Schema(description = "报销结果", requiredMode = Schema.RequiredMode.REQUIRED) + private Integer result; + + @Schema(description = "流程实例的编号", example = "15852") + private String processInstanceId; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/procure/BpmOAProcureSaveReqVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/procure/BpmOAProcureSaveReqVO.java new file mode 100644 index 00000000..661b06a6 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/procure/BpmOAProcureSaveReqVO.java @@ -0,0 +1,57 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure; + +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.reimbursement.ProcureDetail; +import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotEmpty; +import java.time.LocalDateTime; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - OA 采购申请新增/修改 Request VO") +@Data +public class BpmOAProcureSaveReqVO { + + @Schema(description = "报销表单主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "25971") + private Long id; + + @Schema(description = "申请人的用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "26976") + private Long userId; + + @Schema(description = "申请事由", example = "不喜欢") + private String reason; + + @Schema(description = "采购类型 (根据字典的来)", example = "2") + private Integer procureType; + + @Schema(description = "期望交付日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime expectedDeliveryDate; + + @Schema(description = "采购明细数据JSON", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "采购明细数据JSON不能为空") + private List procureDetailJson; + + @Schema(description = "备注") + private String remarks; + + @Schema(description = "采购总金额") + private String totalMoney; + + @Schema(description = "采购总金额大写") + private String totalMoneyChinese; + + @Schema(description = "报销结果") + private Integer result; + + @Schema(description = "流程实例的编号", example = "15852") + private String processInstanceId; + + @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED) + private List fileItems; + +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/reimbursement/ProcureDetail.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/reimbursement/ProcureDetail.java new file mode 100644 index 00000000..42a82c96 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/reimbursement/ProcureDetail.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.reimbursement; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class ProcureDetail { + @Schema(description = "名称") + private String name; + @Schema(description = "规格") + private String sku; + @Schema(description = "数量") + private String quantity; + @Schema(description = "单位") + private String unit; + @Schema(description = "价格(单价)") + private String amount; +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/BpmOAProcureConvert.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/BpmOAProcureConvert.java new file mode 100644 index 00000000..4583ff20 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/BpmOAProcureConvert.java @@ -0,0 +1,25 @@ +package cn.iocoder.yudao.module.bpm.convert.oa; + +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure.BpmOAProcureRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure.BpmOAProcureSaveReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.reimbursement.BpmOAReimbursementRespVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAProcureDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAReimbursementDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 报销申请 Convert + * + * @author yj + */ +@Mapper +public interface BpmOAProcureConvert { + + BpmOAProcureConvert INSTANCE = Mappers.getMapper(BpmOAProcureConvert.class); + + BpmOAProcureDO convert(BpmOAProcureSaveReqVO bean); + + BpmOAProcureRespVO convert(BpmOAProcureDO bean); + +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAProcureDO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAProcureDO.java new file mode 100644 index 00000000..d777e357 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAProcureDO.java @@ -0,0 +1,83 @@ +package cn.iocoder.yudao.module.bpm.dal.dataobject.oa; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.reimbursement.ProcureDetail; +import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import lombok.*; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * OA 采购申请 DO + * + * @author 姚君 + */ +@TableName(value ="bpm_oa_procure", autoResultMap = true) +@KeySequence("bpm_oa_procure_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BpmOAProcureDO extends BaseDO { + + /** + * 报销表单主键 + */ + @TableId + private Long id; + /** + * 申请人的用户编号 + */ + private Long userId; + /** + * 申请事由 + */ + private String reason; + /** + * 采购类型 (根据字典的来) + */ + private Integer procureType; + /** + * 期望交付日期 + */ + private LocalDateTime expectedDeliveryDate; + /** + * 采购明细数据JSON + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List procureDetailJson; + /** + * 备注 + */ + private String remarks; + /** + * 采购总金额 + */ + private String totalMoney; + /** + * 采购总金额大写 + */ + private String totalMoneyChinese; + /** + * 附件信息 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List fileItems; + /** + * 采购结果 + */ + private Integer result; + /** + * 流程实例的编号 + */ + private String processInstanceId; + +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAReimbursementDO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAReimbursementDO.java index 273b2ab1..5e3b5700 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAReimbursementDO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAReimbursementDO.java @@ -79,6 +79,6 @@ public class BpmOAReimbursementDO extends BaseDO { * 附件基本信息 */ @TableField(typeHandler = JacksonTypeHandler.class) - private List fileItems ; + private List fileItems; } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOaProcureMapper.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOaProcureMapper.java new file mode 100644 index 00000000..477c2282 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOaProcureMapper.java @@ -0,0 +1,33 @@ +package cn.iocoder.yudao.module.bpm.dal.mysql.oa; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure.BpmOAProcurePageReqVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAProcureDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * OA 采购申请 Mapper + * + * @author 姚君 + */ +@Mapper +public interface BpmOaProcureMapper extends BaseMapperX { + + default PageResult selectPage(BpmOAProcurePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(BpmOAProcureDO::getUserId, reqVO.getUserId()) + .eqIfPresent(BpmOAProcureDO::getReason, reqVO.getReason()) + .eqIfPresent(BpmOAProcureDO::getProcureType, reqVO.getProcureType()) + .betweenIfPresent(BpmOAProcureDO::getExpectedDeliveryDate, reqVO.getExpectedDeliveryDate()) + .eqIfPresent(BpmOAProcureDO::getProcureDetailJson, reqVO.getProcureDetailJson()) + .eqIfPresent(BpmOAProcureDO::getRemarks, reqVO.getRemarks()) + .eqIfPresent(BpmOAProcureDO::getFileItems, reqVO.getFileItems()) + .eqIfPresent(BpmOAProcureDO::getResult, reqVO.getResult()) + .eqIfPresent(BpmOAProcureDO::getProcessInstanceId, reqVO.getProcessInstanceId()) + .betweenIfPresent(BpmOAProcureDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(BpmOAProcureDO::getId)); + } + +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOaProcureService.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOaProcureService.java new file mode 100644 index 00000000..7df9a574 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOaProcureService.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.bpm.service.oa; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure.BpmOAProcurePageReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure.BpmOAProcureSaveReqVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAProcureDO; + +import javax.validation.Valid; + +/** + * OA 采购申请 Service 接口 + * + * @author 姚君 + */ +public interface BpmOaProcureService { + + /** + * 创建OA 采购申请 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createOaProcure(@Valid BpmOAProcureSaveReqVO createReqVO); + + /** + * 更新OA 采购申请 + * + * @param updateReqVO 更新信息 + */ + void updateOaProcure(@Valid BpmOAProcureSaveReqVO updateReqVO); + + /** + * 删除OA 采购申请 + * + * @param id 编号 + */ + void deleteOaProcure(Long id); + + /** + * 获得OA 采购申请 + * + * @param id 编号 + * @return OA 采购申请 + */ + BpmOAProcureDO getOaProcure(Long id); + + /** + * 获得OA 采购申请分页 + * + * @param pageReqVO 分页查询 + * @return OA 采购申请分页 + */ + PageResult getOaProcurePage(BpmOAProcurePageReqVO pageReqVO); + +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOaProcureServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOaProcureServiceImpl.java new file mode 100644 index 00000000..5ad5db4b --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOaProcureServiceImpl.java @@ -0,0 +1,102 @@ +package cn.iocoder.yudao.module.bpm.service.oa; + +import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils; +import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi; +import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure.BpmOAProcurePageReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure.BpmOAProcureSaveReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile; +import cn.iocoder.yudao.module.bpm.convert.oa.BpmOAProcureConvert; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAProcureDO; +import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOaProcureMapper; +import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; + +/** + * OA 采购申请 Service 实现类 + * + * @author 姚君 + */ +@Service +@Validated +public class BpmOaProcureServiceImpl extends BpmOABaseService implements BpmOaProcureService { + + @Resource + private BpmOaProcureMapper bpmOaProcureMapper; + @Resource + private BpmProcessInstanceApi processInstanceApi; + /** + * OA 请假对应的流程定义 KEY + */ + public static final String PROCESS_KEY = "oa_procure"; + @Override + public Long createOaProcure(BpmOAProcureSaveReqVO createReqVO) { + Long userId = WebFrameworkUtils.getLoginUserId(); + // 插入 + BpmOAProcureDO oaProcure = BpmOAProcureConvert.INSTANCE.convert(createReqVO).setUserId(userId) + .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); + bpmOaProcureMapper.insert(oaProcure); + + // 发起 BPM 流程 + Map processInstanceVariables = new HashMap<>(); + String processInstanceId = processInstanceApi.createProcessInstance(userId, + new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY) + .setVariables(processInstanceVariables).setBusinessKey(String.valueOf(oaProcure.getId()))).getCheckedData(); + + // 将工作流的编号,更新到 OA 采购单中 + bpmOaProcureMapper.updateById(new BpmOAProcureDO().setId(oaProcure.getId()).setProcessInstanceId(processInstanceId)); + + List fileItems = createReqVO.getFileItems() ; + //这里的逻辑,如果fileItems不为空,且有数据,那么说明是上传了附件的,则需要更工作流文件表对应的实例Id + if (fileItems != null && !fileItems.isEmpty()) { + uploadBpmFileProcessInstanceId(processInstanceId,fileItems) ; + } + return oaProcure.getId(); + } + + @Override + public void updateOaProcure(BpmOAProcureSaveReqVO updateReqVO) { + // 校验存在 + validateOaProcureExists(updateReqVO.getId()); + // 更新 + BpmOAProcureDO updateObj = BeanUtils.toBean(updateReqVO, BpmOAProcureDO.class); + bpmOaProcureMapper.updateById(updateObj); + } + + @Override + public void deleteOaProcure(Long id) { + // 校验存在 + validateOaProcureExists(id); + // 删除 + bpmOaProcureMapper.deleteById(id); + } + + private void validateOaProcureExists(Long id) { + if (bpmOaProcureMapper.selectById(id) == null) { + throw exception(GlobalErrorCodeConstants.OA_PROCURE_NOT_EXISTS); + } + } + + @Override + public BpmOAProcureDO getOaProcure(Long id) { + return bpmOaProcureMapper.selectById(id); + } + + @Override + public PageResult getOaProcurePage(BpmOAProcurePageReqVO pageReqVO) { + return bpmOaProcureMapper.selectPage(pageReqVO); + } + +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOaProcureMapper.xml b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOaProcureMapper.xml new file mode 100644 index 00000000..2bdaff7c --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOaProcureMapper.xml @@ -0,0 +1,12 @@ + + + + + + + From af65b8e8036f9d4cfaaa9d4ae0fd0a174d6835d4 Mon Sep 17 00:00:00 2001 From: furongxin <419481438@qq.com> Date: Tue, 5 Mar 2024 13:57:30 +0800 Subject: [PATCH 2/3] =?UTF-8?q?OA=E6=B5=81=E7=A8=8B=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/bpm/enums/ErrorCodeConstants.java | 3 + .../admin/oa/BpmOACashController.java | 2 +- .../admin/oa/BpmOAContractController.java | 2 +- .../admin/oa/BpmOAEvectionController.java | 2 +- .../admin/oa/BpmOAOvertimeController.java | 52 +++++++++ .../admin/oa/BpmOARegularController.java | 52 +++++++++ .../admin/oa/BpmOASealController.java | 2 +- .../admin/oa/BpmOAShiftjobsController.java | 52 +++++++++ .../vo/overtime/BpmOAOvertimeCreateReqVO.java | 48 ++++++++ .../oa/vo/overtime/BpmOAOvertimeRespVO.java | 47 ++++++++ .../vo/regular/BpmOARegularCreateReqVO.java | 45 ++++++++ .../oa/vo/regular/BpmOARegularRespVO.java | 44 +++++++ .../shiftjobs/BpmOAShiftjobsCreateReqVO.java | 53 +++++++++ .../oa/vo/shiftjobs/BpmOAShiftjobsRespVO.java | 52 +++++++++ .../bpm/convert/oa/BpmOAOvertimeConvert.java | 22 ++++ .../bpm/convert/oa/BpmOARegularConvert.java | 22 ++++ .../bpm/convert/oa/BpmOAShiftjobsConvert.java | 22 ++++ .../dal/dataobject/oa/BpmOAOvertimeDO.java | 85 ++++++++++++++ .../bpm/dal/dataobject/oa/BpmOARegularDO.java | 84 ++++++++++++++ .../dal/dataobject/oa/BpmOAShiftjobsDO.java | 107 ++++++++++++++++++ .../bpm/dal/mysql/oa/BpmOAOvertimeMapper.java | 15 +++ .../bpm/dal/mysql/oa/BpmOARegularMapper.java | 15 +++ .../dal/mysql/oa/BpmOAShiftjobsMapper.java | 15 +++ .../bpm/service/oa/BpmOACashServiceImpl.java | 4 +- .../bpm/service/oa/BpmOAOvertimeService.java | 40 +++++++ .../service/oa/BpmOAOvertimeServiceImpl.java | 86 ++++++++++++++ .../bpm/service/oa/BpmOARegularService.java | 40 +++++++ .../service/oa/BpmOARegularServiceImpl.java | 86 ++++++++++++++ .../bpm/service/oa/BpmOASealService.java | 6 + .../bpm/service/oa/BpmOASealServiceImpl.java | 6 +- .../bpm/service/oa/BpmOAShiftjobsService.java | 40 +++++++ .../service/oa/BpmOAShiftjobsServiceImpl.java | 86 ++++++++++++++ .../oa/listener/BpmOACashResultListener.java | 2 + .../listener/BpmOAContractResultListener.java | 2 + .../listener/BpmOAEvectionResultListener.java | 2 + .../listener/BpmOAOvertimeResultListener.java | 31 +++++ .../oa/listener/BpmOASealResultListener.java | 2 + .../BpmOAShiftjobsResultListener.java | 32 ++++++ 38 files changed, 1299 insertions(+), 9 deletions(-) create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAOvertimeController.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOARegularController.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAShiftjobsController.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/overtime/BpmOAOvertimeCreateReqVO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/overtime/BpmOAOvertimeRespVO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/regular/BpmOARegularCreateReqVO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/regular/BpmOARegularRespVO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/shiftjobs/BpmOAShiftjobsCreateReqVO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/shiftjobs/BpmOAShiftjobsRespVO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/BpmOAOvertimeConvert.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/BpmOARegularConvert.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/BpmOAShiftjobsConvert.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAOvertimeDO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOARegularDO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAShiftjobsDO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAOvertimeMapper.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOARegularMapper.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAShiftjobsMapper.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAOvertimeService.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAOvertimeServiceImpl.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOARegularService.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOARegularServiceImpl.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAShiftjobsService.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAShiftjobsServiceImpl.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAOvertimeResultListener.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAShiftjobsResultListener.java diff --git a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java index e588beae..d50d14c3 100644 --- a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java +++ b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java @@ -25,6 +25,9 @@ public interface ErrorCodeConstants { ErrorCode OA_EVECTION_NOT_EXISTS = new ErrorCode(1_009_001_101, "出差申请不存在"); ErrorCode OA_SEAL_NOT_EXISTS = new ErrorCode(1_009_001_102, "用章申请不存在"); ErrorCode OA_CONTRACT_NOT_EXISTS = new ErrorCode(1_009_001_103, "合同审批不存在"); + ErrorCode OA_CASH_NOT_EXISTS = new ErrorCode(1_009_001_104, "现金支出申请不存在"); + ErrorCode OA_OVERTIME_NOT_EXISTS = new ErrorCode(1_009_001_105, "加班申请不存在"); + ErrorCode OA_REGULAR_NOT_EXISTS = new ErrorCode(1_009_001_106, "转正申请不存在"); // ========== 流程模型 1-009-002-000 ========== ErrorCode MODEL_KEY_EXISTS = new ErrorCode(1_009_002_000, "已经存在流程标识为【{}】的流程"); diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOACashController.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOACashController.java index 81ecf159..b0b6191c 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOACashController.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOACashController.java @@ -41,7 +41,7 @@ public class BpmOACashController { } @GetMapping("/get") - @Operation(summary = "获得请假申请") + @Operation(summary = "获得现金支出申请") @Parameter(name = "id", description = "编号", required = true, example = "1024") public CommonResult getCash(@RequestParam("id") Long id) { diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAContractController.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAContractController.java index 444e71c9..b750e198 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAContractController.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAContractController.java @@ -41,7 +41,7 @@ public class BpmOAContractController { } @GetMapping("/get") - @Operation(summary = "获得请假申请") + @Operation(summary = "获得合同审批") @Parameter(name = "id", description = "编号", required = true, example = "1024") public CommonResult getContract(@RequestParam("id") Long id) { diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAEvectionController.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAEvectionController.java index b2c3ed23..041d4183 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAEvectionController.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAEvectionController.java @@ -41,7 +41,7 @@ public class BpmOAEvectionController { } @GetMapping("/get") - @Operation(summary = "获得请假申请") + @Operation(summary = "获得出差申请") @Parameter(name = "id", description = "编号", required = true, example = "1024") public CommonResult getEvection(@RequestParam("id") Long id) { diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAOvertimeController.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAOvertimeController.java new file mode 100644 index 00000000..b665200d --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAOvertimeController.java @@ -0,0 +1,52 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.overtime.BpmOAOvertimeCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.overtime.BpmOAOvertimeRespVO; +import cn.iocoder.yudao.module.bpm.convert.oa.BpmOAOvertimeConvert; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAOvertimeDO; +import cn.iocoder.yudao.module.bpm.service.oa.BpmOAOvertimeService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; + +/** + * OA 加班申请 Controller + * + * @author 符溶馨 + + */ +@Tag(name = "管理后台 - OA 加班申请") +@RestController +@RequestMapping("/bpm/oa/overtime") +@Validated +public class BpmOAOvertimeController { + + @Resource + private BpmOAOvertimeService overtimeService; + + @PostMapping("/create") + @Operation(summary = "创建请求申请") + public CommonResult createOvertime(@Valid @RequestBody BpmOAOvertimeCreateReqVO createReqVO) { + + return success(overtimeService.createOvertime(getLoginUserId(), createReqVO)); + } + + @GetMapping("/get") + @Operation(summary = "获得加班申请") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + public CommonResult getOvertime(@RequestParam("id") Long id) { + + BpmOAOvertimeDO overtime = overtimeService.getOvertime(id); + + return success(BpmOAOvertimeConvert.INSTANCE.convert(overtime)); + } +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOARegularController.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOARegularController.java new file mode 100644 index 00000000..dee3c5e8 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOARegularController.java @@ -0,0 +1,52 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.regular.BpmOARegularCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.regular.BpmOARegularRespVO; +import cn.iocoder.yudao.module.bpm.convert.oa.BpmOARegularConvert; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOARegularDO; +import cn.iocoder.yudao.module.bpm.service.oa.BpmOARegularService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; + +/** + * OA 转正申请 Controller + * + * @author 符溶馨 + + */ +@Tag(name = "管理后台 - OA 转正申请") +@RestController +@RequestMapping("/bpm/oa/regular") +@Validated +public class BpmOARegularController { + + @Resource + private BpmOARegularService regularService; + + @PostMapping("/create") + @Operation(summary = "创建请求申请") + public CommonResult createRegular(@Valid @RequestBody BpmOARegularCreateReqVO createReqVO) { + + return success(regularService.createRegular(getLoginUserId(), createReqVO)); + } + + @GetMapping("/get") + @Operation(summary = "获得转正申请") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + public CommonResult getRegular(@RequestParam("id") Long id) { + + BpmOARegularDO regular = regularService.getRegular(id); + + return success(BpmOARegularConvert.INSTANCE.convert(regular)); + } +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOASealController.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOASealController.java index 5d036ddf..ab1b827e 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOASealController.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOASealController.java @@ -41,7 +41,7 @@ public class BpmOASealController { } @GetMapping("/get") - @Operation(summary = "获得请假申请") + @Operation(summary = "获得用章申请") @Parameter(name = "id", description = "编号", required = true, example = "1024") public CommonResult getSeal(@RequestParam("id") Long id) { diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAShiftjobsController.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAShiftjobsController.java new file mode 100644 index 00000000..42c17a97 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAShiftjobsController.java @@ -0,0 +1,52 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.shiftjobs.BpmOAShiftjobsCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.shiftjobs.BpmOAShiftjobsRespVO; +import cn.iocoder.yudao.module.bpm.convert.oa.BpmOAShiftjobsConvert; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAShiftjobsDO; +import cn.iocoder.yudao.module.bpm.service.oa.BpmOAShiftjobsService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; + +/** + * OA 调岗申请 Controller + * + * @author 符溶馨 + + */ +@Tag(name = "管理后台 - OA 调岗申请") +@RestController +@RequestMapping("/bpm/oa/shiftjobs") +@Validated +public class BpmOAShiftjobsController { + + @Resource + private BpmOAShiftjobsService shiftjobsService; + + @PostMapping("/create") + @Operation(summary = "创建请求申请") + public CommonResult createShiftjobs(@Valid @RequestBody BpmOAShiftjobsCreateReqVO createReqVO) { + + return success(shiftjobsService.createShiftjobs(getLoginUserId(), createReqVO)); + } + + @GetMapping("/get") + @Operation(summary = "获得用章申请") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + public CommonResult getShiftjobs(@RequestParam("id") Long id) { + + BpmOAShiftjobsDO shiftjobs = shiftjobsService.getShiftjobs(id); + + return success(BpmOAShiftjobsConvert.INSTANCE.convert(shiftjobs)); + } +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/overtime/BpmOAOvertimeCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/overtime/BpmOAOvertimeCreateReqVO.java new file mode 100644 index 00000000..ec65ecfe --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/overtime/BpmOAOvertimeCreateReqVO.java @@ -0,0 +1,48 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.overtime; + +import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +/** + * 加班申请 创建 Request VO + * + * @author 符溶馨 + */ +@Schema(description = "管理后台 - 加班申请创建 Request VO") +@Data +@EqualsAndHashCode() +@ToString(callSuper = true) +public class BpmOAOvertimeCreateReqVO { + + @Schema(description = "加班原因", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "加班事由不能为空") + private String reason; + + @Schema(description = "加班的开始时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "开始时间不能为空") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime startTime; + + @Schema(description = "加班的结束时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "结束时间不能为空") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime endTime; + + @Schema(description = "加班时长", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "加班时长不能为空") + private BigDecimal timeLength; + + @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED) + private List fileItems; +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/overtime/BpmOAOvertimeRespVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/overtime/BpmOAOvertimeRespVO.java new file mode 100644 index 00000000..b24c21dc --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/overtime/BpmOAOvertimeRespVO.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.overtime; + +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOABaseRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +/** + * @author 符溶馨 + */ +@Schema(description = "管理后台 - 加班申请 请求Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class BpmOAOvertimeRespVO extends BpmOABaseRespVO { + + @Schema(description = "加班原因", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "加班事由不能为空") + private String reason; + + @Schema(description = "加班的开始时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "开始时间不能为空") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime startTime; + + @Schema(description = "加班的结束时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "结束时间不能为空") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime endTime; + + @Schema(description = "加班时长", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "加班时长不能为空") + private BigDecimal timeLength; + + @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED) + private List fileItems; +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/regular/BpmOARegularCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/regular/BpmOARegularCreateReqVO.java new file mode 100644 index 00000000..37d14ec7 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/regular/BpmOARegularCreateReqVO.java @@ -0,0 +1,45 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.regular; + +import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import java.time.LocalDate; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; + +/** + * 转正申请 创建 Request VO + * + * @author 符溶馨 + */ +@Schema(description = "管理后台 - 转正申请创建 Request VO") +@Data +@EqualsAndHashCode() +@ToString(callSuper = true) +public class BpmOARegularCreateReqVO { + + @Schema(description = "部门编号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "部门不能为空") + private Long deptId; + + @Schema(description = "入职时间", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) + private LocalDate entryDate; + + @Schema(description = "转正时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "转正时间不能为空") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) + private LocalDate confirmationDate; + + @Schema(description = "备注", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + private String notes; + + @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED) + private List fileItems; +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/regular/BpmOARegularRespVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/regular/BpmOARegularRespVO.java new file mode 100644 index 00000000..c293e591 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/regular/BpmOARegularRespVO.java @@ -0,0 +1,44 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.regular; + +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOABaseRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import java.time.LocalDate; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; + +/** + * @author 符溶馨 + */ +@Schema(description = "管理后台 - 转正申请 请求Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class BpmOARegularRespVO extends BpmOABaseRespVO { + + @Schema(description = "部门编号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "部门不能为空") + private Long deptId; + + @Schema(description = "入职时间", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) + private LocalDate entryDate; + + @Schema(description = "转正时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "转正时间不能为空") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) + private LocalDate confirmationDate; + + @Schema(description = "备注", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + private String notes; + + @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED) + private List fileItems; +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/shiftjobs/BpmOAShiftjobsCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/shiftjobs/BpmOAShiftjobsCreateReqVO.java new file mode 100644 index 00000000..1986c80a --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/shiftjobs/BpmOAShiftjobsCreateReqVO.java @@ -0,0 +1,53 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.shiftjobs; + +import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import javax.validation.constraints.NotNull; +import java.util.List; +import java.util.Set; + +/** + * 调岗申请 创建 Request VO + * + * @author 符溶馨 + */ +@Schema(description = "管理后台 - 调岗申请创建 Request VO") +@Data +@EqualsAndHashCode() +@ToString(callSuper = true) +public class BpmOAShiftjobsCreateReqVO { + + @Schema(description = "调岗类型-参见 bpm_oa_shiftjobs_type 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "调岗类型不能为空") + private Integer type; + + @Schema(description = "原部门编号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "原部门不能为空") + private Long oldDpetId; + + @Schema(description = "原上级领导编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + private Long oldParentId; + + @Schema(description = "原岗位编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + private Set oldPostId; + + @Schema(description = "新部门编号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "新部门不能为空") + private Long newDpetId; + + @Schema(description = "新上级领导编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + private Long newParentId; + + @Schema(description = "新岗位编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + private Set newPostId; + + @Schema(description = "备注", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + private String notes; + + @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED) + private List fileItems; +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/shiftjobs/BpmOAShiftjobsRespVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/shiftjobs/BpmOAShiftjobsRespVO.java new file mode 100644 index 00000000..c0ccb9cb --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/shiftjobs/BpmOAShiftjobsRespVO.java @@ -0,0 +1,52 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.shiftjobs; + +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOABaseRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import javax.validation.constraints.NotNull; +import java.util.List; +import java.util.Set; + +/** + * @author 符溶馨 + */ +@Schema(description = "管理后台 - 调岗申请 请求Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class BpmOAShiftjobsRespVO extends BpmOABaseRespVO { + + @Schema(description = "调岗类型-参见 bpm_oa_shiftjobs_type 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "调岗类型不能为空") + private Integer type; + + @Schema(description = "原部门编号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "原部门不能为空") + private Long oldDpetId; + + @Schema(description = "原上级领导编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + private Long oldParentId; + + @Schema(description = "原岗位编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + private Set oldPostId; + + @Schema(description = "新部门编号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "新部门不能为空") + private Long newDpetId; + + @Schema(description = "新上级领导编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + private Long newParentId; + + @Schema(description = "新岗位编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + private Set newPostId; + + @Schema(description = "备注", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + private String notes; + + @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED) + private List fileItems; +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/BpmOAOvertimeConvert.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/BpmOAOvertimeConvert.java new file mode 100644 index 00000000..d1f2a312 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/BpmOAOvertimeConvert.java @@ -0,0 +1,22 @@ +package cn.iocoder.yudao.module.bpm.convert.oa; + +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.overtime.BpmOAOvertimeCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.overtime.BpmOAOvertimeRespVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAOvertimeDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 加班申请 Convert + * + * @author 符溶馨 + */ +@Mapper +public interface BpmOAOvertimeConvert { + + BpmOAOvertimeConvert INSTANCE = Mappers.getMapper(BpmOAOvertimeConvert.class); + + BpmOAOvertimeDO convert(BpmOAOvertimeCreateReqVO bean); + + BpmOAOvertimeRespVO convert(BpmOAOvertimeDO bean); +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/BpmOARegularConvert.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/BpmOARegularConvert.java new file mode 100644 index 00000000..3a71eb41 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/BpmOARegularConvert.java @@ -0,0 +1,22 @@ +package cn.iocoder.yudao.module.bpm.convert.oa; + +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.regular.BpmOARegularCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.regular.BpmOARegularRespVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOARegularDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 转正申请 Convert + * + * @author 符溶馨 + */ +@Mapper +public interface BpmOARegularConvert { + + BpmOARegularConvert INSTANCE = Mappers.getMapper(BpmOARegularConvert.class); + + BpmOARegularDO convert(BpmOARegularCreateReqVO bean); + + BpmOARegularRespVO convert(BpmOARegularDO bean); +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/BpmOAShiftjobsConvert.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/BpmOAShiftjobsConvert.java new file mode 100644 index 00000000..ede8b827 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/BpmOAShiftjobsConvert.java @@ -0,0 +1,22 @@ +package cn.iocoder.yudao.module.bpm.convert.oa; + +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.shiftjobs.BpmOAShiftjobsCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.shiftjobs.BpmOAShiftjobsRespVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAShiftjobsDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 调岗申请 Convert + * + * @author 符溶馨 + */ +@Mapper +public interface BpmOAShiftjobsConvert { + + BpmOAShiftjobsConvert INSTANCE = Mappers.getMapper(BpmOAShiftjobsConvert.class); + + BpmOAShiftjobsDO convert(BpmOAShiftjobsCreateReqVO bean); + + BpmOAShiftjobsRespVO convert(BpmOAShiftjobsDO bean); +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAOvertimeDO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAOvertimeDO.java new file mode 100644 index 00000000..48d7f6bf --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAOvertimeDO.java @@ -0,0 +1,85 @@ +package cn.iocoder.yudao.module.bpm.dal.dataobject.oa; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile; +import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import lombok.*; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +/** + * OA 加班申请 DO + * + * + * @author 符溶馨 + + */ +@TableName(value ="bpm_oa_overtime", autoResultMap = true) +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BpmOAOvertimeDO extends BaseDO { + + /** + * 出差表单主键 + */ + @TableId + private Long id; + + /** + * 申请人的用户编号 + * + * 关联 AdminUserDO 的 id 属性 + */ + private Long userId; + + /** + * 加班事由 + */ + private String reason; + + /** + * 开始时间 + */ + private LocalDateTime startTime; + + /** + * 结束时间 + */ + private LocalDateTime endTime; + + /** + * 加班时长 + */ + private BigDecimal timeLength; + + /** + * 出差的结果 + * + * 枚举 {@link BpmProcessInstanceResultEnum} + * 考虑到简单,所以直接复用了 BpmProcessInstanceResultEnum 枚举,也可以自己定义一个枚举哈 + */ + private Integer result; + + /** + * 对应的流程编号 + * + * 关联 ProcessInstance 的 id 属性 + */ + private String processInstanceId; + + /** + * 附件基本信息 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List fileItems ; +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOARegularDO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOARegularDO.java new file mode 100644 index 00000000..7fc7d94c --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOARegularDO.java @@ -0,0 +1,84 @@ +package cn.iocoder.yudao.module.bpm.dal.dataobject.oa; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile; +import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import lombok.*; + +import java.time.LocalDate; +import java.util.List; + +/** + * OA 转正申请 DO + * + * + * @author 符溶馨 + + */ +@TableName(value ="bpm_oa_regular", autoResultMap = true) +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BpmOARegularDO extends BaseDO { + + /** + * 出差表单主键 + */ + @TableId + private Long id; + + /** + * 申请人的用户编号 + * + * 关联 AdminUserDO 的 id 属性 + */ + private Long userId; + + /** + * 申请人的部门编号 + */ + private Long deptId; + + /** + * 入职时间 + */ + private LocalDate entryDate; + + /** + * 转正时间 + */ + private LocalDate confirmationDate; + + /** + * 备注 + */ + private String notes; + + /** + * 出差的结果 + * + * 枚举 {@link BpmProcessInstanceResultEnum} + * 考虑到简单,所以直接复用了 BpmProcessInstanceResultEnum 枚举,也可以自己定义一个枚举哈 + */ + private Integer result; + + /** + * 对应的流程编号 + * + * 关联 ProcessInstance 的 id 属性 + */ + private String processInstanceId; + + /** + * 附件基本信息 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List fileItems ; +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAShiftjobsDO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAShiftjobsDO.java new file mode 100644 index 00000000..791fc042 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAShiftjobsDO.java @@ -0,0 +1,107 @@ +package cn.iocoder.yudao.module.bpm.dal.dataobject.oa; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.yudao.framework.mybatis.core.type.JsonLongSetTypeHandler; +import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile; +import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import lombok.*; + +import java.util.List; +import java.util.Set; + +/** + * OA 调岗申请 DO + * + * + * @author 符溶馨 + + */ +@TableName(value ="bpm_oa_shiftjobs", autoResultMap = true) +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BpmOAShiftjobsDO extends BaseDO { + + /** + * 调岗表单主键 + */ + @TableId + private Long id; + + /** + * 申请人的用户编号 + * + * 关联 AdminUserDO 的 id 属性 + */ + private Long userId; + + /** + * 调岗类型 + */ + private String type; + + /** + * 原部门编号 + */ + private Long oldDeptId; + + /** + * 原上级领导编号 + */ + private Long oldParentId; + + /** + * 原岗位编号 + */ + @TableField(typeHandler = JsonLongSetTypeHandler.class) + private Set oldPostId; + + /** + * 新部门编号 + */ + private Long newDeptId; + + /** + * 新上级领导编号 + */ + private Long newParentId; + + /** + * 新岗位编号 + */ + @TableField(typeHandler = JsonLongSetTypeHandler.class) + private Set newPostId; + + /** + * 备注 + */ + private String notes; + + /** + * 用章的结果 + * + * 枚举 {@link BpmProcessInstanceResultEnum} + * 考虑到简单,所以直接复用了 BpmProcessInstanceResultEnum 枚举,也可以自己定义一个枚举哈 + */ + private Integer result; + + /** + * 对应的流程编号 + * + * 关联 ProcessInstance 的 id 属性 + */ + private String processInstanceId; + + /** + * 附件基本信息 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List fileItems ; +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAOvertimeMapper.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAOvertimeMapper.java new file mode 100644 index 00000000..6ee47908 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAOvertimeMapper.java @@ -0,0 +1,15 @@ +package cn.iocoder.yudao.module.bpm.dal.mysql.oa; + +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAOvertimeDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 加班申请 Mapper + * + * @author 符溶馨 + + */ +@Mapper +public interface BpmOAOvertimeMapper extends BaseMapperX { +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOARegularMapper.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOARegularMapper.java new file mode 100644 index 00000000..1facc4f2 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOARegularMapper.java @@ -0,0 +1,15 @@ +package cn.iocoder.yudao.module.bpm.dal.mysql.oa; + +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOARegularDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 转正申请 Mapper + * + * @author 符溶馨 + + */ +@Mapper +public interface BpmOARegularMapper extends BaseMapperX { +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAShiftjobsMapper.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAShiftjobsMapper.java new file mode 100644 index 00000000..a937bfbc --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAShiftjobsMapper.java @@ -0,0 +1,15 @@ +package cn.iocoder.yudao.module.bpm.dal.mysql.oa; + +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAShiftjobsDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 调岗申请 Mapper + * + * @author 符溶馨 + + */ +@Mapper +public interface BpmOAShiftjobsMapper extends BaseMapperX { +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOACashServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOACashServiceImpl.java index f9182e1d..4a4c17de 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOACashServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOACashServiceImpl.java @@ -17,7 +17,7 @@ import java.util.List; import java.util.Map; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_CONTRACT_NOT_EXISTS; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_CASH_NOT_EXISTS; /** * OA 现金支出 Service 实现类 @@ -74,7 +74,7 @@ public class BpmOACashServiceImpl extends BpmOABaseService implements BpmOACashS private void validateLeaveExists(Long id) { if (cashMapper.selectById(id) == null) { - throw exception(OA_CONTRACT_NOT_EXISTS); + throw exception(OA_CASH_NOT_EXISTS); } } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAOvertimeService.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAOvertimeService.java new file mode 100644 index 00000000..2f23dc2a --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAOvertimeService.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.bpm.service.oa; + +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.overtime.BpmOAOvertimeCreateReqVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAOvertimeDO; + +import javax.validation.Valid; + +/** + * 加班申请 Service 接口 + * + * @author 符溶馨 + + */ +public interface BpmOAOvertimeService { + + /** + * 创建加班申请 + * + * @param userId 用户编号 + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createOvertime(Long userId, @Valid BpmOAOvertimeCreateReqVO createReqVO); + + /** + * 更新加班申请的状态 + * + * @param id 编号 + * @param result 结果 + */ + void updateOvertimeResult(Long id, Integer result); + + /** + * 获得加班申请 + * + * @param id 编号 + * @return 加班申请 + */ + BpmOAOvertimeDO getOvertime(Long id); +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAOvertimeServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAOvertimeServiceImpl.java new file mode 100644 index 00000000..c8b41217 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAOvertimeServiceImpl.java @@ -0,0 +1,86 @@ +package cn.iocoder.yudao.module.bpm.service.oa; + +import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi; +import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.overtime.BpmOAOvertimeCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile; +import cn.iocoder.yudao.module.bpm.convert.oa.BpmOAOvertimeConvert; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAOvertimeDO; +import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAOvertimeMapper; +import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_OVERTIME_NOT_EXISTS; + +/** + * OA 加班申请 Service 实现类 + * + * @author 符溶馨 + + */ +@Service +@Validated +public class BpmOAOvertimeServiceImpl extends BpmOABaseService implements BpmOAOvertimeService{ + + /** + * OA 加班对应的流程定义 KEY + */ + public static final String PROCESS_KEY = "oa_overtime"; + + @Resource + private BpmOAOvertimeMapper overtimeMapper; + + @Resource + private BpmProcessInstanceApi processInstanceApi; + + @Override + public Long createOvertime(Long userId, BpmOAOvertimeCreateReqVO createReqVO) { + + //插入OA 转正申请 + BpmOAOvertimeDO overtime = BpmOAOvertimeConvert.INSTANCE.convert(createReqVO).setUserId(userId) + .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); + overtimeMapper.insert(overtime) ; + + // 发起 BPM 流程 + Map processInstanceVariables = new HashMap<>(); + String processInstanceId = processInstanceApi.createProcessInstance(userId, + new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY) + .setVariables(processInstanceVariables).setBusinessKey(String.valueOf(overtime.getId()))).getCheckedData(); + + // 将工作流的编号,更新到 OA 加班单中 + overtimeMapper.updateById(new BpmOAOvertimeDO().setId(overtime.getId()).setProcessInstanceId(processInstanceId)); + + List fileItems = createReqVO.getFileItems() ; + //这里的逻辑,如果fileItems不为空,且有数据,那么说明是上传了附件的,则需要更工作流文件表对应的实例Id + if (fileItems != null && !fileItems.isEmpty()) { + uploadBpmFileProcessInstanceId(processInstanceId,fileItems) ; + } + return overtime.getId(); + } + + @Override + public void updateOvertimeResult(Long id, Integer result) { + + validateLeaveExists(id); + overtimeMapper.updateById(new BpmOAOvertimeDO().setId(id).setResult(result)); + } + + private void validateLeaveExists(Long id) { + if (overtimeMapper.selectById(id) == null) { + throw exception(OA_OVERTIME_NOT_EXISTS); + } + } + + @Override + public BpmOAOvertimeDO getOvertime(Long id) { + + return overtimeMapper.selectById(id); + } +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOARegularService.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOARegularService.java new file mode 100644 index 00000000..907c292d --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOARegularService.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.bpm.service.oa; + +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.regular.BpmOARegularCreateReqVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOARegularDO; + +import javax.validation.Valid; + +/** + * 转正申请 Service 接口 + * + * @author 符溶馨 + + */ +public interface BpmOARegularService { + + /** + * 创建转正申请 + * + * @param userId 用户编号 + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createRegular(Long userId, @Valid BpmOARegularCreateReqVO createReqVO); + + /** + * 更新转正申请的状态 + * + * @param id 编号 + * @param result 结果 + */ + void updateRegularResult(Long id, Integer result); + + /** + * 获得转正申请 + * + * @param id 编号 + * @return 转正申请 + */ + BpmOARegularDO getRegular(Long id); +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOARegularServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOARegularServiceImpl.java new file mode 100644 index 00000000..8c082057 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOARegularServiceImpl.java @@ -0,0 +1,86 @@ +package cn.iocoder.yudao.module.bpm.service.oa; + +import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi; +import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.regular.BpmOARegularCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile; +import cn.iocoder.yudao.module.bpm.convert.oa.BpmOARegularConvert; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOARegularDO; +import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOARegularMapper; +import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_REGULAR_NOT_EXISTS; + +/** + * OA 转正申请 Service 实现类 + * + * @author 符溶馨 + + */ +@Service +@Validated +public class BpmOARegularServiceImpl extends BpmOABaseService implements BpmOARegularService{ + + /** + * OA 转正对应的流程定义 KEY + */ + public static final String PROCESS_KEY = "oa_regular"; + + @Resource + private BpmOARegularMapper regularMapper; + + @Resource + private BpmProcessInstanceApi processInstanceApi; + + @Override + public Long createRegular(Long userId, BpmOARegularCreateReqVO createReqVO) { + + //插入OA 转正申请 + BpmOARegularDO regular = BpmOARegularConvert.INSTANCE.convert(createReqVO).setUserId(userId) + .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); + regularMapper.insert(regular) ; + + // 发起 BPM 流程 + Map processInstanceVariables = new HashMap<>(); + String processInstanceId = processInstanceApi.createProcessInstance(userId, + new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY) + .setVariables(processInstanceVariables).setBusinessKey(String.valueOf(regular.getId()))).getCheckedData(); + + // 将工作流的编号,更新到 OA 转正单中 + regularMapper.updateById(new BpmOARegularDO().setId(regular.getId()).setProcessInstanceId(processInstanceId)); + + List fileItems = createReqVO.getFileItems() ; + //这里的逻辑,如果fileItems不为空,且有数据,那么说明是上传了附件的,则需要更工作流文件表对应的实例Id + if (fileItems != null && !fileItems.isEmpty()) { + uploadBpmFileProcessInstanceId(processInstanceId,fileItems) ; + } + return regular.getId(); + } + + @Override + public void updateRegularResult(Long id, Integer result) { + + validateLeaveExists(id); + regularMapper.updateById(new BpmOARegularDO().setId(id).setResult(result)); + } + + private void validateLeaveExists(Long id) { + if (regularMapper.selectById(id) == null) { + throw exception(OA_REGULAR_NOT_EXISTS); + } + } + + @Override + public BpmOARegularDO getRegular(Long id) { + + return regularMapper.selectById(id); + } +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASealService.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASealService.java index 5572d32a..91f39fc4 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASealService.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASealService.java @@ -5,6 +5,12 @@ import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOASealDO; import javax.validation.Valid; +/** + * 用章申请 Service 接口 + * + * @author 符溶馨 + + */ public interface BpmOASealService { /** diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASealServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASealServiceImpl.java index 9f4de420..25f3b254 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASealServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASealServiceImpl.java @@ -30,7 +30,7 @@ import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_SEAL_NOT_E public class BpmOASealServiceImpl extends BpmOABaseService implements BpmOASealService { /** - * OA 出差对应的流程定义 KEY + * OA 用章对应的流程定义 KEY */ public static final String PROCESS_KEY = "oa_seal"; @@ -43,7 +43,7 @@ public class BpmOASealServiceImpl extends BpmOABaseService implements BpmOASealS @Override public Long createSeal(Long userId, BpmOASealCreateReqVO createReqVO) { - //插入OA 出差申请 + //插入OA 用章申请 BpmOASealDO seal = BpmOASealConvert.INSTANCE.convert(createReqVO).setUserId(userId) .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); sealMapper.insert(seal) ; @@ -54,7 +54,7 @@ public class BpmOASealServiceImpl extends BpmOABaseService implements BpmOASealS new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY) .setVariables(processInstanceVariables).setBusinessKey(String.valueOf(seal.getId()))).getCheckedData(); - // 将工作流的编号,更新到 OA 请假单中 + // 将工作流的编号,更新到 OA 用章单中 sealMapper.updateById(new BpmOASealDO().setId(seal.getId()).setProcessInstanceId(processInstanceId)); List fileItems = createReqVO.getFileItems() ; diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAShiftjobsService.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAShiftjobsService.java new file mode 100644 index 00000000..c8655155 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAShiftjobsService.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.bpm.service.oa; + +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.shiftjobs.BpmOAShiftjobsCreateReqVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAShiftjobsDO; + +import javax.validation.Valid; + +/** + * 调岗申请 Service 接口 + * + * @author 符溶馨 + + */ +public interface BpmOAShiftjobsService { + + /** + * 创建调岗申请 + * + * @param userId 用户编号 + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createShiftjobs(Long userId, @Valid BpmOAShiftjobsCreateReqVO createReqVO); + + /** + * 更新调岗申请的状态 + * + * @param id 编号 + * @param result 结果 + */ + void updateShiftjobsResult(Long id, Integer result); + + /** + * 获得调岗申请 + * + * @param id 编号 + * @return 调岗申请 + */ + BpmOAShiftjobsDO getShiftjobs(Long id); +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAShiftjobsServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAShiftjobsServiceImpl.java new file mode 100644 index 00000000..00d40f5a --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAShiftjobsServiceImpl.java @@ -0,0 +1,86 @@ +package cn.iocoder.yudao.module.bpm.service.oa; + +import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi; +import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.shiftjobs.BpmOAShiftjobsCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile; +import cn.iocoder.yudao.module.bpm.convert.oa.BpmOAShiftjobsConvert; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAShiftjobsDO; +import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAShiftjobsMapper; +import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_SEAL_NOT_EXISTS; + +/** + * OA 调岗申请 Service 实现类 + * + * @author 符溶馨 + + */ +@Service +@Validated +public class BpmOAShiftjobsServiceImpl extends BpmOABaseService implements BpmOAShiftjobsService{ + + /** + * OA 调岗对应的流程定义 KEY + */ + public static final String PROCESS_KEY = "oa_shiftjobs"; + + @Resource + private BpmOAShiftjobsMapper shiftjobsMapper; + + @Resource + private BpmProcessInstanceApi processInstanceApi; + + @Override + public Long createShiftjobs(Long userId, BpmOAShiftjobsCreateReqVO createReqVO) { + + //插入OA 调岗申请 + BpmOAShiftjobsDO shiftjobs = BpmOAShiftjobsConvert.INSTANCE.convert(createReqVO).setUserId(userId) + .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); + shiftjobsMapper.insert(shiftjobs) ; + + // 发起 BPM 流程 + Map processInstanceVariables = new HashMap<>(); + String processInstanceId = processInstanceApi.createProcessInstance(userId, + new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY) + .setVariables(processInstanceVariables).setBusinessKey(String.valueOf(shiftjobs.getId()))).getCheckedData(); + + // 将工作流的编号,更新到 OA 调岗单中 + shiftjobsMapper.updateById(new BpmOAShiftjobsDO().setId(shiftjobs.getId()).setProcessInstanceId(processInstanceId)); + + List fileItems = createReqVO.getFileItems() ; + //这里的逻辑,如果fileItems不为空,且有数据,那么说明是上传了附件的,则需要更工作流文件表对应的实例Id + if (fileItems != null && !fileItems.isEmpty()) { + uploadBpmFileProcessInstanceId(processInstanceId,fileItems) ; + } + return shiftjobs.getId(); + } + + @Override + public void updateShiftjobsResult(Long id, Integer result) { + + validateLeaveExists(id); + shiftjobsMapper.updateById(new BpmOAShiftjobsDO().setId(id).setResult(result)); + } + + private void validateLeaveExists(Long id) { + if (shiftjobsMapper.selectById(id) == null) { + throw exception(OA_SEAL_NOT_EXISTS); + } + } + + @Override + public BpmOAShiftjobsDO getShiftjobs(Long id) { + + return shiftjobsMapper.selectById(id); + } +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOACashResultListener.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOACashResultListener.java index 82183be9..2b21bbd2 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOACashResultListener.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOACashResultListener.java @@ -4,6 +4,7 @@ import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceRe import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEventListener; import cn.iocoder.yudao.module.bpm.service.oa.BpmOACashService; import cn.iocoder.yudao.module.bpm.service.oa.BpmOACashServiceImpl; +import org.springframework.stereotype.Component; import javax.annotation.Resource; @@ -12,6 +13,7 @@ import javax.annotation.Resource; * * @author 符溶馨 */ +@Component public class BpmOACashResultListener extends BpmProcessInstanceResultEventListener { @Resource private BpmOACashService cashService; diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAContractResultListener.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAContractResultListener.java index 7c526210..f754b41b 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAContractResultListener.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAContractResultListener.java @@ -4,6 +4,7 @@ import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceRe import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEventListener; import cn.iocoder.yudao.module.bpm.service.oa.BpmOAContractService; import cn.iocoder.yudao.module.bpm.service.oa.BpmOAContractServiceImpl; +import org.springframework.stereotype.Component; import javax.annotation.Resource; @@ -12,6 +13,7 @@ import javax.annotation.Resource; * * @author 符溶馨 */ +@Component public class BpmOAContractResultListener extends BpmProcessInstanceResultEventListener { @Resource diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAEvectionResultListener.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAEvectionResultListener.java index 8b1d9bdc..c37c6f08 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAEvectionResultListener.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAEvectionResultListener.java @@ -4,6 +4,7 @@ import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceRe import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEventListener; import cn.iocoder.yudao.module.bpm.service.oa.BpmOAEvectionService; import cn.iocoder.yudao.module.bpm.service.oa.BpmOAEvectionServiceImpl; +import org.springframework.stereotype.Component; import javax.annotation.Resource; @@ -12,6 +13,7 @@ import javax.annotation.Resource; * * @author 符溶馨 */ +@Component public class BpmOAEvectionResultListener extends BpmProcessInstanceResultEventListener { @Resource diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAOvertimeResultListener.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAOvertimeResultListener.java new file mode 100644 index 00000000..fc1acf3f --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAOvertimeResultListener.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.bpm.service.oa.listener; + +import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEvent; +import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEventListener; +import cn.iocoder.yudao.module.bpm.service.oa.BpmOAOvertimeService; +import cn.iocoder.yudao.module.bpm.service.oa.BpmOAOvertimeServiceImpl; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * OA 加班单的结果的监听器实现类 + * + * @author 符溶馨 + */ +@Component +public class BpmOAOvertimeResultListener extends BpmProcessInstanceResultEventListener { + + @Resource + private BpmOAOvertimeService overtimeService; + + @Override + protected String getProcessDefinitionKey() { + return BpmOAOvertimeServiceImpl.PROCESS_KEY; + } + + @Override + protected void onEvent(BpmProcessInstanceResultEvent event) { + overtimeService.updateOvertimeResult(Long.parseLong(event.getBusinessKey()), event.getResult()); + } +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOASealResultListener.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOASealResultListener.java index aed64280..715b1c24 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOASealResultListener.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOASealResultListener.java @@ -4,6 +4,7 @@ import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceRe import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEventListener; import cn.iocoder.yudao.module.bpm.service.oa.BpmOASealService; import cn.iocoder.yudao.module.bpm.service.oa.BpmOASealServiceImpl; +import org.springframework.stereotype.Component; import javax.annotation.Resource; @@ -12,6 +13,7 @@ import javax.annotation.Resource; * * @author 符溶馨 */ +@Component public class BpmOASealResultListener extends BpmProcessInstanceResultEventListener { @Resource diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAShiftjobsResultListener.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAShiftjobsResultListener.java new file mode 100644 index 00000000..420b0ffa --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAShiftjobsResultListener.java @@ -0,0 +1,32 @@ +package cn.iocoder.yudao.module.bpm.service.oa.listener; + +import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEvent; +import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEventListener; +import cn.iocoder.yudao.module.bpm.service.oa.BpmOAShiftjobsService; +import cn.iocoder.yudao.module.bpm.service.oa.BpmOAShiftjobsServiceImpl; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * OA 调岗单的结果的监听器实现类 + * + * @author 符溶馨 + */ +@Component +public class BpmOAShiftjobsResultListener extends BpmProcessInstanceResultEventListener { + + @Resource + private BpmOAShiftjobsService shiftjobsService; + + @Override + protected String getProcessDefinitionKey() { + + return BpmOAShiftjobsServiceImpl.PROCESS_KEY; + } + + @Override + protected void onEvent(BpmProcessInstanceResultEvent event) { + shiftjobsService.updateShiftjobsResult(Long.parseLong(event.getBusinessKey()), event.getResult()); + } +} From 0cf92385da5d146a7d3987645cc35b0471b0c677 Mon Sep 17 00:00:00 2001 From: furongxin <419481438@qq.com> Date: Thu, 7 Mar 2024 18:26:48 +0800 Subject: [PATCH 3/3] =?UTF-8?q?OA=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/bpm/enums/ErrorCodeConstants.java | 2 + .../admin/oa/BpmOASecondController.java | 47 +++++++++++ .../oa/vo/procure/BpmOAProcurePageReqVO.java | 2 - .../oa/vo/procure/BpmOAProcureRespVO.java | 1 - .../oa/vo/procure/BpmOAProcureSaveReqVO.java | 1 - .../ProcureDetail.java | 2 +- .../oa/vo/second/BpmOASecondCreateReqVO.java | 39 +++++++++ .../admin/oa/vo/second/BpmOASecondRespVO.java | 35 ++++++++ .../shiftjobs/BpmOAShiftjobsCreateReqVO.java | 11 ++- .../oa/vo/shiftjobs/BpmOAShiftjobsRespVO.java | 9 +- .../bpm/convert/oa/BpmOASecondConvert.java | 22 +++++ .../bpm/dal/dataobject/oa/BpmOAProcureDO.java | 2 +- .../bpm/dal/dataobject/oa/BpmOASecondDO.java | 84 +++++++++++++++++++ .../dal/dataobject/oa/BpmOAShiftjobsDO.java | 8 +- .../bpm/dal/mysql/oa/BpmOASecondMapper.java | 15 ++++ .../dal/mysql/oa/BpmOAShiftjobsMapper.java | 1 - .../bpm/service/oa/BpmOASecondService.java | 40 +++++++++ .../service/oa/BpmOASecondServiceImpl.java | 83 ++++++++++++++++++ .../service/oa/BpmOAShiftjobsServiceImpl.java | 4 +- .../listener/BpmOASecondResultListener.java | 29 +++++++ 20 files changed, 411 insertions(+), 26 deletions(-) create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOASecondController.java rename yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/{reimbursement => procure}/ProcureDetail.java (85%) create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/second/BpmOASecondCreateReqVO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/second/BpmOASecondRespVO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/BpmOASecondConvert.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOASecondDO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOASecondMapper.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASecondService.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASecondServiceImpl.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOASecondResultListener.java diff --git a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java index d50d14c3..fbf8b331 100644 --- a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java +++ b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java @@ -28,6 +28,8 @@ public interface ErrorCodeConstants { ErrorCode OA_CASH_NOT_EXISTS = new ErrorCode(1_009_001_104, "现金支出申请不存在"); ErrorCode OA_OVERTIME_NOT_EXISTS = new ErrorCode(1_009_001_105, "加班申请不存在"); ErrorCode OA_REGULAR_NOT_EXISTS = new ErrorCode(1_009_001_106, "转正申请不存在"); + ErrorCode OA_SHIFTJOBS_NOT_EXISTS = new ErrorCode(1_009_001_107, "调岗申请不存在"); + ErrorCode OA_SECOND_NOT_EXISTS = new ErrorCode(1_009_001_108, "借调申请不存在"); // ========== 流程模型 1-009-002-000 ========== ErrorCode MODEL_KEY_EXISTS = new ErrorCode(1_009_002_000, "已经存在流程标识为【{}】的流程"); diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOASecondController.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOASecondController.java new file mode 100644 index 00000000..1c1debf9 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOASecondController.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.second.BpmOASecondCreateReqVO; +import cn.iocoder.yudao.module.bpm.convert.oa.BpmOASecondConvert; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOASecondDO; +import cn.iocoder.yudao.module.bpm.service.oa.BpmOASecondService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; + +/** + * OA 借调申请 Controller + * + * @author 符溶馨 + */ +@Tag(name = "管理后台 - OA 借调申请") +@RestController +@RequestMapping("/bpm/oa/second") +@Validated +public class BpmOASecondController { + + @Resource + private BpmOASecondService service; + + @PostMapping("/create") + @Operation(summary = "创建借调申请") + public CommonResult createLeave(@Valid @RequestBody BpmOASecondCreateReqVO createReqVO) { + return success(service.createSecond(getLoginUserId(), createReqVO)); + } + + @GetMapping("/get") + @Operation(summary = "获得借调申请") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + public CommonResult getLeave(@RequestParam("id") Long id) { + BpmOASecondDO second = service.getSecond(id); + return success(BpmOASecondConvert.INSTANCE.convert(second)); + } +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/procure/BpmOAProcurePageReqVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/procure/BpmOAProcurePageReqVO.java index c09cc2ab..8931919b 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/procure/BpmOAProcurePageReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/procure/BpmOAProcurePageReqVO.java @@ -1,7 +1,5 @@ package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure; -import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.reimbursement.ProcureDetail; -import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.reimbursement.Reimbursement; import lombok.*; import io.swagger.v3.oas.annotations.media.Schema; import cn.iocoder.yudao.framework.common.pojo.PageParam; diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/procure/BpmOAProcureRespVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/procure/BpmOAProcureRespVO.java index ae66e86e..e1d36567 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/procure/BpmOAProcureRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/procure/BpmOAProcureRespVO.java @@ -1,6 +1,5 @@ package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure; -import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.reimbursement.ProcureDetail; import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/procure/BpmOAProcureSaveReqVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/procure/BpmOAProcureSaveReqVO.java index 661b06a6..68e2e813 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/procure/BpmOAProcureSaveReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/procure/BpmOAProcureSaveReqVO.java @@ -1,6 +1,5 @@ package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure; -import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.reimbursement.ProcureDetail; import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/reimbursement/ProcureDetail.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/procure/ProcureDetail.java similarity index 85% rename from yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/reimbursement/ProcureDetail.java rename to yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/procure/ProcureDetail.java index 42a82c96..4242fa43 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/reimbursement/ProcureDetail.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/procure/ProcureDetail.java @@ -1,4 +1,4 @@ -package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.reimbursement; +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/second/BpmOASecondCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/second/BpmOASecondCreateReqVO.java new file mode 100644 index 00000000..29560b51 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/second/BpmOASecondCreateReqVO.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.second; + +import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 借调申请 创建 Request VO + * + * @author 符溶馨 + */ +@Schema(description = "管理后台 - 借调申请创建 Request VO") +@Data +@EqualsAndHashCode() +@ToString(callSuper = true) +public class BpmOASecondCreateReqVO { + + @Schema(description = "借调类型", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "借调类型不能为空") + private String type; + + @Schema(description = "借调说明", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + private String reason; + + @Schema(description = "借调明细", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "借调项目不能为空") + private List seconds; + + @Schema(description = "押金", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + private Long deposit; + + @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED) + private List fileItems ; +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/second/BpmOASecondRespVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/second/BpmOASecondRespVO.java new file mode 100644 index 00000000..a50bfd4f --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/second/BpmOASecondRespVO.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.second; + +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOABaseRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import javax.validation.constraints.NotNull; +import java.util.List; + +@Schema(description = "管理后台 - 借调申请创建 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class BpmOASecondRespVO extends BpmOABaseRespVO { + + @Schema(description = "借调类型", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "借调类型不能为空") + private String type; + + @Schema(description = "借调说明", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + private String reason; + + @Schema(description = "借调明细", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "借调项目不能为空") + private List seconds; + + @Schema(description = "押金", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + private Long deposit; + + @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED) + private List fileItems ; +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/shiftjobs/BpmOAShiftjobsCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/shiftjobs/BpmOAShiftjobsCreateReqVO.java index 1986c80a..101f1c7f 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/shiftjobs/BpmOAShiftjobsCreateReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/shiftjobs/BpmOAShiftjobsCreateReqVO.java @@ -8,7 +8,6 @@ import lombok.ToString; import javax.validation.constraints.NotNull; import java.util.List; -import java.util.Set; /** * 调岗申请 创建 Request VO @@ -27,27 +26,27 @@ public class BpmOAShiftjobsCreateReqVO { @Schema(description = "原部门编号", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "原部门不能为空") - private Long oldDpetId; + private Long oldDeptId; @Schema(description = "原上级领导编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED) private Long oldParentId; @Schema(description = "原岗位编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED) - private Set oldPostId; + private Long oldPostId; @Schema(description = "新部门编号", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "新部门不能为空") - private Long newDpetId; + private Long newDeptId; @Schema(description = "新上级领导编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED) private Long newParentId; @Schema(description = "新岗位编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED) - private Set newPostId; + private Long newPostId; @Schema(description = "备注", requiredMode = Schema.RequiredMode.NOT_REQUIRED) private String notes; - @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.NOT_REQUIRED) private List fileItems; } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/shiftjobs/BpmOAShiftjobsRespVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/shiftjobs/BpmOAShiftjobsRespVO.java index c0ccb9cb..38470a78 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/shiftjobs/BpmOAShiftjobsRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/shiftjobs/BpmOAShiftjobsRespVO.java @@ -9,7 +9,6 @@ import lombok.ToString; import javax.validation.constraints.NotNull; import java.util.List; -import java.util.Set; /** * @author 符溶馨 @@ -26,23 +25,23 @@ public class BpmOAShiftjobsRespVO extends BpmOABaseRespVO { @Schema(description = "原部门编号", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "原部门不能为空") - private Long oldDpetId; + private Long oldDeptId; @Schema(description = "原上级领导编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED) private Long oldParentId; @Schema(description = "原岗位编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED) - private Set oldPostId; + private Long oldPostId; @Schema(description = "新部门编号", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "新部门不能为空") - private Long newDpetId; + private Long newDeptId; @Schema(description = "新上级领导编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED) private Long newParentId; @Schema(description = "新岗位编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED) - private Set newPostId; + private Long newPostId; @Schema(description = "备注", requiredMode = Schema.RequiredMode.NOT_REQUIRED) private String notes; diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/BpmOASecondConvert.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/BpmOASecondConvert.java new file mode 100644 index 00000000..2a374f0d --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/oa/BpmOASecondConvert.java @@ -0,0 +1,22 @@ +package cn.iocoder.yudao.module.bpm.convert.oa; + +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.second.BpmOASecondCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.second.BpmOASecondRespVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOASecondDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 借调申请 Convert + * + * @author 符溶馨 + */ +@Mapper +public interface BpmOASecondConvert { + + BpmOASecondConvert INSTANCE = Mappers.getMapper(BpmOASecondConvert.class); + + BpmOASecondDO convert(BpmOASecondCreateReqVO bean); + + BpmOASecondRespVO convert(BpmOASecondDO bean); +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAProcureDO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAProcureDO.java index d777e357..13aca0f6 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAProcureDO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAProcureDO.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.bpm.dal.dataobject.oa; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.reimbursement.ProcureDetail; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure.ProcureDetail; import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile; import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableField; diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOASecondDO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOASecondDO.java new file mode 100644 index 00000000..9b0ab2d1 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOASecondDO.java @@ -0,0 +1,84 @@ +package cn.iocoder.yudao.module.bpm.dal.dataobject.oa; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.second.Second; +import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile; +import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import lombok.*; + +import java.util.List; + +/** + * OA 借调申请 DO + * + * + * @author 符溶馨 + + */ +@TableName(value ="bpm_oa_second", autoResultMap = true) +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BpmOASecondDO extends BaseDO { + + /** + * 请假表单主键 + */ + @TableId + private Long id; + + /** + * 申请人的用户编号 + * 关联 AdminUserDO 的 id 属性 + */ + private Long userId; + + /** + * 借调类型 + */ + private String type; + + /** + * 借调说明 + */ + private String reason; + + /** + * 借调明细数据JSON + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List seconds; + + /** + * 押金 + */ + private Long deposit; + + /** + * 结果 + * + * 枚举 {@link BpmProcessInstanceResultEnum} + * 考虑到简单,所以直接复用了 BpmProcessInstanceResultEnum 枚举,也可以自己定义一个枚举哈 + */ + private Integer result; + + /** + * 对应的流程编号 + * + * 关联 ProcessInstance 的 id 属性 + */ + private String processInstanceId; + + /** + * 附件基本信息 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List fileItems; +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAShiftjobsDO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAShiftjobsDO.java index 791fc042..50ec9d8c 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAShiftjobsDO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAShiftjobsDO.java @@ -1,7 +1,6 @@ package cn.iocoder.yudao.module.bpm.dal.dataobject.oa; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.framework.mybatis.core.type.JsonLongSetTypeHandler; import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; import com.baomidou.mybatisplus.annotation.TableField; @@ -11,7 +10,6 @@ import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; import lombok.*; import java.util.List; -import java.util.Set; /** * OA 调岗申请 DO @@ -60,8 +58,7 @@ public class BpmOAShiftjobsDO extends BaseDO { /** * 原岗位编号 */ - @TableField(typeHandler = JsonLongSetTypeHandler.class) - private Set oldPostId; + private Long oldPostId; /** * 新部门编号 @@ -76,8 +73,7 @@ public class BpmOAShiftjobsDO extends BaseDO { /** * 新岗位编号 */ - @TableField(typeHandler = JsonLongSetTypeHandler.class) - private Set newPostId; + private Long newPostId; /** * 备注 diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOASecondMapper.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOASecondMapper.java new file mode 100644 index 00000000..6e25c961 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOASecondMapper.java @@ -0,0 +1,15 @@ +package cn.iocoder.yudao.module.bpm.dal.mysql.oa; + +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOASecondDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 借调申请 Mapper + * + * @author 符溶馨 + + */ +@Mapper +public interface BpmOASecondMapper extends BaseMapperX { +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAShiftjobsMapper.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAShiftjobsMapper.java index a937bfbc..9fbd2723 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAShiftjobsMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAShiftjobsMapper.java @@ -8,7 +8,6 @@ import org.apache.ibatis.annotations.Mapper; * 调岗申请 Mapper * * @author 符溶馨 - */ @Mapper public interface BpmOAShiftjobsMapper extends BaseMapperX { diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASecondService.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASecondService.java new file mode 100644 index 00000000..5f562047 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASecondService.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.bpm.service.oa; + +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.second.BpmOASecondCreateReqVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOASecondDO; + +import javax.validation.Valid; + +/** + * 借调申请 Service 接口 + * + * @author 符溶馨 + + */ +public interface BpmOASecondService { + + /** + * 创建借调申请 + * + * @param userId 用户编号 + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createSecond(Long userId, @Valid BpmOASecondCreateReqVO createReqVO); + + /** + * 更新借调申请的状态 + * + * @param id 编号 + * @param result 结果 + */ + void updateSecondResult(Long id, Integer result); + + /** + * 获得借调申请 + * + * @param id 编号 + * @return 借调申请 + */ + BpmOASecondDO getSecond(Long id); +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASecondServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASecondServiceImpl.java new file mode 100644 index 00000000..dc5c54a9 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASecondServiceImpl.java @@ -0,0 +1,83 @@ +package cn.iocoder.yudao.module.bpm.service.oa; + +import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi; +import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.second.BpmOASecondCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile; +import cn.iocoder.yudao.module.bpm.convert.oa.BpmOASecondConvert; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOASecondDO; +import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOASecondMapper; +import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_SECOND_NOT_EXISTS; + +/** + * 功能描述 + * OA 借调申请 Service 实现类 + * + * @author 符溶馨 + */ +@Service +@Validated +public class BpmOASecondServiceImpl extends BpmOABaseService implements BpmOASecondService{ + + /** + * OA 请假对应的流程定义 KEY + */ + public static final String PROCESS_KEY = "oa_second"; + + @Resource + private BpmOASecondMapper secondMapper ; + + @Resource + private BpmProcessInstanceApi processInstanceApi; + + @Override + public Long createSecond(Long userId, BpmOASecondCreateReqVO createReqVO) { + BpmOASecondDO second = BpmOASecondConvert.INSTANCE.convert(createReqVO).setUserId(userId) + .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); + secondMapper.insert(second) ; + + // 发起 BPM 流程 + Map processInstanceVariables = new HashMap<>(); + String processInstanceId = processInstanceApi.createProcessInstance(userId, + new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY) + .setVariables(processInstanceVariables).setBusinessKey(String.valueOf(second.getId()))).getCheckedData(); + + // 将工作流的编号,更新到 OA 请假单中 + secondMapper.updateById(new BpmOASecondDO().setId(second.getId()).setProcessInstanceId(processInstanceId)); + + List fileItems = createReqVO.getFileItems() ; + //这里的逻辑,如果fileItems不为空,且有数据,那么说明是上传了附件的,则需要更工作流文件表对应的实例Id + if (fileItems != null && !fileItems.isEmpty()) { + uploadBpmFileProcessInstanceId(processInstanceId,fileItems) ; + } + return second.getId(); + } + + @Override + public void updateSecondResult(Long id, Integer result) { + validateLeaveExists(id); + secondMapper.updateById(new BpmOASecondDO().setId(id).setResult(result)); + } + + private void validateLeaveExists(Long id) { + if (secondMapper.selectById(id) == null) { + throw exception(OA_SECOND_NOT_EXISTS); + } + } + + @Override + public BpmOASecondDO getSecond(Long id) { + + return secondMapper.selectById(id); + } +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAShiftjobsServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAShiftjobsServiceImpl.java index 00d40f5a..bf6844d2 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAShiftjobsServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAShiftjobsServiceImpl.java @@ -17,7 +17,7 @@ import java.util.List; import java.util.Map; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_SEAL_NOT_EXISTS; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_SHIFTJOBS_NOT_EXISTS; /** * OA 调岗申请 Service 实现类 @@ -74,7 +74,7 @@ public class BpmOAShiftjobsServiceImpl extends BpmOABaseService implements BpmOA private void validateLeaveExists(Long id) { if (shiftjobsMapper.selectById(id) == null) { - throw exception(OA_SEAL_NOT_EXISTS); + throw exception(OA_SHIFTJOBS_NOT_EXISTS); } } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOASecondResultListener.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOASecondResultListener.java new file mode 100644 index 00000000..ef55d639 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOASecondResultListener.java @@ -0,0 +1,29 @@ +package cn.iocoder.yudao.module.bpm.service.oa.listener; + +import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEvent; +import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEventListener; +import cn.iocoder.yudao.module.bpm.service.oa.BpmOASecondService; +import cn.iocoder.yudao.module.bpm.service.oa.BpmOASecondServiceImpl; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * OA 借调单的结果的监听器实现类 + */ +@Component +public class BpmOASecondResultListener extends BpmProcessInstanceResultEventListener { + + @Resource + private BpmOASecondService secondService; + + @Override + protected String getProcessDefinitionKey() { + return BpmOASecondServiceImpl.PROCESS_KEY; + } + + @Override + protected void onEvent(BpmProcessInstanceResultEvent event) { + secondService.updateSecondResult(Long.parseLong(event.getBusinessKey()), event.getResult()); + } +}