From 7552a1294e730c924b0b9a32a2ca25441f1c16b4 Mon Sep 17 00:00:00 2001 From: furongxin <419481438@qq.com> Date: Sat, 9 Nov 2024 09:55:25 +0800 Subject: [PATCH] =?UTF-8?q?feat(bpm):=20=E6=96=B0=E5=A2=9E=E5=87=BA?= =?UTF-8?q?=E5=B7=AE=E7=94=B3=E8=AF=B7=E5=92=8C=E5=BC=80=E7=A5=A8=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 BpmOAEvectionApi、BpmOAEvectionDTO 和相关服务实现类,用于处理出差申请 - 新增 BpmOAInvoiceController、BpmOAInvoiceCreateReqVO 和相关数据对象,用于处理开票申请 - 修改现有接口和数据结构以支持新功能 --- .../module/bpm/api/oa/BpmOAEntryApi.java | 4 +- .../module/bpm/api/oa/BpmOAEvectionApi.java | 24 ++++ .../bpm/api/oa/vo/BpmOAEvectionDTO.java | 65 ++++++++++ .../module/bpm/enums/ErrorCodeConstants.java | 3 + .../bpm/api/oa/BpmOAEvectionApiImpl.java | 41 +++++++ .../admin/oa/BpmOAContractController.java | 22 +++- .../admin/oa/BpmOAFinanceController.java | 14 ++- .../admin/oa/BpmOAInvoiceController.java | 64 ++++++++++ .../oa/BpmOAReplacementCardController.java | 60 +++++++++ .../BpmOABusinessHospitalityRespVO.java | 7 +- .../vo/finance/BpmOAFinanceCreateReqVO.java | 10 +- .../oa/vo/finance/BpmOAFinanceRespVO.java | 15 +-- .../admin/oa/vo/finance/CostDetail.java | 4 +- .../vo/invoice/BpmOAInvoiceCreateReqVO.java | 66 ++++++++++ .../oa/vo/invoice/BpmOAInvoiceRespVO.java | 55 +++++++++ .../BpmOAReplacementCardCreateReqVO.java | 36 ++++++ .../BpmOAReplacementCardRespVO.java | 26 ++++ .../ReplacementCardItemVO.java | 17 +++ .../admin/task/BpmTaskController.java | 2 +- .../oa/BpmOABusinessHospitalityDO.java | 2 +- .../bpm/dal/dataobject/oa/BpmOAFinanceDO.java | 5 +- .../bpm/dal/dataobject/oa/BpmOAInvoiceDO.java | 114 ++++++++++++++++++ .../dataobject/oa/BpmOAReplacementCardDO.java | 66 ++++++++++ .../bpm/dal/mysql/oa/BpmOAEvectionMapper.java | 8 ++ .../bpm/dal/mysql/oa/BpmOAInvoiceMapper.java | 9 ++ .../mysql/oa/BpmOAReplacementCardMapper.java | 9 ++ ...laryMapper.java => BpmOASalaryMapper.java} | 2 +- .../bpm/service/oa/BpmOAContractService.java | 8 ++ .../service/oa/BpmOAContractServiceImpl.java | 9 ++ .../bpm/service/oa/BpmOAEvectionService.java | 16 +++ .../service/oa/BpmOAEvectionServiceImpl.java | 48 ++++++++ .../bpm/service/oa/BpmOAInvoiceService.java | 47 ++++++++ .../service/oa/BpmOAInvoiceServiceImpl.java | 107 ++++++++++++++++ .../oa/BpmOAReplacementCardService.java | 46 +++++++ .../oa/BpmOAReplacementCardServiceImpl.java | 101 ++++++++++++++++ .../service/oa/BpmOASalaryServiceImpl.java | 4 +- .../listener/BpmOAInvoiceResultListener.java | 31 +++++ .../BpmOAReplacementCardResultListener.java | 32 +++++ .../src/main/resources/application-dev.yaml | 12 +- .../src/main/resources/application-dev.yaml | 12 +- .../dal/mysql/user/AdminUserMapper.java | 6 +- .../rpc/config/RpcConfiguration.java | 3 +- .../system/job/fieldwork/FieldworkJob.java | 58 +++++++-- .../src/main/resources/application-dev.yaml | 10 +- .../src/main/resources/application-dev.yaml | 12 +- 45 files changed, 1240 insertions(+), 72 deletions(-) create mode 100644 yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/oa/BpmOAEvectionApi.java create mode 100644 yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/oa/vo/BpmOAEvectionDTO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/api/oa/BpmOAEvectionApiImpl.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAInvoiceController.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAReplacementCardController.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/invoice/BpmOAInvoiceCreateReqVO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/invoice/BpmOAInvoiceRespVO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/replacementCard/BpmOAReplacementCardCreateReqVO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/replacementCard/BpmOAReplacementCardRespVO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/replacementCard/ReplacementCardItemVO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAInvoiceDO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAReplacementCardDO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAInvoiceMapper.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAReplacementCardMapper.java rename yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/{BpmOaSalaryMapper.java => BpmOASalaryMapper.java} (79%) create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAInvoiceService.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAInvoiceServiceImpl.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAReplacementCardService.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAReplacementCardServiceImpl.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAInvoiceResultListener.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAReplacementCardResultListener.java diff --git a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/oa/BpmOAEntryApi.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/oa/BpmOAEntryApi.java index eb320781..ce496609 100644 --- a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/oa/BpmOAEntryApi.java +++ b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/oa/BpmOAEntryApi.java @@ -20,8 +20,8 @@ public interface BpmOAEntryApi { String PREFIX = ApiConstants.PREFIX + "/oa/entry"; - @GetMapping(PREFIX + "/getGoOutByTime") - @Operation(summary = "获取当日以及昨日外出的用户编号") + @GetMapping(PREFIX + "/getEntryByTime") + @Operation(summary = "获得指定入职时间的入职申请列表") @Parameter(name = "entryDate", description = "时间格式yyyy-MM-dd", required = true, example = "2024-05-11") @PermitAll CommonResult> getEntryListByTime(@RequestParam(name = "entryDate") LocalDate entryDate); diff --git a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/oa/BpmOAEvectionApi.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/oa/BpmOAEvectionApi.java new file mode 100644 index 00000000..58e9c64c --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/oa/BpmOAEvectionApi.java @@ -0,0 +1,24 @@ +package cn.iocoder.yudao.module.bpm.api.oa; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.bpm.enums.ApiConstants; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; + +import javax.annotation.security.PermitAll; +import java.util.List; +import java.util.Map; + +@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = +@Tag(name = "RPC 服务 - 流程实例") +public interface BpmOAEvectionApi { + + String PREFIX = ApiConstants.PREFIX + "/oa/evection"; + + @GetMapping(PREFIX + "/getEvectionByTime") + @Operation(summary = "获取当日以及昨日出差的用户编号") + @PermitAll + CommonResult>> getEvectionUserList(); +} diff --git a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/oa/vo/BpmOAEvectionDTO.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/oa/vo/BpmOAEvectionDTO.java new file mode 100644 index 00000000..0b549f1a --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/oa/vo/BpmOAEvectionDTO.java @@ -0,0 +1,65 @@ +package cn.iocoder.yudao.module.bpm.api.oa.vo; + +import cn.iocoder.yudao.framework.common.pojo.UploadUserFile; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +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 java.util.Set; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +/** + * @author 符溶馨 + */ +@Schema(description = "管理后台 - 出差申请 请求Request VO") +@Data +@ToString(callSuper = true) +public class BpmOAEvectionDTO { + + @Schema(description = "入职申请表单主键", example = "1") + private Long id; + + @Schema(description = "用户id") + private Long userId; + + @Schema(description = "出差原因", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "出差事由不能为空") + private String reason; + + @Schema(description = "随行人用户编号") + private Set togetherUserIds; + + @Schema(description = "随行人用户名称") + private String togetherUserName; + + @Schema(description = "出差起点", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "出差起点不能为空") + private String startLocation; + + @Schema(description = "出差终点", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "出差终点不能为空") + private String endLocation; + + @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-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 93983878..fcc6d001 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 @@ -43,6 +43,9 @@ public interface ErrorCodeConstants { ErrorCode OA_HIRE_NOT_EXISTS = new ErrorCode(1_009_001_117, "招聘申请不存在"); ErrorCode OA_BUSINESS_HOSPITALITY_NOT_EXISTS = new ErrorCode(1_009_001_118, "商务招待申请不存在"); ErrorCode OA_FINANCE_NOT_EXISTS = new ErrorCode(1_009_001_119, "活动经费申请不存在"); + ErrorCode OA_EVECTION_IS_EXISTS = new ErrorCode(1_009_001_120, "该时间段您正在出差!请重新选择正确出差时间。"); + ErrorCode OA_INVOICE_NOT_EXISTS = new ErrorCode(1_009_001_121, "开票申请不存在"); + ErrorCode OA_REPLACEMENT_CARD_NOT_EXISTS = new ErrorCode(1_009_001_122, "补卡申请不存在"); // ========== 流程模型 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/api/oa/BpmOAEvectionApiImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/api/oa/BpmOAEvectionApiImpl.java new file mode 100644 index 00000000..42b1b932 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/api/oa/BpmOAEvectionApiImpl.java @@ -0,0 +1,41 @@ +package cn.iocoder.yudao.module.bpm.api.oa; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAEvectionDO; +import cn.iocoder.yudao.module.bpm.service.oa.BpmOAEvectionService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.time.LocalDate; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +/** + * Flowable 流程实例 Api 实现类 + */ +@RestController +@Validated +public class BpmOAEvectionApiImpl implements BpmOAEvectionApi { + + @Resource + private BpmOAEvectionService evectionService; + + @Override + public CommonResult>> getEvectionUserList() { + + LocalDate now = LocalDate.now(); + + List evectionOn = evectionService.getEvectionListByStartTime(now); + List evectionOff = evectionService.getEvectionListByEndTime(now.minusDays(1)); + + Map> result = new HashMap<>(); + result.put("on", evectionOn.stream().map(BpmOAEvectionDO::getUserId).distinct().collect(Collectors.toList())); + result.put("off", evectionOff.stream().map(BpmOAEvectionDO::getUserId).distinct().collect(Collectors.toList())); + return success(result); + } +} 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 7ef4b6a9..9ce67c43 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 @@ -1,13 +1,13 @@ package cn.iocoder.yudao.module.bpm.controller.admin.oa; import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.contract.BpmOAContractCreateReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.contract.BpmOAContractRespVO; import cn.iocoder.yudao.module.bpm.convert.oa.BpmOAContractConvert; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAContractDO; import cn.iocoder.yudao.module.bpm.service.oa.BpmOAContractService; -import cn.iocoder.yudao.module.bpm.service.task.BpmHistoryProcessInstanceService; -import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.validation.Valid; +import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; @@ -36,10 +37,7 @@ public class BpmOAContractController { private BpmOAContractService contractService; @Resource - private BpmHistoryProcessInstanceService historyProcessInstanceService; - - @Resource - private BpmTaskService taskService; + private AdminUserApi userApi; @PostMapping("/create") @Operation(summary = "创建请求申请") @@ -66,4 +64,16 @@ public class BpmOAContractController { return success(BpmOAContractConvert.INSTANCE.convert(contract)); } + + @GetMapping("/getListByDeptId") + @Operation(summary = "获得同部门的合同审批") + public CommonResult> getListByDeptId() { + + // 获取同部门所有用户id + List userIds = userApi.getUserIdsByUserIdGroupByDept(getLoginUserId()).getCheckedData(); + + List contracts = contractService.getListByDeptId(userIds); + + return success(BeanUtils.toBean(contracts, BpmOAContractRespVO.class)); + } } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAFinanceController.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAFinanceController.java index 3506c58e..e7e0028a 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAFinanceController.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAFinanceController.java @@ -15,6 +15,8 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.validation.Valid; +import java.time.format.DateTimeFormatter; + import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; @@ -45,8 +47,11 @@ public class BpmOAFinanceController { public CommonResult getFinance(@RequestParam("id") Long id) { BpmOAFinanceDO finance = financeService.getFinance(id); + BpmOAFinanceRespVO respVO = BeanUtils.toBean(finance, BpmOAFinanceRespVO.class); + respVO.setStartTime(finance.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + respVO.setEndTime(finance.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); - return success(BeanUtils.toBean(finance, BpmOAFinanceRespVO.class)); + return success(respVO); } @GetMapping("/getByProcessInstanceId") @@ -55,6 +60,11 @@ public class BpmOAFinanceController { public CommonResult getByProcessInstanceId(@RequestParam("processInstanceId") String processInstanceId) { BpmOAFinanceDO finance = financeService.getByProcessInstanceId(processInstanceId); - return success(BeanUtils.toBean(finance, BpmOAFinanceRespVO.class)); + + BpmOAFinanceRespVO respVO = BeanUtils.toBean(finance, BpmOAFinanceRespVO.class); + respVO.setStartTime(finance.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + respVO.setEndTime(finance.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + + return success(respVO); } } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAInvoiceController.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAInvoiceController.java new file mode 100644 index 00000000..38b74947 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAInvoiceController.java @@ -0,0 +1,64 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.invoice.BpmOAInvoiceCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.invoice.BpmOAInvoiceRespVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAInvoiceDO; +import cn.iocoder.yudao.module.bpm.service.oa.BpmOAInvoiceService; +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/invoice") +@Validated +public class BpmOAInvoiceController { + + @Resource + private BpmOAInvoiceService invoiceService; + + @PostMapping("/create") + @Operation(summary = "创建请求申请") + public CommonResult createInvoice(@Valid @RequestBody BpmOAInvoiceCreateReqVO createReqVO) { + + return success(invoiceService.createInvoice(getLoginUserId(), createReqVO)); + } + + @GetMapping("/get") + @Operation(summary = "获得开票申请") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + public CommonResult getInvoice(@RequestParam("id") Long id) { + + BpmOAInvoiceDO invoice = invoiceService.getInvoice(id); + + BpmOAInvoiceRespVO bpmOAInvoiceRespVO = BeanUtils.toBean(invoice, BpmOAInvoiceRespVO.class); + return success(bpmOAInvoiceRespVO); + } + + @GetMapping("/getByProcessInstanceId") + @Operation(summary = "获得开票申请") + @Parameter(name = "BpmOAInvoiceRespVO", description = "流程实例编号", required = true, example = "1024") + public CommonResult getByProcessInstanceId(@RequestParam("processInstanceId") String processInstanceId) { + + BpmOAInvoiceDO invoice = invoiceService.getByProcessInstanceId(processInstanceId); + + BpmOAInvoiceRespVO bpmOAInvoiceRespVO = BeanUtils.toBean(invoice, BpmOAInvoiceRespVO.class); + return success(bpmOAInvoiceRespVO); + } +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAReplacementCardController.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAReplacementCardController.java new file mode 100644 index 00000000..6f401091 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAReplacementCardController.java @@ -0,0 +1,60 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.replacementCard.BpmOAReplacementCardCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.replacementCard.BpmOAReplacementCardRespVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAReplacementCardDO; +import cn.iocoder.yudao.module.bpm.service.oa.BpmOAReplacementCardService; +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/replacementCard") +@Validated +public class BpmOAReplacementCardController { + + @Resource + private BpmOAReplacementCardService replacementCardService; + + @PostMapping("/create") + @Operation(summary = "创建请求申请") + public CommonResult createReplacementCard(@Valid @RequestBody BpmOAReplacementCardCreateReqVO createReqVO) { + + return success(replacementCardService.createReplacementCard(getLoginUserId(), createReqVO)); + } + + @GetMapping("/get") + @Operation(summary = "获得补卡申请") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + public CommonResult getReplacementCard(@RequestParam("id") Long id) { + + BpmOAReplacementCardDO replacementCard = replacementCardService.getReplacementCard(id); + return success(BeanUtils.toBean(replacementCard, BpmOAReplacementCardRespVO.class)); + } + + @GetMapping("/getByProcessInstanceId") + @Operation(summary = "获得补卡申请") + @Parameter(name = "processInstanceId", description = "流程实例编号", required = true, example = "1024") + public CommonResult getByProcessInstanceId(@RequestParam("processInstanceId") String processInstanceId) { + + BpmOAReplacementCardDO replacementCard = replacementCardService.getByProcessInstanceId(processInstanceId); + return success(BeanUtils.toBean(replacementCard, BpmOAReplacementCardRespVO.class)); + } +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/businessHospitality/BpmOABusinessHospitalityRespVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/businessHospitality/BpmOABusinessHospitalityRespVO.java index ea71f62b..808ca5f9 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/businessHospitality/BpmOABusinessHospitalityRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/businessHospitality/BpmOABusinessHospitalityRespVO.java @@ -6,11 +6,13 @@ 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 符溶馨 */ @@ -30,7 +32,8 @@ public class BpmOABusinessHospitalityRespVO extends BpmOABaseRespVO { @Schema(description = "招待日期", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "招待日期不能为空") - private LocalDate entertainDate; + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) + private String entertainDate; @Schema(description = "招待地点") private String entertainLocation; diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/finance/BpmOAFinanceCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/finance/BpmOAFinanceCreateReqVO.java index 736b9548..88d6dfb7 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/finance/BpmOAFinanceCreateReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/finance/BpmOAFinanceCreateReqVO.java @@ -8,7 +8,7 @@ import lombok.ToString; import org.springframework.format.annotation.DateTimeFormat; import javax.validation.constraints.NotNull; -import java.time.LocalDateTime; +import java.math.BigDecimal; import java.util.List; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; @@ -35,12 +35,12 @@ public class BpmOAFinanceCreateReqVO { @Schema(description = "活动开始时间", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "活动开始时间不能为空") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime startTime; + private String startTime; @Schema(description = "活动结束时间", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "活动结束时间不能为空") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime endTime; + private String endTime; @Schema(description = "活动地址", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "活动地址不能为空") @@ -48,10 +48,10 @@ public class BpmOAFinanceCreateReqVO { @Schema(description = "活动费用预算", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "活动费用预算不能为空") - private Integer costBudget; + private BigDecimal costBudget; @Schema(description = "费用明细") - private List costDetails; + private List costDetail; @Schema(description = "流程实例编号") private String processInstanceId; diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/finance/BpmOAFinanceRespVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/finance/BpmOAFinanceRespVO.java index 3d4411bb..2d87afa7 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/finance/BpmOAFinanceRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/finance/BpmOAFinanceRespVO.java @@ -6,14 +6,11 @@ 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.LocalDateTime; +import java.math.BigDecimal; import java.util.List; -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - /** * 活动经费申请 请求Request VO * @@ -35,13 +32,11 @@ public class BpmOAFinanceRespVO extends BpmOABaseRespVO { @Schema(description = "活动开始时间", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "活动开始时间不能为空") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime startTime; + private String startTime; @Schema(description = "活动结束时间", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "活动结束时间不能为空") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime endTime; + private String endTime; @Schema(description = "活动地址", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "活动地址不能为空") @@ -49,10 +44,10 @@ public class BpmOAFinanceRespVO extends BpmOABaseRespVO { @Schema(description = "活动费用预算", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "活动费用预算不能为空") - private Integer costBudget; + private BigDecimal costBudget; @Schema(description = "费用明细") - private List costDetails; + private List costDetail; @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/finance/CostDetail.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/finance/CostDetail.java index 42ec320d..c02a42d4 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/finance/CostDetail.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/finance/CostDetail.java @@ -3,6 +3,8 @@ package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.finance; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.math.BigDecimal; + @Schema(description = "活动费用明细 VO") @Data public class CostDetail { @@ -11,5 +13,5 @@ public class CostDetail { private String name; @Schema(description = "费用") - private Integer cost; + private BigDecimal cost; } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/invoice/BpmOAInvoiceCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/invoice/BpmOAInvoiceCreateReqVO.java new file mode 100644 index 00000000..66ae8887 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/invoice/BpmOAInvoiceCreateReqVO.java @@ -0,0 +1,66 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.invoice; + +import cn.iocoder.yudao.framework.common.pojo.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.math.BigDecimal; +import java.time.LocalDate; +import java.util.List; + +@Schema(description = "管理后台 - 开票申请创建 Request VO") +@Data +@EqualsAndHashCode() +@ToString(callSuper = true) +public class BpmOAInvoiceCreateReqVO { + + @Schema(description = "计划开票日期", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "计划开票日期不能为空") + private LocalDate invoiceDate; + + @Schema(description = "项目编号") + private Long projectId; + + @Schema(description = "开票金额", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "开票金额不能为空") + private BigDecimal amount; + + @Schema(description = "开票内容", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "开票内容不能为空") + private String content; + + @Schema(description = "开票单位名称", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "开票单位名称不能为空") + private String unitName; + + @Schema(description = "开票单位纳税人识别号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "开票单位纳税人识别号不能为空") + private String unitTin; + + @Schema(description = "开票单位地址") + private String unitAddress; + + @Schema(description = "开票单位电话") + private String unitPhone; + + @Schema(description = "开票单位开户银行") + private String unitBankName; + + @Schema(description = "开票单位银行账号") + private String unitBankNo; + + @Schema(description = "关联合同业务流程编号") + private String contractInstanceId; + + @Schema(description = "流程实例编号") + private String processInstanceId; + + @Schema(description = "状态-参见 bpm_process_instance_result 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer result; + + @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/invoice/BpmOAInvoiceRespVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/invoice/BpmOAInvoiceRespVO.java new file mode 100644 index 00000000..0e2af3c8 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/invoice/BpmOAInvoiceRespVO.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.invoice; + +import cn.iocoder.yudao.framework.common.pojo.UploadUserFile; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOABaseRespVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.List; + +@Schema(description = "管理后台 - 奖惩申请响应数据 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class BpmOAInvoiceRespVO extends BpmOABaseRespVO { + + @Schema(description = "计划开票日期", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDate invoiceDate; + + @Schema(description = "项目编号") + private Long projectId; + + @Schema(description = "开票金额", requiredMode = Schema.RequiredMode.REQUIRED) + private BigDecimal amount; + + @Schema(description = "开票内容", requiredMode = Schema.RequiredMode.REQUIRED) + private String content; + + @Schema(description = "开票单位名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String unitName; + + @Schema(description = "开票单位纳税人识别号", requiredMode = Schema.RequiredMode.REQUIRED) + private String unitTin; + + @Schema(description = "开票单位地址") + private String unitAddress; + + @Schema(description = "开票单位电话") + private String unitPhone; + + @Schema(description = "开票单位开户银行") + private String unitBankName; + + @Schema(description = "开票单位银行账号") + private String unitBankNo; + + @Schema(description = "关联合同业务流程编号") + private String contractInstanceId; + + @Schema(description = "上传文件") + 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/replacementCard/BpmOAReplacementCardCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/replacementCard/BpmOAReplacementCardCreateReqVO.java new file mode 100644 index 00000000..ff209c56 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/replacementCard/BpmOAReplacementCardCreateReqVO.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.replacementCard; + +import cn.iocoder.yudao.framework.common.pojo.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 BpmOAReplacementCardCreateReqVO { + + @Schema(description = "补卡明细", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "补卡明细不能为空") + private List applicationItem; + + @Schema(description = "流程实例编号") + private String processInstanceId; + + @Schema(description = "状态-参见 bpm_process_instance_result 枚举") + private Integer result; + + @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "附件不能为空") + 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/replacementCard/BpmOAReplacementCardRespVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/replacementCard/BpmOAReplacementCardRespVO.java new file mode 100644 index 00000000..4fe599e6 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/replacementCard/BpmOAReplacementCardRespVO.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.replacementCard; + +import cn.iocoder.yudao.framework.common.pojo.UploadUserFile; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOABaseRespVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.util.List; + +/** + * @author 符溶馨 + */ +@Schema(description = "管理后台 - 薪资付款申请 请求Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class BpmOAReplacementCardRespVO extends BpmOABaseRespVO { + + @Schema(description = "补卡明细") + private List applicationItem; + + @Schema(description = "上传文件") + 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/replacementCard/ReplacementCardItemVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/replacementCard/ReplacementCardItemVO.java new file mode 100644 index 00000000..f45b4e00 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/replacementCard/ReplacementCardItemVO.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.replacementCard; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDate; + +@Schema(description = "管理后台 - 补卡明细 Response VO") +@Data +public class ReplacementCardItemVO { + + @Schema(description = "补卡日期") + private LocalDate date; + + @Schema(description = "补卡事由") + private String reason; +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmTaskController.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmTaskController.java index f7eed624..0784a922 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmTaskController.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmTaskController.java @@ -209,7 +209,7 @@ public class BpmTaskController { List tasks = taskService.getListTasksByProcessInstanceId(processInstanceId); // 获取用户信息 - List userIds = convertList(tasks, HistoricTaskInstance::getAssignee); + List userIds = tasks.stream().map(HistoricTaskInstance::getAssignee).distinct().collect(Collectors.toList()); if (CollUtil.isEmpty(userIds)) { return success(userRespDTO); } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOABusinessHospitalityDO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOABusinessHospitalityDO.java index 50d62582..694fd77c 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOABusinessHospitalityDO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOABusinessHospitalityDO.java @@ -17,7 +17,7 @@ import java.util.List; * * @author 符溶馨 */ -@TableName(value ="bpm_oa_business_card", autoResultMap = true) +@TableName(value ="bpm_oa_business_hospitality", autoResultMap = true) @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAFinanceDO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAFinanceDO.java index ad47a0d7..bd00ffa2 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAFinanceDO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAFinanceDO.java @@ -10,6 +10,7 @@ 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; @@ -66,13 +67,13 @@ public class BpmOAFinanceDO extends BaseDO { /** * 活动费用预算 */ - private Integer costBudget; + private BigDecimal costBudget; /** * 活动费用明细 */ @TableField(typeHandler = JacksonTypeHandler.class) - private List costDetails; + private List costDetail; /** * 申请的结果 diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAInvoiceDO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAInvoiceDO.java new file mode 100644 index 00000000..764f590c --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAInvoiceDO.java @@ -0,0 +1,114 @@ +package cn.iocoder.yudao.module.bpm.dal.dataobject.oa; + +import cn.iocoder.yudao.framework.common.pojo.UploadUserFile; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +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.LocalDate; +import java.util.List; + +/** + * OA 开票申请 DO + * + * @author 符溶馨 + */ +@TableName(value ="bpm_oa_invoice", autoResultMap = true) +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BpmOAInvoiceDO extends BaseDO { + + /** + * 开票申请表单主键 + */ + @TableId + private Long id; + + /** + * 申请人的用户编号 + */ + private Long userId; + + /** + * 计划开票日期 + */ + private LocalDate invoiceDate; + + /** + * 项目编号 + */ + private Long projectId; + + /** + * 开票金额 + */ + private BigDecimal amount; + + /** + * 开票内容 + */ + private String content; + + /** + * 开票单位名称 + */ + private String unitName; + + /** + * 开票单位纳税人识别号 + */ + private String unitTin; + + /** + * 开票单位地址 + */ + private String unitAddress; + + /** + * 开票单位联系电话 + */ + private String unitPhone; + + /** + * 开票单位开户银行 + */ + private String unitBankName; + + /** + * 开票单位银行账号 + */ + private String unitBankNo; + + /** + * 关联合同业务流程编号 + */ + private String contractInstanceId; + + /** + * 申请的结果 + * 枚举 {@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/BpmOAReplacementCardDO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAReplacementCardDO.java new file mode 100644 index 00000000..e4f8cb08 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAReplacementCardDO.java @@ -0,0 +1,66 @@ +package cn.iocoder.yudao.module.bpm.dal.dataobject.oa; + +import cn.iocoder.yudao.framework.common.pojo.UploadUserFile; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.replacementCard.ReplacementCardItemVO; +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_replacement_card", autoResultMap = true) +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BpmOAReplacementCardDO extends BaseDO { + + /** + * 出差表单主键 + */ + @TableId + private Long id; + + /** + * 申请人的用户编号 + * 关联 AdminUserDO 的 id 属性 + */ + private Long userId; + + /** + * 补卡明细 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List applicationItem; + + /** + * 申请的结果 + * 枚举 {@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/BpmOAEvectionMapper.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAEvectionMapper.java index 753f68ed..a81c7616 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAEvectionMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAEvectionMapper.java @@ -1,6 +1,8 @@ package cn.iocoder.yudao.module.bpm.dal.mysql.oa; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.evection.BpmOAEvectionCreateReqVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAEvectionDO; import org.apache.ibatis.annotations.Mapper; @@ -14,4 +16,10 @@ import org.apache.ibatis.annotations.Mapper; public interface BpmOAEvectionMapper extends BaseMapperX { + default Long selectIsExist(Long userId, BpmOAEvectionCreateReqVO createReqVO) { + return selectCount(new LambdaQueryWrapperX() + .eq(BpmOAEvectionDO::getUserId, userId) + .leIfPresent(BpmOAEvectionDO::getStartTime, createReqVO.getEndTime()) + .geIfPresent(BpmOAEvectionDO::getEndTime, createReqVO.getStartTime())); + } } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAInvoiceMapper.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAInvoiceMapper.java new file mode 100644 index 00000000..5da0887f --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAInvoiceMapper.java @@ -0,0 +1,9 @@ +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.BpmOAInvoiceDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface BpmOAInvoiceMapper extends BaseMapperX { +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAReplacementCardMapper.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAReplacementCardMapper.java new file mode 100644 index 00000000..fa964fd4 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAReplacementCardMapper.java @@ -0,0 +1,9 @@ +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.BpmOAReplacementCardDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface BpmOAReplacementCardMapper extends BaseMapperX { +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOaSalaryMapper.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOASalaryMapper.java similarity index 79% rename from yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOaSalaryMapper.java rename to yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOASalaryMapper.java index adb53a3d..ed43c525 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOaSalaryMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOASalaryMapper.java @@ -5,5 +5,5 @@ import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOASalaryDO; import org.apache.ibatis.annotations.Mapper; @Mapper -public interface BpmOaSalaryMapper extends BaseMapperX { +public interface BpmOASalaryMapper extends BaseMapperX { } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAContractService.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAContractService.java index d98bb6bf..41c267c5 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAContractService.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAContractService.java @@ -4,6 +4,7 @@ import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.contract.BpmOAContract import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAContractDO; import javax.validation.Valid; +import java.util.List; public interface BpmOAContractService { @@ -38,4 +39,11 @@ public interface BpmOAContractService { * @return 出差申请 */ BpmOAContractDO getByProcessInstanceId(String processInstanceId); + + /** + * 获取当前用户所在部门的合同列表 + * @param userIds 用户编号集合 + * @return 合同列表 + */ + List getListByDeptId(List userIds); } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAContractServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAContractServiceImpl.java index 7b47648d..789fbd23 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAContractServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAContractServiceImpl.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.bpm.service.oa; import cn.hutool.core.collection.CollectionUtil; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; 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.contract.BpmOAContractCreateReqVO; @@ -108,4 +109,12 @@ public class BpmOAContractServiceImpl extends BpmOABaseService implements BpmOAC } return bpmOAContractDOS.get(0); } + + @Override + public List getListByDeptId(List userIds) { + + return contractMapper.selectList(new LambdaQueryWrapperX() + .eq(BpmOAContractDO::getResult, BpmProcessInstanceResultEnum.APPROVE.getResult()) + .inIfPresent(BpmOAContractDO::getUserId, userIds)); + } } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAEvectionService.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAEvectionService.java index 5a4137a8..1259b533 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAEvectionService.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAEvectionService.java @@ -4,6 +4,8 @@ import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.evection.BpmOAEvection import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAEvectionDO; import javax.validation.Valid; +import java.time.LocalDate; +import java.util.List; public interface BpmOAEvectionService { @@ -38,4 +40,18 @@ public interface BpmOAEvectionService { * @return 出差申请 */ BpmOAEvectionDO getByProcessInstanceId(String processInstanceId); + + /** + * 获得指定开始时间的出差申请列表 + * @param date 当前日期 + * @return 出差申请列表 + */ + List getEvectionListByStartTime(LocalDate date); + + /** + * 获得指定结束时间的出差申请列表 + * @param date 当前日期 + * @return 出差申请列表 + */ + List getEvectionListByEndTime(LocalDate date); } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAEvectionServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAEvectionServiceImpl.java index 61fe69a7..ed62e693 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAEvectionServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAEvectionServiceImpl.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.bpm.service.oa; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; 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.evection.BpmOAEvectionCreateReqVO; @@ -9,15 +10,20 @@ import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAEvectionDO; import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAEvectionMapper; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; import cn.iocoder.yudao.module.bpm.service.task.BpmHistoryProcessInstanceService; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; 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.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_EVECTION_IS_EXISTS; import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_EVECTION_NOT_EXISTS; /** @@ -44,9 +50,18 @@ public class BpmOAEvectionServiceImpl extends BpmOABaseService implements BpmOAE @Resource private BpmHistoryProcessInstanceService historyProcessInstanceService; + @Resource + private AdminUserApi userApi; + @Override public Long createEvection(Long userId, BpmOAEvectionCreateReqVO createReqVO) { + // 校验当前选择的时间段内 是否在出差中 + Long count = evectionMapper.selectIsExist(userId, createReqVO); + if (count > 0L) { + throw exception(OA_EVECTION_IS_EXISTS); + } + //插入OA 出差申请 BpmOAEvectionDO evection = BpmOAEvectionConvert.INSTANCE.convert(createReqVO).setUserId(userId) .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); @@ -72,6 +87,13 @@ public class BpmOAEvectionServiceImpl extends BpmOABaseService implements BpmOAE if (fileItems != null && !fileItems.isEmpty()) { uploadBpmFileProcessInstanceId(processInstanceId,fileItems) ; } + + // 发起出差申请后,判断是否是当天的出差 + if (evection.getStartTime().toLocalDate().isEqual(LocalDate.now())) { + // 设置外勤打卡权限 + userApi.updateFieldworkType(getLoginUserId(), 1); + } + return evection.getId(); } @@ -80,6 +102,16 @@ public class BpmOAEvectionServiceImpl extends BpmOABaseService implements BpmOAE validateLeaveExists(id); evectionMapper.updateById(new BpmOAEvectionDO().setId(id).setResult(result)); + + // -- 自己取消 + // -- 审核拒绝 + if (BpmProcessInstanceResultEnum.REJECT.getResult().equals(result) + || BpmProcessInstanceResultEnum.CANCEL.getResult().equals(result) + || BpmProcessInstanceResultEnum.BACK.getResult().equals(result)) { + + // 发起外出申请后,设置关闭外勤打卡权限 + userApi.updateFieldworkType(getLoginUserId(), 0); + } } private void validateLeaveExists(Long id) { @@ -99,4 +131,20 @@ public class BpmOAEvectionServiceImpl extends BpmOABaseService implements BpmOAE return evectionMapper.selectOne(BpmOAEvectionDO::getProcessInstanceId, processInstanceId); } + + @Override + public List getEvectionListByStartTime(LocalDate now) { + + return evectionMapper.selectList(new LambdaQueryWrapperX() + .eq(BpmOAEvectionDO::getResult, BpmProcessInstanceResultEnum.APPROVE.getResult()) + .likeIfPresent(BpmOAEvectionDO::getStartTime, now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))); + } + + @Override + public List getEvectionListByEndTime(LocalDate date) { + + return evectionMapper.selectList(new LambdaQueryWrapperX() + .eq(BpmOAEvectionDO::getResult, BpmProcessInstanceResultEnum.APPROVE.getResult()) + .likeIfPresent(BpmOAEvectionDO::getEndTime, date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))); + } } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAInvoiceService.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAInvoiceService.java new file mode 100644 index 00000000..0c89c696 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAInvoiceService.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.bpm.service.oa; + +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.invoice.BpmOAInvoiceCreateReqVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAInvoiceDO; + +import javax.validation.Valid; + +/** + * 开票申请 Service 接口 + * + * @author 符溶馨 + + */ +public interface BpmOAInvoiceService { + + /** + * 创建开票申请 + * + * @param userId 用户编号 + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createInvoice(Long userId, @Valid BpmOAInvoiceCreateReqVO createReqVO); + + /** + * 更新开票申请的状态 + * + * @param id 编号 + * @param result 结果 + */ + void updateInvoiceResult(Long id, Integer result); + + /** + * 获得开票申请 + * + * @param id 编号 + * @return 开票申请 + */ + BpmOAInvoiceDO getInvoice(Long id); + + /** + * 获得指定开票申请 + * @param processInstanceId 流程实例编号 + * @return 开票申请 + */ + BpmOAInvoiceDO getByProcessInstanceId(String processInstanceId); +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAInvoiceServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAInvoiceServiceImpl.java new file mode 100644 index 00000000..37ef8ccb --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAInvoiceServiceImpl.java @@ -0,0 +1,107 @@ +package cn.iocoder.yudao.module.bpm.service.oa; + +import cn.hutool.core.collection.CollectionUtil; +import cn.iocoder.yudao.framework.common.pojo.UploadUserFile; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +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.invoice.BpmOAInvoiceCreateReqVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAInvoiceDO; +import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAInvoiceMapper; +import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; +import cn.iocoder.yudao.module.bpm.service.task.BpmHistoryProcessInstanceService; +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_INVOICE_NOT_EXISTS; + +/** + * OA 开票申请 Service 实现类 + * + * @author 符溶馨 + + */ +@Service +@Validated +public class BpmOAInvoiceServiceImpl extends BpmOABaseService implements BpmOAInvoiceService{ + + /** + * OA 开票申请对应的流程定义 KEY + */ + public static final String PROCESS_KEY = "oa_invoice_2"; + + @Resource + private BpmOAInvoiceMapper invoiceMapper; + + @Resource + private BpmProcessInstanceApi processInstanceApi; + + @Resource + private BpmHistoryProcessInstanceService historyProcessInstanceService; + + @Override + public Long createInvoice(Long userId, BpmOAInvoiceCreateReqVO createReqVO) { + + //插入OA 开票申请 + BpmOAInvoiceDO invoice = BeanUtils.toBean(createReqVO, BpmOAInvoiceDO.class) + .setUserId(userId) + .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); + invoiceMapper.insert(invoice) ; + + // 发起 BPM 流程 + Map processInstanceVariables = new HashMap<>(); + String processInstanceId = processInstanceApi.createProcessInstance(userId, + new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY) + .setVariables(processInstanceVariables).setBusinessKey(String.valueOf(invoice.getId()))).getCheckedData(); + + // 将工作流的编号,更新到 OA 开票申请单中 + invoiceMapper.updateById(new BpmOAInvoiceDO().setId(invoice.getId()).setProcessInstanceId(processInstanceId)); + + if (createReqVO.getProcessInstanceId() != null && createReqVO.getResult() == 3) { + + historyProcessInstanceService.createHistoryProcessInstance(processInstanceId, createReqVO.getProcessInstanceId()); + } + + List fileItems = createReqVO.getFileItems() ; + //这里的逻辑,如果fileItems不为空,且有数据,那么说明是上传了附件的,则需要更工作流文件表对应的实例Id + if (fileItems != null && !fileItems.isEmpty()) { + uploadBpmFileProcessInstanceId(processInstanceId,fileItems) ; + } + return invoice.getId(); + } + + @Override + public void updateInvoiceResult(Long id, Integer result) { + + validateLeaveExists(id); + invoiceMapper.updateById(new BpmOAInvoiceDO().setId(id).setResult(result)); + } + + private void validateLeaveExists(Long id) { + if (invoiceMapper.selectById(id) == null) { + throw exception(OA_INVOICE_NOT_EXISTS); + } + } + + @Override + public BpmOAInvoiceDO getInvoice(Long id) { + + return invoiceMapper.selectById(id); + } + + @Override + public BpmOAInvoiceDO getByProcessInstanceId(String processInstanceId) { + + List bpmOAInvoiceDOS = invoiceMapper.selectList(BpmOAInvoiceDO::getProcessInstanceId, processInstanceId); + if (CollectionUtil.isEmpty(bpmOAInvoiceDOS)) { + return null; + } + return bpmOAInvoiceDOS.get(0); + } +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAReplacementCardService.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAReplacementCardService.java new file mode 100644 index 00000000..3818eee3 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAReplacementCardService.java @@ -0,0 +1,46 @@ +package cn.iocoder.yudao.module.bpm.service.oa; + +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.replacementCard.BpmOAReplacementCardCreateReqVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAReplacementCardDO; + +import javax.validation.Valid; + +/** + * 补卡申请 Service 接口 + * + * @author 符溶馨 + */ +public interface BpmOAReplacementCardService { + + /** + * 创建补卡申请 + * + * @param userId 用户编号 + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createReplacementCard(Long userId, @Valid BpmOAReplacementCardCreateReqVO createReqVO); + + /** + * 更新补卡申请的状态 + * + * @param id 编号 + * @param result 结果 + */ + void updateReplacementCardResult(Long id, Integer result); + + /** + * 获得补卡申请 + * + * @param id 编号 + * @return 补卡申请 + */ + BpmOAReplacementCardDO getReplacementCard(Long id); + + /** + * 获得指定的补卡申请 + * @param processInstanceId 流程实例编号 + * @return 补卡申请 + */ + BpmOAReplacementCardDO getByProcessInstanceId(String processInstanceId); +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAReplacementCardServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAReplacementCardServiceImpl.java new file mode 100644 index 00000000..b2507811 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAReplacementCardServiceImpl.java @@ -0,0 +1,101 @@ +package cn.iocoder.yudao.module.bpm.service.oa; + +import cn.iocoder.yudao.framework.common.pojo.UploadUserFile; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +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.replacementCard.BpmOAReplacementCardCreateReqVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAReplacementCardDO; +import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAReplacementCardMapper; +import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; +import cn.iocoder.yudao.module.bpm.service.task.BpmHistoryProcessInstanceService; +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_REPLACEMENT_CARD_NOT_EXISTS; + +/** + * OA 补卡申请 Service 实现类 + * + * @author 符溶馨 + */ +@Service +@Validated +public class BpmOAReplacementCardServiceImpl extends BpmOABaseService implements BpmOAReplacementCardService{ + + /** + * OA 补卡申请对应的流程定义 KEY + */ + public static final String PROCESS_KEY = "oa_replacementCard_2"; + + @Resource + private BpmOAReplacementCardMapper replacementCardMapper; + + @Resource + private BpmProcessInstanceApi processInstanceApi; + + @Resource + private BpmHistoryProcessInstanceService historyProcessInstanceService; + + @Override + public Long createReplacementCard(Long userId, BpmOAReplacementCardCreateReqVO createReqVO) { + + //插入OA 补卡申请 + BpmOAReplacementCardDO replacementCard = BeanUtils.toBean(createReqVO, BpmOAReplacementCardDO.class) + .setUserId(userId) + .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); + replacementCardMapper.insert(replacementCard); + + // 发起 BPM 流程 + Map processInstanceVariables = new HashMap<>(); + String processInstanceId = processInstanceApi.createProcessInstance(userId, + new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY) + .setVariables(processInstanceVariables).setBusinessKey(String.valueOf(replacementCard.getId()))).getCheckedData(); + + // 将工作流的编号,更新到 OA 补卡申请单中 + replacementCardMapper.updateById(new BpmOAReplacementCardDO().setId(replacementCard.getId()).setProcessInstanceId(processInstanceId)); + + // 判断是否为重新发起的流程 + if (createReqVO.getProcessInstanceId() != null && createReqVO.getResult() == 3) { + + historyProcessInstanceService.createHistoryProcessInstance(processInstanceId, createReqVO.getProcessInstanceId()); + } + + List fileItems = createReqVO.getFileItems() ; + //这里的逻辑,如果fileItems不为空,且有数据,那么说明是上传了附件的,则需要更工作流文件表对应的实例Id + if (fileItems != null && !fileItems.isEmpty()) { + uploadBpmFileProcessInstanceId(processInstanceId,fileItems) ; + } + return replacementCard.getId(); + } + + @Override + public void updateReplacementCardResult(Long id, Integer result) { + validateLeaveExists(id); + replacementCardMapper.updateById(new BpmOAReplacementCardDO().setId(id).setResult(result)); + } + + private void validateLeaveExists(Long id) { + if (replacementCardMapper.selectById(id) == null) { + throw exception(OA_REPLACEMENT_CARD_NOT_EXISTS); + } + } + + @Override + public BpmOAReplacementCardDO getReplacementCard(Long id) { + + return replacementCardMapper.selectById(id); + } + + @Override + public BpmOAReplacementCardDO getByProcessInstanceId(String processInstanceId) { + + return replacementCardMapper.selectOne(BpmOAReplacementCardDO::getProcessInstanceId, processInstanceId); + } +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASalaryServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASalaryServiceImpl.java index d38ba577..4efa97d9 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASalaryServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASalaryServiceImpl.java @@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.salary.BpmOASalaryCreateReqVO; import cn.iocoder.yudao.module.bpm.convert.oa.BpmOASalaryConvert; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOASalaryDO; -import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOaSalaryMapper; +import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOASalaryMapper; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; import cn.iocoder.yudao.module.bpm.service.task.BpmHistoryProcessInstanceService; import cn.iocoder.yudao.module.system.api.dept.DeptApi; @@ -37,7 +37,7 @@ public class BpmOASalaryServiceImpl extends BpmOABaseService implements BpmOASal public static final String PROCESS_KEY = "oa_salary_2"; @Resource - private BpmOaSalaryMapper salaryMapper; + private BpmOASalaryMapper salaryMapper; @Resource private BpmProcessInstanceApi processInstanceApi; diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAInvoiceResultListener.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAInvoiceResultListener.java new file mode 100644 index 00000000..db212472 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAInvoiceResultListener.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.BpmOAInvoiceService; +import cn.iocoder.yudao.module.bpm.service.oa.BpmOAInvoiceServiceImpl; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * OA 奖惩的结果的监听器实现类 + * + * @author 符溶馨 + */ +@Component +public class BpmOAInvoiceResultListener extends BpmProcessInstanceResultEventListener { + + @Resource + private BpmOAInvoiceService invoiceService; + + @Override + protected String getProcessDefinitionKey() { + return BpmOAInvoiceServiceImpl.PROCESS_KEY; + } + + @Override + protected void onEvent(BpmProcessInstanceResultEvent event) { + invoiceService.updateInvoiceResult(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/BpmOAReplacementCardResultListener.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAReplacementCardResultListener.java new file mode 100644 index 00000000..a42bbfa3 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/listener/BpmOAReplacementCardResultListener.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.BpmOAReplacementCardService; +import cn.iocoder.yudao.module.bpm.service.oa.BpmOAReplacementCardServiceImpl; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * OA 用章单的结果的监听器实现类 + * + * @author 符溶馨 + */ +@Component +public class BpmOAReplacementCardResultListener extends BpmProcessInstanceResultEventListener { + + @Resource + private BpmOAReplacementCardService ReplacementCardService; + + @Override + protected String getProcessDefinitionKey() { + + return BpmOAReplacementCardServiceImpl.PROCESS_KEY; + } + + @Override + protected void onEvent(BpmProcessInstanceResultEvent event) { + ReplacementCardService.updateReplacementCardResult(Long.parseLong(event.getBusinessKey()), event.getResult()); + } +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/application-dev.yaml b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/application-dev.yaml index 8c06870d..8282ccad 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/application-dev.yaml +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/application-dev.yaml @@ -39,17 +39,17 @@ spring: primary: master datasource: master: - name: ruoyi-vue-pro-dev - url: jdbc:mysql://rm-bp1yloyj508qld78jno.mysql.rds.aliyuncs.com:3306/${spring.datasource.dynamic.datasource.master.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + name: ruoyi-vue-pro + url: jdbc:mysql://47.97.8.94:3306/${spring.datasource.dynamic.datasource.master.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 driver-class-name: com.mysql.jdbc.Driver username: root - password: Znalyrds2024 + password: yhtkj@2024! slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 - name: ruoyi-vue-pro-dev - url: jdbc:mysql://rm-bp1yloyj508qld78jno.mysql.rds.aliyuncs.com:3306/${spring.datasource.dynamic.datasource.master.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + name: ruoyi-vue-pro + url: jdbc:mysql://47.97.8.94:3306/${spring.datasource.dynamic.datasource.master.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 driver-class-name: com.mysql.jdbc.Driver username: root - password: Znalyrds2024 + password: yhtkj@2024! # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 redis: diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-dev.yaml b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-dev.yaml index 65e07f99..cf275a61 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-dev.yaml +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-dev.yaml @@ -39,17 +39,17 @@ spring: primary: master datasource: master: - name: ruoyi-vue-pro-dev - url: jdbc:mysql://rm-bp1yloyj508qld78jno.mysql.rds.aliyuncs.com:3306/${spring.datasource.dynamic.datasource.master.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + name: ruoyi-vue-pro + url: jdbc:mysql://47.97.8.94:3306/${spring.datasource.dynamic.datasource.master.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 driver-class-name: com.mysql.jdbc.Driver username: root - password: Znalyrds2024 + password: yhtkj@2024! slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 - name: ruoyi-vue-pro-dev - url: jdbc:mysql://rm-bp1yloyj508qld78jno.mysql.rds.aliyuncs.com:3306/${spring.datasource.dynamic.datasource.master.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + name: ruoyi-vue-pro + url: jdbc:mysql://47.97.8.94:3306/${spring.datasource.dynamic.datasource.master.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 driver-class-name: com.mysql.jdbc.Driver username: root - password: Znalyrds2024 + password: yhtkj@2024! # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 redis: diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java index bb05abb8..d3c11f16 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java @@ -187,10 +187,8 @@ public interface AdminUserMapper extends BaseMapperX { queryWrapper.eq(AdminUserDO::getUserType, 1); queryWrapper.likeIfPresent(AdminUserDO::getNickname, pageReqVO.getName()); queryWrapper.inIfPresent(AdminUserDO::getDeptId, deptIds); - if ((pageReqVO.getName() == null && pageReqVO.getDeptId() == null) || pageReqVO.getMonth() != null) { - queryWrapper.eq("MONTH(t.birthday_day)", date.getMonthValue()); - queryWrapper.ge("DAY(t.birthday_day)", date.getDayOfMonth()); - } + queryWrapper.eq("MONTH(t.birthday_day)", date.getMonthValue()); + queryWrapper.ge("DAY(t.birthday_day)", date.getDayOfMonth()); queryWrapper.groupBy("t.id"); queryWrapper.orderByAsc("DAY(t.birthday_day)"); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/rpc/config/RpcConfiguration.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/rpc/config/RpcConfiguration.java index f6484473..1776eca8 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/rpc/config/RpcConfiguration.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/rpc/config/RpcConfiguration.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.system.framework.rpc.config; import cn.iocoder.yudao.module.bpm.api.model.BpmModelApi; import cn.iocoder.yudao.module.bpm.api.oa.BpmOAEntryApi; +import cn.iocoder.yudao.module.bpm.api.oa.BpmOAEvectionApi; import cn.iocoder.yudao.module.bpm.api.oa.BpmOAGoOutApi; import cn.iocoder.yudao.module.infra.api.config.ConfigApi; import cn.iocoder.yudao.module.infra.api.file.FileApi; @@ -11,6 +12,6 @@ import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.annotation.Configuration; @Configuration(proxyBeanMethods = false) -@EnableFeignClients(clients = {FileApi.class, WebSocketSenderApi.class, FactoryInfoApi.class, BpmModelApi.class, BpmOAGoOutApi.class, BpmOAEntryApi.class, ConfigApi.class}) +@EnableFeignClients(clients = {FileApi.class, WebSocketSenderApi.class, FactoryInfoApi.class, BpmModelApi.class, BpmOAGoOutApi.class, BpmOAEntryApi.class, ConfigApi.class, BpmOAEvectionApi.class}) public class RpcConfiguration { } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/fieldwork/FieldworkJob.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/fieldwork/FieldworkJob.java index f8041de4..937d3448 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/fieldwork/FieldworkJob.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/fieldwork/FieldworkJob.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.tenant.core.job.TenantJob; import cn.iocoder.yudao.module.bpm.api.oa.BpmOAEntryApi; +import cn.iocoder.yudao.module.bpm.api.oa.BpmOAEvectionApi; import cn.iocoder.yudao.module.bpm.api.oa.BpmOAGoOutApi; import cn.iocoder.yudao.module.bpm.api.oa.vo.BpmOAEntryDTO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; @@ -35,6 +36,9 @@ public class FieldworkJob { @Resource private BpmOAEntryApi entryApi; + @Resource + private BpmOAEvectionApi evectionApi; + /** * 外勤打卡权限调整, 针对外出申请流程 */ @@ -48,15 +52,6 @@ public class FieldworkJob { // 获取用户编号 Map> goOutList = goOutApi.getLeaveListByTime().getCheckedData(); - if (CollectionUtil.isNotEmpty(goOutList.get("now"))) { - - // 讲需要当天外出的用户,设置外勤打卡权限 - adminUserMapper.update(new AdminUserDO().setFieldworkFlag(1).setFieldworkType(2), - new LambdaQueryWrapper() - .in(AdminUserDO::getId, goOutList.get("now")) - .ne(AdminUserDO::getFieldworkType, 1)); - } - if (CollectionUtil.isNotEmpty(goOutList.get("yesterday"))) { // 将昨日外出的用户,关闭外勤打卡权限 @@ -65,6 +60,15 @@ public class FieldworkJob { .in(AdminUserDO::getId, goOutList.get("yesterday")) .eq(AdminUserDO::getFieldworkType, 2)); } + + if (CollectionUtil.isNotEmpty(goOutList.get("now"))) { + + // 讲需要当天外出的用户,设置外勤打卡权限 + adminUserMapper.update(new AdminUserDO().setFieldworkFlag(1).setFieldworkType(2), + new LambdaQueryWrapper() + .in(AdminUserDO::getId, goOutList.get("now")) + .ne(AdminUserDO::getFieldworkType, 1)); + } }catch (Exception ex) { log.info(ex.toString()); } @@ -72,10 +76,46 @@ public class FieldworkJob { // 修改的入职日期为当天的用户状态 updEntryUser(); + // 修改出差人员的外勤打卡权限 + updateEvection(); + // 返回执行成功 return ReturnT.SUCCESS; } + /** + * 修改出差人员的外勤打卡权限 + */ + private void updateEvection() { + + // 外勤打卡权限变更 + try { + + // 获取用户编号 + Map> list = evectionApi.getEvectionUserList().getCheckedData(); + + if (CollectionUtil.isNotEmpty(list.get("off"))) { + + // 将昨日出差的用户,关闭外勤打卡权限 + adminUserMapper.update(new AdminUserDO().setFieldworkFlag(0).setFieldworkType(0), + new LambdaQueryWrapper() + .in(AdminUserDO::getId, list.get("off")) + .eq(AdminUserDO::getFieldworkType, 2)); + } + + if (CollectionUtil.isNotEmpty(list.get("on"))) { + + // 讲需要当天出差的用户,设置外勤打卡权限 + adminUserMapper.update(new AdminUserDO().setFieldworkFlag(1).setFieldworkType(2), + new LambdaQueryWrapper() + .in(AdminUserDO::getId, list.get("on")) + .ne(AdminUserDO::getFieldworkType, 1)); + } + }catch (Exception ex) { + log.info(ex.toString()); + } + } + /** * 修改的入职日期为当天的用户状态 */ diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml index 6c9c05dd..36067498 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml @@ -39,17 +39,17 @@ spring: primary: master datasource: master: - name: ruoyi-vue-pro-dev - url: jdbc:mysql://rm-bp1yloyj508qld78jno.mysql.rds.aliyuncs.com:3306/${spring.datasource.dynamic.datasource.master.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + name: ruoyi-vue-pro + url: jdbc:mysql://47.97.8.94:3306/${spring.datasource.dynamic.datasource.master.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 driver-class-name: com.mysql.jdbc.Driver username: root - password: Znalyrds2024 + password: yhtkj@2024! slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 name: ruoyi-vue-pro-dev - url: jdbc:mysql://rm-bp1yloyj508qld78jno.mysql.rds.aliyuncs.com:3306/${spring.datasource.dynamic.datasource.master.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://47.97.8.94:3306/${spring.datasource.dynamic.datasource.master.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 driver-class-name: com.mysql.jdbc.Driver username: root - password: Znalyrds2024 + password: yhtkj@2024! # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 redis: diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/application-dev.yaml b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/application-dev.yaml index 4b44e673..75ef483e 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/application-dev.yaml +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/application-dev.yaml @@ -39,17 +39,17 @@ spring: primary: master datasource: master: - name: ruoyi-vue-pro-dev - url: jdbc:mysql://rm-bp1yloyj508qld78jno.mysql.rds.aliyuncs.com:3306/${spring.datasource.dynamic.datasource.master.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + name: ruoyi-vue-pro + url: jdbc:mysql://47.97.8.94:3306/${spring.datasource.dynamic.datasource.master.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 driver-class-name: com.mysql.jdbc.Driver username: root - password: Znalyrds2024 + password: yhtkj@2024! slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 - name: ruoyi-vue-pro-dev - url: jdbc:mysql://rm-bp1yloyj508qld78jno.mysql.rds.aliyuncs.com:3306/${spring.datasource.dynamic.datasource.master.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + name: ruoyi-vue-pro + url: jdbc:mysql://47.97.8.94:3306/${spring.datasource.dynamic.datasource.master.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 driver-class-name: com.mysql.jdbc.Driver username: root - password: Znalyrds2024 + password: yhtkj@2024! # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 redis: