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 1/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 2/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()); + } +} From fc40bb61fafbeb44f21b4f464b84a611019ef7d2 Mon Sep 17 00:00:00 2001 From: Echo <4759156@qq.com> Date: Fri, 8 Mar 2024 09:44:44 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=B7=A5=E5=8E=82=E5=A4=A7=E5=B1=8F?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../factory/FactoryScreenDataController.java | 110 ++++++++++++ .../factory/vo/FactoryCameraDataRespVO.java | 38 ++++ .../factory/vo/FactoryPackLineDataRespVO.java | 31 ++++ .../factory/vo/FactoryRollDataRespVO.java | 44 +++++ .../factory/vo/FactoryWeatherDataRespVO.java | 36 ++++ .../factory/vo/OperateDataRespVO.java | 165 ++++++++++++++++++ .../factory/vo/PropertyDataRespVO.java | 47 +++++ .../factory/vo/ProvincesDataRespVO.java | 46 +++++ .../factory/vo/StaffDataRespVO.java | 38 ++++ .../smartfactory/framework/util/HttpUtil.java | 40 +++++ .../service/screendata/ScreenDataService.java | 75 ++++++++ .../screendata/ScreenDataServiceImpl.java | 88 ++++++++++ 12 files changed, 758 insertions(+) create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/FactoryScreenDataController.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/FactoryCameraDataRespVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/FactoryPackLineDataRespVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/FactoryRollDataRespVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/FactoryWeatherDataRespVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/OperateDataRespVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/PropertyDataRespVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/ProvincesDataRespVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/StaffDataRespVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/framework/util/HttpUtil.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/screendata/ScreenDataService.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/screendata/ScreenDataServiceImpl.java diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/FactoryScreenDataController.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/FactoryScreenDataController.java new file mode 100644 index 00000000..ea28e592 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/FactoryScreenDataController.java @@ -0,0 +1,110 @@ +package cn.iocoder.yudao.module.smartfactory.controller.screendata.factory; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; +import cn.iocoder.yudao.module.smartfactory.controller.screendata.factory.vo.*; +import cn.iocoder.yudao.module.smartfactory.service.screendata.ScreenDataService; +import io.swagger.v3.oas.annotations.Operation; +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.annotation.security.PermitAll; +import javax.validation.Valid; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "工厂大屏数据") +@RestController +@RequestMapping("/smartfactory/factory-screen-data") +@Validated +public class FactoryScreenDataController { + + @Resource + private ScreenDataService screenDataService; + + /** + * + * @param type 1: 省,2 市,3区 + * @param adcode + * @return + */ + @GetMapping("/getProvincesData") + @PermitAll + @Operation(summary = "大屏全局省份/省/市工厂数据(包函工厂基本信息)") + @OperateLog(enable = false) // 避免 Post 请求被记录操作日志 + public CommonResult> getProvincesData(Integer type, String adcode) { + List provincesDatas = screenDataService.getProvincesData(type,adcode) ; + return success(provincesDatas); + } + + @GetMapping("/getStaffData") + @PermitAll + @Operation(summary = "大屏员工信息数据") + @OperateLog(enable = false) // 避免 Post 请求被记录操作日志 + public CommonResult getStaffData(Long factoryId) { + StaffDataRespVO staffDataRespVO = screenDataService.getStaffData(factoryId) ; + return success(staffDataRespVO); + } + + @GetMapping("/getPropertyData") + @PermitAll + @Operation(summary = "大屏资产数据") + @OperateLog(enable = false) // 避免 Post 请求被记录操作日志 + public CommonResult getPropertyData(Long factoryId) { + PropertyDataRespVO propertyDataRespVO = screenDataService.getPropertyData(factoryId) ; + return success(propertyDataRespVO); + } + + @GetMapping("/getFactoryOperateData") + @PermitAll + @Operation(summary = "大屏工厂运营数据") + @OperateLog(enable = false) // 避免 Post 请求被记录操作日志 + public CommonResult getFactoryOperateData(Long factoryId) { + OperateDataRespVO factoryOperateDataRespVO = screenDataService.getFactoryOperateData(factoryId) ; + return success(factoryOperateDataRespVO); + } + + @GetMapping("/getFactoryRollData") + @PermitAll + @Operation(summary = "大屏工厂滚动数据") + @OperateLog(enable = false) // 避免 Post 请求被记录操作日志 + public CommonResult getFactoryRollData() { + FactoryRollDataRespVO factoryRollDataRespVO = screenDataService.getFactoryRollData() ; + return success(factoryRollDataRespVO); + } + + @GetMapping("/getFactoryCamerasData") + @PermitAll + @Operation(summary = "大屏工厂监控视频数据") + @OperateLog(enable = false) // 避免 Post 请求被记录操作日志 + public CommonResult> getFactoryCamerasData(Long factoryId) { + List factoryCameraDatas = screenDataService.getFactoryCamerasData(factoryId) ; + return success(factoryCameraDatas); + } + + @GetMapping("/getFactoryWeatherInfo") + @PermitAll + @Operation(summary = "大屏工厂天气数据") + @OperateLog(enable = false) // 避免 Post 请求被记录操作日志 + public CommonResult getFactoryWeatherInfo(Long factoryId) { + return success(screenDataService.getFactoryWeatherInfo(factoryId)); + } + + /** + * 大屏工厂打包线数据 + * @param type + * @param factoryId + * @return + */ + @GetMapping("/getFactoryPackLineInfo") + @PermitAll + @Operation(summary = "大屏工厂打包线数据") + @OperateLog(enable = false) // 避免 Post 请求被记录操作日志 + public CommonResult> getFactoryPackLineInfo(Integer type,Long factoryId ) { + return success(screenDataService.getFactoryPackLineInfo(type,factoryId)); + } + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/FactoryCameraDataRespVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/FactoryCameraDataRespVO.java new file mode 100644 index 00000000..2319a033 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/FactoryCameraDataRespVO.java @@ -0,0 +1,38 @@ +package cn.iocoder.yudao.module.smartfactory.controller.screendata.factory.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 功能描述 + * + * @author: yj + * @date: 2024年03月05日 13:55 + */ +@Schema(description = "大屏数据 - 工厂摄像头数据 Response VO") +@Data +public class FactoryCameraDataRespVO { + + @Schema(description = "设备id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long factoryId; + + @Schema(description = "设备id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private String id; + + @Schema(description = "设备名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "南昌市") + private String name; + + @Schema(description = "设别编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "afcbdc00465348918d67518e2294792b") + private String code; + + @Schema(description = "设备类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + private Integer type; + + @Schema(description = "设备图片", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://xx.com/ss.jpg") + private String imgUrl ; + + @Schema(description = "推流地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "ws://hik.znkj.ispt.com.cn:559/openUrl/Koe0Kg8") + private String streamUrl ; + + +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/FactoryPackLineDataRespVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/FactoryPackLineDataRespVO.java new file mode 100644 index 00000000..3fd1bfe1 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/FactoryPackLineDataRespVO.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.smartfactory.controller.screendata.factory.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 功能描述 + * + * @author: yj + * @date: 2024年03月05日 13:55 + */ +@Schema(description = "大屏数据 - 工厂打包线数据 Response VO") +@Data +public class FactoryPackLineDataRespVO { + + @Schema(description = "打包线id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long packLineId; + + @Schema(description = "规格id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private String standardsId; + + @Schema(description = "规格标准", requiredMode = Schema.RequiredMode.REQUIRED, example = "800 * 400") + private String standards; + + @Schema(description = "打包数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Integer total; + + @Schema(description = "日期", requiredMode = Schema.RequiredMode.REQUIRED, example = "2024-03-04") + private String date ; + +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/FactoryRollDataRespVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/FactoryRollDataRespVO.java new file mode 100644 index 00000000..ebedf01c --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/FactoryRollDataRespVO.java @@ -0,0 +1,44 @@ +package cn.iocoder.yudao.module.smartfactory.controller.screendata.factory.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 功能描述 + * + * @author: yj + * @date: 2024年03月05日 13:55 + */ +@Schema(description = "大屏数据 - 工厂基础滚动数据 Response VO") +@Data +public class FactoryRollDataRespVO { + + @Schema(description = "工厂名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "江西省南昌市第一工厂") + private String name; + + @Schema(description = "工厂简称", requiredMode = Schema.RequiredMode.REQUIRED, example = "第一工厂") + private String shortName; + + @Schema(description = "城市名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "南昌市") + private String cityName; + + @Schema(description = "员工数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Integer total; + + @Schema(description = "窑炉数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Integer kilnTotal; + + @Schema(description = "打包线数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "200") + private Integer packLineTotal ; + + @Schema(description = "托盘数", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer trayTotal ; + + @Schema(description = "绑带", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer tieTotal ; + + @Schema(description = "叉车数", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer forkliftTotal ; + +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/FactoryWeatherDataRespVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/FactoryWeatherDataRespVO.java new file mode 100644 index 00000000..12e70698 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/FactoryWeatherDataRespVO.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.smartfactory.controller.screendata.factory.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +/** + * 功能描述 + * + * @author: yj + * @date: 2024年03月05日 13:55 + */ +@Schema(description = "大屏数据 - 工厂天气数据 Response VO") +@Data +public class FactoryWeatherDataRespVO { + + @Schema(description = "工厂ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long factoryId; + + @Schema(description = "城市编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "200") + private String areaCode ; + + @Schema(description = "温度", requiredMode = Schema.RequiredMode.REQUIRED, example = "12.3") + private String temperature ; + + @Schema(description = "湿度", requiredMode = Schema.RequiredMode.REQUIRED, example = "68%") + private String humidity ; + + @Schema(description = "天气", requiredMode = Schema.RequiredMode.REQUIRED, example = "晴") + private String weather ; + + @Schema(description = "日期", requiredMode = Schema.RequiredMode.REQUIRED, example = "晴") + private String date ; + +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/OperateDataRespVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/OperateDataRespVO.java new file mode 100644 index 00000000..229358d3 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/OperateDataRespVO.java @@ -0,0 +1,165 @@ +package cn.iocoder.yudao.module.smartfactory.controller.screendata.factory.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.text.DecimalFormat; + +/** + * 功能描述 + * + * @author: yj + * @date: 2024年03月05日 13:55 + */ +@Schema(description = "大屏数据 - 工厂运营数据 Response VO") +@Data +public class OperateDataRespVO { + + /**今日 **/ + @Schema(description = "今日出库", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Integer outboundTotal; + + @Schema(description = "今日入库(打包数-破损)", requiredMode = Schema.RequiredMode.REQUIRED, example = "200") + private Integer warehouseTotal ; + + @Schema(description = "今日破损", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer wornTotal ; + + @Schema(description = "优等品", requiredMode = Schema.RequiredMode.REQUIRED, example = "100 (优等品,即使打包线打包数量)") + private Integer ydpTotal ; + + @Schema(description = "一级品", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer yjpTotal ; + + @Schema(description = "合格品", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer hgpTotal ; + + /**昨日 **/ + @Schema(description = "昨日出库", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Integer outboundTotalYesterday; + + @Schema(description = "昨日入库", requiredMode = Schema.RequiredMode.REQUIRED, example = "200") + private Integer warehouseTotalYesterday ; + + @Schema(description = "昨日破损", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer wornTotalYesterday ; + + @Schema(description = "优等品", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer ydpTotalYesterday ; + + @Schema(description = "一级品", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer yjpTotalYesterday ; + + @Schema(description = "合格品", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer hgpTotalYesterday ; + + /**本周 **/ + @Schema(description = "本周出库", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Integer outboundTotalWeek; + + @Schema(description = "本周入库", requiredMode = Schema.RequiredMode.REQUIRED, example = "200") + private Integer warehouseTotalWeek ; + + @Schema(description = "本周分检数", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer sortingTotalWeek ; + + @Schema(description = "本周破损", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer wornTotalWeek ; + + @Schema(description = "优等品", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer ydpTotalWeek ; + + @Schema(description = "一级品", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer yjpTotalWeek ; + + @Schema(description = "合格品", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer hgpTotalWeek ; + + /**本月 **/ + @Schema(description = "本月出库", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Integer outboundTotalMonth; + + @Schema(description = "本月入库", requiredMode = Schema.RequiredMode.REQUIRED, example = "200") + private Integer warehouseTotalMonth ; + + @Schema(description = "本月分检数", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer sortingTotalMonth ; + + @Schema(description = "本月破损", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer wornTotalMonth ; + + @Schema(description = "优等品", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer ydpTotalMonth ; + + @Schema(description = "一级品", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer yjpTotalMonth ; + + @Schema(description = "合格品", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer hgpTotalMonth ; + + /** + * 公式:(今日破损 - 昨日破损) / 昨日破损 * 100% = 环比% + */ + @Schema(description = "破损环比增长/下降", requiredMode = Schema.RequiredMode.REQUIRED, example = "-12.22%") + private String wornQOQ; + + + DecimalFormat df = new DecimalFormat("#0.00"); + + public String setWornQOQ() { + double a = getWornTotal() ; + double b = getWornTotalYesterday() ; + double i = ((a - b) / b ) * 100; + this.wornQOQ = df.format(i) ; + return wornQOQ; + } + + @Schema(description = "优等率", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private String ydl; + @Schema(description = "昨日优等率", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private String ydlYesterday; + @Schema(description = "本周优等率", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private String ydlWeek; + @Schema(description = "本月优等率", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private String ydlMonth; + + + /** + * 根据type类型, 计划今日,昨日,本周,本月 + * @param type 1= 今日 2= 昨日 3= 本周 4本月 + * @param ydpTotal 合格品 + * @param yjpTotal 一级品 + * @param hgpTotal 合格品 + */ + public void setYdl(Integer type, Integer ydpTotal, Integer yjpTotal, Integer hgpTotal) { + double a = ydpTotal ; + double b = ydpTotal + yjpTotal + hgpTotal ; + double i = (a / b ) * 100 ; + String c = df.format(i) ; + switch ( type ) { + case 1: + this.ydl = c ; + break ; + case 2: + this.ydlYesterday = c ; + break ; + case 3: + this.ydlWeek = c ; + break ; + case 4: + this.ydlMonth = c ; + break ; + } + } + +// public static void main(String[] args) { +// OperateDataRespVO a = new OperateDataRespVO() ; +// +// a.setYdl(4, 100, 20,30); +// +// System.out.println(a.getYdl()); +// System.out.println(a.getYdlYesterday()); +// System.out.println(a.getYdlWeek()); +// System.out.println(a.getYdlMonth()); +// } +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/PropertyDataRespVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/PropertyDataRespVO.java new file mode 100644 index 00000000..7a6b84d6 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/PropertyDataRespVO.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.smartfactory.controller.screendata.factory.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +/** + * 功能描述 + * + * @author: yj + * @date: 2024年03月05日 13:55 + */ +@Schema(description = "大屏数据 - 资产数据 Response VO") +@Data +public class PropertyDataRespVO { + + @Schema(description = "窑炉数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Integer kilnTotal; + + @Schema(description = "打包线数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "200") + private Integer packLineTotal ; + + @Schema(description = "托盘数", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer trayTotal ; + + @Schema(description = "绑带", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer tieTotal ; + + @Schema(description = "叉车数据", requiredMode = Schema.RequiredMode.REQUIRED) + private ForkliftInfo forkliftInfo ; + + class ForkliftInfo { + @Schema(description = "叉车数", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer forkliftTotal ; + + @Schema(description = "运行中", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer onlineTotal ; + + @Schema(description = "离线", requiredMode = Schema.RequiredMode.REQUIRED, example = "3") + private Integer outLineTotal ; + + } + + + +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/ProvincesDataRespVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/ProvincesDataRespVO.java new file mode 100644 index 00000000..084820a4 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/ProvincesDataRespVO.java @@ -0,0 +1,46 @@ +package cn.iocoder.yudao.module.smartfactory.controller.screendata.factory.vo; + +import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo.FactoryInfoRespVO; +import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryinfo.FactoryInfoDO; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +/** + * 功能描述 + * + * @author: yj + * @date: 2024年03月05日 13:55 + */ +@Schema(description = "大屏数据 - 省份工厂数据 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ProvincesDataRespVO { + + @Schema(description = "区域名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "江西省 or 高安市") + private String name; + + @Schema(description = "区域标记点", requiredMode = Schema.RequiredMode.REQUIRED, example = "[114.173355, 22.320048]") + private List center ; + + @Schema(description = "区域标记点oid", requiredMode = Schema.RequiredMode.REQUIRED, example = "[114.134357, 22.377366]") + private List centroid ; + + @Schema(description = "区域代码", requiredMode = Schema.RequiredMode.REQUIRED, example = "810000") + private Integer adcode ; + + @Schema(description = "英文名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "jiangxi") + private String enName ; + + @Schema(description = "工厂数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") + private Integer value; + + /** + * 只有到第三层 district_id 区县的时候,需要输出工厂ID + */ + @Schema(description = "工厂Id", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") + private Long factoryId; +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/StaffDataRespVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/StaffDataRespVO.java new file mode 100644 index 00000000..b3af7908 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/screendata/factory/vo/StaffDataRespVO.java @@ -0,0 +1,38 @@ +package cn.iocoder.yudao.module.smartfactory.controller.screendata.factory.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +/** + * 功能描述 + * + * @author: yj + * @date: 2024年03月05日 13:55 + */ +@Schema(description = "大屏数据 - 工厂员工数据 Response VO") +@Data +public class StaffDataRespVO { + + @Schema(description = "员工数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Integer total; + + @Schema(description = "男员工", requiredMode = Schema.RequiredMode.REQUIRED, example = "200") + private Integer maleTotal ; + + @Schema(description = "女员工", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") + private Integer femaleTotal ; + + @Schema(description = "员工信息", requiredMode = Schema.RequiredMode.REQUIRED, example = "阿依塔洪·阿依提巴依 搬运工") + private List staffInfos ; + + class StaffInfo { + @Schema(description = "员工名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "马龙") + private String name ; + @Schema(description = "岗位名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "叉车司机") + private String postName ; + } + +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/framework/util/HttpUtil.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/framework/util/HttpUtil.java new file mode 100644 index 00000000..e440b1aa --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/framework/util/HttpUtil.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.smartfactory.framework.util; + + +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.*; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; + +import java.util.*; + +/** + * @author qun.xu + * @version 1.0.0 + * @date 2019.03.28 + */ + +public class HttpUtil { + /** + * GET请求 带头部信息 + * + * @param url + * @param headers + * @return + */ + public static String doGetSetHeader(String url, Map headers) { + try { + CloseableHttpClient httpClient = HttpClients.createDefault(); + HttpGet request = new HttpGet(url); + headers.forEach((k, v) -> request.setHeader(k, v)); + HttpResponse response = httpClient.execute(request); + return EntityUtils.toString(response.getEntity(), "UTF-8"); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/screendata/ScreenDataService.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/screendata/ScreenDataService.java new file mode 100644 index 00000000..3ea27f5a --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/screendata/ScreenDataService.java @@ -0,0 +1,75 @@ +package cn.iocoder.yudao.module.smartfactory.service.screendata; + +import cn.iocoder.yudao.module.smartfactory.controller.screendata.factory.vo.*; + +import java.util.List; + +/** + * 大屏数据 Service 接口 + * + * @author 姚君 + */ +public interface ScreenDataService { + + /** + * 大屏全局省份/省/市工厂数据 + * adcode是null,就查询全部省份数据 + * @param adcode 省/市/区编码 + * @return 显示数据 + */ + List getProvincesData(Integer type, String adcode) ; + + + /** + * 查询员工数据 + * factoryId是null,查询所有工厂员工数据 + * @param factoryId 工厂ID , + * @return + */ + StaffDataRespVO getStaffData(Long factoryId) ; + + /** + * 查询资产数据 + * @param factoryId + * factoryId是null,查询所有工厂资产数据 + * @return + */ + PropertyDataRespVO getPropertyData(Long factoryId) ; + + + /** + * 查询工厂运营数据 + * @param factoryId + * factoryId是null,查询所有工厂运营数据 + * @return + */ + OperateDataRespVO getFactoryOperateData(Long factoryId) ; + + /** + * 大屏工厂滚屏数据查询 + * @return + */ + FactoryRollDataRespVO getFactoryRollData() ; + + /** + * 获取工厂监控设备集合 + * @param factoryId + * @return + */ + List getFactoryCamerasData(Long factoryId) ; + + /** + * 获取工厂对应城市的天气数据 + * @param factoryId + * @return + */ + FactoryWeatherDataRespVO getFactoryWeatherInfo(Long factoryId) ; + + /** + * 根据类型获取工厂打包线数据 + * @param type 1= 今日 2= 本周 + * @param factoryId + * @return + */ + List getFactoryPackLineInfo(Integer type,Long factoryId) ; +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/screendata/ScreenDataServiceImpl.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/screendata/ScreenDataServiceImpl.java new file mode 100644 index 00000000..228ba34d --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/screendata/ScreenDataServiceImpl.java @@ -0,0 +1,88 @@ +package cn.iocoder.yudao.module.smartfactory.service.screendata; + +import cn.hutool.json.JSON; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import cn.iocoder.yudao.framework.common.util.json.JsonUtils; +import cn.iocoder.yudao.module.smartfactory.controller.screendata.factory.vo.*; +import cn.iocoder.yudao.module.smartfactory.framework.util.HttpUtil; +import com.fasterxml.jackson.databind.JsonNode; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 功能描述 + * + * @author: yj + * @date: 2024年03月06日 11:54 + */ +@Service +@Validated +public class ScreenDataServiceImpl implements ScreenDataService{ + @Override + public List getProvincesData(Integer type,String adcode) { + return null; + } + + @Override + public StaffDataRespVO getStaffData(Long factoryId) { + return null; + } + + @Override + public PropertyDataRespVO getPropertyData(Long factoryId) { + return null; + } + + @Override + public OperateDataRespVO getFactoryOperateData(Long factoryId) { + return null; + } + + @Override + public FactoryRollDataRespVO getFactoryRollData() { + return null; + } + + @Override + public List getFactoryCamerasData(Long factoryId) { + return null; + } + + + private static final String WEATHER_URL = "https://d1.weather.com.cn/sk_2d/"; + private static final String REFERER = "referer"; + private static final String REFERER_URL = "http://www.weather.com.cn/"; + private static final String WEATHER_SPLIT = "dataSK="; + + public FactoryWeatherDataRespVO getFactoryWeatherInfo(Long factoryId) { + //根据factoryId 查询areaCode; + String areaCode = "101190101" ; + String url = WEATHER_URL + areaCode + ".html"; + Map headers = new HashMap<>(); + headers.put(REFERER, REFERER_URL); + String result = HttpUtil.doGetSetHeader(url, headers); + String[] str = result.split(WEATHER_SPLIT); + if(str.length > 1) { + FactoryWeatherDataRespVO vo = new FactoryWeatherDataRespVO(); + JSONObject jsonObject = JSONUtil.parseObj(str[1]) ; + vo.setFactoryId(factoryId); + vo.setAreaCode(areaCode) ; + vo.setTemperature(jsonObject.getStr("temp")) ; //温度 + vo.setHumidity(jsonObject.getStr("sd")); //湿度 + vo.setWeather(jsonObject.getStr("weather")) ; //天气 + vo.setDate(jsonObject.getStr("date")); //日期 + return vo ; + }else { + return null ; + } + } + + public List getFactoryPackLineInfo(Integer type, Long factoryId) { + return null ; + } +}