refactor: 单据审核改为审批配置状态机(新增:audit接口/审核人字段/DB变更脚本)
已删除20个文件
已添加18个文件
已修改134个文件
| | |
| | | |
| | | import java.io.IOException; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | import static cn.iocoder.yudao.framework.common.pojo.PageParam.PAGE_SIZE_NONE; |
| | | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| | | |
| | | @Tag(name = "管çåå° - CRM éæ·ç³è¯·") |
| | | @RestController |
| | |
| | | return success(true); |
| | | } |
| | | |
| | | @PutMapping("/audit") |
| | | @Operation(summary = "审æ¹éæ·ç³è¯·ï¼éè¿/驳åï¼") |
| | | @PreAuthorize("@ss.hasPermission('crm:cancellation:update')") |
| | | public CommonResult<Boolean> auditCancellation(@Valid @RequestBody CrmCancellationAuditReqVO auditReqVO) { |
| | | cancellationService.auditCancellation(auditReqVO); |
| | | return success(true); |
| | | } |
| | | |
| | | @PutMapping("/submit") |
| | | @Operation(summary = "æäº¤éæ·ç³è¯·å®¡æ¹") |
| | | @Operation(summary = "æäº¤éæ·ç³è¯·å®¡æ¹ï¼è稿/å®¡æ ¸ä¸éè¿â审æ¹ä¸ï¼ï¼å®¡æ¹äººç±å®¡æ¹é
ç½®ç»ä¸æå®") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @PreAuthorize("@ss.hasPermission('crm:cancellation:update')") |
| | | public CommonResult<Boolean> submitCancellation(@RequestParam("id") Long id, |
| | | @RequestParam("processDefinitionKey") String processDefinitionKey) { |
| | | cancellationService.submitCancellation(id, processDefinitionKey, getLoginUserId()); |
| | | public CommonResult<Boolean> submitCancellation(@RequestParam("id") Long id) { |
| | | cancellationService.submitCancellation(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approve-process-list") |
| | | @Operation(summary = "è·å¾éæ·ç³è¯·å®¡æ¹æµç¨å®ä¹å表") |
| | | @PutMapping("/audit") |
| | | @Operation(summary = "å®¡æ ¸éæ·ç³è¯·ï¼å®¡æ¹ä¸âå®¡æ ¸éè¿/å®¡æ ¸ä¸éè¿ï¼ï¼ä»
审æ¹äººæ¬äººå¯æä½") |
| | | @PreAuthorize("@ss.hasPermission('crm:cancellation:audit')") |
| | | public CommonResult<Boolean> auditCancellation(@Valid @RequestBody CrmCancellationAuditReqVO auditReqVO) { |
| | | cancellationService.auditCancellation(auditReqVO.getId(), auditReqVO.getPass(), auditReqVO.getReviewRemark()); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approver-ids") |
| | | @Operation(summary = "è·å¾éæ·ç³è¯·ç审æ¹äººç¼å·éåï¼ä¾åç«¯å¤ææ¯å¦å±ç¤ºå®¡æ ¸æé®") |
| | | @PreAuthorize("@ss.hasPermission('crm:cancellation:query')") |
| | | public CommonResult<List<Map<String, Object>>> getCancellationApproveProcessDefinitionList() { |
| | | return success(cancellationService.getCancellationApproveProcessDefinitionList()); |
| | | public CommonResult<Set<Long>> getApproverUserIds() { |
| | | return success(cancellationService.getCancellationApproverUserIds()); |
| | | } |
| | | |
| | | @DeleteMapping("/delete") |
| | |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | @Schema(description = "管çåå° - CRM éæ·ç³è¯·å®¡æ¹ Request VO") |
| | | /** |
| | | * CRM éæ·ç³è¯·å®¡æ ¸ Request VO |
| | | * |
| | | * å®¡æ ¸éè¿ / ä¸éè¿å
±ç¨æ¬ VOï¼ç± pass åºåï¼ |
| | | * éè¿æ¶å®¡æ ¸æè§éå¡«ï¼ä¸éè¿æ¶å®¡æ ¸æè§ï¼ä¸éè¿åå ï¼å¿
å¡«ï¼ç± Service æ ¡éªã |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Schema(description = "管çåå° - CRM éæ·ç³è¯·å®¡æ ¸ Request VO") |
| | | @Data |
| | | public class CrmCancellationAuditReqVO { |
| | | |
| | | @Schema(description = "éæ·ç³è¯·ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @Schema(description = "éæ·ç³è¯·ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| | | @NotNull(message = "éæ·ç³è¯·ç¼å·ä¸è½ä¸ºç©º") |
| | | private Long id; |
| | | |
| | | @Schema(description = "审æ¹ç»æï¼20=éè¿ / 30=驳å", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @NotNull(message = "审æ¹ç»æä¸è½ä¸ºç©º") |
| | | private Integer auditStatus; |
| | | @Schema(description = "æ¯å¦éè¿ï¼true=å®¡æ ¸éè¿ / false=å®¡æ ¸ä¸éè¿", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") |
| | | @NotNull(message = "è¯·éæ©å®¡æ ¸ç»æ") |
| | | private Boolean pass; |
| | | |
| | | @Schema(description = "å®¡æ¹æè§") |
| | | private String remark; |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶éå¡« / å®¡æ ¸ä¸éè¿æ¶å¿
å¡«ï¼å³ä¸éè¿åå ï¼", example = "请å
ç»æ¸
æ¬ è´¹") |
| | | private String reviewRemark; |
| | | |
| | | } |
| | |
| | | @DictFormat(CRM_AUDIT_STATUS) |
| | | private Integer auditStatus; |
| | | |
| | | @Schema(description = "æµç¨å®ä¾ID") |
| | | private String processInstanceId; |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·") |
| | | private Long reviewerId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººå§å") |
| | | private String reviewerName; |
| | | |
| | | @Schema(description = "å®¡æ ¸æ¶é´") |
| | | private LocalDateTime reviewTime; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼") |
| | | private String reviewRemark; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | @ExcelProperty("夿³¨") |
| | |
| | | @Schema(description = "审æ¹ç¶æï¼0è稿/10å¾
审æ¹/20éè¿/30驳åï¼", example = "0") |
| | | private Integer auditStatus; |
| | | |
| | | @Schema(description = "æµç¨å®ä¾ID") |
| | | private String processInstanceId; |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·") |
| | | private Long reviewerId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººå§å") |
| | | private String reviewerName; |
| | | |
| | | @Schema(description = "å®¡æ ¸æ¶é´") |
| | | private LocalDateTime reviewTime; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼") |
| | | private String reviewRemark; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | |
| | | import cn.iocoder.yudao.framework.common.util.number.NumberUtils; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractAuditReqVO; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractPageReqVO; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractRespVO; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractSaveReqVO; |
| | |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | import java.util.stream.Stream; |
| | | |
| | | import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; |
| | |
| | | } |
| | | |
| | | @PutMapping("/submit") |
| | | @Operation(summary = "æäº¤åå审æ¹") |
| | | @Operation(summary = "æäº¤åå审æ¹ï¼æªæäº¤/å®¡æ ¸ä¸éè¿â审æ¹ä¸ï¼ï¼å®¡æ¹äººç±å®¡æ¹é
ç½®ç»ä¸æå®") |
| | | @Parameter(name = "id", description = "ååç¼å·", required = true) |
| | | @PreAuthorize("@ss.hasPermission('crm:contract:update')") |
| | | public CommonResult<Boolean> submitContract(@RequestParam("id") Long id, |
| | | @RequestParam("processDefinitionKey") String processDefinitionKey) { |
| | | contractService.submitContract(id, processDefinitionKey, getLoginUserId()); |
| | | public CommonResult<Boolean> submitContract(@RequestParam("id") Long id) { |
| | | contractService.submitContract(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approve-process-list") |
| | | @Operation(summary = "è·åååå®¡æ¹æµç¨å表") |
| | | @PutMapping("/audit") |
| | | @Operation(summary = "å®¡æ ¸ååï¼å®¡æ¹ä¸âå®¡æ ¸éè¿/å®¡æ ¸ä¸éè¿ï¼ï¼ä»
审æ¹äººæ¬äººå¯æä½") |
| | | @PreAuthorize("@ss.hasPermission('crm:contract:audit')") |
| | | public CommonResult<Boolean> auditContract(@Valid @RequestBody CrmContractAuditReqVO auditReqVO) { |
| | | contractService.auditContract(auditReqVO.getId(), auditReqVO.getPass(), auditReqVO.getReviewRemark()); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approver-ids") |
| | | @Operation(summary = "è·å¾ååç审æ¹äººç¼å·éåï¼ä¾åç«¯å¤ææ¯å¦å±ç¤ºå®¡æ ¸æé®") |
| | | @PreAuthorize("@ss.hasPermission('crm:contract:query')") |
| | | public CommonResult<List<Map<String, Object>>> getContractApproveProcessList() { |
| | | return success(contractService.getContractApproveProcessDefinitionList()); |
| | | public CommonResult<Set<Long>> getApproverUserIds() { |
| | | return success(contractService.getContractApproverUserIds()); |
| | | } |
| | | |
| | | private List<CrmContractRespVO> buildContractDetailList(List<CrmContractDO> contractList) { |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * CRM ååå®¡æ ¸ Request VO |
| | | * |
| | | * å®¡æ ¸éè¿ / ä¸éè¿å
±ç¨æ¬ VOï¼ç± pass åºåï¼ |
| | | * éè¿æ¶å®¡æ ¸æè§éå¡«ï¼ä¸éè¿æ¶å®¡æ ¸æè§ï¼ä¸éè¿åå ï¼å¿
å¡«ï¼ç± Service æ ¡éªã |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Schema(description = "管çåå° - CRM ååå®¡æ ¸ Request VO") |
| | | @Data |
| | | public class CrmContractAuditReqVO { |
| | | |
| | | @Schema(description = "ååç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| | | @NotNull(message = "ååç¼å·ä¸è½ä¸ºç©º") |
| | | private Long id; |
| | | |
| | | @Schema(description = "æ¯å¦éè¿ï¼true=å®¡æ ¸éè¿ / false=å®¡æ ¸ä¸éè¿", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") |
| | | @NotNull(message = "è¯·éæ©å®¡æ ¸ç»æ") |
| | | private Boolean pass; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶éå¡« / å®¡æ ¸ä¸éè¿æ¶å¿
å¡«ï¼å³ä¸éè¿åå ï¼", example = "éé¢éä¸å®¢æ·åæ¬¡æ ¸å¯¹") |
| | | private String reviewRemark; |
| | | |
| | | } |
| | |
| | | @ExcelProperty(value = "æå±é¨é¨", index = 16) |
| | | private String ownerUserDeptName; |
| | | |
| | | @Schema(description = "工使µç¼å·", example = "1043") |
| | | private String processInstanceId; |
| | | |
| | | @Schema(description = "审æ¹ç¶æ", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") |
| | | private Integer auditStatus; |
| | | |
| | |
| | | @ExcelProperty(value = "ååç¶æ", index = 20) |
| | | private String auditStatusName; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·", example = "1024") |
| | | private Long reviewerId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººå§å", example = "å¼ ä¸") |
| | | private String reviewerName; |
| | | |
| | | @Schema(description = "å®¡æ ¸æ¶é´") |
| | | private LocalDateTime reviewTime; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼ä¸éè¿æ¶å³ä¸éè¿åå ï¼", example = "éé¢éä¸å®¢æ·åæ¬¡æ ¸å¯¹") |
| | | private String reviewRemark; |
| | | |
| | | @Schema(description = "ä¸åæ¥æ", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @ExcelProperty(value = "ä¸åæ¶é´", index = 6) |
| | | private LocalDateTime orderDate; |
| | |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractRespVO; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.invoice.vo.invoice.CrmInvoiceAuditReqVO; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.invoice.vo.invoice.CrmInvoicePageReqVO; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.invoice.vo.invoice.CrmInvoiceRespVO; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.invoice.vo.invoice.CrmInvoiceSaveReqVO; |
| | |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | import java.util.stream.Stream; |
| | | |
| | | import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; |
| | |
| | | } |
| | | |
| | | @PutMapping("/submit") |
| | | @Operation(summary = "æäº¤å¼ç¥¨å®¡æ¹") |
| | | @Operation(summary = "æäº¤å¼ç¥¨å®¡æ¹ï¼è稿/å®¡æ ¸ä¸éè¿â审æ¹ä¸ï¼ï¼å®¡æ¹äººç±å®¡æ¹é
ç½®ç»ä¸æå®") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @PreAuthorize("@ss.hasPermission('crm:invoice:update')") |
| | | public CommonResult<Boolean> submitInvoice(@RequestParam("id") Long id) { |
| | | invoiceService.submitInvoice(id, getLoginUserId()); |
| | | invoiceService.submitInvoice(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @PutMapping("/audit") |
| | | @Operation(summary = "å®¡æ ¸å¼ç¥¨ï¼å®¡æ¹ä¸âå®¡æ ¸éè¿/å®¡æ ¸ä¸éè¿ï¼ï¼ä»
审æ¹äººæ¬äººå¯æä½") |
| | | @PreAuthorize("@ss.hasPermission('crm:invoice:audit')") |
| | | public CommonResult<Boolean> auditInvoice(@Valid @RequestBody CrmInvoiceAuditReqVO auditReqVO) { |
| | | invoiceService.auditInvoice(auditReqVO.getId(), auditReqVO.getPass(), auditReqVO.getReviewRemark()); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approver-ids") |
| | | @Operation(summary = "è·å¾å¼ç¥¨ç审æ¹äººç¼å·éåï¼ä¾åç«¯å¤ææ¯å¦å±ç¤ºå®¡æ ¸æé®") |
| | | @PreAuthorize("@ss.hasPermission('crm:invoice:query')") |
| | | public CommonResult<Set<Long>> getApproverUserIds() { |
| | | return success(invoiceService.getInvoiceApproverUserIds()); |
| | | } |
| | | |
| | | @GetMapping("/audit-count") |
| | | @Operation(summary = "è·å¾å¾
å®¡æ ¸å¼ç¥¨æ°é") |
| | | @PreAuthorize("@ss.hasPermission('crm:invoice:query')") |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.crm.controller.admin.invoice.vo.invoice; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * CRM å¼ç¥¨å®¡æ ¸ Request VO |
| | | * |
| | | * å®¡æ ¸éè¿ / ä¸éè¿å
±ç¨æ¬ VOï¼ç± pass åºåï¼ |
| | | * éè¿æ¶å®¡æ ¸æè§éå¡«ï¼ä¸éè¿æ¶å®¡æ ¸æè§ï¼ä¸éè¿åå ï¼å¿
å¡«ï¼ç± Service æ ¡éªã |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Schema(description = "管çåå° - CRM å¼ç¥¨å®¡æ ¸ Request VO") |
| | | @Data |
| | | public class CrmInvoiceAuditReqVO { |
| | | |
| | | @Schema(description = "å¼ç¥¨ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| | | @NotNull(message = "å¼ç¥¨ç¼å·ä¸è½ä¸ºç©º") |
| | | private Long id; |
| | | |
| | | @Schema(description = "æ¯å¦éè¿ï¼true=å®¡æ ¸éè¿ / false=å®¡æ ¸ä¸éè¿", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") |
| | | @NotNull(message = "è¯·éæ©å®¡æ ¸ç»æ") |
| | | private Boolean pass; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶éå¡« / å®¡æ ¸ä¸éè¿æ¶å¿
å¡«ï¼å³ä¸éè¿åå ï¼", example = "å票æ¬å¤´æè¯¯") |
| | | private String reviewRemark; |
| | | |
| | | } |
| | |
| | | @ExcelProperty("è´è´£äººé¨é¨") |
| | | private String ownerUserDeptName; |
| | | |
| | | @Schema(description = "工使µç¼å·", example = "1043") |
| | | @ExcelProperty("工使µç¼å·") |
| | | private String processInstanceId; |
| | | |
| | | @Schema(description = "审æ¹ç¶æ", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") |
| | | @ExcelProperty(value = "审æ¹ç¶æ", converter = DictConvert.class) |
| | | @DictFormat(DictTypeConstants.CRM_AUDIT_STATUS) |
| | | private Integer auditStatus; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·") |
| | | private Long reviewerId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººå§å") |
| | | private String reviewerName; |
| | | |
| | | @Schema(description = "å®¡æ ¸æ¶é´") |
| | | private LocalDateTime reviewTime; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼") |
| | | private String reviewRemark; |
| | | |
| | | @Schema(description = "夿³¨", example = "夿³¨") |
| | | @ExcelProperty("夿³¨") |
| | | private String remark; |
| | |
| | | |
| | | import java.io.IOException; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | import static cn.iocoder.yudao.framework.common.pojo.PageParam.PAGE_SIZE_NONE; |
| | | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| | | |
| | | @Tag(name = "管çåå° - CRM éè´¹å") |
| | | @RestController |
| | |
| | | return success(true); |
| | | } |
| | | |
| | | @PutMapping("/audit") |
| | | @Operation(summary = "审æ¹éè´¹åï¼éè¿/驳åï¼") |
| | | @PreAuthorize("@ss.hasPermission('crm:refund:update')") |
| | | public CommonResult<Boolean> auditRefund(@Valid @RequestBody CrmRefundAuditReqVO auditReqVO) { |
| | | refundService.auditRefund(auditReqVO); |
| | | return success(true); |
| | | } |
| | | |
| | | @PutMapping("/submit") |
| | | @Operation(summary = "æäº¤éè´¹å审æ¹") |
| | | @Operation(summary = "æäº¤éè´¹å审æ¹ï¼è稿/å®¡æ ¸ä¸éè¿â审æ¹ä¸ï¼ï¼å®¡æ¹äººç±å®¡æ¹é
ç½®ç»ä¸æå®") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @PreAuthorize("@ss.hasPermission('crm:refund:update')") |
| | | public CommonResult<Boolean> submitRefund(@RequestParam("id") Long id, |
| | | @RequestParam("processDefinitionKey") String processDefinitionKey) { |
| | | refundService.submitRefund(id, processDefinitionKey, getLoginUserId()); |
| | | public CommonResult<Boolean> submitRefund(@RequestParam("id") Long id) { |
| | | refundService.submitRefund(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approve-process-list") |
| | | @Operation(summary = "è·å¾éè´¹åå®¡æ¹æµç¨å®ä¹å表") |
| | | @PutMapping("/audit") |
| | | @Operation(summary = "å®¡æ ¸éè´¹åï¼å®¡æ¹ä¸âå®¡æ ¸éè¿/å®¡æ ¸ä¸éè¿ï¼ï¼ä»
审æ¹äººæ¬äººå¯æä½") |
| | | @PreAuthorize("@ss.hasPermission('crm:refund:audit')") |
| | | public CommonResult<Boolean> auditRefund(@Valid @RequestBody CrmRefundAuditReqVO auditReqVO) { |
| | | refundService.auditRefund(auditReqVO.getId(), auditReqVO.getPass(), auditReqVO.getReviewRemark()); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approver-ids") |
| | | @Operation(summary = "è·å¾éè´¹åç审æ¹äººç¼å·éåï¼ä¾åç«¯å¤ææ¯å¦å±ç¤ºå®¡æ ¸æé®") |
| | | @PreAuthorize("@ss.hasPermission('crm:refund:query')") |
| | | public CommonResult<List<Map<String, Object>>> getRefundApproveProcessDefinitionList() { |
| | | return success(refundService.getRefundApproveProcessDefinitionList()); |
| | | public CommonResult<Set<Long>> getApproverUserIds() { |
| | | return success(refundService.getRefundApproverUserIds()); |
| | | } |
| | | |
| | | @DeleteMapping("/delete") |
| | |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | @Schema(description = "管çåå° - CRM éè´¹åå®¡æ¹ Request VO") |
| | | /** |
| | | * CRM éè´¹åå®¡æ ¸ Request VO |
| | | * |
| | | * å®¡æ ¸éè¿ / ä¸éè¿å
±ç¨æ¬ VOï¼ç± pass åºåï¼ |
| | | * éè¿æ¶å®¡æ ¸æè§éå¡«ï¼ä¸éè¿æ¶å®¡æ ¸æè§ï¼ä¸éè¿åå ï¼å¿
å¡«ï¼ç± Service æ ¡éªã |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Schema(description = "管çåå° - CRM éè´¹åå®¡æ ¸ Request VO") |
| | | @Data |
| | | public class CrmRefundAuditReqVO { |
| | | |
| | | @Schema(description = "éè´¹åç¼å·", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @Schema(description = "éè´¹åç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| | | @NotNull(message = "éè´¹åç¼å·ä¸è½ä¸ºç©º") |
| | | private Long id; |
| | | |
| | | @Schema(description = "审æ¹ç»æï¼20=éè¿ / 30=驳å", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @NotNull(message = "审æ¹ç»æä¸è½ä¸ºç©º") |
| | | private Integer auditStatus; |
| | | @Schema(description = "æ¯å¦éè¿ï¼true=å®¡æ ¸éè¿ / false=å®¡æ ¸ä¸éè¿", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") |
| | | @NotNull(message = "è¯·éæ©å®¡æ ¸ç»æ") |
| | | private Boolean pass; |
| | | |
| | | @Schema(description = "å®¡æ¹æè§") |
| | | private String remark; |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶éå¡« / å®¡æ ¸ä¸éè¿æ¶å¿
å¡«ï¼å³ä¸éè¿åå ï¼", example = "éé¢éä¸å®¢æ·åæ¬¡æ ¸å¯¹") |
| | | private String reviewRemark; |
| | | |
| | | } |
| | |
| | | @DictFormat(CRM_AUDIT_STATUS) |
| | | private Integer auditStatus; |
| | | |
| | | @Schema(description = "æµç¨å®ä¾ID") |
| | | private String processInstanceId; |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·") |
| | | private Long reviewerId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººå§å") |
| | | private String reviewerName; |
| | | |
| | | @Schema(description = "å®¡æ ¸æ¶é´") |
| | | private LocalDateTime reviewTime; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼") |
| | | private String reviewRemark; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | @ExcelProperty("夿³¨") |
| | |
| | | @Schema(description = "审æ¹ç¶æï¼0è稿/10å¾
审æ¹/20éè¿/30驳åï¼", example = "0") |
| | | private Integer auditStatus; |
| | | |
| | | @Schema(description = "æµç¨å®ä¾ID") |
| | | private String processInstanceId; |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·") |
| | | private Long reviewerId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººå§å") |
| | | private String reviewerName; |
| | | |
| | | @Schema(description = "å®¡æ ¸æ¶é´") |
| | | private LocalDateTime reviewTime; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼") |
| | | private String reviewRemark; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | |
| | | private String applyUserName; |
| | | private LocalDateTime applyTime; |
| | | /** |
| | | * 审æ¹ç¶æï¼0è稿/10å¾
审æ¹/20éè¿/30驳å |
| | | * 审æ¹ç¶æ |
| | | * |
| | | * æä¸¾ {@link cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum} |
| | | */ |
| | | private Integer auditStatus; |
| | | private String processInstanceId; |
| | | /** |
| | | * å®¡æ ¸äººç¨æ·ç¼å· |
| | | * |
| | | * 审æ¹äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç cancellation_approveï¼ï¼ |
| | | * æäº¤æ¶ä¸æå®ï¼æ¤å¤è®°å½å®é
æ§è¡å®¡æ ¸çç¨æ·ã |
| | | */ |
| | | private Long reviewerId; |
| | | /** å®¡æ ¸äººå§åï¼å®¡æ ¸æ¶åä½è®°å½ï¼é¿å
å表å±ç¤ºåæ¥ç¨æ·ï¼ */ |
| | | private String reviewerName; |
| | | /** å®¡æ ¸æ¶é´ */ |
| | | private LocalDateTime reviewTime; |
| | | /** å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼ */ |
| | | private String reviewRemark; |
| | | private String remark; |
| | | |
| | | } |
| | |
| | | private Long ownerUserId; |
| | | |
| | | /** |
| | | * 工使µç¼å· |
| | | * |
| | | * å
³è ProcessInstance ç id 屿§ |
| | | */ |
| | | private String processInstanceId; |
| | | /** |
| | | * 审æ¹ç¶æ |
| | | * |
| | | * ç±ä¸å¡æµç¨é©±å¨ï¼ä¸æ¥ååç«¯ç´æ¥èµå¼ï¼å建æ¶åºå®ä¸ºæªæäº¤ï¼æäº¤å®¡æ¹å置为审æ¹ä¸ï¼ |
| | | * å®¡æ ¸éè¿ / ä¸éè¿ç± {@link cn.iocoder.yudao.module.crm.service.contract.CrmContractService#auditContract} æ¨è¿ã |
| | | * |
| | | * æä¸¾ {@link CrmAuditStatusEnum} |
| | | */ |
| | | private Integer auditStatus; |
| | | /** |
| | | * å®¡æ ¸äººç¨æ·ç¼å·ï¼æäº¤å®¡æ¹æ¶ç±æäº¤äººä»ç³»ç»ç¨æ·ä¸éæ©ï¼ |
| | | * |
| | | * åªæè¯¥ç¨æ·è½å¨å表页çå°ãå®¡æ ¸ãæé®å¹¶æ§è¡å®¡æ ¸æä½ã |
| | | * å
³è AdminUserDO ç id åæ®µ |
| | | */ |
| | | private Long reviewerId; |
| | | /** |
| | | * å®¡æ ¸äººå§åï¼æäº¤å®¡æ¹æ¶åä½è®°å½ï¼é¿å
å表å±ç¤ºæ¶åæ¥ç¨æ·ï¼ |
| | | */ |
| | | private String reviewerName; |
| | | /** |
| | | * å®¡æ ¸æ¶é´ |
| | | */ |
| | | private LocalDateTime reviewTime; |
| | | /** |
| | | * å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼ |
| | | */ |
| | | private String reviewRemark; |
| | | |
| | | /** |
| | | * ä¸åæ¥æ |
| | |
| | | private String remark; |
| | | |
| | | /** |
| | | * 工使µç¼å· |
| | | * |
| | | * å
³è ProcessInstance ç id 屿§ |
| | | */ |
| | | private String processInstanceId; |
| | | /** |
| | | * 审æ¹ç¶æ |
| | | * |
| | | * æä¸¾ {@link CrmAuditStatusEnum} |
| | | */ |
| | | private Integer auditStatus; |
| | | /** |
| | | * å®¡æ ¸äººç¨æ·ç¼å· |
| | | * |
| | | * 审æ¹äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç crm_invoice_approveï¼ï¼ |
| | | * æäº¤æ¶ä¸æå®ï¼æ¤å¤è®°å½å®é
æ§è¡å®¡æ ¸çç¨æ·ã |
| | | */ |
| | | private Long reviewerId; |
| | | /** å®¡æ ¸äººå§åï¼å®¡æ ¸æ¶åä½è®°å½ï¼é¿å
å表å±ç¤ºåæ¥ç¨æ·ï¼ */ |
| | | private String reviewerName; |
| | | /** å®¡æ ¸æ¶é´ */ |
| | | private LocalDateTime reviewTime; |
| | | /** å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼ */ |
| | | private String reviewRemark; |
| | | |
| | | } |
| | |
| | | private String applyUserName; |
| | | private LocalDateTime applyTime; |
| | | /** |
| | | * 审æ¹ç¶æï¼0è稿/10å¾
审æ¹/20éè¿/30驳å |
| | | * 审æ¹ç¶æ |
| | | * |
| | | * æä¸¾ {@link cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum} |
| | | */ |
| | | private Integer auditStatus; |
| | | private String processInstanceId; |
| | | /** |
| | | * å®¡æ ¸äººç¨æ·ç¼å· |
| | | * |
| | | * 审æ¹äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç refund_approveï¼ï¼ |
| | | * æäº¤æ¶ä¸æå®ï¼æ¤å¤è®°å½å®é
æ§è¡å®¡æ ¸çç¨æ·ã |
| | | */ |
| | | private Long reviewerId; |
| | | /** å®¡æ ¸äººå§åï¼å®¡æ ¸æ¶åä½è®°å½ï¼é¿å
å表å±ç¤ºåæ¥ç¨æ·ï¼ */ |
| | | private String reviewerName; |
| | | /** å®¡æ ¸æ¶é´ */ |
| | | private LocalDateTime reviewTime; |
| | | /** å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼ */ |
| | | private String reviewRemark; |
| | | private String remark; |
| | | |
| | | } |
| | |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.cancellation.vo.CrmCancellationPageReqVO; |
| | | import cn.iocoder.yudao.module.crm.dal.dataobject.cancellation.CrmCancellationDO; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | |
| | | @Mapper |
| | |
| | | return selectPage(reqVO, buildQuery(reqVO)); |
| | | } |
| | | |
| | | /** |
| | | * æäº¤å®¡æ¹ï¼ç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | * |
| | | * ä¹æä»¥ç¨ UpdateWrapper èé updateByIdï¼MyBatis-Plus é»è®¤çåæ®µæ´æ°çç¥ä¼å¿½ç¥ nullï¼ |
| | | * ç´æ¥ updateById æ æ³æå®¡æ ¸ä¸éè¿åæ®ççå®¡æ ¸äººãå®¡æ ¸æ¶é´ãå®¡æ ¸æè§çæ£æ¸
空ã |
| | | * |
| | | * @param id éæ·ç³è¯·ç¼å· |
| | | * @param status ç®æ ç¶æï¼å®¡æ¹ä¸ï¼ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int submitAndResetAuditInfo(Long id, Integer status) { |
| | | return update(null, new LambdaUpdateWrapper<CrmCancellationDO>() |
| | | .eq(CrmCancellationDO::getId, id) |
| | | .set(CrmCancellationDO::getAuditStatus, status) |
| | | .set(CrmCancellationDO::getReviewerId, null) |
| | | .set(CrmCancellationDO::getReviewerName, null) |
| | | .set(CrmCancellationDO::getReviewTime, null) |
| | | .set(CrmCancellationDO::getReviewRemark, null)); |
| | | } |
| | | |
| | | /** |
| | | * å®¡æ ¸ï¼åå
¥å®¡æ ¸ç»æãå®¡æ ¸äººä¸å®¡æ ¸æè§ |
| | | * |
| | | * reviewRemark å
许为 nullï¼å®¡æ ¸éè¿æ¶æè§å¯éï¼ï¼æ
åæ ·ä½¿ç¨ UpdateWrapper ç´åã |
| | | * |
| | | * @param id éæ·ç³è¯·ç¼å· |
| | | * @param status ç®æ ç¶æï¼å®¡æ ¸éè¿ / å®¡æ ¸ä¸éè¿ï¼ |
| | | * @param reviewerId å®¡æ ¸äººç¼å· |
| | | * @param reviewerName å®¡æ ¸äººå§å |
| | | * @param reviewRemark å®¡æ ¸æè§ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int auditCancellation(Long id, Integer status, Long reviewerId, |
| | | String reviewerName, String reviewRemark) { |
| | | return update(null, new LambdaUpdateWrapper<CrmCancellationDO>() |
| | | .eq(CrmCancellationDO::getId, id) |
| | | .set(CrmCancellationDO::getAuditStatus, status) |
| | | .set(CrmCancellationDO::getReviewerId, reviewerId) |
| | | .set(CrmCancellationDO::getReviewerName, reviewerName) |
| | | .set(CrmCancellationDO::getReviewTime, LocalDateTime.now()) |
| | | .set(CrmCancellationDO::getReviewRemark, reviewRemark)); |
| | | } |
| | | |
| | | default List<CrmCancellationDO> selectList(CrmCancellationPageReqVO reqVO) { |
| | | return selectList(buildQuery(reqVO)); |
| | | } |
| | |
| | | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| | | import cn.iocoder.yudao.module.crm.enums.common.CrmSceneTypeEnum; |
| | | import cn.iocoder.yudao.module.crm.util.CrmPermissionUtils; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.math.BigDecimal; |
| | |
| | | return selectOne(CrmContractDO::getNo, no); |
| | | } |
| | | |
| | | /** |
| | | * æäº¤å®¡æ¹ï¼ç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | * |
| | | * ä¹æä»¥ç¨ UpdateWrapper èé updateByIdï¼MyBatis-Plus é»è®¤çåæ®µæ´æ°çç¥ä¼å¿½ç¥ nullï¼ |
| | | * ç´æ¥ updateById æ æ³æå®¡æ ¸ä¸éè¿åæ®ççå®¡æ ¸äººãå®¡æ ¸æ¶é´ãå®¡æ ¸æè§çæ£æ¸
空ã |
| | | * |
| | | * @param id ååç¼å· |
| | | * @param status ç®æ ç¶æï¼å®¡æ¹ä¸ï¼ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int submitAndResetAuditInfo(Long id, Integer status) { |
| | | return update(null, new LambdaUpdateWrapper<CrmContractDO>() |
| | | .eq(CrmContractDO::getId, id) |
| | | .set(CrmContractDO::getAuditStatus, status) |
| | | .set(CrmContractDO::getReviewerId, null) |
| | | .set(CrmContractDO::getReviewerName, null) |
| | | .set(CrmContractDO::getReviewTime, null) |
| | | .set(CrmContractDO::getReviewRemark, null)); |
| | | } |
| | | |
| | | /** |
| | | * å®¡æ ¸ï¼åå
¥å®¡æ ¸ç»æãå®¡æ ¸äººä¸å®¡æ ¸æè§ |
| | | * |
| | | * reviewRemark å
许为 nullï¼å®¡æ ¸éè¿æ¶æè§å¯éï¼ï¼æ
åæ ·ä½¿ç¨ UpdateWrapper ç´åã |
| | | * |
| | | * @param id ååç¼å· |
| | | * @param status ç®æ ç¶æï¼å®¡æ ¸éè¿ / å®¡æ ¸ä¸éè¿ï¼ |
| | | * @param reviewerId å®¡æ ¸äººç¼å· |
| | | * @param reviewerName å®¡æ ¸äººå§å |
| | | * @param reviewRemark å®¡æ ¸æè§ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int auditContract(Long id, Integer status, Long reviewerId, |
| | | String reviewerName, String reviewRemark) { |
| | | return update(null, new LambdaUpdateWrapper<CrmContractDO>() |
| | | .eq(CrmContractDO::getId, id) |
| | | .set(CrmContractDO::getAuditStatus, status) |
| | | .set(CrmContractDO::getReviewerId, reviewerId) |
| | | .set(CrmContractDO::getReviewerName, reviewerName) |
| | | .set(CrmContractDO::getReviewTime, LocalDateTime.now()) |
| | | .set(CrmContractDO::getReviewRemark, reviewRemark)); |
| | | } |
| | | |
| | | default PageResult<CrmContractDO> selectPageByCustomerId(CrmContractPageReqVO pageReqVO) { |
| | | return selectPage(pageReqVO, new LambdaQueryWrapperX<CrmContractDO>() |
| | | .eq(CrmContractDO::getCustomerId, pageReqVO.getCustomerId()) |
| | |
| | | import cn.iocoder.yudao.module.crm.enums.common.CrmSceneTypeEnum; |
| | | import cn.iocoder.yudao.module.crm.util.CrmPermissionUtils; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDateTime; |
| | | import java.util.Collection; |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | |
| | | return selectOne(CrmInvoiceDO::getNo, no); |
| | | } |
| | | |
| | | /** |
| | | * æäº¤å®¡æ¹ï¼ç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | * |
| | | * ä¹æä»¥ç¨ UpdateWrapper èé updateByIdï¼MyBatis-Plus é»è®¤çåæ®µæ´æ°çç¥ä¼å¿½ç¥ nullï¼ |
| | | * ç´æ¥ updateById æ æ³æå®¡æ ¸ä¸éè¿åæ®ççå®¡æ ¸äººãå®¡æ ¸æ¶é´ãå®¡æ ¸æè§çæ£æ¸
空ã |
| | | * |
| | | * @param id å¼ç¥¨ç¼å· |
| | | * @param status ç®æ ç¶æï¼å®¡æ¹ä¸ï¼ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int submitAndResetAuditInfo(Long id, Integer status) { |
| | | return update(null, new LambdaUpdateWrapper<CrmInvoiceDO>() |
| | | .eq(CrmInvoiceDO::getId, id) |
| | | .set(CrmInvoiceDO::getAuditStatus, status) |
| | | .set(CrmInvoiceDO::getReviewerId, null) |
| | | .set(CrmInvoiceDO::getReviewerName, null) |
| | | .set(CrmInvoiceDO::getReviewTime, null) |
| | | .set(CrmInvoiceDO::getReviewRemark, null)); |
| | | } |
| | | |
| | | /** |
| | | * å®¡æ ¸ï¼åå
¥å®¡æ ¸ç»æãå®¡æ ¸äººä¸å®¡æ ¸æè§ |
| | | * |
| | | * reviewRemark å
许为 nullï¼å®¡æ ¸éè¿æ¶æè§å¯éï¼ï¼æ
åæ ·ä½¿ç¨ UpdateWrapper ç´åã |
| | | * |
| | | * @param id å¼ç¥¨ç¼å· |
| | | * @param status ç®æ ç¶æï¼å®¡æ ¸éè¿ / å®¡æ ¸ä¸éè¿ï¼ |
| | | * @param reviewerId å®¡æ ¸äººç¼å· |
| | | * @param reviewerName å®¡æ ¸äººå§å |
| | | * @param reviewRemark å®¡æ ¸æè§ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int auditInvoice(Long id, Integer status, Long reviewerId, |
| | | String reviewerName, String reviewRemark) { |
| | | return update(null, new LambdaUpdateWrapper<CrmInvoiceDO>() |
| | | .eq(CrmInvoiceDO::getId, id) |
| | | .set(CrmInvoiceDO::getAuditStatus, status) |
| | | .set(CrmInvoiceDO::getReviewerId, reviewerId) |
| | | .set(CrmInvoiceDO::getReviewerName, reviewerName) |
| | | .set(CrmInvoiceDO::getReviewTime, LocalDateTime.now()) |
| | | .set(CrmInvoiceDO::getReviewRemark, reviewRemark)); |
| | | } |
| | | |
| | | default PageResult<CrmInvoiceDO> selectPageByCustomerId(CrmInvoicePageReqVO reqVO) { |
| | | return selectPage(reqVO, new LambdaQueryWrapperX<CrmInvoiceDO>() |
| | | .eq(CrmInvoiceDO::getCustomerId, reqVO.getCustomerId()) // å¿
é¡»ä¼ é |
| | |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.refund.vo.CrmRefundPageReqVO; |
| | | import cn.iocoder.yudao.module.crm.dal.dataobject.refund.CrmRefundDO; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | |
| | | @Mapper |
| | |
| | | return selectPage(reqVO, buildQuery(reqVO)); |
| | | } |
| | | |
| | | /** |
| | | * æäº¤å®¡æ¹ï¼ç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | * |
| | | * ä¹æä»¥ç¨ UpdateWrapper èé updateByIdï¼MyBatis-Plus é»è®¤çåæ®µæ´æ°çç¥ä¼å¿½ç¥ nullï¼ |
| | | * ç´æ¥ updateById æ æ³æå®¡æ ¸ä¸éè¿åæ®ççå®¡æ ¸äººãå®¡æ ¸æ¶é´ãå®¡æ ¸æè§çæ£æ¸
空ã |
| | | * |
| | | * @param id éè´¹åç¼å· |
| | | * @param status ç®æ ç¶æï¼å®¡æ¹ä¸ï¼ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int submitAndResetAuditInfo(Long id, Integer status) { |
| | | return update(null, new LambdaUpdateWrapper<CrmRefundDO>() |
| | | .eq(CrmRefundDO::getId, id) |
| | | .set(CrmRefundDO::getAuditStatus, status) |
| | | .set(CrmRefundDO::getReviewerId, null) |
| | | .set(CrmRefundDO::getReviewerName, null) |
| | | .set(CrmRefundDO::getReviewTime, null) |
| | | .set(CrmRefundDO::getReviewRemark, null)); |
| | | } |
| | | |
| | | /** |
| | | * å®¡æ ¸ï¼åå
¥å®¡æ ¸ç»æãå®¡æ ¸äººä¸å®¡æ ¸æè§ |
| | | * |
| | | * reviewRemark å
许为 nullï¼å®¡æ ¸éè¿æ¶æè§å¯éï¼ï¼æ
åæ ·ä½¿ç¨ UpdateWrapper ç´åã |
| | | * |
| | | * @param id éè´¹åç¼å· |
| | | * @param status ç®æ ç¶æï¼å®¡æ ¸éè¿ / å®¡æ ¸ä¸éè¿ï¼ |
| | | * @param reviewerId å®¡æ ¸äººç¼å· |
| | | * @param reviewerName å®¡æ ¸äººå§å |
| | | * @param reviewRemark å®¡æ ¸æè§ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int auditRefund(Long id, Integer status, Long reviewerId, |
| | | String reviewerName, String reviewRemark) { |
| | | return update(null, new LambdaUpdateWrapper<CrmRefundDO>() |
| | | .eq(CrmRefundDO::getId, id) |
| | | .set(CrmRefundDO::getAuditStatus, status) |
| | | .set(CrmRefundDO::getReviewerId, reviewerId) |
| | | .set(CrmRefundDO::getReviewerName, reviewerName) |
| | | .set(CrmRefundDO::getReviewTime, LocalDateTime.now()) |
| | | .set(CrmRefundDO::getReviewRemark, reviewRemark)); |
| | | } |
| | | |
| | | default List<CrmRefundDO> selectList(CrmRefundPageReqVO reqVO) { |
| | | return selectList(buildQuery(reqVO)); |
| | | } |
| | |
| | | package cn.iocoder.yudao.module.crm.service.cancellation; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.cancellation.vo.CrmCancellationAuditReqVO; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.cancellation.vo.CrmCancellationPageReqVO; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.cancellation.vo.CrmCancellationRespVO; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.cancellation.vo.CrmCancellationSaveReqVO; |
| | | import jakarta.validation.Valid; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | public interface CrmCancellationService { |
| | | |
| | |
| | | |
| | | List<CrmCancellationRespVO> getCancellationList(CrmCancellationPageReqVO reqVO); |
| | | |
| | | void auditCancellation(@Valid CrmCancellationAuditReqVO auditReqVO); |
| | | /** |
| | | * æäº¤éæ·ç³è¯·å®¡æ¹ï¼è稿 / å®¡æ ¸ä¸éè¿ â 审æ¹ä¸ï¼ |
| | | * |
| | | * 审æ¹äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç cancellation_approveï¼ï¼ |
| | | * æäº¤æ¶æ éæå®ï¼æªå¯ç¨å®¡æ¹ææªé
ç½®ææå®¡æ¹äººæ¶æåºä¸å¡å¼å¸¸ã |
| | | * |
| | | * @param id éæ·ç³è¯·ç¼å· |
| | | */ |
| | | void submitCancellation(Long id); |
| | | |
| | | void submitCancellation(Long id, String processDefinitionKey, Long userId); |
| | | /** |
| | | * è·å¾éæ·ç³è¯·å®¡æ¹ç审æ¹äººç¼å·éå |
| | | * |
| | | * ä¾åç«¯å¤æå½åç»å½ç¨æ·æ¯å¦åºå±ç¤ºãå®¡æ ¸ãæé®ï¼æªé
ç½®æ¶è¿å空éåã |
| | | * |
| | | * @return 审æ¹äººç¨æ·ç¼å·éå |
| | | */ |
| | | Set<Long> getCancellationApproverUserIds(); |
| | | |
| | | void updateCancellationAuditStatus(Long id, Integer bpmResult); |
| | | |
| | | List<Map<String, Object>> getCancellationApproveProcessDefinitionList(); |
| | | /** |
| | | * å®¡æ ¸éæ·ç³è¯·ï¼å®¡æ¹ä¸ â å®¡æ ¸éè¿ / å®¡æ ¸ä¸éè¿ï¼ |
| | | * |
| | | * ä»
ä¸å¡ç¼ç cancellation_approve é
ç½®ç审æ¹äººå¯æä½ï¼å¤äººæ¶æç¾ï¼ï¼å®¡æ ¸ä¸éè¿æ¶å¿
须填åä¸éè¿åå ã |
| | | * |
| | | * @param id éæ·ç³è¯·ç¼å· |
| | | * @param pass æ¯å¦éè¿ï¼true=å®¡æ ¸éè¿ / false=å®¡æ ¸ä¸éè¿ |
| | | * @param reviewRemark å®¡æ ¸æè§ï¼ä¸éè¿æ¶å³ä¸éè¿åå ï¼å¿
å¡«ï¼ |
| | | */ |
| | | void auditCancellation(Long id, Boolean pass, String reviewRemark); |
| | | |
| | | } |
| | |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; |
| | | |
| | |
| | | void updateContractFollowUp(Long id, LocalDateTime contactNextTime, String contactLastContent); |
| | | |
| | | /** |
| | | * åèµ·ååå®¡æ¹æµç¨ |
| | | * æäº¤åå审æ¹ï¼æªæäº¤ / å®¡æ ¸ä¸éè¿ â 审æ¹ä¸ï¼ |
| | | * |
| | | * 审æ¹äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç contract_approveï¼ï¼ |
| | | * æäº¤æ¶æ éæå®ï¼æªå¯ç¨å®¡æ¹ææªé
ç½®ææå®¡æ¹äººæ¶æåºä¸å¡å¼å¸¸ã |
| | | * |
| | | * @param id ååç¼å· |
| | | * @param processDefinitionKey æµç¨å®ä¹ Key |
| | | * @param userId ç¨æ·ç¼å· |
| | | */ |
| | | void submitContract(Long id, String processDefinitionKey, Long userId); |
| | | void submitContract(Long id); |
| | | |
| | | /** |
| | | * è·åååå®¡æ¹æµç¨å表 |
| | | * è·å¾åå审æ¹ç审æ¹äººç¼å·éå |
| | | * |
| | | * @return æµç¨å®ä¹å表 |
| | | * ä¾åç«¯å¤æå½åç»å½ç¨æ·æ¯å¦åºå±ç¤ºãå®¡æ ¸ãæé®ï¼æªé
ç½®æ¶è¿å空éåã |
| | | * |
| | | * @return 审æ¹äººç¨æ·ç¼å·éå |
| | | */ |
| | | List<Map<String, Object>> getContractApproveProcessDefinitionList(); |
| | | Set<Long> getContractApproverUserIds(); |
| | | |
| | | /** |
| | | * æ´æ°ååæµç¨å®¡æ¹ç»æ |
| | | * å®¡æ ¸ååï¼å®¡æ¹ä¸ â å®¡æ ¸éè¿ / å®¡æ ¸ä¸éè¿ï¼ |
| | | * |
| | | * ä»
ä¸å¡ç¼ç contract_approve é
ç½®ç审æ¹äººå¯æä½ï¼å¤äººæ¶æç¾ï¼ï¼å®¡æ ¸ä¸éè¿æ¶å¿
须填åä¸éè¿åå ã |
| | | * |
| | | * @param id ååç¼å· |
| | | * @param bpmResult BPM 审æ¹ç»æ |
| | | * @param pass æ¯å¦éè¿ï¼true=å®¡æ ¸éè¿ / false=å®¡æ ¸ä¸éè¿ |
| | | * @param reviewRemark å®¡æ ¸æè§ï¼ä¸éè¿æ¶å³ä¸éè¿åå ï¼å¿
å¡«ï¼ |
| | | */ |
| | | void updateContractAuditStatus(Long id, Integer bpmResult); |
| | | void auditContract(Long id, Boolean pass, String reviewRemark); |
| | | |
| | | /** |
| | | * è·å¾åå |
| | |
| | | import cn.hutool.core.collection.ListUtil; |
| | | import cn.hutool.core.lang.Assert; |
| | | import cn.hutool.core.util.ObjUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.number.MoneyUtils; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; |
| | | 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.dal.dataobject.definition.BpmProcessDefinitionInfoDO; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmCategoryService; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractPageReqVO; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractSaveReqVO; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractTransferReqVO; |
| | |
| | | import cn.iocoder.yudao.module.erp.api.sale.dto.ErpSaleOrderRespDTO; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO; |
| | | import cn.iocoder.yudao.module.system.api.approval.ApprovalConfigApi; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | | import com.mzt.logapi.context.LogRecordContext; |
| | | import com.mzt.logapi.service.impl.DiffParseFunction; |
| | | import com.mzt.logapi.starter.annotation.LogRecord; |
| | |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | import org.flowable.engine.repository.ProcessDefinition; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; |
| | | import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.*; |
| | | import static cn.iocoder.yudao.module.crm.enums.LogRecordConstants.*; |
| | | import static cn.iocoder.yudao.module.crm.util.CrmAuditStatusUtils.convertBpmResultToAuditStatus; |
| | | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| | | |
| | | /** |
| | | * CRM åå Service å®ç°ç±» |
| | |
| | | public class CrmContractServiceImpl implements CrmContractService { |
| | | |
| | | /** |
| | | * BPM ååå®¡æ¹æµç¨æ è¯ |
| | | * CRM åå审æ¹çä¸å¡ç±»åç¼ç |
| | | * |
| | | * ä¸ system_approval_config.biz_type 对åºï¼å®¡æ¹äººå¨ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãä¸ç»´æ¤ã |
| | | */ |
| | | public static final String BPM_PROCESS_DEFINITION_KEY = "crm-contract-audit"; |
| | | |
| | | /** |
| | | * BPM åå审æ¹åç±»ç¼ç |
| | | */ |
| | | private static final String CONTRACT_APPROVE_CATEGORY_CODE = "contract_approve"; |
| | | private static final String CONTRACT_APPROVE_BIZ_TYPE = "contract_approve"; |
| | | |
| | | @Resource |
| | | private CrmContractMapper contractMapper; |
| | |
| | | @Resource |
| | | private AdminUserApi adminUserApi; |
| | | @Resource |
| | | private BpmProcessInstanceApi bpmProcessInstanceApi; |
| | | @Resource |
| | | private BpmCategoryService bpmCategoryService; |
| | | @Resource |
| | | private BpmProcessDefinitionService bpmProcessDefinitionService; |
| | | private ApprovalConfigApi approvalConfigApi; |
| | | @Resource |
| | | private ErpSaleOrderApi saleOrderApi; |
| | | @Resource |
| | |
| | | return contract; |
| | | } |
| | | |
| | | /** |
| | | * è·åç¨æ·æµç§° |
| | | * |
| | | * @param userId ç¨æ·ç¼å· |
| | | * @return æµç§°ï¼ç¨æ·ä¸å卿¶è¿å null |
| | | */ |
| | | private String getUserNickname(Long userId) { |
| | | if (userId == null) { |
| | | return null; |
| | | } |
| | | AdminUserRespDTO user = adminUserApi.getUser(userId); |
| | | return user == null ? null : user.getNickname(); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @LogRecord(type = CRM_CONTRACT_TYPE, subType = CRM_CONTRACT_TRANSFER_SUB_TYPE, bizNo = "{{#reqVO.id}}", |
| | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @LogRecord(type = CRM_CONTRACT_TYPE, subType = CRM_CONTRACT_SUBMIT_SUB_TYPE, bizNo = "{{#id}}", |
| | | success = CRM_CONTRACT_SUBMIT_SUCCESS) |
| | | public void submitContract(Long id, String processDefinitionKey, Long userId) { |
| | | // 1. æ ¡éªå忝å¦å¨å®¡æ¹ |
| | | public void submitContract(Long id) { |
| | | // 1. æ ¡éªåå¨ + å¯æäº¤ç¶æï¼æªæäº¤ / å®¡æ ¸ä¸éè¿ï¼ |
| | | CrmContractDO contract = validateContractExists(id); |
| | | if (ObjUtil.notEqual(contract.getAuditStatus(), CrmAuditStatusEnum.DRAFT.getStatus())) { |
| | | throw exception(CONTRACT_SUBMIT_FAIL_NOT_DRAFT); |
| | | if (ObjUtil.notEqual(contract.getAuditStatus(), CrmAuditStatusEnum.DRAFT.getStatus()) |
| | | && ObjUtil.notEqual(contract.getAuditStatus(), CrmAuditStatusEnum.REJECT.getStatus())) { |
| | | throw exception(CONTRACT_SUBMIT_FAIL_NOT_EDITABLE); |
| | | } |
| | | |
| | | // 2. æ ¡éªåç±»åæµç¨å®ä¹æ¯å¦åå¨ |
| | | validateContractApproveCategoryAndProcessDefinition(); |
| | | // 2. æ ¡éªå®¡æ¹é
置已å¯ç¨ä¸é
ç½®äºææå®¡æ¹äººï¼æªé
ç½®æ¶æåºå¸¦æç¡®æç¤ºçä¸å¡å¼å¸¸ï¼ |
| | | approvalConfigApi.validateApprovalEnabledAndGetApprovers(CONTRACT_APPROVE_BIZ_TYPE); |
| | | |
| | | // 3. æ ¡éªä¼ å
¥çæµç¨å®ä¹ Key æ¯å¦å±äºè¯¥åç±»ä¸å¤äºæ¿æ´»ç¶æ |
| | | ProcessDefinition processDefinition = bpmProcessDefinitionService.getActiveProcessDefinition(processDefinitionKey); |
| | | if (processDefinition == null) { |
| | | throw exception(CONTRACT_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | // 3. ç¶æç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æï¼é¿å
æ®çãå®¡æ ¸ä¸éè¿ãçåå |
| | | contractMapper.submitAndResetAuditInfo(id, CrmAuditStatusEnum.PROCESS.getStatus()); |
| | | |
| | | // 4. å建ååå®¡æ¹æµç¨å®ä¾ |
| | | String processInstanceId = bpmProcessInstanceApi.createProcessInstance(userId, new BpmProcessInstanceCreateReqDTO() |
| | | .setProcessDefinitionKey(processDefinitionKey).setBusinessKey(String.valueOf(id))); |
| | | |
| | | // 5. æ´æ°åå工使µç¼å· |
| | | contractMapper.updateById(new CrmContractDO().setId(id).setProcessInstanceId(processInstanceId) |
| | | .setAuditStatus(CrmAuditStatusEnum.PROCESS.getStatus())); |
| | | |
| | | // 6. è®°å½æ¥å¿ |
| | | // 4. è®°å½æ¥å¿ |
| | | LogRecordContext.putVariable("contractName", contract.getName()); |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éª BPM åå审æ¹åç±»åæµç¨å®ä¹æ¯å¦åå¨ |
| | | */ |
| | | private void validateContractApproveCategoryAndProcessDefinition() { |
| | | // 1. æ ¡éªåç±»æ¯å¦åå¨ |
| | | List<String> codes = Collections.singletonList(CONTRACT_APPROVE_CATEGORY_CODE); |
| | | Map<String, ?> categoryMap = bpmCategoryService.getCategoryMap(codes); |
| | | if (!categoryMap.containsKey(CONTRACT_APPROVE_CATEGORY_CODE)) { |
| | | throw exception(CONTRACT_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | |
| | | // 2. æ ¡éªåç±»ä¸æ¯å¦æå¯ç¨çæµç¨å®ä¹ |
| | | List<BpmProcessDefinitionInfoDO> definitionInfoList = bpmProcessDefinitionService |
| | | .getProcessDefinitionInfoListByCategory(CONTRACT_APPROVE_CATEGORY_CODE); |
| | | if (CollUtil.isEmpty(definitionInfoList)) { |
| | | throw exception(CONTRACT_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | |
| | | // 3. æ ¡éªæ¯å¦ææ¿æ´»ç¶æçæµç¨å®ä¹ |
| | | Set<String> processDefinitionIds = convertSet(definitionInfoList, BpmProcessDefinitionInfoDO::getProcessDefinitionId); |
| | | List<ProcessDefinition> processDefinitions = bpmProcessDefinitionService.getProcessDefinitionList(processDefinitionIds); |
| | | boolean hasActiveDefinition = processDefinitions.stream() |
| | | .anyMatch(pd -> !pd.isSuspended()); |
| | | if (!hasActiveDefinition) { |
| | | throw exception(CONTRACT_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | @Override |
| | | public Set<Long> getContractApproverUserIds() { |
| | | return approvalConfigApi.getApproverUserIds(CONTRACT_APPROVE_BIZ_TYPE); |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getContractApproveProcessDefinitionList() { |
| | | // 1. æ ¡éªåç±»åæµç¨å®ä¹æ¯å¦åå¨ |
| | | validateContractApproveCategoryAndProcessDefinition(); |
| | | |
| | | // 2. è·ååç±»ä¸çæµç¨å®ä¹ä¿¡æ¯ |
| | | List<BpmProcessDefinitionInfoDO> definitionInfoList = bpmProcessDefinitionService |
| | | .getProcessDefinitionInfoListByCategory(CONTRACT_APPROVE_CATEGORY_CODE); |
| | | |
| | | // 3. è·åæµç¨å®ä¹è¯¦æ
|
| | | Set<String> processDefinitionIds = convertSet(definitionInfoList, BpmProcessDefinitionInfoDO::getProcessDefinitionId); |
| | | List<ProcessDefinition> processDefinitions = bpmProcessDefinitionService.getProcessDefinitionList(processDefinitionIds); |
| | | |
| | | // 4. è¿æ»¤ï¼åªä¿çæ¿æ´»ç¶æï¼ä¸ç¸å key åªä¿çææ°çæ¬ |
| | | Map<String, ProcessDefinition> latestVersionMap = new HashMap<>(); |
| | | for (ProcessDefinition pd : processDefinitions) { |
| | | if (pd.isSuspended()) { |
| | | continue; |
| | | } |
| | | ProcessDefinition existing = latestVersionMap.get(pd.getKey()); |
| | | if (existing == null || pd.getVersion() > existing.getVersion()) { |
| | | latestVersionMap.put(pd.getKey(), pd); |
| | | } |
| | | } |
| | | |
| | | // 5. è¿åæµç¨å®ä¹å表 |
| | | List<Map<String, Object>> result = new ArrayList<>(); |
| | | for (ProcessDefinition pd : latestVersionMap.values()) { |
| | | Map<String, Object> item = new HashMap<>(); |
| | | item.put("id", pd.getId()); |
| | | item.put("key", pd.getKey()); |
| | | item.put("name", pd.getName()); |
| | | item.put("version", pd.getVersion()); |
| | | result.add(item); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | @Override |
| | | public void updateContractAuditStatus(Long id, Integer bpmResult) { |
| | | // 1.1 æ ¡éªå忝å¦åå¨ |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void auditContract(Long id, Boolean pass, String reviewRemark) { |
| | | // 1. æ ¡éªåå¨ |
| | | CrmContractDO contract = validateContractExists(id); |
| | | // 1.2 åªæå®¡æ¹ä¸ï¼å¯ä»¥æ´æ°å®¡æ¹ç»æ |
| | | // 2. æ ¡éªå¤äºå®¡æ¹ä¸ç¶æ |
| | | if (ObjUtil.notEqual(contract.getAuditStatus(), CrmAuditStatusEnum.PROCESS.getStatus())) { |
| | | log.error("[updateContractAuditStatus][contract({}) ä¸å¤äºå®¡æ¹ä¸ï¼æ æ³æ´æ°å®¡æ¹ç»æ({})]", |
| | | contract.getId(), bpmResult); |
| | | throw exception(CONTRACT_UPDATE_AUDIT_STATUS_FAIL_NOT_PROCESS); |
| | | throw exception(CONTRACT_AUDIT_FAIL_NOT_PROCESS); |
| | | } |
| | | |
| | | // 2. æ´æ°åå审æ¹ç»æ |
| | | Integer auditStatus = convertBpmResultToAuditStatus(bpmResult); |
| | | contractMapper.updateById(new CrmContractDO().setId(id).setAuditStatus(auditStatus)); |
| | | // 3. æ ¡éªå½åç»å½ç¨æ·æ¯è¯¥ä¸å¡ç±»åç审æ¹äººï¼æç¾ï¼ä»»ä¸äººåå¯å®¡æ ¸ï¼ |
| | | Long userId = getLoginUserId(); |
| | | approvalConfigApi.validateApprover(CONTRACT_APPROVE_BIZ_TYPE, userId); |
| | | // 4. å®¡æ ¸ä¸éè¿ï¼å¿
须填ååå ï¼ç¶æç½®ä¸ºå®¡æ ¸ä¸éè¿ï¼éåæäº¤äººä¿®æ¹åå¯éæ°æäº¤ |
| | | if (!Boolean.TRUE.equals(pass)) { |
| | | if (StrUtil.isBlank(reviewRemark)) { |
| | | throw exception(CONTRACT_AUDIT_REJECT_REASON_REQUIRED); |
| | | } |
| | | contractMapper.auditContract(id, CrmAuditStatusEnum.REJECT.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | return; |
| | | } |
| | | // 5. å®¡æ ¸éè¿ï¼è®°å½å®¡æ ¸äººä¸å®¡æ ¸æè§ï¼ç¶æç½®ä¸ºå®¡æ ¸éè¿ |
| | | contractMapper.auditContract(id, CrmAuditStatusEnum.APPROVE.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | } |
| | | |
| | | // ======================= æ¥è¯¢ç¸å
³ ======================= |
| | |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; |
| | | |
| | |
| | | void updateInvoice(@Valid CrmInvoiceSaveReqVO updateReqVO); |
| | | |
| | | /** |
| | | * æ´æ°å¼ç¥¨æµç¨å®¡æ¹ç»æ |
| | | * |
| | | * @param id å¼ç¥¨ç¼å· |
| | | * @param bpmResult BPM 审æ¹ç»æ |
| | | */ |
| | | void updateInvoiceAuditStatus(Long id, Integer bpmResult); |
| | | |
| | | /** |
| | | * å é¤å¼ç¥¨ |
| | | * |
| | | * @param id ç¼å· |
| | |
| | | void deleteInvoice(Long id); |
| | | |
| | | /** |
| | | * åèµ·å¼ç¥¨å®¡æ¹æµç¨ |
| | | * æäº¤å¼ç¥¨å®¡æ¹ï¼è稿 / å®¡æ ¸ä¸éè¿ â 审æ¹ä¸ï¼ |
| | | * |
| | | * 审æ¹äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç crm_invoice_approveï¼ï¼ |
| | | * æäº¤æ¶æ éæå®ï¼æªå¯ç¨å®¡æ¹ææªé
ç½®ææå®¡æ¹äººæ¶æåºä¸å¡å¼å¸¸ã |
| | | * |
| | | * @param id å¼ç¥¨ç¼å· |
| | | * @param userId ç¨æ·ç¼å· |
| | | */ |
| | | void submitInvoice(Long id, Long userId); |
| | | void submitInvoice(Long id); |
| | | |
| | | /** |
| | | * è·å¾å¼ç¥¨å®¡æ¹ç审æ¹äººç¼å·éå |
| | | * |
| | | * ä¾åç«¯å¤æå½åç»å½ç¨æ·æ¯å¦åºå±ç¤ºãå®¡æ ¸ãæé®ï¼æªé
ç½®æ¶è¿å空éåã |
| | | * |
| | | * @return 审æ¹äººç¨æ·ç¼å·éå |
| | | */ |
| | | Set<Long> getInvoiceApproverUserIds(); |
| | | |
| | | /** |
| | | * å®¡æ ¸å¼ç¥¨ï¼å®¡æ¹ä¸ â å®¡æ ¸éè¿ / å®¡æ ¸ä¸éè¿ï¼ |
| | | * |
| | | * ä»
ä¸å¡ç¼ç crm_invoice_approve é
ç½®ç审æ¹äººå¯æä½ï¼å¤äººæ¶æç¾ï¼ï¼å®¡æ ¸ä¸éè¿æ¶å¿
须填åä¸éè¿åå ã |
| | | * |
| | | * @param id å¼ç¥¨ç¼å· |
| | | * @param pass æ¯å¦éè¿ï¼true=å®¡æ ¸éè¿ / false=å®¡æ ¸ä¸éè¿ |
| | | * @param reviewRemark å®¡æ ¸æè§ï¼ä¸éè¿æ¶å³ä¸éè¿åå ï¼å¿
å¡«ï¼ |
| | | */ |
| | | void auditInvoice(Long id, Boolean pass, String reviewRemark); |
| | | |
| | | /** |
| | | * è·å¾å¼ç¥¨ |
| | |
| | | import cn.hutool.core.lang.Assert; |
| | | import cn.hutool.core.util.ObjUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; |
| | | import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi; |
| | | import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.invoice.vo.invoice.CrmInvoicePageReqVO; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.invoice.vo.invoice.CrmInvoiceSaveReqVO; |
| | | import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO; |
| | |
| | | import cn.iocoder.yudao.module.crm.service.contract.CrmContractService; |
| | | import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; |
| | | import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO; |
| | | import cn.iocoder.yudao.module.system.api.approval.ApprovalConfigApi; |
| | | import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | | import com.mzt.logapi.context.LogRecordContext; |
| | | import com.mzt.logapi.service.impl.DiffParseFunction; |
| | | import com.mzt.logapi.starter.annotation.LogRecord; |
| | |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | 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.crm.enums.ErrorCodeConstants.*; |
| | | import static cn.iocoder.yudao.module.crm.enums.LogRecordConstants.*; |
| | | import static cn.iocoder.yudao.module.crm.util.CrmAuditStatusUtils.convertBpmResultToAuditStatus; |
| | | |
| | | /** |
| | | * CRM å¼ç¥¨ Service å®ç°ç±» |
| | |
| | | public class CrmInvoiceServiceImpl implements CrmInvoiceService { |
| | | |
| | | /** |
| | | * BPM å¼ç¥¨å®¡æ¹æµç¨æ è¯ |
| | | * CRM å¼ç¥¨å®¡æ¹çä¸å¡ç±»åç¼ç |
| | | * |
| | | * ä¸ system_approval_config.biz_type 对åºï¼å®¡æ¹äººå¨ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãä¸ç»´æ¤ã |
| | | */ |
| | | public static final String BPM_PROCESS_DEFINITION_KEY = "crm-invoice-audit"; |
| | | private static final String INVOICE_APPROVE_BIZ_TYPE = "crm_invoice_approve"; |
| | | |
| | | /** |
| | | * å票éä»¶çä¸å¡è®°å½ç±»åï¼å¯¹åº {@link cn.iocoder.yudao.module.system.enums.storage.StorageRecordTypeEnum#CRM_INVOICE} |
| | |
| | | @Resource |
| | | private AdminUserApi adminUserApi; |
| | | @Resource |
| | | private BpmProcessInstanceApi bpmProcessInstanceApi; |
| | | private ApprovalConfigApi approvalConfigApi; |
| | | @Resource |
| | | private StorageAttachmentApi storageAttachmentApi; |
| | | |
| | |
| | | } |
| | | |
| | | @Override |
| | | public void updateInvoiceAuditStatus(Long id, Integer bpmResult) { |
| | | // 1.1 æ ¡éªåå¨ |
| | | CrmInvoiceDO invoice = validateInvoiceExists(id); |
| | | // 1.2 åªæå®¡æ¹ä¸ï¼å¯ä»¥æ´æ°å®¡æ¹ç»æ |
| | | if (ObjUtil.notEqual(invoice.getAuditStatus(), CrmAuditStatusEnum.PROCESS.getStatus())) { |
| | | log.error("[updateInvoiceAuditStatus][invoice({}) ä¸å¤äºå®¡æ¹ä¸ï¼æ æ³æ´æ°å®¡æ¹ç»æ({})]", |
| | | invoice.getId(), bpmResult); |
| | | throw exception(INVOICE_UPDATE_AUDIT_STATUS_FAIL_NOT_PROCESS); |
| | | } |
| | | |
| | | // 2. æ´æ°å¼ç¥¨å®¡æ¹ç¶æ |
| | | Integer auditStatus = convertBpmResultToAuditStatus(bpmResult); |
| | | invoiceMapper.updateById(new CrmInvoiceDO().setId(id).setAuditStatus(auditStatus)); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @LogRecord(type = CRM_INVOICE_TYPE, subType = CRM_INVOICE_DELETE_SUB_TYPE, bizNo = "{{#id}}", |
| | | success = CRM_INVOICE_DELETE_SUCCESS) |
| | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @LogRecord(type = CRM_INVOICE_TYPE, subType = CRM_INVOICE_SUBMIT_SUB_TYPE, bizNo = "{{#id}}", |
| | | success = CRM_INVOICE_SUBMIT_SUCCESS) |
| | | public void submitInvoice(Long id, Long userId) { |
| | | // 1. æ ¡éªå¼ç¥¨æ¯å¦å¨å®¡æ¹ |
| | | public void submitInvoice(Long id) { |
| | | // 1. æ ¡éªåå¨ + å¯æäº¤ç¶æï¼æªæäº¤ / å®¡æ ¸ä¸éè¿ï¼ |
| | | CrmInvoiceDO invoice = validateInvoiceExists(id); |
| | | if (ObjUtil.notEqual(invoice.getAuditStatus(), CrmAuditStatusEnum.DRAFT.getStatus())) { |
| | | throw exception(INVOICE_SUBMIT_FAIL_NOT_DRAFT); |
| | | if (ObjUtil.notEqual(invoice.getAuditStatus(), CrmAuditStatusEnum.DRAFT.getStatus()) |
| | | && ObjUtil.notEqual(invoice.getAuditStatus(), CrmAuditStatusEnum.REJECT.getStatus())) { |
| | | throw exception(INVOICE_SUBMIT_FAIL_NOT_EDITABLE); |
| | | } |
| | | |
| | | // 1.1 éæ°æ ¡éªå¯å¼ç¥¨éé¢ï¼é²æ¢ç´¯è®¡å¼ç¥¨è¶
è¿ååéé¢ï¼è稿æåå¯è½æå
¶ä»åè¿å
¥å®¡æ¹ä¸ï¼ |
| | | // 2. éæ°æ ¡éªå¯å¼ç¥¨éé¢ï¼é²æ¢ç´¯è®¡å¼ç¥¨è¶
è¿ååéé¢ï¼è稿æåå¯è½æå
¶ä»åè¿å
¥å®¡æ¹ä¸ï¼ |
| | | validateInvoicePriceExceedsLimit(new CrmInvoiceSaveReqVO() |
| | | .setId(invoice.getId()).setContractId(invoice.getContractId()).setPrice(invoice.getPrice())); |
| | | |
| | | // 2. å建å¼ç¥¨å®¡æ¹æµç¨å®ä¾ |
| | | String processInstanceId = bpmProcessInstanceApi.createProcessInstance(userId, new BpmProcessInstanceCreateReqDTO() |
| | | .setProcessDefinitionKey(BPM_PROCESS_DEFINITION_KEY).setBusinessKey(String.valueOf(id))); |
| | | // 3. æ ¡éªå®¡æ¹é
置已å¯ç¨ä¸é
ç½®äºææå®¡æ¹äººï¼æªé
ç½®æ¶æåºå¸¦æç¡®æç¤ºçä¸å¡å¼å¸¸ï¼ |
| | | approvalConfigApi.validateApprovalEnabledAndGetApprovers(INVOICE_APPROVE_BIZ_TYPE); |
| | | |
| | | // 3. æ´æ°å¼ç¥¨å·¥ä½æµç¼å· |
| | | invoiceMapper.updateById(new CrmInvoiceDO().setId(id).setProcessInstanceId(processInstanceId) |
| | | .setAuditStatus(CrmAuditStatusEnum.PROCESS.getStatus())); |
| | | // 4. ç¶æç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æï¼é¿å
æ®çãå®¡æ ¸ä¸éè¿ãçåå |
| | | invoiceMapper.submitAndResetAuditInfo(id, CrmAuditStatusEnum.PROCESS.getStatus()); |
| | | |
| | | // 4. è®°å½æ¥å¿ |
| | | // 5. è®°å½æ¥å¿ |
| | | LogRecordContext.putVariable("invoiceNo", invoice.getNo()); |
| | | } |
| | | |
| | | @Override |
| | | public Set<Long> getInvoiceApproverUserIds() { |
| | | return approvalConfigApi.getApproverUserIds(INVOICE_APPROVE_BIZ_TYPE); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void auditInvoice(Long id, Boolean pass, String reviewRemark) { |
| | | // 1. æ ¡éªåå¨ |
| | | CrmInvoiceDO invoice = validateInvoiceExists(id); |
| | | // 2. æ ¡éªå¤äºå®¡æ¹ä¸ç¶æ |
| | | if (ObjUtil.notEqual(invoice.getAuditStatus(), CrmAuditStatusEnum.PROCESS.getStatus())) { |
| | | throw exception(INVOICE_AUDIT_FAIL_NOT_PROCESS); |
| | | } |
| | | // 3. æ ¡éªå½åç»å½ç¨æ·æ¯è¯¥ä¸å¡ç±»åç审æ¹äººï¼æç¾ï¼ä»»ä¸äººåå¯å®¡æ ¸ï¼ |
| | | Long userId = getLoginUserId(); |
| | | approvalConfigApi.validateApprover(INVOICE_APPROVE_BIZ_TYPE, userId); |
| | | // 4. å®¡æ ¸ä¸éè¿ï¼å¿
须填ååå ï¼ç¶æç½®ä¸ºå®¡æ ¸ä¸éè¿ï¼éåæäº¤äººä¿®æ¹åå¯éæ°æäº¤ |
| | | if (!Boolean.TRUE.equals(pass)) { |
| | | if (StrUtil.isBlank(reviewRemark)) { |
| | | throw exception(INVOICE_AUDIT_REJECT_REASON_REQUIRED); |
| | | } |
| | | invoiceMapper.auditInvoice(id, CrmAuditStatusEnum.REJECT.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | return; |
| | | } |
| | | // 5. å®¡æ ¸éè¿ï¼è®°å½å®¡æ ¸äººä¸å®¡æ ¸æè§ï¼ç¶æç½®ä¸ºå®¡æ ¸éè¿ |
| | | // ï¼å¼ç¥¨æ é¢å¤åç½®ä¸å¡é»è¾ï¼å®¡æ¹éè¿åå³å¯ç¨äºåå»ºåæ¬¾ / å
³èå¼ç¥¨éæ©ï¼ |
| | | invoiceMapper.auditInvoice(id, CrmAuditStatusEnum.APPROVE.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | } |
| | | |
| | | /** |
| | | * è·åç¨æ·æµç§° |
| | | * |
| | | * @param userId ç¨æ·ç¼å· |
| | | * @return æµç§°ï¼ç¨æ·ä¸å卿¶è¿å null |
| | | */ |
| | | private String getUserNickname(Long userId) { |
| | | if (userId == null) { |
| | | return null; |
| | | } |
| | | AdminUserRespDTO user = adminUserApi.getUser(userId); |
| | | return user == null ? null : user.getNickname(); |
| | | } |
| | | |
| | | private CrmInvoiceDO validateInvoiceExists(Long id) { |
| | | CrmInvoiceDO invoice = invoiceMapper.selectById(id); |
| | | if (invoice == null) { |
| | |
| | | package cn.iocoder.yudao.module.crm.service.refund; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.refund.vo.CrmRefundAuditReqVO; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.refund.vo.CrmRefundPageReqVO; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.refund.vo.CrmRefundRespVO; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.refund.vo.CrmRefundSaveReqVO; |
| | | import jakarta.validation.Valid; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | public interface CrmRefundService { |
| | | |
| | |
| | | |
| | | List<CrmRefundRespVO> getRefundList(CrmRefundPageReqVO reqVO); |
| | | |
| | | void auditRefund(@Valid CrmRefundAuditReqVO auditReqVO); |
| | | /** |
| | | * æäº¤éè´¹å审æ¹ï¼è稿 / å®¡æ ¸ä¸éè¿ â 审æ¹ä¸ï¼ |
| | | * |
| | | * 审æ¹äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç refund_approveï¼ï¼ |
| | | * æäº¤æ¶æ éæå®ï¼æªå¯ç¨å®¡æ¹ææªé
ç½®ææå®¡æ¹äººæ¶æåºä¸å¡å¼å¸¸ã |
| | | * |
| | | * @param id éè´¹åç¼å· |
| | | */ |
| | | void submitRefund(Long id); |
| | | |
| | | void submitRefund(Long id, String processDefinitionKey, Long userId); |
| | | /** |
| | | * è·å¾éè´¹å审æ¹ç审æ¹äººç¼å·éå |
| | | * |
| | | * ä¾åç«¯å¤æå½åç»å½ç¨æ·æ¯å¦åºå±ç¤ºãå®¡æ ¸ãæé®ï¼æªé
ç½®æ¶è¿å空éåã |
| | | * |
| | | * @return 审æ¹äººç¨æ·ç¼å·éå |
| | | */ |
| | | Set<Long> getRefundApproverUserIds(); |
| | | |
| | | void updateRefundAuditStatus(Long id, Integer bpmResult); |
| | | |
| | | List<Map<String, Object>> getRefundApproveProcessDefinitionList(); |
| | | /** |
| | | * å®¡æ ¸éè´¹åï¼å®¡æ¹ä¸ â å®¡æ ¸éè¿ / å®¡æ ¸ä¸éè¿ï¼ |
| | | * |
| | | * ä»
ä¸å¡ç¼ç refund_approve é
ç½®ç审æ¹äººå¯æä½ï¼å¤äººæ¶æç¾ï¼ï¼å®¡æ ¸ä¸éè¿æ¶å¿
须填åä¸éè¿åå ã |
| | | * |
| | | * @param id éè´¹åç¼å· |
| | | * @param pass æ¯å¦éè¿ï¼true=å®¡æ ¸éè¿ / false=å®¡æ ¸ä¸éè¿ |
| | | * @param reviewRemark å®¡æ ¸æè§ï¼ä¸éè¿æ¶å³ä¸éè¿åå ï¼å¿
å¡«ï¼ |
| | | */ |
| | | void auditRefund(Long id, Boolean pass, String reviewRemark); |
| | | |
| | | } |
| | |
| | | import cn.iocoder.yudao.framework.common.util.number.NumberUtils; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.finance.vo.payment.ErpFinancePaymentAuditReqVO; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.finance.vo.payment.ErpFinancePaymentPageReqVO; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.finance.vo.payment.ErpFinancePaymentRespVO; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.finance.vo.payment.ErpFinancePaymentSaveReqVO; |
| | |
| | | import java.io.IOException; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | import java.util.stream.Stream; |
| | | |
| | | import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; |
| | | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| | | |
| | | @Tag(name = "管çåå° - ERP 仿¬¾å") |
| | | @RestController |
| | |
| | | return success(true); |
| | | } |
| | | |
| | | @PostMapping("/submit") |
| | | @Operation(summary = "æäº¤ä»æ¬¾å审æ¹") |
| | | @PutMapping("/submit") |
| | | @Operation(summary = "æäº¤ä»æ¬¾å审æ¹ï¼æªå®¡æ ¸ â 审æ¹ä¸ï¼ï¼å®¡æ¹äººç±å®¡æ¹é
ç½®ç»ä¸æå®") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @PreAuthorize("@ss.hasPermission('erp:finance-payment:update')") |
| | | public CommonResult<Boolean> submitFinancePayment(@RequestParam("id") Long id, |
| | | @RequestParam("processDefinitionKey") String processDefinitionKey) { |
| | | Long userId = getLoginUserId(); |
| | | financePaymentService.submitFinancePayment(id, processDefinitionKey, userId); |
| | | public CommonResult<Boolean> submitFinancePayment(@RequestParam("id") Long id) { |
| | | financePaymentService.submitFinancePayment(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approve-process-list") |
| | | @Operation(summary = "è·å仿¬¾åå®¡æ¹æµç¨å表") |
| | | @PutMapping("/audit") |
| | | @Operation(summary = "å®¡æ ¸ä»æ¬¾åï¼å®¡æ¹ä¸ â å®¡æ ¸éè¿/å®¡æ ¸ä¸éè¿ï¼ï¼ä»
审æ¹äººæ¬äººå¯æä½") |
| | | @PreAuthorize("@ss.hasPermission('erp:finance-payment:audit')") |
| | | public CommonResult<Boolean> auditFinancePayment(@Valid @RequestBody ErpFinancePaymentAuditReqVO auditReqVO) { |
| | | financePaymentService.auditFinancePayment(auditReqVO.getId(), auditReqVO.getPass(), |
| | | auditReqVO.getReviewRemark()); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approver-ids") |
| | | @Operation(summary = "è·å¾ä»æ¬¾åç审æ¹äººç¼å·éåï¼ä¾åç«¯å¤ææ¯å¦å±ç¤ºå®¡æ ¸æé®") |
| | | @PreAuthorize("@ss.hasPermission('erp:finance-payment:query')") |
| | | public CommonResult<List<Map<String, Object>>> getApproveProcessList() { |
| | | return success(financePaymentService.getFinancePaymentApproveProcessDefinitionList()); |
| | | public CommonResult<Set<Long>> getApproverUserIds() { |
| | | return success(financePaymentService.getFinancePaymentApproverUserIds()); |
| | | } |
| | | |
| | | @DeleteMapping("/delete") |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.erp.controller.admin.finance.vo.payment; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * ERP 仿¬¾åå®¡æ ¸ Request VO |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Schema(description = "管çåå° - ERP 仿¬¾åå®¡æ ¸ Request VO") |
| | | @Data |
| | | public class ErpFinancePaymentAuditReqVO { |
| | | |
| | | @Schema(description = "仿¬¾åç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | @NotNull(message = "仿¬¾åç¼å·ä¸è½ä¸ºç©º") |
| | | private Long id; |
| | | |
| | | @Schema(description = "æ¯å¦å®¡æ ¸éè¿", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") |
| | | @NotNull(message = "å®¡æ ¸ç»æä¸è½ä¸ºç©º") |
| | | private Boolean pass; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶ä¸ºå¯éï¼å®¡æ ¸ä¸éè¿æ¶ä¸ºå¿
å¡«çåå ï¼", example = "åæä»æ¬¾") |
| | | private String reviewRemark; |
| | | |
| | | } |
| | |
| | | @Schema(description = "仿¬¾ç¶æ", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "工使µç¼å·", example = "3cc7f8e6") |
| | | @Schema(description = "工使µç¼å·ï¼å·²åºå¼ï¼è½»é级审æ¹ä¸å使ç¨ï¼", example = "3cc7f8e6") |
| | | @Deprecated |
| | | private String processInstanceId; |
| | | |
| | | // ========== 审æ¹ä¿¡æ¯ï¼è½»éçº§ç¶ææºå®¡æ¹ï¼ ========== |
| | | |
| | | @Schema(description = "å®¡æ ¸äººç¼å·", example = "1") |
| | | private Long reviewerId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººæµç§°", example = "è¶
级管çå") |
| | | private String reviewerName; |
| | | |
| | | @Schema(description = "å®¡æ ¸æ¶é´") |
| | | private LocalDateTime reviewTime; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸ä¸éè¿æ¶ä¸ºé©³ååå ï¼", example = "åæä»æ¬¾") |
| | | private String reviewRemark; |
| | | |
| | | @Schema(description = "仿¬¾æ¶é´", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | private LocalDateTime paymentTime; |
| | | |
| | |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.common.util.collection.MapUtils; |
| | | import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.request.ErpPurchaseRequestAuditReqVO; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.request.ErpPurchaseRequestPageReqVO; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.request.ErpPurchaseRequestRespVO; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.request.ErpPurchaseRequestSaveReqVO; |
| | |
| | | import java.io.IOException; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMultiMap; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; |
| | | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| | | |
| | | @Tag(name = "管çåå° - ERP éè´ç³è¯·") |
| | | @RestController |
| | |
| | | } |
| | | |
| | | @PutMapping("/submit") |
| | | @Operation(summary = "æäº¤éè´ç³è¯·å®¡æ¹") |
| | | @Operation(summary = "æäº¤éè´ç³è¯·å®¡æ¹ï¼æªæäº¤/å®¡æ ¸ä¸éè¿ â 审æ¹ä¸ï¼ï¼å®¡æ¹äººç±å®¡æ¹é
ç½®ç»ä¸æå®") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @PreAuthorize("@ss.hasPermission('erp:purchase-request:submit')") |
| | | public CommonResult<Boolean> submitPurchaseRequest(@RequestParam("id") Long id, |
| | | @RequestParam("processDefinitionKey") String processDefinitionKey) { |
| | | Long userId = getLoginUserId(); |
| | | purchaseRequestService.submitPurchaseRequest(id, processDefinitionKey, userId); |
| | | public CommonResult<Boolean> submitPurchaseRequest(@RequestParam("id") Long id) { |
| | | purchaseRequestService.submitPurchaseRequest(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approve-process-list") |
| | | @Operation(summary = "è·åéè´ç³è¯·å®¡æ¹æµç¨å表") |
| | | @PutMapping("/audit") |
| | | @Operation(summary = "å®¡æ ¸éè´ç³è¯·ï¼å®¡æ¹ä¸ â å®¡æ ¸éè¿/å®¡æ ¸ä¸éè¿ï¼ï¼ä»
审æ¹äººæ¬äººå¯æä½") |
| | | @PreAuthorize("@ss.hasPermission('erp:purchase-request:audit')") |
| | | public CommonResult<Boolean> auditPurchaseRequest(@Valid @RequestBody ErpPurchaseRequestAuditReqVO auditReqVO) { |
| | | purchaseRequestService.auditPurchaseRequest(auditReqVO.getId(), auditReqVO.getPass(), |
| | | auditReqVO.getReviewRemark()); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approver-ids") |
| | | @Operation(summary = "è·å¾éè´ç³è¯·ç审æ¹äººç¼å·éåï¼ä¾åç«¯å¤ææ¯å¦å±ç¤ºå®¡æ ¸æé®") |
| | | @PreAuthorize("@ss.hasPermission('erp:purchase-request:query')") |
| | | public CommonResult<List<Map<String, Object>>> getApproveProcessList() { |
| | | return success(purchaseRequestService.getPurchaseRequestApproveProcessDefinitionList()); |
| | | public CommonResult<Set<Long>> getApproverUserIds() { |
| | | return success(purchaseRequestService.getPurchaseRequestApproverUserIds()); |
| | | } |
| | | |
| | | @PostMapping("/generate-order") |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.request; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * ERP éè´ç³è¯·å®¡æ ¸ Request VO |
| | | */ |
| | | @Schema(description = "管çåå° - ERP éè´ç³è¯·å®¡æ ¸ Request VO") |
| | | @Data |
| | | public class ErpPurchaseRequestAuditReqVO { |
| | | |
| | | @Schema(description = "éè´ç³è¯·ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | @NotNull(message = "éè´ç³è¯·ç¼å·ä¸è½ä¸ºç©º") |
| | | private Long id; |
| | | |
| | | @Schema(description = "æ¯å¦å®¡æ ¸éè¿", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") |
| | | @NotNull(message = "å®¡æ ¸ç»æä¸è½ä¸ºç©º") |
| | | private Boolean pass; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶ä¸ºå¯éï¼å®¡æ ¸ä¸éè¿æ¶ä¸ºå¿
å¡«çåå ï¼", example = "åæéè´") |
| | | private String reviewRemark; |
| | | |
| | | } |
| | |
| | | @ExcelProperty(value = "ç¶æ", converter = cn.iocoder.yudao.module.erp.convert.ErpPurchaseRequestStatusConvert.class) |
| | | private Integer status; |
| | | |
| | | @Schema(description = "æµç¨å®ä¾ç¼å·", example = "1024") |
| | | @Schema(description = "æµç¨å®ä¾ç¼å·ï¼å·²åºå¼ï¼è½»é级审æ¹ä¸å使ç¨ï¼", example = "1024") |
| | | @Deprecated |
| | | private String processInstanceId; |
| | | |
| | | // ========== 审æ¹ä¿¡æ¯ï¼è½»éçº§ç¶ææºå®¡æ¹ï¼ ========== |
| | | |
| | | @Schema(description = "å®¡æ ¸äººç¼å·", example = "1") |
| | | private Long reviewerId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººæµç§°", example = "è¶
级管çå") |
| | | @ExcelProperty("å®¡æ ¸äºº") |
| | | private String reviewerName; |
| | | |
| | | @Schema(description = "å®¡æ ¸æ¶é´") |
| | | @ExcelProperty("å®¡æ ¸æ¶é´") |
| | | private LocalDateTime reviewTime; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸ä¸éè¿æ¶ä¸ºé©³ååå ï¼", example = "åæéè´") |
| | | @ExcelProperty("å®¡æ ¸æè§") |
| | | private String reviewRemark; |
| | | |
| | | @Schema(description = "ç³è¯·äººç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | @ExcelProperty("ç³è¯·äººç¼å·") |
| | | private Long requestUserId; |
| | |
| | | /** |
| | | * 工使µç¼å· |
| | | * |
| | | * å
³è BPM æµç¨å®ä¾ç id |
| | | * å·²åºå¼ï¼ä»æ¬¾åæ¹ä¸ºè½»éçº§ç¶ææºå®¡æ¹åä¸ååå
¥ï¼ä»
ä¿çå岿°æ®ã |
| | | */ |
| | | @Deprecated |
| | | private String processInstanceId; |
| | | |
| | | /** |
| | | * å®¡æ ¸äººç¼å·ï¼ç³»ç»ç¨æ·ï¼ |
| | | * |
| | | * 审æ¹äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç erp_finance_payment_approveï¼ï¼ |
| | | * æäº¤æ¶ä¸æå®ï¼æ¤å¤è®°å½å®é
æ§è¡å®¡æ ¸çç¨æ·ã |
| | | */ |
| | | private Long reviewerId; |
| | | |
| | | /** |
| | | * å®¡æ ¸äººæµç§°ï¼åä½å±ç¤ºç¨ï¼ |
| | | */ |
| | | private String reviewerName; |
| | | |
| | | /** |
| | | * å®¡æ ¸æ¶é´ |
| | | */ |
| | | private LocalDateTime reviewTime; |
| | | |
| | | /** |
| | | * å®¡æ ¸æè§ï¼å®¡æ ¸ä¸éè¿æ¶å¿
å¡«ï¼ä½ä¸ºé©³ååå ï¼ |
| | | */ |
| | | private String reviewRemark; |
| | | /** |
| | | * 仿¬¾æ¶é´ |
| | | */ |
| | |
| | | |
| | | /** |
| | | * BPM æµç¨å®ä¾ç¼å· |
| | | * |
| | | * å·²åºå¼ï¼éè´ç³è¯·æ¹ä¸ºè½»éçº§ç¶ææºå®¡æ¹åä¸ååå
¥ï¼ä»
ä¿çå岿°æ®ã |
| | | */ |
| | | @Deprecated |
| | | private String processInstanceId; |
| | | |
| | | /** |
| | | * å®¡æ ¸äººç¼å·ï¼ç³»ç»ç¨æ·ï¼ |
| | | * |
| | | * 审æ¹äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç purchase_request_approveï¼ï¼ |
| | | * æäº¤æ¶ä¸æå®ï¼æ¤å¤è®°å½å®é
æ§è¡å®¡æ ¸çç¨æ·ã |
| | | */ |
| | | private Long reviewerId; |
| | | |
| | | /** |
| | | * å®¡æ ¸äººæµç§°ï¼åä½å±ç¤ºç¨ï¼ |
| | | */ |
| | | private String reviewerName; |
| | | |
| | | /** |
| | | * å®¡æ ¸æ¶é´ |
| | | */ |
| | | private LocalDateTime reviewTime; |
| | | |
| | | /** |
| | | * å®¡æ ¸æè§ï¼å®¡æ ¸ä¸éè¿æ¶å¿
å¡«ï¼ä½ä¸ºé©³ååå ï¼ |
| | | */ |
| | | private String reviewRemark; |
| | | |
| | | /** |
| | | * çæçéè´è®¢åç¼å· |
| | | */ |
| | | private Long orderId; |
| | |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDateTime; |
| | | import java.util.Collection; |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | |
| | | return convertMap(result, obj -> (Long) obj.get("invoice_id"), obj -> (BigDecimal) obj.get("total_payment_price")); |
| | | } |
| | | |
| | | /** |
| | | * æäº¤å®¡æ¹ï¼ç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | * |
| | | * ç¨ UpdateWrapper èé updateByIdï¼MyBatis-Plus é»è®¤æ´æ°çç¥å¿½ç¥ nullï¼ |
| | | * ç´æ¥ updateById æ æ³æå®¡æ ¸ä¸éè¿åæ®ççå®¡æ ¸äºº/å®¡æ ¸æ¶é´/å®¡æ ¸æè§æ¸
空ã |
| | | */ |
| | | default int submitAndResetAuditInfo(Long id, Integer status) { |
| | | return update(null, new LambdaUpdateWrapper<ErpFinancePaymentDO>() |
| | | .eq(ErpFinancePaymentDO::getId, id) |
| | | .set(ErpFinancePaymentDO::getStatus, status) |
| | | .set(ErpFinancePaymentDO::getReviewerId, null) |
| | | .set(ErpFinancePaymentDO::getReviewerName, null) |
| | | .set(ErpFinancePaymentDO::getReviewTime, null) |
| | | .set(ErpFinancePaymentDO::getReviewRemark, null)); |
| | | } |
| | | |
| | | /** |
| | | * å®¡æ ¸ï¼éè¿ / ä¸éè¿ï¼ï¼åå
¥å®¡æ ¸ç»æãå®¡æ ¸äººä¸å®¡æ ¸æè§ |
| | | */ |
| | | default int auditFinancePayment(Long id, Integer status, Long reviewerId, |
| | | String reviewerName, String reviewRemark) { |
| | | return update(null, new LambdaUpdateWrapper<ErpFinancePaymentDO>() |
| | | .eq(ErpFinancePaymentDO::getId, id) |
| | | .set(ErpFinancePaymentDO::getStatus, status) |
| | | .set(ErpFinancePaymentDO::getReviewerId, reviewerId) |
| | | .set(ErpFinancePaymentDO::getReviewerName, reviewerName) |
| | | .set(ErpFinancePaymentDO::getReviewTime, LocalDateTime.now()) |
| | | .set(ErpFinancePaymentDO::getReviewRemark, reviewRemark)); |
| | | } |
| | | |
| | | } |
| | |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.request.ErpPurchaseRequestPageReqVO; |
| | | import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpPurchaseRequestDO; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | |
| | |
| | | .orderByDesc(ErpPurchaseRequestDO::getId)); |
| | | } |
| | | |
| | | /** |
| | | * æäº¤å®¡æ¹ï¼ç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | * |
| | | * ç¨ UpdateWrapper èé updateByIdï¼MyBatis-Plus é»è®¤æ´æ°çç¥å¿½ç¥ nullï¼ |
| | | * ç´æ¥ updateById æ æ³æå®¡æ ¸ä¸éè¿åæ®ççå®¡æ ¸äºº/å®¡æ ¸æ¶é´/å®¡æ ¸æè§æ¸
空ã |
| | | */ |
| | | default int submitAndResetAuditInfo(Long id, Integer status) { |
| | | return update(null, new LambdaUpdateWrapper<ErpPurchaseRequestDO>() |
| | | .eq(ErpPurchaseRequestDO::getId, id) |
| | | .set(ErpPurchaseRequestDO::getStatus, status) |
| | | .set(ErpPurchaseRequestDO::getReviewerId, null) |
| | | .set(ErpPurchaseRequestDO::getReviewerName, null) |
| | | .set(ErpPurchaseRequestDO::getReviewTime, null) |
| | | .set(ErpPurchaseRequestDO::getReviewRemark, null)); |
| | | } |
| | | |
| | | /** |
| | | * å®¡æ ¸ï¼éè¿ / ä¸éè¿ï¼ï¼åå
¥å®¡æ ¸ç»æãå®¡æ ¸äººä¸å®¡æ ¸æè§ |
| | | */ |
| | | default int auditPurchaseRequest(Long id, Integer status, Long reviewerId, |
| | | String reviewerName, String reviewRemark) { |
| | | return update(null, new LambdaUpdateWrapper<ErpPurchaseRequestDO>() |
| | | .eq(ErpPurchaseRequestDO::getId, id) |
| | | .set(ErpPurchaseRequestDO::getStatus, status) |
| | | .set(ErpPurchaseRequestDO::getReviewerId, reviewerId) |
| | | .set(ErpPurchaseRequestDO::getReviewerName, reviewerName) |
| | | .set(ErpPurchaseRequestDO::getReviewTime, LocalDateTime.now()) |
| | | .set(ErpPurchaseRequestDO::getReviewRemark, reviewRemark)); |
| | | } |
| | | |
| | | } |
| | |
| | | ErrorCode PURCHASE_REQUEST_NOT_EXISTS = new ErrorCode(1_030_104_000, "éè´ç³è¯·åä¸åå¨"); |
| | | ErrorCode PURCHASE_REQUEST_DELETE_FAIL_NOT_DRAFT = new ErrorCode(1_030_104_001, "éè´ç³è¯·å({})䏿¯èç¨¿ç¶æï¼æ æ³å é¤"); |
| | | ErrorCode PURCHASE_REQUEST_UPDATE_FAIL_NOT_DRAFT = new ErrorCode(1_030_104_002, "éè´ç³è¯·å({})䏿¯èç¨¿ç¶æï¼æ æ³ä¿®æ¹"); |
| | | ErrorCode PURCHASE_REQUEST_SUBMIT_FAIL_NOT_DRAFT = new ErrorCode(1_030_104_003, "æäº¤å¤±è´¥ï¼åªæèç¨¿ç¶æçç³è¯·åæè½æäº¤"); |
| | | ErrorCode PURCHASE_REQUEST_NO_EXISTS = new ErrorCode(1_030_104_004, "çæç³è¯·åå·å¤±è´¥ï¼è¯·éæ°æäº¤"); |
| | | ErrorCode PURCHASE_REQUEST_UPDATE_AUDIT_STATUS_FAIL_NOT_PROCESS = new ErrorCode(1_030_104_005, "æ´æ°å®¡æ¹ç¶æå¤±è´¥ï¼åªæå®¡æ¹ä¸çç³è¯·åæè½æ´æ°"); |
| | | ErrorCode PURCHASE_REQUEST_NOT_APPROVE = new ErrorCode(1_030_104_006, "éè´ç³è¯·åæªå®¡æ ¸éè¿ï¼æ æ³æä½"); |
| | | ErrorCode PURCHASE_REQUEST_ORDER_EXISTS = new ErrorCode(1_030_104_007, "éè´ç³è¯·åå·²çæéè´è®¢åï¼è¯·å¿é夿ä½"); |
| | | ErrorCode PURCHASE_REQUEST_BPM_CATEGORY_NOT_EXISTS = new ErrorCode(1_030_104_008, "éè´ç³è¯·å®¡æ¹åç±»ä¸åå¨ï¼è¯·å
å¨BPM模åå建éè´ç³è¯·å®¡æ¹æµç¨åç±»"); |
| | | ErrorCode PURCHASE_REQUEST_BPM_PROCESS_DEFINITION_NOT_EXISTS = new ErrorCode(1_030_104_009, "éè´ç³è¯·å®¡æ¹åç±»ä¸æ²¡æå¯ç¨çæµç¨æ¨¡åï¼è¯·å
å建并å叿µç¨"); |
| | | ErrorCode PURCHASE_REQUEST_ITEM_PRICE_EMPTY = new ErrorCode(1_030_104_021, "éè´ç³è¯·æç»({})éé¢ä¿¡æ¯ä¸å®æ´ï¼æ æ³çæéè´è®¢å"); |
| | | ErrorCode PURCHASE_REQUEST_SUBMIT_FAIL_NOT_ALLOWED = new ErrorCode(1_030_104_022, "æäº¤å¤±è´¥ï¼åªæè稿æå®¡æ ¸ä¸éè¿ç¶æçéè´ç³è¯·æè½æäº¤"); |
| | | ErrorCode PURCHASE_REQUEST_AUDIT_FAIL_NOT_PROCESS = new ErrorCode(1_030_104_023, "å®¡æ ¸å¤±è´¥ï¼åªæå®¡æ¹ä¸ç¶æçéè´ç³è¯·æè½å®¡æ ¸"); |
| | | ErrorCode PURCHASE_REQUEST_AUDIT_REJECT_REASON_REQUIRED = new ErrorCode(1_030_104_024, "å®¡æ ¸ä¸éè¿æ¶å¿
须填åä¸éè¿åå "); |
| | | ErrorCode PURCHASE_REQUEST_ITEM_EMPTY = new ErrorCode(1_030_104_025, "éè´ç³è¯·å没æç³è¯·æç»ï¼æ æ³æäº¤å®¡æ¹"); |
| | | |
| | | // ========== ERP éè´è®¡åï¼1-030-104-010ï¼ ========== |
| | | ErrorCode PURCHASE_PLAN_NOT_EXISTS = new ErrorCode(1_030_104_010, "éè´è®¡åä¸åå¨"); |
| | |
| | | ErrorCode FINANCE_PAYMENT_CREATE_FAIL_INVOICE_NOT_ATTACHMENT = new ErrorCode(1_030_601_008, "åå»ºä»æ¬¾å失败ï¼åå ï¼å
³èçæ¥ç¥¨æªä¸ä¼ å票éä»¶"); |
| | | ErrorCode FINANCE_PAYMENT_CREATE_FAIL_INVOICE_SUPPLIER_MISMATCH = new ErrorCode(1_030_601_009, "åå»ºä»æ¬¾å失败ï¼åå ï¼å
³èçæ¥ç¥¨ä¸æéä¾åºåä¸å¹é
"); |
| | | ErrorCode FINANCE_PAYMENT_CREATE_FAIL_INVOICE_PRICE_EXCEEDS = new ErrorCode(1_030_601_010, "åå»ºä»æ¬¾å失败ï¼åå ï¼ä»æ¬¾éé¢è¶
åºè¯¥æ¥ç¥¨å©ä½å¯ä»éé¢ï¼ç®åå¯ä»ï¼{} å
"); |
| | | ErrorCode FINANCE_PAYMENT_SUBMIT_FAIL_STATUS = new ErrorCode(1_030_601_011, "æäº¤å®¡æ¹å¤±è´¥ï¼åªææªå®¡æ ¸ç¶æç仿¬¾åæè½æäº¤"); |
| | | ErrorCode FINANCE_PAYMENT_BPM_CATEGORY_NOT_EXISTS = new ErrorCode(1_030_601_012, "仿¬¾å审æ¹åç±»ä¸åå¨ï¼è¯·å
å¨BPM模åå建éè´å®¡æ ¸æµç¨åç±»"); |
| | | ErrorCode FINANCE_PAYMENT_BPM_PROCESS_DEFINITION_NOT_EXISTS = new ErrorCode(1_030_601_013, "仿¬¾å审æ¹åç±»ä¸æ²¡æå¯ç¨çæµç¨æ¨¡åï¼è¯·å
å建并å叿µç¨"); |
| | | ErrorCode FINANCE_PAYMENT_UPDATE_FAIL_APPROVING = new ErrorCode(1_030_601_014, "仿¬¾å({})审æ¹ä¸ï¼æ æ³ä¿®æ¹"); |
| | | ErrorCode FINANCE_PAYMENT_DELETE_FAIL_APPROVING = new ErrorCode(1_030_601_015, "仿¬¾å({})审æ¹ä¸ï¼æ æ³å é¤"); |
| | | ErrorCode FINANCE_PAYMENT_SUBMIT_FAIL_NOT_ALLOWED = new ErrorCode(1_030_601_016, "æäº¤å¤±è´¥ï¼åªææªå®¡æ ¸ç¶æç仿¬¾åæè½æäº¤"); |
| | | ErrorCode FINANCE_PAYMENT_AUDIT_FAIL_NOT_PROCESS = new ErrorCode(1_030_601_017, "å®¡æ ¸å¤±è´¥ï¼åªæå®¡æ¹ä¸ç¶æç仿¬¾åæè½å®¡æ ¸"); |
| | | ErrorCode FINANCE_PAYMENT_AUDIT_REJECT_REASON_REQUIRED = new ErrorCode(1_030_601_018, "å®¡æ ¸ä¸éè¿æ¶å¿
须填åä¸éè¿åå "); |
| | | |
| | | // ========== ERP æ¶æ¬¾å 1-030-602-000 ========== |
| | | ErrorCode FINANCE_RECEIPT_NOT_EXISTS = new ErrorCode(1_030_602_000, "æ¶æ¬¾åä¸åå¨"); |
| | |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | /** |
| | | * ERP 仿¬¾å Service æ¥å£ |
| | |
| | | /** |
| | | * æäº¤ä»æ¬¾åå®¡æ¹ |
| | | * |
| | | * @param id ç¼å· |
| | | * @param processDefinitionKey æµç¨å®ä¹çç¼å· |
| | | * @param userId ç¨æ·ç¼å· |
| | | */ |
| | | void submitFinancePayment(Long id, String processDefinitionKey, Long userId); |
| | | |
| | | /** |
| | | * è·å¾ä»æ¬¾åå®¡æ¹æµç¨å®ä¹å表 |
| | | * |
| | | * @return æµç¨å®ä¹å表 |
| | | */ |
| | | List<Map<String, Object>> getFinancePaymentApproveProcessDefinitionList(); |
| | | |
| | | /** |
| | | * æ´æ°ä»æ¬¾åç审æ¹ç¶æï¼ç± BPM æµç¨å®ä¾çåè°è§¦åï¼ |
| | | * ä»
ãæªå®¡æ ¸ãï¼å«å®¡æ ¸ä¸éè¿éåï¼ç¶æå¯æäº¤ï¼å®¡æ¹äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãç»ä¸æå®ï¼ |
| | | * æäº¤åè¿å
¥ã审æ¹ä¸ãï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æã |
| | | * |
| | | * @param id ç¼å· |
| | | * @param bpmResult BPM 审æ¹ç»æ |
| | | */ |
| | | void updateFinancePaymentAuditStatus(Long id, Integer bpmResult); |
| | | void submitFinancePayment(Long id); |
| | | |
| | | /** |
| | | * è·å仿¬¾åç审æ¹äººç¼å·éåï¼æç¾ï¼ä»»ä¸äººå®¡æ ¸å³å¯ï¼ |
| | | * |
| | | * @return 审æ¹äººç¨æ·ç¼å· |
| | | */ |
| | | Set<Long> getFinancePaymentApproverUserIds(); |
| | | |
| | | /** |
| | | * å®¡æ ¸ä»æ¬¾åï¼éè¿ / ä¸éè¿ï¼ |
| | | * |
| | | * ä»
é
ç½®å
ç审æ¹äººå¯æ§è¡ï¼å®¡æ ¸ä¸éè¿æ¶å¿
须填ååå ï¼éååå¯ä¿®æ¹å¹¶éæ°æäº¤ã |
| | | * |
| | | * @param id ç¼å· |
| | | * @param pass æ¯å¦å®¡æ ¸éè¿ |
| | | * @param reviewRemark å®¡æ ¸æè§ |
| | | */ |
| | | void auditFinancePayment(Long id, Boolean pass, String reviewRemark); |
| | | |
| | | /** |
| | | * å é¤ä»æ¬¾å |
| | |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | 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.dal.dataobject.definition.BpmCategoryDO; |
| | | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO; |
| | | import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatusEnum; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmCategoryService; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.finance.vo.payment.ErpFinancePaymentPageReqVO; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.finance.vo.payment.ErpFinancePaymentSaveReqVO; |
| | | import cn.iocoder.yudao.module.erp.dal.dataobject.finance.ErpFinancePaymentDO; |
| | |
| | | import cn.iocoder.yudao.module.erp.service.purchase.ErpPurchaseInvoiceService; |
| | | import cn.iocoder.yudao.module.erp.service.purchase.ErpPurchaseInvoiceServiceImpl; |
| | | import cn.iocoder.yudao.module.erp.service.purchase.ErpSupplierService; |
| | | import cn.iocoder.yudao.module.system.api.approval.ApprovalConfigApi; |
| | | import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | | import jakarta.annotation.Resource; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.flowable.engine.repository.ProcessDefinition; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; |
| | | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| | | import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.*; |
| | | |
| | | /** |
| | |
| | | public class ErpFinancePaymentServiceImpl implements ErpFinancePaymentService { |
| | | |
| | | /** |
| | | * BPM 仿¬¾å审æ¹åç±»ç¼ç |
| | | * éç¨å®¡æ¹é
ç½®çä¸å¡ç±»åç¼ç ï¼å¯¹åº system_approval_config.biz_typeï¼ |
| | | */ |
| | | private static final String BPM_PROCESS_DEFINITION_CATEGORY_CODE = "erp_finance_payment_approve"; |
| | | private static final String FINANCE_PAYMENT_APPROVE_BIZ_TYPE = "erp_finance_payment_approve"; |
| | | |
| | | @Resource |
| | | private ErpFinancePaymentMapper financePaymentMapper; |
| | |
| | | private StorageAttachmentApi storageAttachmentApi; |
| | | |
| | | @Resource |
| | | private BpmProcessInstanceApi processInstanceApi; |
| | | @Resource |
| | | private BpmCategoryService bpmCategoryService; |
| | | @Resource |
| | | private BpmProcessDefinitionService bpmProcessDefinitionService; |
| | | private ApprovalConfigApi approvalConfigApi; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void submitFinancePayment(Long id, String processDefinitionKey, Long userId) { |
| | | // 1. æ ¡éªåå¨ + æªå®¡æ ¸ç¶æ |
| | | public void submitFinancePayment(Long id) { |
| | | // 1. æ ¡éªåå¨ + å¯æäº¤ç¶æï¼æªå®¡æ ¸ï¼å«å®¡æ ¸ä¸éè¿éååéæ°æäº¤ï¼ |
| | | ErpFinancePaymentDO payment = validateFinancePaymentExists(id); |
| | | if (!ErpAuditStatus.PROCESS.getStatus().equals(payment.getStatus())) { |
| | | throw exception(FINANCE_PAYMENT_SUBMIT_FAIL_STATUS); |
| | | throw exception(FINANCE_PAYMENT_SUBMIT_FAIL_NOT_ALLOWED); |
| | | } |
| | | |
| | | // 2. å建 BPM æµç¨å®ä¾ |
| | | String processInstanceId = processInstanceApi.createProcessInstance(userId, |
| | | new BpmProcessInstanceCreateReqDTO() |
| | | .setProcessDefinitionKey(processDefinitionKey) |
| | | .setBusinessKey(String.valueOf(id))); |
| | | |
| | | // 3. æ´æ°ä»æ¬¾åç¶æä¸ºå®¡æ¹ä¸ |
| | | financePaymentMapper.updateById(new ErpFinancePaymentDO() |
| | | .setId(id) |
| | | .setStatus(ErpAuditStatus.APPROVING.getStatus()) |
| | | .setProcessInstanceId(processInstanceId)); |
| | | // 2. æ ¡éªå®¡æ¹é
置已å¯ç¨ä¸é
ç½®äºææå®¡æ¹äºº |
| | | approvalConfigApi.validateApprovalEnabledAndGetApprovers(FINANCE_PAYMENT_APPROVE_BIZ_TYPE); |
| | | // 3. ç¶æç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | financePaymentMapper.submitAndResetAuditInfo(id, ErpAuditStatus.APPROVING.getStatus()); |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getFinancePaymentApproveProcessDefinitionList() { |
| | | // 1. æ ¡éªåç±»åæµç¨å®ä¹æ¯å¦åå¨ |
| | | validateFinancePaymentApproveCategoryAndProcessDefinition(); |
| | | |
| | | // 2. è·ååç±»ä¸çæµç¨å®ä¹ä¿¡æ¯ |
| | | List<BpmProcessDefinitionInfoDO> definitionInfoList = bpmProcessDefinitionService |
| | | .getProcessDefinitionInfoListByCategory(BPM_PROCESS_DEFINITION_CATEGORY_CODE); |
| | | if (CollUtil.isEmpty(definitionInfoList)) { |
| | | return Collections.emptyList(); |
| | | } |
| | | |
| | | // 3. éåè·åæµç¨å®ä¹è¯¦æ
ï¼è¿æ»¤æ¿æ´»ç¶æï¼ä¿çææ°çæ¬ |
| | | Map<String, ProcessDefinition> latestVersionMap = new HashMap<>(); |
| | | for (BpmProcessDefinitionInfoDO info : definitionInfoList) { |
| | | ProcessDefinition pd = bpmProcessDefinitionService.getProcessDefinition(info.getProcessDefinitionId()); |
| | | if (pd == null || pd.isSuspended()) { |
| | | continue; |
| | | } |
| | | ProcessDefinition existing = latestVersionMap.get(pd.getKey()); |
| | | if (existing == null || pd.getVersion() > existing.getVersion()) { |
| | | latestVersionMap.put(pd.getKey(), pd); |
| | | } |
| | | } |
| | | |
| | | // 4. è¿åæµç¨å®ä¹å表 |
| | | List<Map<String, Object>> result = new ArrayList<>(); |
| | | for (ProcessDefinition pd : latestVersionMap.values()) { |
| | | Map<String, Object> item = new HashMap<>(); |
| | | item.put("id", pd.getId()); |
| | | item.put("key", pd.getKey()); |
| | | item.put("name", pd.getName()); |
| | | result.add(item); |
| | | } |
| | | return result; |
| | | public Set<Long> getFinancePaymentApproverUserIds() { |
| | | return approvalConfigApi.getApproverUserIds(FINANCE_PAYMENT_APPROVE_BIZ_TYPE); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void updateFinancePaymentAuditStatus(Long id, Integer bpmResult) { |
| | | public void auditFinancePayment(Long id, Boolean pass, String reviewRemark) { |
| | | // 1. æ ¡éªåå¨ |
| | | ErpFinancePaymentDO payment = validateFinancePaymentExists(id); |
| | | // 2. æ ¡éªå¤äºå®¡æ¹ä¸ç¶æ |
| | | if (!ErpAuditStatus.APPROVING.getStatus().equals(payment.getStatus())) { |
| | | log.warn("[updateFinancePaymentAuditStatus] 仿¬¾å({}) ä¸å¤äºå®¡æ¹ä¸ç¶æ", id); |
| | | throw exception(FINANCE_PAYMENT_AUDIT_FAIL_NOT_PROCESS); |
| | | } |
| | | // 3. æ ¡éªå½åç»å½ç¨æ·æ¯è¯¥ä¸å¡ç±»åç审æ¹äººï¼æç¾ï¼ä»»ä¸äººåå¯å®¡æ ¸ï¼ |
| | | Long userId = getLoginUserId(); |
| | | approvalConfigApi.validateApprover(FINANCE_PAYMENT_APPROVE_BIZ_TYPE, userId); |
| | | // 4. å®¡æ ¸ä¸éè¿ï¼å¿
须填ååå ï¼éåè´¢å¡äººåä¿®æ¹åå¯éæ°æäº¤ |
| | | if (!Boolean.TRUE.equals(pass)) { |
| | | if (StrUtil.isBlank(reviewRemark)) { |
| | | throw exception(FINANCE_PAYMENT_AUDIT_REJECT_REASON_REQUIRED); |
| | | } |
| | | financePaymentMapper.auditFinancePayment(id, ErpAuditStatus.PROCESS.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | return; |
| | | } |
| | | |
| | | // 2. æ ¹æ®å®¡æ¹ç»ææ´æ°ç¶æ |
| | | Integer newStatus = convertBpmResultToAuditStatus(bpmResult); |
| | | if (newStatus != null) { |
| | | financePaymentMapper.updateById(new ErpFinancePaymentDO() |
| | | .setId(id).setStatus(newStatus)); |
| | | } |
| | | // 5. å®¡æ ¸éè¿ï¼è®°å½å®¡æ ¸äººä¸å®¡æ ¸æè§ï¼ç¶æç½®ä¸ºå·²å®¡æ ¸ |
| | | financePaymentMapper.auditFinancePayment(id, ErpAuditStatus.APPROVE.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éªä»æ¬¾å审æ¹åç±»åæµç¨å®ä¹æ¯å¦åå¨ |
| | | * è·åç¨æ·æµç§° |
| | | * |
| | | * @param userId ç¨æ·ç¼å· |
| | | * @return æµç§°ï¼ç¨æ·ä¸å卿¶è¿å null |
| | | */ |
| | | private void validateFinancePaymentApproveCategoryAndProcessDefinition() { |
| | | // 1. æ ¡éªåç±»æ¯å¦åå¨ |
| | | List<BpmCategoryDO> categories = bpmCategoryService.getCategoryListByCode( |
| | | Collections.singletonList(BPM_PROCESS_DEFINITION_CATEGORY_CODE)); |
| | | if (CollUtil.isEmpty(categories)) { |
| | | throw exception(FINANCE_PAYMENT_BPM_CATEGORY_NOT_EXISTS); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è½¬æ¢ BPM 审æ¹ç»æä¸ºå®¡æ ¸ç¶æ |
| | | */ |
| | | private Integer convertBpmResultToAuditStatus(Integer bpmResult) { |
| | | if (BpmTaskStatusEnum.APPROVE.getStatus().equals(bpmResult)) { |
| | | return ErpAuditStatus.APPROVE.getStatus(); |
| | | } else if (BpmTaskStatusEnum.REJECT.getStatus().equals(bpmResult)) { |
| | | return ErpAuditStatus.PROCESS.getStatus(); |
| | | } else if (BpmTaskStatusEnum.CANCEL.getStatus().equals(bpmResult)) { |
| | | return ErpAuditStatus.CANCEL.getStatus(); |
| | | } |
| | | private String getUserNickname(Long userId) { |
| | | if (userId == null) { |
| | | return null; |
| | | } |
| | | AdminUserRespDTO user = adminUserApi.getUser(userId); |
| | | return user == null ? null : user.getNickname(); |
| | | } |
| | | |
| | | private List<ErpFinancePaymentItemDO> validateFinancePaymentItems( |
| | | Long supplierId, |
| | |
| | | |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | /** |
| | | * ERP éè´ç³è¯· Service æ¥å£ |
| | |
| | | /** |
| | | * æäº¤éè´ç³è¯·å®¡æ¹ |
| | | * |
| | | * @param id ç¼å· |
| | | * @param processDefinitionKey æµç¨å®ä¹ Key |
| | | * @param userId ç¨æ·ç¼å· |
| | | */ |
| | | void submitPurchaseRequest(Long id, String processDefinitionKey, Long userId); |
| | | |
| | | /** |
| | | * è·åéè´ç³è¯·å®¡æ¹æµç¨å表 |
| | | * |
| | | * @return æµç¨å®ä¹å表 |
| | | */ |
| | | List<Map<String, Object>> getPurchaseRequestApproveProcessDefinitionList(); |
| | | |
| | | /** |
| | | * æ´æ°éè´ç³è¯·å®¡æ¹ç»æï¼BPM åè°ï¼ |
| | | * ä»
ãæªæäº¤ãæãå®¡æ ¸ä¸éè¿ãç¶æå¯æäº¤ï¼å®¡æ¹äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãç»ä¸æå®ï¼ |
| | | * æäº¤åè¿å
¥ã审æ¹ä¸ãï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æã |
| | | * |
| | | * @param id ç¼å· |
| | | * @param bpmResult BPM 审æ¹ç»æ |
| | | */ |
| | | void updatePurchaseRequestAuditStatus(Long id, Integer bpmResult); |
| | | void submitPurchaseRequest(Long id); |
| | | |
| | | /** |
| | | * è·åéè´ç³è¯·ç审æ¹äººç¼å·éåï¼æç¾ï¼ä»»ä¸äººå®¡æ ¸å³å¯ï¼ |
| | | * |
| | | * @return 审æ¹äººç¨æ·ç¼å· |
| | | */ |
| | | Set<Long> getPurchaseRequestApproverUserIds(); |
| | | |
| | | /** |
| | | * å®¡æ ¸éè´ç³è¯·ï¼éè¿ / ä¸éè¿ï¼ |
| | | * |
| | | * ä»
é
ç½®å
ç审æ¹äººå¯æ§è¡ï¼å®¡æ ¸ä¸éè¿æ¶å¿
须填ååå ï¼éååå¯ä¿®æ¹å¹¶éæ°æäº¤ã |
| | | * |
| | | * @param id ç¼å· |
| | | * @param pass æ¯å¦å®¡æ ¸éè¿ |
| | | * @param reviewRemark å®¡æ ¸æè§ |
| | | */ |
| | | void auditPurchaseRequest(Long id, Boolean pass, String reviewRemark); |
| | | |
| | | /** |
| | | * çæéè´è®¢å |
| | |
| | | package cn.iocoder.yudao.module.erp.service.purchase; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.number.MoneyUtils; |
| | | 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.dal.dataobject.definition.BpmCategoryDO; |
| | | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO; |
| | | import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatusEnum; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmCategoryService; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.request.ErpPurchaseRequestPageReqVO; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.request.ErpPurchaseRequestSaveReqVO; |
| | | import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpPurchaseOrderDO; |
| | |
| | | import cn.iocoder.yudao.module.erp.dal.redis.no.ErpNoRedisDAO; |
| | | import cn.iocoder.yudao.module.erp.enums.ErpAuditStatus; |
| | | import cn.iocoder.yudao.module.erp.enums.ErpPurchaseRequestStatusEnum; |
| | | import cn.iocoder.yudao.module.system.api.approval.ApprovalConfigApi; |
| | | import cn.iocoder.yudao.module.system.api.dept.DeptApi; |
| | | import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | | import jakarta.annotation.Resource; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.flowable.engine.repository.ProcessDefinition; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; |
| | | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| | | import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.*; |
| | | |
| | | /** |
| | |
| | | public class ErpPurchaseRequestServiceImpl implements ErpPurchaseRequestService { |
| | | |
| | | /** |
| | | * BPM éè´ç³è¯·å®¡æ¹åç±»ç¼ç |
| | | * éç¨å®¡æ¹é
ç½®çä¸å¡ç±»åç¼ç ï¼å¯¹åº system_approval_config.biz_typeï¼ |
| | | */ |
| | | private static final String PURCHASE_REQUEST_APPROVE_CATEGORY_CODE = "purchase_request_approve"; |
| | | private static final String PURCHASE_REQUEST_APPROVE_BIZ_TYPE = "purchase_request_approve"; |
| | | |
| | | @Resource |
| | | private ErpPurchaseRequestMapper purchaseRequestMapper; |
| | |
| | | private ErpSupplierService supplierService; |
| | | |
| | | @Resource |
| | | private BpmProcessInstanceApi processInstanceApi; |
| | | @Resource |
| | | private BpmCategoryService bpmCategoryService; |
| | | @Resource |
| | | private BpmProcessDefinitionService bpmProcessDefinitionService; |
| | | private ApprovalConfigApi approvalConfigApi; |
| | | |
| | | @Resource |
| | | private AdminUserApi adminUserApi; |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void submitPurchaseRequest(Long id, String processDefinitionKey, Long userId) { |
| | | // 1. æ ¡éªåå¨ + èç¨¿ç¶æ |
| | | ErpPurchaseRequestDO purchaseRequest = validatePurchaseRequestCanModify(id); |
| | | |
| | | public void submitPurchaseRequest(Long id) { |
| | | // 1. æ ¡éªåå¨ + å¯æäº¤ç¶æï¼æªæäº¤ / å®¡æ ¸ä¸éè¿ï¼ |
| | | ErpPurchaseRequestDO purchaseRequest = validatePurchaseRequestExists(id); |
| | | if (!ErpPurchaseRequestStatusEnum.DRAFT.getStatus().equals(purchaseRequest.getStatus()) |
| | | && !ErpPurchaseRequestStatusEnum.REJECT.getStatus().equals(purchaseRequest.getStatus())) { |
| | | throw exception(PURCHASE_REQUEST_SUBMIT_FAIL_NOT_ALLOWED); |
| | | } |
| | | // 2. æ ¡éªæ¯å¦ææç» |
| | | List<ErpPurchaseRequestItemDO> items = purchaseRequestItemMapper.selectListByRequestId(id); |
| | | if (CollUtil.isEmpty(items)) { |
| | | throw exception(PURCHASE_REQUEST_NOT_EXISTS); // TODO: æ·»å æç»ä¸ºç©ºçé误ç |
| | | throw exception(PURCHASE_REQUEST_ITEM_EMPTY); |
| | | } |
| | | |
| | | // 3. å建 BPM æµç¨å®ä¾ |
| | | String processInstanceId = processInstanceApi.createProcessInstance(userId, |
| | | new BpmProcessInstanceCreateReqDTO() |
| | | .setProcessDefinitionKey(processDefinitionKey) |
| | | .setBusinessKey(String.valueOf(id))); |
| | | |
| | | // 4. æ´æ°éè´ç³è¯·ç¶æä¸ºå®¡æ¹ä¸ |
| | | purchaseRequestMapper.updateById(new ErpPurchaseRequestDO() |
| | | .setId(id) |
| | | .setStatus(ErpPurchaseRequestStatusEnum.PROCESS.getStatus()) |
| | | .setProcessInstanceId(processInstanceId)); |
| | | // 3. æ ¡éªå®¡æ¹é
置已å¯ç¨ä¸é
ç½®äºææå®¡æ¹äºº |
| | | approvalConfigApi.validateApprovalEnabledAndGetApprovers(PURCHASE_REQUEST_APPROVE_BIZ_TYPE); |
| | | // 4. ç¶æç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | purchaseRequestMapper.submitAndResetAuditInfo(id, ErpPurchaseRequestStatusEnum.PROCESS.getStatus()); |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getPurchaseRequestApproveProcessDefinitionList() { |
| | | // 1. æ ¡éªåç±»åæµç¨å®ä¹æ¯å¦åå¨ |
| | | validatePurchaseRequestApproveCategoryAndProcessDefinition(); |
| | | |
| | | // 2. è·ååç±»ä¸çæµç¨å®ä¹ä¿¡æ¯ |
| | | List<BpmProcessDefinitionInfoDO> definitionInfoList = bpmProcessDefinitionService |
| | | .getProcessDefinitionInfoListByCategory(PURCHASE_REQUEST_APPROVE_CATEGORY_CODE); |
| | | if (CollUtil.isEmpty(definitionInfoList)) { |
| | | return Collections.emptyList(); |
| | | } |
| | | |
| | | // 3. éåè·åæµç¨å®ä¹è¯¦æ
ï¼è¿æ»¤æ¿æ´»ç¶æï¼ä¿çææ°çæ¬ |
| | | Map<String, ProcessDefinition> latestVersionMap = new HashMap<>(); |
| | | for (BpmProcessDefinitionInfoDO info : definitionInfoList) { |
| | | ProcessDefinition pd = bpmProcessDefinitionService.getProcessDefinition(info.getProcessDefinitionId()); |
| | | if (pd == null || pd.isSuspended()) { |
| | | continue; |
| | | } |
| | | ProcessDefinition existing = latestVersionMap.get(pd.getKey()); |
| | | if (existing == null || pd.getVersion() > existing.getVersion()) { |
| | | latestVersionMap.put(pd.getKey(), pd); |
| | | } |
| | | } |
| | | |
| | | // 4. è¿åæµç¨å®ä¹å表 |
| | | List<Map<String, Object>> result = new ArrayList<>(); |
| | | for (ProcessDefinition pd : latestVersionMap.values()) { |
| | | Map<String, Object> item = new HashMap<>(); |
| | | item.put("id", pd.getId()); |
| | | item.put("key", pd.getKey()); |
| | | item.put("name", pd.getName()); |
| | | result.add(item); |
| | | } |
| | | return result; |
| | | public Set<Long> getPurchaseRequestApproverUserIds() { |
| | | return approvalConfigApi.getApproverUserIds(PURCHASE_REQUEST_APPROVE_BIZ_TYPE); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void updatePurchaseRequestAuditStatus(Long id, Integer bpmResult) { |
| | | public void auditPurchaseRequest(Long id, Boolean pass, String reviewRemark) { |
| | | // 1. æ ¡éªåå¨ |
| | | ErpPurchaseRequestDO purchaseRequest = validatePurchaseRequestExists(id); |
| | | // 2. æ ¡éªå¤äºå®¡æ¹ä¸ç¶æ |
| | | if (!ErpPurchaseRequestStatusEnum.PROCESS.getStatus().equals(purchaseRequest.getStatus())) { |
| | | log.warn("[updatePurchaseRequestAuditStatus] éè´ç³è¯·({}) ä¸å¤äºå®¡æ¹ä¸ç¶æ", id); |
| | | throw exception(PURCHASE_REQUEST_AUDIT_FAIL_NOT_PROCESS); |
| | | } |
| | | // 3. æ ¡éªå½åç»å½ç¨æ·æ¯è¯¥ä¸å¡ç±»åç审æ¹äººï¼æç¾ï¼ä»»ä¸äººåå¯å®¡æ ¸ï¼ |
| | | Long userId = getLoginUserId(); |
| | | approvalConfigApi.validateApprover(PURCHASE_REQUEST_APPROVE_BIZ_TYPE, userId); |
| | | // 4. å®¡æ ¸ä¸éè¿ï¼å¿
须填ååå ï¼éåç³è¯·äººä¿®æ¹åå¯éæ°æäº¤ |
| | | if (!Boolean.TRUE.equals(pass)) { |
| | | if (StrUtil.isBlank(reviewRemark)) { |
| | | throw exception(PURCHASE_REQUEST_AUDIT_REJECT_REASON_REQUIRED); |
| | | } |
| | | purchaseRequestMapper.auditPurchaseRequest(id, ErpPurchaseRequestStatusEnum.REJECT.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | return; |
| | | } |
| | | |
| | | // 2. æ ¹æ®å®¡æ¹ç»ææ´æ°ç¶æ |
| | | Integer newStatus = convertBpmResultToStatus(bpmResult); |
| | | if (newStatus != null) { |
| | | purchaseRequestMapper.updateById(new ErpPurchaseRequestDO() |
| | | .setId(id).setStatus(newStatus)); |
| | | } |
| | | |
| | | // 3. 审æ¹éè¿ä¸æä¾åºåï¼èªå¨çæéè´è®¢å |
| | | if (ErpPurchaseRequestStatusEnum.APPROVE.getStatus().equals(newStatus) |
| | | && purchaseRequest.getSupplierId() != null |
| | | && purchaseRequest.getOrderId() == null) { |
| | | // 5. å®¡æ ¸éè¿ï¼è®°å½å®¡æ ¸äººä¸å®¡æ ¸æè§ |
| | | purchaseRequestMapper.auditPurchaseRequest(id, ErpPurchaseRequestStatusEnum.APPROVE.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | // 6. å®¡æ ¸éè¿ä¸æä¾åºåãæªçæè®¢åæ¶ï¼èªå¨çæéè´è®¢å |
| | | if (purchaseRequest.getSupplierId() != null && purchaseRequest.getOrderId() == null) { |
| | | try { |
| | | Long orderId = doGeneratePurchaseOrder(purchaseRequest); |
| | | log.info("[updatePurchaseRequestAuditStatus] éè´ç³è¯·({}) èªå¨çæéè´è®¢å({})", id, orderId); |
| | | log.info("[auditPurchaseRequest] éè´ç³è¯·({}) èªå¨çæéè´è®¢å({})", id, orderId); |
| | | } catch (Exception e) { |
| | | // 䏿åºå¼å¸¸ï¼é¿å
å½±åå®¡æ ¸ç»æè½åºï¼çæå¤±è´¥å¯ç±ç¨æ·æå¨è§¦å |
| | | log.error("[auditPurchaseRequest] éè´ç³è¯·({}) èªå¨çæéè´è®¢å失败", id, e); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·åç¨æ·æµç§° |
| | | * |
| | | * @param userId ç¨æ·ç¼å· |
| | | * @return æµç§°ï¼ç¨æ·ä¸å卿¶è¿å null |
| | | */ |
| | | private String getUserNickname(Long userId) { |
| | | if (userId == null) { |
| | | return null; |
| | | } |
| | | AdminUserRespDTO user = adminUserApi.getUser(userId); |
| | | return user == null ? null : user.getNickname(); |
| | | } |
| | | |
| | | @Override |
| | |
| | | .setOrderNo(orderNo)); |
| | | |
| | | return purchaseOrder.getId(); |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éªéè´ç³è¯·å®¡æ¹åç±»åæµç¨å®ä¹æ¯å¦åå¨ |
| | | */ |
| | | private void validatePurchaseRequestApproveCategoryAndProcessDefinition() { |
| | | List<BpmCategoryDO> categories = bpmCategoryService.getCategoryListByCode( |
| | | Collections.singletonList(PURCHASE_REQUEST_APPROVE_CATEGORY_CODE)); |
| | | if (CollUtil.isEmpty(categories)) { |
| | | throw exception(PURCHASE_REQUEST_BPM_CATEGORY_NOT_EXISTS); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è½¬æ¢ BPM 审æ¹ç»æä¸ºç¶æ |
| | | */ |
| | | private Integer convertBpmResultToStatus(Integer bpmResult) { |
| | | if (BpmTaskStatusEnum.APPROVE.getStatus().equals(bpmResult)) { |
| | | return ErpPurchaseRequestStatusEnum.APPROVE.getStatus(); |
| | | } else if (BpmTaskStatusEnum.REJECT.getStatus().equals(bpmResult)) { |
| | | return ErpPurchaseRequestStatusEnum.REJECT.getStatus(); |
| | | } else if (BpmTaskStatusEnum.CANCEL.getStatus().equals(bpmResult)) { |
| | | return ErpPurchaseRequestStatusEnum.CANCEL.getStatus(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | private ErpPurchaseRequestDO validatePurchaseRequestExists(Long id) { |
| | |
| | | // ========== 请åç³è¯· 1-030-001-000 ========== |
| | | ErrorCode LEAVE_APPLICATION_NOT_EXISTS = new ErrorCode(1_030_001_000, "请åç³è¯·ä¸åå¨"); |
| | | ErrorCode LEAVE_APPLICATION_UPDATE_FAIL_NOT_DRAFT = new ErrorCode(1_030_001_001, "请åç³è¯·æ´æ°å¤±è´¥ï¼åå ï¼ä¸æ¯èç¨¿ç¶æ"); |
| | | ErrorCode LEAVE_APPLICATION_SUBMIT_FAIL_NOT_DRAFT = new ErrorCode(1_030_001_002, "请åç³è¯·æäº¤å¤±è´¥ï¼åå ï¼ä¸æ¯èç¨¿ç¶æ"); |
| | | ErrorCode LEAVE_APPLICATION_SUBMIT_FAIL_NOT_EDITABLE = new ErrorCode(1_030_001_002, "åªæè稿æå®¡æ ¸ä¸éè¿ç¶æç请åç³è¯·æè½æäº¤å®¡æ¹"); |
| | | ErrorCode LEAVE_APPLICATION_UPDATE_AUDIT_STATUS_FAIL_NOT_PROCESS = new ErrorCode(1_030_001_003, "æ´æ°è¯·åç³è¯·å®¡æ¹ç¶æå¤±è´¥ï¼åå ï¼ä¸æ¯å®¡æ¹ä¸ç¶æ"); |
| | | ErrorCode LEAVE_APPLICATION_NO_EXISTS = new ErrorCode(1_030_001_004, "çæè¯·åç³è¯·åå·éå¤ï¼è¯·éè¯"); |
| | | ErrorCode LEAVE_APPLICATION_DURATION_EXCEED = new ErrorCode(1_030_001_005, "è¯·åæ¶é¿è¶
åºå¹´åä½é¢"); |
| | | ErrorCode LEAVE_APPLICATION_BPM_PROCESS_DEFINITION_NOT_EXISTS = new ErrorCode(1_030_001_006, "请åå®¡æ¹æµç¨ä¸åå¨"); |
| | | ErrorCode LEAVE_APPLICATION_AUDIT_FAIL_NOT_PROCESS = new ErrorCode(1_030_001_006, "åªæå®¡æ¹ä¸ç¶æç请åç³è¯·æè½å®¡æ ¸"); |
| | | ErrorCode LEAVE_APPLICATION_AUDIT_REJECT_REASON_REQUIRED = new ErrorCode(1_030_001_007, "å®¡æ ¸ä¸éè¿æ¶å¿
须填åä¸éè¿åå "); |
| | | |
| | | // ========== è°å²ç³è¯· 1-030-002-000 ========== |
| | | ErrorCode TRANSFER_APPLICATION_NOT_EXISTS = new ErrorCode(1_030_002_000, "è°å²ç³è¯·ä¸åå¨"); |
| | | ErrorCode TRANSFER_APPLICATION_UPDATE_FAIL_NOT_DRAFT = new ErrorCode(1_030_002_001, "è°å²ç³è¯·æ´æ°å¤±è´¥ï¼åå ï¼ä¸æ¯èç¨¿ç¶æ"); |
| | | ErrorCode TRANSFER_APPLICATION_SUBMIT_FAIL_NOT_DRAFT = new ErrorCode(1_030_002_002, "è°å²ç³è¯·æäº¤å¤±è´¥ï¼åå ï¼ä¸æ¯èç¨¿ç¶æ"); |
| | | ErrorCode TRANSFER_APPLICATION_UPDATE_AUDIT_STATUS_FAIL_NOT_PROCESS = new ErrorCode(1_030_002_003, "æ´æ°è°å²ç³è¯·å®¡æ¹ç¶æå¤±è´¥ï¼åå ï¼ä¸æ¯å®¡æ¹ä¸ç¶æ"); |
| | | ErrorCode TRANSFER_APPLICATION_SUBMIT_FAIL_NOT_EDITABLE = new ErrorCode(1_030_002_002, "åªæè稿æå®¡æ ¸ä¸éè¿ç¶æçè°å²ç³è¯·æè½æäº¤å®¡æ¹"); |
| | | ErrorCode TRANSFER_APPLICATION_NO_EXISTS = new ErrorCode(1_030_002_004, "çæè°å²ç³è¯·åå·éå¤ï¼è¯·éè¯"); |
| | | ErrorCode TRANSFER_APPLICATION_SAME_DEPT = new ErrorCode(1_030_002_005, "è°å²å¤±è´¥ï¼åå ï¼ç®æ é¨é¨ä¸åé¨é¨ç¸å"); |
| | | ErrorCode TRANSFER_APPLICATION_SAME_POST = new ErrorCode(1_030_002_006, "è°å²å¤±è´¥ï¼åå ï¼ç®æ å²ä½ä¸åå²ä½ç¸å"); |
| | | ErrorCode TRANSFER_APPLICATION_BPM_PROCESS_DEFINITION_NOT_EXISTS = new ErrorCode(1_030_002_007, "è°å²å®¡æ¹æµç¨ä¸åå¨"); |
| | | ErrorCode TRANSFER_APPLICATION_AUDIT_FAIL_NOT_PROCESS = new ErrorCode(1_030_002_008, "åªæå®¡æ¹ä¸ç¶æçè°å²ç³è¯·æè½å®¡æ ¸"); |
| | | ErrorCode TRANSFER_APPLICATION_AUDIT_REJECT_REASON_REQUIRED = new ErrorCode(1_030_002_009, "å®¡æ ¸ä¸éè¿æ¶å¿
须填åä¸éè¿åå "); |
| | | |
| | | // ========== 离èç³è¯· 1-030-003-000 ========== |
| | | ErrorCode RESIGNATION_APPLICATION_NOT_EXISTS = new ErrorCode(1_030_003_000, "离èç³è¯·ä¸åå¨"); |
| | | ErrorCode RESIGNATION_APPLICATION_UPDATE_FAIL_NOT_DRAFT = new ErrorCode(1_030_003_001, "离èç³è¯·æ´æ°å¤±è´¥ï¼åå ï¼ä¸æ¯èç¨¿ç¶æ"); |
| | | ErrorCode RESIGNATION_APPLICATION_SUBMIT_FAIL_NOT_DRAFT = new ErrorCode(1_030_003_002, "离èç³è¯·æäº¤å¤±è´¥ï¼åå ï¼ä¸æ¯èç¨¿ç¶æ"); |
| | | ErrorCode RESIGNATION_APPLICATION_SUBMIT_FAIL_NOT_EDITABLE = new ErrorCode(1_030_003_002, "åªæè稿æå®¡æ ¸ä¸éè¿ç¶æç离èç³è¯·æè½æäº¤å®¡æ¹"); |
| | | ErrorCode RESIGNATION_APPLICATION_UPDATE_AUDIT_STATUS_FAIL_NOT_PROCESS = new ErrorCode(1_030_003_003, "æ´æ°ç¦»èç³è¯·å®¡æ¹ç¶æå¤±è´¥ï¼åå ï¼ä¸æ¯å®¡æ¹ä¸ç¶æ"); |
| | | ErrorCode RESIGNATION_APPLICATION_NO_EXISTS = new ErrorCode(1_030_003_004, "çæç¦»èç³è¯·åå·éå¤ï¼è¯·éè¯"); |
| | | ErrorCode RESIGNATION_APPLICATION_EXISTS = new ErrorCode(1_030_003_005, "该å工已åå¨ç¦»èç³è¯·ï¼è¯·å¿éå¤æäº¤"); |
| | | ErrorCode RESIGNATION_APPLICATION_BPM_PROCESS_DEFINITION_NOT_EXISTS = new ErrorCode(1_030_003_006, "离èå®¡æ¹æµç¨ä¸åå¨"); |
| | | ErrorCode RESIGNATION_APPLICATION_AUDIT_FAIL_NOT_PROCESS = new ErrorCode(1_030_003_006, "åªæå®¡æ¹ä¸ç¶æç离èç³è¯·æè½å®¡æ ¸"); |
| | | ErrorCode RESIGNATION_APPLICATION_AUDIT_REJECT_REASON_REQUIRED = new ErrorCode(1_030_003_007, "å®¡æ ¸ä¸éè¿æ¶å¿
须填åä¸éè¿åå "); |
| | | |
| | | // ========== ç¨æ·æ°æ®äº¤æ¥ 1-030-007-000 ========== |
| | | ErrorCode USER_HANDOVER_NOT_EXISTS = new ErrorCode(1_030_007_000, "ç¨æ·äº¤æ¥è®°å½ä¸åå¨"); |
| | |
| | | ErrorCode ATTENDANCE_RECORD_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_030_004_001, "导å
¥è夿°æ®ä¸è½ä¸ºç©º"); |
| | | ErrorCode ATTENDANCE_RECORD_EXISTS = new ErrorCode(1_030_004_002, "该å工彿¥èå¤è®°å½å·²åå¨"); |
| | | ErrorCode ATTENDANCE_EXCEPTION_NOT_EXISTS = new ErrorCode(1_030_004_003, "èå¤å¼å¸¸ç³è¯·ä¸åå¨"); |
| | | ErrorCode ATTENDANCE_EXCEPTION_SUBMIT_FAIL_NOT_DRAFT = new ErrorCode(1_030_004_004, "èå¤å¼å¸¸ç³è¯·æäº¤å¤±è´¥ï¼åå ï¼ä¸æ¯èç¨¿ç¶æ"); |
| | | ErrorCode ATTENDANCE_EXCEPTION_SUBMIT_FAIL_NOT_EDITABLE = new ErrorCode(1_030_004_004, "åªæè稿æå®¡æ ¸ä¸éè¿ç¶æçèå¤å¼å¸¸ç³è¯·æè½æäº¤å®¡æ¹"); |
| | | ErrorCode ATTENDANCE_EXCEPTION_UPDATE_FAIL_NOT_DRAFT = new ErrorCode(1_030_004_017, "èå¤å¼å¸¸ç³è¯·æ´æ°å¤±è´¥ï¼åå ï¼ä¸æ¯èç¨¿ç¶æ"); |
| | | ErrorCode ATTENDANCE_EXCEPTION_DELETE_FAIL_NOT_DRAFT = new ErrorCode(1_030_004_018, "èå¤å¼å¸¸ç³è¯·å é¤å¤±è´¥ï¼åå ï¼ä¸æ¯èç¨¿ç¶æ"); |
| | | ErrorCode ATTENDANCE_RULE_NOT_EXISTS = new ErrorCode(1_030_004_005, "èå¤è§åä¸åå¨"); |
| | |
| | | ErrorCode ATTENDANCE_CLOCK_FAIL_HOLIDAY = new ErrorCode(1_030_004_011, "æå¡å¤±è´¥ï¼å½æ¥ä¸ºä¼æ¯æ¥"); |
| | | ErrorCode ATTENDANCE_CLOCK_FAIL_NOT_WORKDAY = new ErrorCode(1_030_004_012, "æå¡å¤±è´¥ï¼å½æ¥ä¸æ¯å·¥ä½æ¥"); |
| | | ErrorCode ATTENDANCE_SUMMARY_NOT_EXISTS = new ErrorCode(1_030_004_013, "è夿±æ»è®°å½ä¸åå¨"); |
| | | ErrorCode ATTENDANCE_EXCEPTION_UPDATE_AUDIT_STATUS_FAIL = new ErrorCode(1_030_004_014, "æ´æ°èå¤å¼å¸¸å®¡æ¹ç¶æå¤±è´¥ï¼åå ï¼ä¸æ¯å®¡æ¹ä¸ç¶æ"); |
| | | ErrorCode ATTENDANCE_EXCEPTION_BPM_PROCESS_DEFINITION_NOT_EXISTS = new ErrorCode(1_030_004_015, "èå¤å¼å¸¸å®¡æ¹æµç¨ä¸åå¨"); |
| | | ErrorCode ATTENDANCE_CLOCK_ALREADY_CLOCKED = new ErrorCode(1_030_004_016, "å·²æè¿å¡ï¼è¯·å¿é夿å¡"); |
| | | ErrorCode ATTENDANCE_EXCEPTION_AUDIT_FAIL_NOT_PROCESS = new ErrorCode(1_030_004_019, "åªæå®¡æ¹ä¸ç¶æçèå¤å¼å¸¸ç³è¯·æè½å®¡æ ¸"); |
| | | ErrorCode ATTENDANCE_EXCEPTION_AUDIT_REJECT_REASON_REQUIRED = new ErrorCode(1_030_004_020, "å®¡æ ¸ä¸éè¿æ¶å¿
须填åä¸éè¿åå "); |
| | | |
| | | // ========== 绩æèæ ¸ 1-030-008-000 ========== |
| | | ErrorCode PERFORMANCE_APPRAISE_NOT_EXISTS = new ErrorCode(1_030_008_000, "绩æèæ ¸æ¹æ¡ä¸åå¨"); |
| | | ErrorCode PERFORMANCE_APPRAISE_ITEM_NOT_EXISTS = new ErrorCode(1_030_008_001, "èæ ¸ææ ä¸åå¨"); |
| | | ErrorCode PERFORMANCE_APPRAISE_UPDATE_FAIL_NOT_DRAFT = new ErrorCode(1_030_008_002, "绩æèæ ¸æ¹æ¡æ´æ°å¤±è´¥ï¼åå ï¼ä¸æ¯èç¨¿ç¶æ"); |
| | | ErrorCode PERFORMANCE_APPRAISE_SUBMIT_FAIL_NOT_DRAFT = new ErrorCode(1_030_008_003, "绩æèæ ¸æ¹æ¡æäº¤å¤±è´¥ï¼åå ï¼ä¸æ¯èç¨¿ç¶æ"); |
| | | ErrorCode PERFORMANCE_APPRAISE_UPDATE_AUDIT_STATUS_FAIL_NOT_PROCESS = new ErrorCode(1_030_008_004, "æ´æ°ç»©æèæ ¸å®¡æ¹ç¶æå¤±è´¥ï¼åå ï¼ä¸æ¯å®¡æ¹ä¸ç¶æ"); |
| | | ErrorCode PERFORMANCE_APPRAISE_BPM_PROCESS_DEFINITION_NOT_EXISTS = new ErrorCode(1_030_008_005, "绩æèæ ¸å®¡æ¹æµç¨ä¸åå¨ææªæ¿æ´»ï¼è¯·æ£æ¥ BPM é
ç½®"); |
| | | ErrorCode PERFORMANCE_APPRAISE_SUBMIT_FAIL_NOT_EDITABLE = new ErrorCode(1_030_008_003, "åªæè稿æå®¡æ ¸ä¸éè¿ç¶æç绩æèæ ¸æ¹æ¡æè½æäº¤å®¡æ¹"); |
| | | ErrorCode PERFORMANCE_APPRAISE_AUDIT_FAIL_NOT_PROCESS = new ErrorCode(1_030_008_004, "åªæå®¡æ¹ä¸ç¶æç绩æèæ ¸æ¹æ¡æè½å®¡æ ¸"); |
| | | ErrorCode PERFORMANCE_APPRAISE_AUDIT_REJECT_REASON_REQUIRED = new ErrorCode(1_030_008_005, "å®¡æ ¸ä¸éè¿æ¶å¿
须填åä¸éè¿åå "); |
| | | ErrorCode PERFORMANCE_APPRAISE_ITEM_EMPTY = new ErrorCode(1_030_008_006, "èæ ¸ææ ä¸è½ä¸ºç©º"); |
| | | ErrorCode PERFORMANCE_APPRAISE_RESULT_NOT_EXISTS = new ErrorCode(1_030_008_007, "èæ ¸ç»æä¸åå¨"); |
| | | ErrorCode PERFORMANCE_APPRAISE_RESULT_ITEM_NOT_EXISTS = new ErrorCode(1_030_008_008, "èæ ¸ææ è¯åä¸åå¨"); |
| | |
| | | // ========== 转æ£ç³è¯· 1-030-006-000 ========== |
| | | ErrorCode REGULARIZE_APPLICATION_NOT_EXISTS = new ErrorCode(1_030_006_000, "转æ£ç³è¯·ä¸åå¨"); |
| | | ErrorCode REGULARIZE_APPLICATION_UPDATE_FAIL_NOT_DRAFT = new ErrorCode(1_030_006_001, "转æ£ç³è¯·æ´æ°å¤±è´¥ï¼åå ï¼ä¸æ¯èç¨¿ç¶æ"); |
| | | ErrorCode REGULARIZE_APPLICATION_SUBMIT_FAIL_NOT_DRAFT = new ErrorCode(1_030_006_002, "转æ£ç³è¯·æäº¤å¤±è´¥ï¼åå ï¼ä¸æ¯èç¨¿ç¶æ"); |
| | | ErrorCode REGULARIZE_APPLICATION_SUBMIT_FAIL_NOT_EDITABLE = new ErrorCode(1_030_006_002, "åªæè稿æå®¡æ ¸ä¸éè¿ç¶æç转æ£ç³è¯·æè½æäº¤å®¡æ¹"); |
| | | ErrorCode REGULARIZE_APPLICATION_UPDATE_AUDIT_STATUS_FAIL_NOT_PROCESS = new ErrorCode(1_030_006_003, "æ´æ°è½¬æ£ç³è¯·å®¡æ¹ç¶æå¤±è´¥ï¼åå ï¼ä¸æ¯å®¡æ¹ä¸ç¶æ"); |
| | | ErrorCode REGULARIZE_APPLICATION_NO_EXISTS = new ErrorCode(1_030_006_004, "çæè½¬æ£ç³è¯·åå·éå¤ï¼è¯·éè¯"); |
| | | ErrorCode REGULARIZE_APPLICATION_EXISTS = new ErrorCode(1_030_006_005, "该å工已åå¨è½¬æ£ç³è¯·ï¼è¯·å¿éå¤æäº¤"); |
| | | ErrorCode REGULARIZE_APPLICATION_BPM_PROCESS_DEFINITION_NOT_EXISTS = new ErrorCode(1_030_006_006, "转æ£å®¡æ¹æµç¨ä¸åå¨"); |
| | | ErrorCode REGULARIZE_APPLICATION_AUDIT_FAIL_NOT_PROCESS = new ErrorCode(1_030_006_006, "åªæå®¡æ¹ä¸ç¶æç转æ£ç³è¯·æè½å®¡æ ¸"); |
| | | ErrorCode REGULARIZE_APPLICATION_AUDIT_REJECT_REASON_REQUIRED = new ErrorCode(1_030_006_007, "å®¡æ ¸ä¸éè¿æ¶å¿
须填åä¸éè¿åå "); |
| | | |
| | | // ========== å¹è®ç®¡ç 1-030-009-000 ========== |
| | | ErrorCode TRAINING_NOT_EXISTS = new ErrorCode(1_030_009_000, "å¹è®æ´»å¨ä¸åå¨"); |
| | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; |
| | | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmLeaveApplicationAuditReqVO; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmLeaveApplicationPageReqVO; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmLeaveApplicationRespVO; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmLeaveApplicationSaveReqVO; |
| | |
| | | |
| | | import java.io.IOException; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | |
| | | return success(leaveApplicationService.getLeaveApplicationPage(pageReqVO)); |
| | | } |
| | | |
| | | @PostMapping("/submit") |
| | | @Operation(summary = "æäº¤è¯·åç³è¯·å®¡æ¹") |
| | | @PutMapping("/submit") |
| | | @Operation(summary = "æäº¤å®¡æ¹ï¼è稿/å®¡æ ¸ä¸éè¿â审æ¹ä¸ï¼ï¼å®¡æ¹äººç±å®¡æ¹é
ç½®ç»ä¸æå®") |
| | | @Parameter(name = "id", description = "ç³è¯·ID", required = true) |
| | | @Parameter(name = "processDefinitionKey", description = "æµç¨å®ä¹Key", required = true) |
| | | @PreAuthorize("@ss.hasPermission('hrm:leave:submit')") |
| | | public CommonResult<Boolean> submitLeaveApplication(@RequestParam("id") Long id, |
| | | @RequestParam("processDefinitionKey") String processDefinitionKey) { |
| | | Long userId = SecurityFrameworkUtils.getLoginUserId(); |
| | | leaveApplicationService.submitLeaveApplication(id, processDefinitionKey, userId); |
| | | @PreAuthorize("@ss.hasPermission('hrm:leave:update')") |
| | | public CommonResult<Boolean> submitLeaveApplication(@RequestParam("id") Long id) { |
| | | leaveApplicationService.submitLeaveApplication(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approve-process-definition-list") |
| | | @Operation(summary = "è·åå¯ç¨çå®¡æ¹æµç¨å®ä¹å表") |
| | | @PutMapping("/audit") |
| | | @Operation(summary = "å®¡æ ¸ï¼å®¡æ¹ä¸âå®¡æ ¸éè¿/å®¡æ ¸ä¸éè¿ï¼ï¼ä»
审æ¹äººæ¬äººå¯æä½") |
| | | @PreAuthorize("@ss.hasPermission('hrm:leave:audit')") |
| | | public CommonResult<Boolean> auditLeaveApplication(@Valid @RequestBody HrmLeaveApplicationAuditReqVO auditReqVO) { |
| | | leaveApplicationService.auditLeaveApplication(auditReqVO.getId(), auditReqVO.getPass(), auditReqVO.getReviewRemark()); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approver-ids") |
| | | @Operation(summary = "è·å¾å®¡æ¹äººç¼å·éåï¼ä¾åç«¯å¤ææ¯å¦å±ç¤ºå®¡æ ¸æé®") |
| | | @PreAuthorize("@ss.hasPermission('hrm:leave:query')") |
| | | public CommonResult<List<Map<String, Object>>> getApproveProcessDefinitionList() { |
| | | return success(leaveApplicationService.getApproveProcessDefinitionList()); |
| | | public CommonResult<Set<Long>> getApproverUserIds() { |
| | | return success(leaveApplicationService.getLeaveApplicationApproverUserIds()); |
| | | } |
| | | |
| | | @GetMapping("/export-excel") |
| | |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmRegularizeApplicationAuditReqVO; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmRegularizeApplicationPageReqVO; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmRegularizeApplicationRespVO; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmRegularizeApplicationSaveReqVO; |
| | |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | |
| | |
| | | return success(regularizeApplicationService.getRegularizeApplicationPage(pageReqVO)); |
| | | } |
| | | |
| | | @PostMapping("/submit") |
| | | @Operation(summary = "æäº¤è½¬æ£ç³è¯·å®¡æ¹") |
| | | @PutMapping("/submit") |
| | | @Operation(summary = "æäº¤å®¡æ¹ï¼è稿/å®¡æ ¸ä¸éè¿â审æ¹ä¸ï¼ï¼å®¡æ¹äººç±å®¡æ¹é
ç½®ç»ä¸æå®") |
| | | @Parameter(name = "id", description = "ç³è¯·ID", required = true) |
| | | @Parameter(name = "processDefinitionKey", description = "æµç¨å®ä¹Key", required = true) |
| | | @PreAuthorize("@ss.hasPermission('hrm:regularize:submit')") |
| | | public CommonResult<Boolean> submitRegularizeApplication(@RequestParam("id") Long id, |
| | | @RequestParam("processDefinitionKey") String processDefinitionKey) { |
| | | Long userId = SecurityFrameworkUtils.getLoginUserId(); |
| | | regularizeApplicationService.submitRegularizeApplication(id, processDefinitionKey, userId); |
| | | @PreAuthorize("@ss.hasPermission('hrm:regularize:update')") |
| | | public CommonResult<Boolean> submitRegularizeApplication(@RequestParam("id") Long id) { |
| | | regularizeApplicationService.submitRegularizeApplication(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approve-process-definition-list") |
| | | @Operation(summary = "è·åå¯ç¨çå®¡æ¹æµç¨å®ä¹å表") |
| | | @PutMapping("/audit") |
| | | @Operation(summary = "å®¡æ ¸ï¼å®¡æ¹ä¸âå®¡æ ¸éè¿/å®¡æ ¸ä¸éè¿ï¼ï¼ä»
审æ¹äººæ¬äººå¯æä½") |
| | | @PreAuthorize("@ss.hasPermission('hrm:regularize:audit')") |
| | | public CommonResult<Boolean> auditRegularizeApplication(@Valid @RequestBody HrmRegularizeApplicationAuditReqVO auditReqVO) { |
| | | regularizeApplicationService.auditRegularizeApplication(auditReqVO.getId(), auditReqVO.getPass(), auditReqVO.getReviewRemark()); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approver-ids") |
| | | @Operation(summary = "è·å¾å®¡æ¹äººç¼å·éåï¼ä¾åç«¯å¤ææ¯å¦å±ç¤ºå®¡æ ¸æé®") |
| | | @PreAuthorize("@ss.hasPermission('hrm:regularize:query')") |
| | | public CommonResult<List<Map<String, Object>>> getApproveProcessDefinitionList() { |
| | | return success(regularizeApplicationService.getApproveProcessDefinitionList()); |
| | | public CommonResult<Set<Long>> getApproverUserIds() { |
| | | return success(regularizeApplicationService.getRegularizeApplicationApproverUserIds()); |
| | | } |
| | | |
| | | } |
| | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; |
| | | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmResignationApplicationAuditReqVO; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmResignationApplicationPageReqVO; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmResignationApplicationRespVO; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmResignationApplicationSaveReqVO; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmResignationHandoverReqVO; |
| | | import cn.iocoder.yudao.module.hrm.service.approval.HrmResignationApplicationService; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | | import io.swagger.v3.oas.annotations.Parameter; |
| | | import io.swagger.v3.oas.annotations.tags.Tag; |
| | |
| | | |
| | | import java.io.IOException; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | |
| | | |
| | | @Resource |
| | | private HrmResignationApplicationService resignationApplicationService; |
| | | @Resource |
| | | private AdminUserApi adminUserApi; |
| | | |
| | | @PostMapping("/create") |
| | | @Operation(summary = "å建离èç³è¯·") |
| | |
| | | return success(resignationApplicationService.getResignationApplicationPage(pageReqVO)); |
| | | } |
| | | |
| | | @PostMapping("/submit") |
| | | @Operation(summary = "æäº¤ç¦»èç³è¯·å®¡æ¹") |
| | | @PutMapping("/submit") |
| | | @Operation(summary = "æäº¤å®¡æ¹ï¼è稿/å®¡æ ¸ä¸éè¿â审æ¹ä¸ï¼ï¼å®¡æ¹äººç±å®¡æ¹é
ç½®ç»ä¸æå®") |
| | | @Parameter(name = "id", description = "ç³è¯·ID", required = true) |
| | | @Parameter(name = "processDefinitionKey", description = "æµç¨å®ä¹Key", required = true) |
| | | @PreAuthorize("@ss.hasPermission('hrm:resignation:submit')") |
| | | public CommonResult<Boolean> submitResignationApplication(@RequestParam("id") Long id, |
| | | @RequestParam("processDefinitionKey") String processDefinitionKey) { |
| | | Long userId = SecurityFrameworkUtils.getLoginUserId(); |
| | | resignationApplicationService.submitResignationApplication(id, processDefinitionKey, userId); |
| | | @PreAuthorize("@ss.hasPermission('hrm:resignation:update')") |
| | | public CommonResult<Boolean> submitResignationApplication(@RequestParam("id") Long id) { |
| | | resignationApplicationService.submitResignationApplication(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approve-process-definition-list") |
| | | @Operation(summary = "è·åå¯ç¨çå®¡æ¹æµç¨å®ä¹å表") |
| | | @PutMapping("/audit") |
| | | @Operation(summary = "å®¡æ ¸ï¼å®¡æ¹ä¸âå®¡æ ¸éè¿/å®¡æ ¸ä¸éè¿ï¼ï¼ä»
审æ¹äººæ¬äººå¯æä½") |
| | | @PreAuthorize("@ss.hasPermission('hrm:resignation:audit')") |
| | | public CommonResult<Boolean> auditResignationApplication(@Valid @RequestBody HrmResignationApplicationAuditReqVO auditReqVO) { |
| | | resignationApplicationService.auditResignationApplication(auditReqVO.getId(), auditReqVO.getPass(), auditReqVO.getReviewRemark()); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approver-ids") |
| | | @Operation(summary = "è·å¾å®¡æ¹äººç¼å·éåï¼ä¾åç«¯å¤ææ¯å¦å±ç¤ºå®¡æ ¸æé®") |
| | | @PreAuthorize("@ss.hasPermission('hrm:resignation:query')") |
| | | public CommonResult<List<Map<String, Object>>> getApproveProcessDefinitionList() { |
| | | return success(resignationApplicationService.getApproveProcessDefinitionList()); |
| | | public CommonResult<Set<Long>> getApproverUserIds() { |
| | | return success(resignationApplicationService.getResignationApplicationApproverUserIds()); |
| | | } |
| | | |
| | | @PutMapping("/handover") |
| | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; |
| | | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmTransferApplicationAuditReqVO; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmTransferApplicationPageReqVO; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmTransferApplicationRespVO; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmTransferApplicationSaveReqVO; |
| | |
| | | |
| | | import java.io.IOException; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | |
| | | return success(transferApplicationService.getTransferApplicationPage(pageReqVO)); |
| | | } |
| | | |
| | | @PostMapping("/submit") |
| | | @Operation(summary = "æäº¤è°å²ç³è¯·å®¡æ¹") |
| | | @PutMapping("/submit") |
| | | @Operation(summary = "æäº¤å®¡æ¹ï¼è稿/å®¡æ ¸ä¸éè¿â审æ¹ä¸ï¼ï¼å®¡æ¹äººç±å®¡æ¹é
ç½®ç»ä¸æå®") |
| | | @Parameter(name = "id", description = "ç³è¯·ID", required = true) |
| | | @Parameter(name = "processDefinitionKey", description = "æµç¨å®ä¹Key", required = true) |
| | | @PreAuthorize("@ss.hasPermission('hrm:transfer:submit')") |
| | | public CommonResult<Boolean> submitTransferApplication(@RequestParam("id") Long id, |
| | | @RequestParam("processDefinitionKey") String processDefinitionKey) { |
| | | Long userId = SecurityFrameworkUtils.getLoginUserId(); |
| | | transferApplicationService.submitTransferApplication(id, processDefinitionKey, userId); |
| | | @PreAuthorize("@ss.hasPermission('hrm:transfer:update')") |
| | | public CommonResult<Boolean> submitTransferApplication(@RequestParam("id") Long id) { |
| | | transferApplicationService.submitTransferApplication(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approve-process-definition-list") |
| | | @Operation(summary = "è·åå¯ç¨çå®¡æ¹æµç¨å®ä¹å表") |
| | | @PutMapping("/audit") |
| | | @Operation(summary = "å®¡æ ¸ï¼å®¡æ¹ä¸âå®¡æ ¸éè¿/å®¡æ ¸ä¸éè¿ï¼ï¼ä»
审æ¹äººæ¬äººå¯æä½") |
| | | @PreAuthorize("@ss.hasPermission('hrm:transfer:audit')") |
| | | public CommonResult<Boolean> auditTransferApplication(@Valid @RequestBody HrmTransferApplicationAuditReqVO auditReqVO) { |
| | | transferApplicationService.auditTransferApplication(auditReqVO.getId(), auditReqVO.getPass(), auditReqVO.getReviewRemark()); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approver-ids") |
| | | @Operation(summary = "è·å¾å®¡æ¹äººç¼å·éåï¼ä¾åç«¯å¤ææ¯å¦å±ç¤ºå®¡æ ¸æé®") |
| | | @PreAuthorize("@ss.hasPermission('hrm:transfer:query')") |
| | | public CommonResult<List<Map<String, Object>>> getApproveProcessDefinitionList() { |
| | | return success(transferApplicationService.getApproveProcessDefinitionList()); |
| | | public CommonResult<Set<Long>> getApproverUserIds() { |
| | | return success(transferApplicationService.getTransferApplicationApproverUserIds()); |
| | | } |
| | | |
| | | @GetMapping("/export-excel") |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.hrm.controller.admin.approval.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * 管çåå° - 请åç³è¯·å®¡æ ¸ Request VO |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Schema(description = "管çåå° - 请åç³è¯·å®¡æ ¸ Request VO") |
| | | @Data |
| | | public class HrmLeaveApplicationAuditReqVO { |
| | | |
| | | @Schema(description = "ç³è¯·ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| | | @NotNull(message = "ç³è¯·IDä¸è½ä¸ºç©º") |
| | | private Long id; |
| | | |
| | | @Schema(description = "æ¯å¦éè¿ï¼true=å®¡æ ¸éè¿ / false=å®¡æ ¸ä¸éè¿", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") |
| | | @NotNull(message = "è¯·éæ©å®¡æ ¸ç»æ") |
| | | private Boolean pass; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼éè¿æ¶éå¡« / ä¸éè¿æ¶å¿
å¡«ï¼", example = "请åäºç±éè¡¥å
说æ") |
| | | private String reviewRemark; |
| | | |
| | | } |
| | |
| | | @Schema(description = "审æ¹ç¶æåç§°", example = "è稿") |
| | | private String statusName; |
| | | |
| | | @Schema(description = "BPM æµç¨å®ä¾ID", example = "xxx") |
| | | private String processInstanceId; |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·", example = "1") |
| | | private Long reviewerId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººå§å", example = "å¼ ä¸") |
| | | private String reviewerName; |
| | | |
| | | @Schema(description = "å®¡æ ¸æ¶é´", example = "2024-01-01 10:00:00") |
| | | private LocalDateTime reviewTime; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼", example = "åæ") |
| | | private String reviewRemark; |
| | | |
| | | @Schema(description = "审æ¹å®ææ¶é´", example = "2024-01-01 10:00:00") |
| | | private LocalDateTime approveTime; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.hrm.controller.admin.approval.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * 管çåå° - 转æ£ç³è¯·å®¡æ ¸ Request VO |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Schema(description = "管çåå° - 转æ£ç³è¯·å®¡æ ¸ Request VO") |
| | | @Data |
| | | public class HrmRegularizeApplicationAuditReqVO { |
| | | |
| | | @Schema(description = "ç³è¯·ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| | | @NotNull(message = "ç³è¯·IDä¸è½ä¸ºç©º") |
| | | private Long id; |
| | | |
| | | @Schema(description = "æ¯å¦éè¿ï¼true=å®¡æ ¸éè¿ / false=å®¡æ ¸ä¸éè¿", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") |
| | | @NotNull(message = "è¯·éæ©å®¡æ ¸ç»æ") |
| | | private Boolean pass; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼éè¿æ¶éå¡« / ä¸éè¿æ¶å¿
å¡«ï¼", example = "转æ£èæ ¸éè¡¥å
ææ") |
| | | private String reviewRemark; |
| | | |
| | | } |
| | |
| | | @Schema(description = "审æ¹ç¶æåç§°", example = "è稿") |
| | | private String statusName; |
| | | |
| | | @Schema(description = "BPM æµç¨å®ä¾ID", example = "xxx") |
| | | private String processInstanceId; |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·", example = "1") |
| | | private Long reviewerId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººå§å", example = "å¼ ä¸") |
| | | private String reviewerName; |
| | | |
| | | @Schema(description = "å®¡æ ¸æ¶é´", example = "2024-01-01 10:00:00") |
| | | private LocalDateTime reviewTime; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼", example = "åæ") |
| | | private String reviewRemark; |
| | | |
| | | @Schema(description = "审æ¹å®ææ¶é´", example = "2024-01-01 10:00:00") |
| | | private LocalDateTime approveTime; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.hrm.controller.admin.approval.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * 管çåå° - 离èç³è¯·å®¡æ ¸ Request VO |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Schema(description = "管çåå° - 离èç³è¯·å®¡æ ¸ Request VO") |
| | | @Data |
| | | public class HrmResignationApplicationAuditReqVO { |
| | | |
| | | @Schema(description = "ç³è¯·ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| | | @NotNull(message = "ç³è¯·IDä¸è½ä¸ºç©º") |
| | | private Long id; |
| | | |
| | | @Schema(description = "æ¯å¦éè¿ï¼true=å®¡æ ¸éè¿ / false=å®¡æ ¸ä¸éè¿", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") |
| | | @NotNull(message = "è¯·éæ©å®¡æ ¸ç»æ") |
| | | private Boolean pass; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼éè¿æ¶éå¡« / ä¸éè¿æ¶å¿
å¡«ï¼", example = "éå
宿工ä½äº¤æ¥") |
| | | private String reviewRemark; |
| | | |
| | | } |
| | |
| | | @Schema(description = "审æ¹ç¶æåç§°", example = "è稿") |
| | | private String statusName; |
| | | |
| | | @Schema(description = "BPM æµç¨å®ä¾ID", example = "xxx") |
| | | private String processInstanceId; |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·", example = "1") |
| | | private Long reviewerId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººå§å", example = "å¼ ä¸") |
| | | private String reviewerName; |
| | | |
| | | @Schema(description = "å®¡æ ¸æ¶é´", example = "2024-01-01 10:00:00") |
| | | private LocalDateTime reviewTime; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼", example = "åæ") |
| | | private String reviewRemark; |
| | | |
| | | @Schema(description = "审æ¹å®ææ¶é´", example = "2024-01-01 10:00:00") |
| | | private LocalDateTime approveTime; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.hrm.controller.admin.approval.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * 管çåå° - è°å²ç³è¯·å®¡æ ¸ Request VO |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Schema(description = "管çåå° - è°å²ç³è¯·å®¡æ ¸ Request VO") |
| | | @Data |
| | | public class HrmTransferApplicationAuditReqVO { |
| | | |
| | | @Schema(description = "ç³è¯·ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| | | @NotNull(message = "ç³è¯·IDä¸è½ä¸ºç©º") |
| | | private Long id; |
| | | |
| | | @Schema(description = "æ¯å¦éè¿ï¼true=å®¡æ ¸éè¿ / false=å®¡æ ¸ä¸éè¿", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") |
| | | @NotNull(message = "è¯·éæ©å®¡æ ¸ç»æ") |
| | | private Boolean pass; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼éè¿æ¶éå¡« / ä¸éè¿æ¶å¿
å¡«ï¼", example = "ç®æ å²ä½é忬¡ç¡®è®¤") |
| | | private String reviewRemark; |
| | | |
| | | } |
| | |
| | | @Schema(description = "审æ¹ç¶æåç§°", example = "è稿") |
| | | private String statusName; |
| | | |
| | | @Schema(description = "BPM æµç¨å®ä¾ID", example = "xxx") |
| | | private String processInstanceId; |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·", example = "1") |
| | | private Long reviewerId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººå§å", example = "æå") |
| | | private String reviewerName; |
| | | |
| | | @Schema(description = "å®¡æ ¸æ¶é´", example = "2024-01-01 10:00:00") |
| | | private LocalDateTime reviewTime; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼", example = "åæè°å²") |
| | | private String reviewRemark; |
| | | |
| | | @Schema(description = "审æ¹å®ææ¶é´", example = "2024-01-01 10:00:00") |
| | | private LocalDateTime approveTime; |
| | |
| | | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.attendance.vo.HrmAttendanceExceptionAuditReqVO; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.attendance.vo.HrmAttendanceExceptionPageReqVO; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.attendance.vo.HrmAttendanceExceptionRespVO; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.attendance.vo.HrmAttendanceExceptionSaveReqVO; |
| | |
| | | } |
| | | } |
| | | |
| | | @PostMapping("/submit") |
| | | @Operation(summary = "æäº¤èå¤å¼å¸¸ç³è¯·") |
| | | @PreAuthorize("@ss.hasPermission('hrm:attendance:submit')") |
| | | public CommonResult<Boolean> submitAttendanceException( |
| | | @RequestParam("id") Long id, |
| | | @RequestParam("processDefinitionKey") String processDefinitionKey) { |
| | | // è·åå½åç»å½ç¨æ·ID |
| | | Long userId = cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId(); |
| | | attendanceExceptionService.submitAttendanceException(id, processDefinitionKey, userId); |
| | | @PutMapping("/submit") |
| | | @Operation(summary = "æäº¤å®¡æ¹ï¼è稿/å®¡æ ¸ä¸éè¿â审æ¹ä¸ï¼ï¼å®¡æ¹äººç±å®¡æ¹é
ç½®ç»ä¸æå®") |
| | | @Parameter(name = "id", description = "ç³è¯·ID", required = true) |
| | | @PreAuthorize("@ss.hasPermission('hrm:attendance-exception:submit')") |
| | | public CommonResult<Boolean> submitAttendanceException(@RequestParam("id") Long id) { |
| | | attendanceExceptionService.submitAttendanceException(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @PutMapping("/audit") |
| | | @Operation(summary = "å®¡æ ¸ï¼å®¡æ¹ä¸âå®¡æ ¸éè¿/å®¡æ ¸ä¸éè¿ï¼ï¼ä»
审æ¹äººæ¬äººå¯æä½") |
| | | @PreAuthorize("@ss.hasPermission('hrm:attendance-exception:audit')") |
| | | public CommonResult<Boolean> auditAttendanceException(@Valid @RequestBody HrmAttendanceExceptionAuditReqVO auditReqVO) { |
| | | attendanceExceptionService.auditAttendanceException(auditReqVO.getId(), auditReqVO.getPass(), auditReqVO.getReviewRemark()); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approver-ids") |
| | | @Operation(summary = "è·å¾å®¡æ¹äººç¼å·éåï¼ä¾åç«¯å¤ææ¯å¦å±ç¤ºå®¡æ ¸æé®") |
| | | @PreAuthorize("@ss.hasPermission('hrm:attendance:query')") |
| | | public CommonResult<Set<Long>> getApproverUserIds() { |
| | | return success(attendanceExceptionService.getAttendanceExceptionApproverUserIds()); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.hrm.controller.admin.attendance.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * 管çåå° - èå¤å¼å¸¸ç³è¯·å®¡æ ¸ Request VO |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Schema(description = "管çåå° - èå¤å¼å¸¸ç³è¯·å®¡æ ¸ Request VO") |
| | | @Data |
| | | public class HrmAttendanceExceptionAuditReqVO { |
| | | |
| | | @Schema(description = "ç³è¯·ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| | | @NotNull(message = "ç³è¯·IDä¸è½ä¸ºç©º") |
| | | private Long id; |
| | | |
| | | @Schema(description = "æ¯å¦éè¿ï¼true=å®¡æ ¸éè¿ / false=å®¡æ ¸ä¸éè¿", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") |
| | | @NotNull(message = "è¯·éæ©å®¡æ ¸ç»æ") |
| | | private Boolean pass; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼éè¿æ¶éå¡« / ä¸éè¿æ¶å¿
å¡«ï¼", example = "è¡¥å¡æ¶é´éä¸é¨ç¦è®°å½ä¸è´") |
| | | private String reviewRemark; |
| | | |
| | | } |
| | |
| | | @DictFormat("hrm_audit_status") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "BPMæµç¨å®ä¾ID") |
| | | private String processInstanceId; |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·", example = "1") |
| | | private Long reviewerId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººå§å", example = "æå") |
| | | private String reviewerName; |
| | | |
| | | @Schema(description = "å®¡æ ¸æ¶é´", example = "2024-01-01 10:00:00") |
| | | private LocalDateTime reviewTime; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼", example = "åæè¡¥å¡") |
| | | private String reviewRemark; |
| | | |
| | | @Schema(description = "审æ¹å®ææ¶é´") |
| | | @ExcelProperty("审æ¹å®ææ¶é´") |
| | |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; |
| | | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| | | |
| | | @Tag(name = "管çåå° - HRM 绩æèæ ¸æ¹æ¡") |
| | | @RestController |
| | |
| | | |
| | | // ========== å®¡æ¹ ========== |
| | | |
| | | @PostMapping("/submit") |
| | | @Operation(summary = "æäº¤ç»©æèæ ¸æ¹æ¡å®¡æ¹") |
| | | @PutMapping("/submit") |
| | | @Operation(summary = "æäº¤å®¡æ¹ï¼è稿/å®¡æ ¸ä¸éè¿â审æ¹ä¸ï¼ï¼å®¡æ¹äººç±å®¡æ¹é
ç½®ç»ä¸æå®") |
| | | @Parameter(name = "id", description = "æ¹æ¡ç¼å·", required = true) |
| | | @Parameter(name = "processDefinitionKey", description = "æµç¨å®ä¹Key", required = true) |
| | | @PreAuthorize("@ss.hasPermission('hrm:performance-appraise:submit')") |
| | | public CommonResult<Boolean> submitAppraise(@RequestParam("id") Long id, |
| | | @RequestParam("processDefinitionKey") String processDefinitionKey) { |
| | | appraiseService.submitAppraise(id, processDefinitionKey, getLoginUserId()); |
| | | @PreAuthorize("@ss.hasPermission('hrm:performance-appraise:update')") |
| | | public CommonResult<Boolean> submitAppraise(@RequestParam("id") Long id) { |
| | | appraiseService.submitAppraise(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @PutMapping("/audit") |
| | | @Operation(summary = "审æ¹ç»©æèæ ¸æ¹æ¡ï¼éè¿/驳åï¼") |
| | | @Operation(summary = "å®¡æ ¸ï¼å®¡æ¹ä¸âå®¡æ ¸éè¿/å®¡æ ¸ä¸éè¿ï¼ï¼ä»
审æ¹äººæ¬äººå¯æä½") |
| | | @PreAuthorize("@ss.hasPermission('hrm:performance-appraise:audit')") |
| | | public CommonResult<Boolean> auditAppraise(@Valid @RequestBody HrmPerformanceAppraiseAuditReqVO auditReqVO) { |
| | | appraiseService.auditAppraise(auditReqVO); |
| | | appraiseService.auditAppraise(auditReqVO.getId(), auditReqVO.getPass(), auditReqVO.getReviewRemark()); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approve-process-list") |
| | | @Operation(summary = "è·å¾ç»©æèæ ¸æ¹æ¡å®¡æ¹æµç¨å®ä¹å表") |
| | | @GetMapping("/approver-ids") |
| | | @Operation(summary = "è·å¾å®¡æ¹äººç¼å·éåï¼ä¾åç«¯å¤ææ¯å¦å±ç¤ºå®¡æ ¸æé®") |
| | | @PreAuthorize("@ss.hasPermission('hrm:performance-appraise:query')") |
| | | public CommonResult<List<Map<String, Object>>> getAppraiseApproveProcessDefinitionList() { |
| | | return success(appraiseService.getAppraiseApproveProcessDefinitionList()); |
| | | public CommonResult<Set<Long>> getApproverUserIds() { |
| | | return success(appraiseService.getAppraiseApproverUserIds()); |
| | | } |
| | | |
| | | // ========== è¯å/ç»æ ========== |
| | |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * HRM 绩æèæ ¸æ¹æ¡ å®¡æ¹ Request VO |
| | | * HRM 绩æèæ ¸æ¹æ¡ å®¡æ ¸ Request VO |
| | | */ |
| | | @Schema(description = "HRM 绩æèæ ¸æ¹æ¡ - å®¡æ¹ Request VO") |
| | | @Schema(description = "HRM 绩æèæ ¸æ¹æ¡ - å®¡æ ¸ Request VO") |
| | | @Data |
| | | public class HrmPerformanceAppraiseAuditReqVO { |
| | | |
| | |
| | | @NotNull(message = "æ¹æ¡ç¼å·ä¸è½ä¸ºç©º") |
| | | private Long id; |
| | | |
| | | @Schema(description = "审æ¹ç»æï¼20 éè¿ / 30 驳åï¼", requiredMode = Schema.RequiredMode.REQUIRED, example = "20") |
| | | @NotNull(message = "审æ¹ç»æä¸è½ä¸ºç©º") |
| | | private Integer auditStatus; |
| | | @Schema(description = "æ¯å¦éè¿ï¼true=å®¡æ ¸éè¿ / false=å®¡æ ¸ä¸éè¿", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") |
| | | @NotNull(message = "è¯·éæ©å®¡æ ¸ç»æ") |
| | | private Boolean pass; |
| | | |
| | | @Schema(description = "审æ¹å¤æ³¨", example = "åæåå¸") |
| | | private String remark; |
| | | @Schema(description = "å®¡æ ¸æè§ï¼éè¿æ¶éå¡« / ä¸éè¿æ¶å¿
å¡«ï¼", example = "èæ ¸ææ éè¡¥å
说æ") |
| | | private String reviewRemark; |
| | | |
| | | } |
| | |
| | | @Schema(description = "审æ¹ç¶æåç§°", example = "è稿") |
| | | private String auditStatusName; |
| | | |
| | | @Schema(description = "å®¡æ¹æµç¨å®ä¾ç¼å·") |
| | | private String processInstanceId; |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·", example = "1") |
| | | private Long reviewerId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äºº", example = "1") |
| | | private Long auditUserId; |
| | | @Schema(description = "å®¡æ ¸äººå§å", example = "æå") |
| | | private String reviewerName; |
| | | |
| | | @Schema(description = "å®¡æ ¸æ¶é´") |
| | | private LocalDateTime auditTime; |
| | | private LocalDateTime reviewTime; |
| | | |
| | | @Schema(description = "å®¡æ ¸å¤æ³¨") |
| | | private String auditRemark; |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼") |
| | | private String reviewRemark; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | @ExcelProperty("夿³¨") |
| | |
| | | private Integer status; |
| | | |
| | | /** |
| | | * BPM æµç¨å®ä¾ID |
| | | * å®¡æ ¸äººç¨æ·ç¼å· |
| | | * |
| | | * 审æ¹äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç hrm_leave_approveï¼ï¼ |
| | | * æäº¤æ¶ä¸æå®ï¼æ¤å¤è®°å½å®é
æ§è¡å®¡æ ¸çç¨æ·ã |
| | | */ |
| | | private String processInstanceId; |
| | | private Long reviewerId; |
| | | |
| | | /** |
| | | * å®¡æ ¸äººå§åï¼å®¡æ ¸æ¶åä½è®°å½ï¼é¿å
å表å±ç¤ºåæ¥ç¨æ·ï¼ |
| | | */ |
| | | private String reviewerName; |
| | | |
| | | /** |
| | | * å®¡æ ¸æ¶é´ |
| | | */ |
| | | private LocalDateTime reviewTime; |
| | | |
| | | /** |
| | | * å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼ |
| | | */ |
| | | private String reviewRemark; |
| | | |
| | | /** |
| | | * 审æ¹å®ææ¶é´ |
| | |
| | | private Integer status; |
| | | |
| | | /** |
| | | * BPM æµç¨å®ä¾ID |
| | | * å®¡æ ¸äººç¨æ·ç¼å· |
| | | * |
| | | * 审æ¹äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç hrm_regularize_approveï¼ï¼ |
| | | * æäº¤æ¶ä¸æå®ï¼æ¤å¤è®°å½å®é
æ§è¡å®¡æ ¸çç¨æ·ã |
| | | */ |
| | | private String processInstanceId; |
| | | private Long reviewerId; |
| | | |
| | | /** |
| | | * å®¡æ ¸äººå§åï¼å®¡æ ¸æ¶åä½è®°å½ï¼é¿å
å表å±ç¤ºåæ¥ç¨æ·ï¼ |
| | | */ |
| | | private String reviewerName; |
| | | |
| | | /** |
| | | * å®¡æ ¸æ¶é´ |
| | | */ |
| | | private java.time.LocalDateTime reviewTime; |
| | | |
| | | /** |
| | | * å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼ |
| | | */ |
| | | private String reviewRemark; |
| | | |
| | | /** |
| | | * 审æ¹å®ææ¶é´ |
| | |
| | | private Integer status; |
| | | |
| | | /** |
| | | * BPM æµç¨å®ä¾ID |
| | | * å®¡æ ¸äººç¨æ·ç¼å· |
| | | * |
| | | * 审æ¹äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç hrm_resignation_approveï¼ï¼ |
| | | * æäº¤æ¶ä¸æå®ï¼æ¤å¤è®°å½å®é
æ§è¡å®¡æ ¸çç¨æ·ã |
| | | */ |
| | | private String processInstanceId; |
| | | private Long reviewerId; |
| | | |
| | | /** |
| | | * å®¡æ ¸äººå§åï¼å®¡æ ¸æ¶åä½è®°å½ï¼é¿å
å表å±ç¤ºåæ¥ç¨æ·ï¼ |
| | | */ |
| | | private String reviewerName; |
| | | |
| | | /** |
| | | * å®¡æ ¸æ¶é´ |
| | | */ |
| | | private java.time.LocalDateTime reviewTime; |
| | | |
| | | /** |
| | | * å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼ |
| | | */ |
| | | private String reviewRemark; |
| | | |
| | | /** |
| | | * 审æ¹å®ææ¶é´ |
| | |
| | | private Integer status; |
| | | |
| | | /** |
| | | * BPM æµç¨å®ä¾ID |
| | | * å®¡æ ¸äººç¨æ·ç¼å· |
| | | * |
| | | * 审æ¹äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç hrm_transfer_approveï¼ï¼ |
| | | * æäº¤æ¶ä¸æå®ï¼æ¤å¤è®°å½å®é
æ§è¡å®¡æ ¸çç¨æ·ã |
| | | */ |
| | | private String processInstanceId; |
| | | private Long reviewerId; |
| | | |
| | | /** |
| | | * å®¡æ ¸äººå§åï¼å®¡æ ¸æ¶åä½è®°å½ï¼é¿å
å表å±ç¤ºåæ¥ç¨æ·ï¼ |
| | | */ |
| | | private String reviewerName; |
| | | |
| | | /** |
| | | * å®¡æ ¸æ¶é´ |
| | | */ |
| | | private java.time.LocalDateTime reviewTime; |
| | | |
| | | /** |
| | | * å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼ |
| | | */ |
| | | private String reviewRemark; |
| | | |
| | | /** |
| | | * 审æ¹å®ææ¶é´ |
| | |
| | | private Integer status; |
| | | |
| | | /** |
| | | * BPMæµç¨å®ä¾ID |
| | | * å®¡æ ¸äººç¨æ·ç¼å· |
| | | * |
| | | * 审æ¹äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç hrm_attendance_approveï¼ï¼ |
| | | * æäº¤æ¶ä¸æå®ï¼æ¤å¤è®°å½å®é
æ§è¡å®¡æ ¸çç¨æ·ã |
| | | */ |
| | | private String processInstanceId; |
| | | private Long reviewerId; |
| | | |
| | | /** |
| | | * å®¡æ ¸äººå§åï¼å®¡æ ¸æ¶åä½è®°å½ï¼é¿å
å表å±ç¤ºåæ¥ç¨æ·ï¼ |
| | | */ |
| | | private String reviewerName; |
| | | |
| | | /** |
| | | * å®¡æ ¸æ¶é´ |
| | | */ |
| | | private LocalDateTime reviewTime; |
| | | |
| | | /** |
| | | * å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼ |
| | | */ |
| | | private String reviewRemark; |
| | | |
| | | /** |
| | | * 审æ¹å®ææ¶é´ |
| | |
| | | private Integer auditStatus; |
| | | |
| | | /** |
| | | * å®¡æ¹æµç¨å®ä¾ç¼å· |
| | | * å®¡æ ¸äººç¨æ·ç¼å· |
| | | * |
| | | * 审æ¹äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç performance_appraise_approveï¼ï¼ |
| | | * æäº¤æ¶ä¸æå®ï¼æ¤å¤è®°å½å®é
æ§è¡å®¡æ ¸çç¨æ·ã |
| | | */ |
| | | private String processInstanceId; |
| | | private Long reviewerId; |
| | | |
| | | /** |
| | | * å®¡æ ¸äºº |
| | | * å®¡æ ¸äººå§åï¼å®¡æ ¸æ¶åä½è®°å½ï¼é¿å
å表å±ç¤ºåæ¥ç¨æ·ï¼ |
| | | */ |
| | | private Long auditUserId; |
| | | private String reviewerName; |
| | | |
| | | /** |
| | | * å®¡æ ¸æ¶é´ |
| | | */ |
| | | private LocalDateTime auditTime; |
| | | private LocalDateTime reviewTime; |
| | | |
| | | /** |
| | | * å®¡æ ¸å¤æ³¨ |
| | | * å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼ |
| | | */ |
| | | private String auditRemark; |
| | | private String reviewRemark; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmLeaveApplicationPageReqVO; |
| | | import cn.iocoder.yudao.module.hrm.dal.dataobject.approval.HrmLeaveApplicationDO; |
| | | import cn.iocoder.yudao.module.hrm.enums.HrmAuditStatusEnum; |
| | |
| | | return selectOne(HrmLeaveApplicationDO::getNo, no); |
| | | } |
| | | |
| | | default HrmLeaveApplicationDO selectByProcessInstanceId(String processInstanceId) { |
| | | return selectOne(HrmLeaveApplicationDO::getProcessInstanceId, processInstanceId); |
| | | /** |
| | | * æäº¤å®¡æ¹ï¼ç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | * |
| | | * ç¨ LambdaUpdateWrapper èé updateByIdï¼MyBatis-Plus é»è®¤æ´æ°çç¥å¿½ç¥ nullï¼ |
| | | * ç´æ¥ updateById æ æ³æå®¡æ ¸ä¸éè¿åæ®ççå®¡æ ¸äºº/å®¡æ ¸æ¶é´/å®¡æ ¸æè§æ¸
空ã |
| | | * |
| | | * @param id ç³è¯·ID |
| | | * @param status ç®æ ç¶æ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int submitAndResetAuditInfo(Long id, Integer status) { |
| | | return update(null, new LambdaUpdateWrapper<HrmLeaveApplicationDO>() |
| | | .eq(HrmLeaveApplicationDO::getId, id) |
| | | .set(HrmLeaveApplicationDO::getStatus, status) |
| | | .set(HrmLeaveApplicationDO::getReviewerId, null) |
| | | .set(HrmLeaveApplicationDO::getReviewerName, null) |
| | | .set(HrmLeaveApplicationDO::getReviewTime, null) |
| | | .set(HrmLeaveApplicationDO::getReviewRemark, null)); |
| | | } |
| | | |
| | | /** |
| | | * å®¡æ ¸ï¼åå
¥å®¡æ ¸ç»æãå®¡æ ¸äººä¸å®¡æ ¸æè§ |
| | | * |
| | | * reviewRemark å
许为 nullï¼å®¡æ ¸éè¿æ¶æè§å¯éï¼ï¼æ
åæ ·ä½¿ç¨ UpdateWrapper ç´åã |
| | | * |
| | | * @param id ç³è¯·ID |
| | | * @param status ç®æ ç¶æï¼å®¡æ ¸éè¿ / å®¡æ ¸ä¸éè¿ï¼ |
| | | * @param reviewerId å®¡æ ¸äººç¼å· |
| | | * @param reviewerName å®¡æ ¸äººå§å |
| | | * @param reviewRemark å®¡æ ¸æè§ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int auditLeaveApplication(Long id, Integer status, Long reviewerId, |
| | | String reviewerName, String reviewRemark) { |
| | | return update(null, new LambdaUpdateWrapper<HrmLeaveApplicationDO>() |
| | | .eq(HrmLeaveApplicationDO::getId, id) |
| | | .set(HrmLeaveApplicationDO::getStatus, status) |
| | | .set(HrmLeaveApplicationDO::getReviewerId, reviewerId) |
| | | .set(HrmLeaveApplicationDO::getReviewerName, reviewerName) |
| | | .set(HrmLeaveApplicationDO::getReviewTime, LocalDateTime.now()) |
| | | .set(HrmLeaveApplicationDO::getReviewRemark, reviewRemark)); |
| | | } |
| | | |
| | | /** |
| | |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmRegularizeApplicationPageReqVO; |
| | | import cn.iocoder.yudao.module.hrm.dal.dataobject.approval.HrmRegularizeApplicationDO; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * 转æ£ç³è¯· Mapper |
| | |
| | | return selectOne(HrmRegularizeApplicationDO::getNo, no); |
| | | } |
| | | |
| | | default HrmRegularizeApplicationDO selectByProcessInstanceId(String processInstanceId) { |
| | | return selectOne(HrmRegularizeApplicationDO::getProcessInstanceId, processInstanceId); |
| | | /** |
| | | * æäº¤å®¡æ¹ï¼ç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | * |
| | | * ç¨ LambdaUpdateWrapper èé updateByIdï¼MyBatis-Plus é»è®¤æ´æ°çç¥å¿½ç¥ nullï¼ |
| | | * ç´æ¥ updateById æ æ³æå®¡æ ¸ä¸éè¿åæ®ççå®¡æ ¸äºº/å®¡æ ¸æ¶é´/å®¡æ ¸æè§æ¸
空ã |
| | | * |
| | | * @param id ç³è¯·ID |
| | | * @param status ç®æ ç¶æ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int submitAndResetAuditInfo(Long id, Integer status) { |
| | | return update(null, new LambdaUpdateWrapper<HrmRegularizeApplicationDO>() |
| | | .eq(HrmRegularizeApplicationDO::getId, id) |
| | | .set(HrmRegularizeApplicationDO::getStatus, status) |
| | | .set(HrmRegularizeApplicationDO::getReviewerId, null) |
| | | .set(HrmRegularizeApplicationDO::getReviewerName, null) |
| | | .set(HrmRegularizeApplicationDO::getReviewTime, null) |
| | | .set(HrmRegularizeApplicationDO::getReviewRemark, null)); |
| | | } |
| | | |
| | | /** |
| | | * å®¡æ ¸ï¼åå
¥å®¡æ ¸ç»æãå®¡æ ¸äººä¸å®¡æ ¸æè§ |
| | | * |
| | | * reviewRemark å
许为 nullï¼å®¡æ ¸éè¿æ¶æè§å¯éï¼ï¼æ
åæ ·ä½¿ç¨ UpdateWrapper ç´åã |
| | | * |
| | | * @param id ç³è¯·ID |
| | | * @param status ç®æ ç¶æï¼å®¡æ ¸éè¿ / å®¡æ ¸ä¸éè¿ï¼ |
| | | * @param reviewerId å®¡æ ¸äººç¼å· |
| | | * @param reviewerName å®¡æ ¸äººå§å |
| | | * @param reviewRemark å®¡æ ¸æè§ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int auditRegularizeApplication(Long id, Integer status, Long reviewerId, |
| | | String reviewerName, String reviewRemark) { |
| | | return update(null, new LambdaUpdateWrapper<HrmRegularizeApplicationDO>() |
| | | .eq(HrmRegularizeApplicationDO::getId, id) |
| | | .set(HrmRegularizeApplicationDO::getStatus, status) |
| | | .set(HrmRegularizeApplicationDO::getReviewerId, reviewerId) |
| | | .set(HrmRegularizeApplicationDO::getReviewerName, reviewerName) |
| | | .set(HrmRegularizeApplicationDO::getReviewTime, LocalDateTime.now()) |
| | | .set(HrmRegularizeApplicationDO::getReviewRemark, reviewRemark)); |
| | | } |
| | | |
| | | default HrmRegularizeApplicationDO selectByUserIdAndStatusNot(Long userId, Integer status) { |
| | |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmResignationApplicationPageReqVO; |
| | | import cn.iocoder.yudao.module.hrm.dal.dataobject.approval.HrmResignationApplicationDO; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * 离èç³è¯· Mapper |
| | |
| | | return selectOne(HrmResignationApplicationDO::getNo, no); |
| | | } |
| | | |
| | | default HrmResignationApplicationDO selectByProcessInstanceId(String processInstanceId) { |
| | | return selectOne(HrmResignationApplicationDO::getProcessInstanceId, processInstanceId); |
| | | /** |
| | | * æäº¤å®¡æ¹ï¼ç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | * |
| | | * ç¨ LambdaUpdateWrapper èé updateByIdï¼MyBatis-Plus é»è®¤æ´æ°çç¥å¿½ç¥ nullï¼ |
| | | * ç´æ¥ updateById æ æ³æå®¡æ ¸ä¸éè¿åæ®ççå®¡æ ¸äºº/å®¡æ ¸æ¶é´/å®¡æ ¸æè§æ¸
空ã |
| | | * |
| | | * @param id ç³è¯·ID |
| | | * @param status ç®æ ç¶æ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int submitAndResetAuditInfo(Long id, Integer status) { |
| | | return update(null, new LambdaUpdateWrapper<HrmResignationApplicationDO>() |
| | | .eq(HrmResignationApplicationDO::getId, id) |
| | | .set(HrmResignationApplicationDO::getStatus, status) |
| | | .set(HrmResignationApplicationDO::getReviewerId, null) |
| | | .set(HrmResignationApplicationDO::getReviewerName, null) |
| | | .set(HrmResignationApplicationDO::getReviewTime, null) |
| | | .set(HrmResignationApplicationDO::getReviewRemark, null)); |
| | | } |
| | | |
| | | /** |
| | | * å®¡æ ¸ï¼åå
¥å®¡æ ¸ç»æãå®¡æ ¸äººä¸å®¡æ ¸æè§ |
| | | * |
| | | * reviewRemark å
许为 nullï¼å®¡æ ¸éè¿æ¶æè§å¯éï¼ï¼æ
åæ ·ä½¿ç¨ UpdateWrapper ç´åã |
| | | * |
| | | * @param id ç³è¯·ID |
| | | * @param status ç®æ ç¶æï¼å®¡æ ¸éè¿ / å®¡æ ¸ä¸éè¿ï¼ |
| | | * @param reviewerId å®¡æ ¸äººç¼å· |
| | | * @param reviewerName å®¡æ ¸äººå§å |
| | | * @param reviewRemark å®¡æ ¸æè§ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int auditResignationApplication(Long id, Integer status, Long reviewerId, |
| | | String reviewerName, String reviewRemark) { |
| | | return update(null, new LambdaUpdateWrapper<HrmResignationApplicationDO>() |
| | | .eq(HrmResignationApplicationDO::getId, id) |
| | | .set(HrmResignationApplicationDO::getStatus, status) |
| | | .set(HrmResignationApplicationDO::getReviewerId, reviewerId) |
| | | .set(HrmResignationApplicationDO::getReviewerName, reviewerName) |
| | | .set(HrmResignationApplicationDO::getReviewTime, LocalDateTime.now()) |
| | | .set(HrmResignationApplicationDO::getReviewRemark, reviewRemark)); |
| | | } |
| | | |
| | | default HrmResignationApplicationDO selectByUserIdAndStatusNot(Long userId, Integer status) { |
| | |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmTransferApplicationPageReqVO; |
| | | import cn.iocoder.yudao.module.hrm.dal.dataobject.approval.HrmTransferApplicationDO; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * è°å²ç³è¯· Mapper |
| | |
| | | return selectOne(HrmTransferApplicationDO::getNo, no); |
| | | } |
| | | |
| | | default HrmTransferApplicationDO selectByProcessInstanceId(String processInstanceId) { |
| | | return selectOne(HrmTransferApplicationDO::getProcessInstanceId, processInstanceId); |
| | | /** |
| | | * æäº¤å®¡æ¹ï¼ç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | * |
| | | * ç¨ LambdaUpdateWrapper èé updateByIdï¼MyBatis-Plus é»è®¤æ´æ°çç¥å¿½ç¥ nullï¼ |
| | | * ç´æ¥ updateById æ æ³æå®¡æ ¸ä¸éè¿åæ®ççå®¡æ ¸äºº/å®¡æ ¸æ¶é´/å®¡æ ¸æè§æ¸
空ã |
| | | * |
| | | * @param id ç³è¯·ID |
| | | * @param status ç®æ ç¶æ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int submitAndResetAuditInfo(Long id, Integer status) { |
| | | return update(null, new LambdaUpdateWrapper<HrmTransferApplicationDO>() |
| | | .eq(HrmTransferApplicationDO::getId, id) |
| | | .set(HrmTransferApplicationDO::getStatus, status) |
| | | .set(HrmTransferApplicationDO::getReviewerId, null) |
| | | .set(HrmTransferApplicationDO::getReviewerName, null) |
| | | .set(HrmTransferApplicationDO::getReviewTime, null) |
| | | .set(HrmTransferApplicationDO::getReviewRemark, null)); |
| | | } |
| | | |
| | | /** |
| | | * å®¡æ ¸ï¼åå
¥å®¡æ ¸ç»æãå®¡æ ¸äººä¸å®¡æ ¸æè§ |
| | | * |
| | | * reviewRemark å
许为 nullï¼å®¡æ ¸éè¿æ¶æè§å¯éï¼ï¼æ
åæ ·ä½¿ç¨ UpdateWrapper ç´åã |
| | | * |
| | | * @param id ç³è¯·ID |
| | | * @param status ç®æ ç¶æï¼å®¡æ ¸éè¿ / å®¡æ ¸ä¸éè¿ï¼ |
| | | * @param reviewerId å®¡æ ¸äººç¼å· |
| | | * @param reviewerName å®¡æ ¸äººå§å |
| | | * @param reviewRemark å®¡æ ¸æè§ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int auditTransferApplication(Long id, Integer status, Long reviewerId, |
| | | String reviewerName, String reviewRemark) { |
| | | return update(null, new LambdaUpdateWrapper<HrmTransferApplicationDO>() |
| | | .eq(HrmTransferApplicationDO::getId, id) |
| | | .set(HrmTransferApplicationDO::getStatus, status) |
| | | .set(HrmTransferApplicationDO::getReviewerId, reviewerId) |
| | | .set(HrmTransferApplicationDO::getReviewerName, reviewerName) |
| | | .set(HrmTransferApplicationDO::getReviewTime, LocalDateTime.now()) |
| | | .set(HrmTransferApplicationDO::getReviewRemark, reviewRemark) |
| | | .set(HrmTransferApplicationDO::getApproveTime, LocalDateTime.now())); |
| | | } |
| | | |
| | | } |
| | |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.attendance.vo.HrmAttendanceExceptionPageReqVO; |
| | | import cn.iocoder.yudao.module.hrm.dal.dataobject.attendance.HrmAttendanceExceptionDO; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * èå¤å¼å¸¸ç³è¯· Mapper |
| | |
| | | return selectOne(HrmAttendanceExceptionDO::getNo, no); |
| | | } |
| | | |
| | | default HrmAttendanceExceptionDO selectByProcessInstanceId(String processInstanceId) { |
| | | return selectOne(HrmAttendanceExceptionDO::getProcessInstanceId, processInstanceId); |
| | | /** |
| | | * æäº¤å®¡æ¹ï¼ç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | * |
| | | * ç¨ LambdaUpdateWrapper èé updateByIdï¼MyBatis-Plus é»è®¤æ´æ°çç¥å¿½ç¥ nullï¼ |
| | | * ç´æ¥ updateById æ æ³æå®¡æ ¸ä¸éè¿åæ®ççå®¡æ ¸äºº/å®¡æ ¸æ¶é´/å®¡æ ¸æè§æ¸
空ã |
| | | * |
| | | * @param id ç³è¯·ID |
| | | * @param status ç®æ ç¶æ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int submitAndResetAuditInfo(Long id, Integer status) { |
| | | return update(null, new LambdaUpdateWrapper<HrmAttendanceExceptionDO>() |
| | | .eq(HrmAttendanceExceptionDO::getId, id) |
| | | .set(HrmAttendanceExceptionDO::getStatus, status) |
| | | .set(HrmAttendanceExceptionDO::getReviewerId, null) |
| | | .set(HrmAttendanceExceptionDO::getReviewerName, null) |
| | | .set(HrmAttendanceExceptionDO::getReviewTime, null) |
| | | .set(HrmAttendanceExceptionDO::getReviewRemark, null)); |
| | | } |
| | | |
| | | /** |
| | | * å®¡æ ¸ï¼åå
¥å®¡æ ¸ç»æãå®¡æ ¸äººä¸å®¡æ ¸æè§ |
| | | * |
| | | * reviewRemark å
许为 nullï¼å®¡æ ¸éè¿æ¶æè§å¯éï¼ï¼æ
åæ ·ä½¿ç¨ UpdateWrapper ç´åã |
| | | * |
| | | * @param id ç³è¯·ID |
| | | * @param status ç®æ ç¶æï¼å®¡æ ¸éè¿ / å®¡æ ¸ä¸éè¿ï¼ |
| | | * @param reviewerId å®¡æ ¸äººç¼å· |
| | | * @param reviewerName å®¡æ ¸äººå§å |
| | | * @param reviewRemark å®¡æ ¸æè§ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int auditAttendanceException(Long id, Integer status, Long reviewerId, |
| | | String reviewerName, String reviewRemark) { |
| | | return update(null, new LambdaUpdateWrapper<HrmAttendanceExceptionDO>() |
| | | .eq(HrmAttendanceExceptionDO::getId, id) |
| | | .set(HrmAttendanceExceptionDO::getStatus, status) |
| | | .set(HrmAttendanceExceptionDO::getReviewerId, reviewerId) |
| | | .set(HrmAttendanceExceptionDO::getReviewerName, reviewerName) |
| | | .set(HrmAttendanceExceptionDO::getReviewTime, LocalDateTime.now()) |
| | | .set(HrmAttendanceExceptionDO::getReviewRemark, reviewRemark) |
| | | .set(HrmAttendanceExceptionDO::getApproveTime, LocalDateTime.now())); |
| | | } |
| | | |
| | | } |
| | |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.performanceappraise.vo.HrmPerformanceAppraisePageReqVO; |
| | | import cn.iocoder.yudao.module.hrm.dal.dataobject.performanceappraise.HrmPerformanceAppraiseDO; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * HRM 绩æèæ ¸æ¹æ¡ Mapper |
| | |
| | | .orderByDesc(HrmPerformanceAppraiseDO::getId)); |
| | | } |
| | | |
| | | /** |
| | | * æäº¤å®¡æ¹ï¼ç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | * |
| | | * ç¨ LambdaUpdateWrapper èé updateByIdï¼MyBatis-Plus é»è®¤æ´æ°çç¥å¿½ç¥ nullï¼ |
| | | * ç´æ¥ updateById æ æ³æå®¡æ ¸ä¸éè¿åæ®ççå®¡æ ¸äºº/å®¡æ ¸æ¶é´/å®¡æ ¸æè§æ¸
空ã |
| | | * |
| | | * @param id æ¹æ¡ç¼å· |
| | | * @param auditStatus ç®æ 审æ¹ç¶æ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int submitAndResetAuditInfo(Long id, Integer auditStatus) { |
| | | return update(null, new LambdaUpdateWrapper<HrmPerformanceAppraiseDO>() |
| | | .eq(HrmPerformanceAppraiseDO::getId, id) |
| | | .set(HrmPerformanceAppraiseDO::getAuditStatus, auditStatus) |
| | | .set(HrmPerformanceAppraiseDO::getReviewerId, null) |
| | | .set(HrmPerformanceAppraiseDO::getReviewerName, null) |
| | | .set(HrmPerformanceAppraiseDO::getReviewTime, null) |
| | | .set(HrmPerformanceAppraiseDO::getReviewRemark, null)); |
| | | } |
| | | |
| | | /** |
| | | * å®¡æ ¸ï¼åå
¥å®¡æ ¸ç»æãå®¡æ ¸äººä¸å®¡æ ¸æè§ |
| | | * |
| | | * reviewRemark å
许为 nullï¼å®¡æ ¸éè¿æ¶æè§å¯éï¼ï¼æ
åæ ·ä½¿ç¨ UpdateWrapper ç´åã |
| | | * |
| | | * @param id æ¹æ¡ç¼å· |
| | | * @param auditStatus ç®æ 审æ¹ç¶æï¼å®¡æ ¸éè¿ / å®¡æ ¸ä¸éè¿ï¼ |
| | | * @param status æ¹æ¡ç¶æï¼å®¡æ ¸éè¿æ¶ç½®ä¸ºå·²åå¸ï¼å¦åä¿æä¸åï¼ |
| | | * @param reviewerId å®¡æ ¸äººç¼å· |
| | | * @param reviewerName å®¡æ ¸äººå§å |
| | | * @param reviewRemark å®¡æ ¸æè§ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int auditAppraise(Long id, Integer auditStatus, Integer status, Long reviewerId, |
| | | String reviewerName, String reviewRemark) { |
| | | return update(null, new LambdaUpdateWrapper<HrmPerformanceAppraiseDO>() |
| | | .eq(HrmPerformanceAppraiseDO::getId, id) |
| | | .set(HrmPerformanceAppraiseDO::getAuditStatus, auditStatus) |
| | | .set(HrmPerformanceAppraiseDO::getStatus, status) |
| | | .set(HrmPerformanceAppraiseDO::getReviewerId, reviewerId) |
| | | .set(HrmPerformanceAppraiseDO::getReviewerName, reviewerName) |
| | | .set(HrmPerformanceAppraiseDO::getReviewTime, LocalDateTime.now()) |
| | | .set(HrmPerformanceAppraiseDO::getReviewRemark, reviewRemark)); |
| | | } |
| | | |
| | | default HrmPerformanceAppraiseDO selectMonthlyCompletedByPeriod(String period) { |
| | | return selectOne(new LambdaQueryWrapperX<HrmPerformanceAppraiseDO>() |
| | | .eq(HrmPerformanceAppraiseDO::getPeriodType, 1) |
| | |
| | | import cn.iocoder.yudao.module.hrm.dal.dataobject.approval.HrmLeaveApplicationDO; |
| | | import jakarta.validation.Valid; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | /** |
| | | * 请åç³è¯· Service æ¥å£ |
| | |
| | | * @author è¶
级管çå |
| | | */ |
| | | public interface HrmLeaveApplicationService { |
| | | |
| | | /** |
| | | * BPM 请åå®¡æ¹æµç¨æ è¯ |
| | | */ |
| | | String BPM_PROCESS_DEFINITION_KEY = "hrm_leave"; |
| | | |
| | | /** |
| | | * BPM 请å审æ¹åç±»ç¼ç |
| | | */ |
| | | String APPROVE_CATEGORY_CODE = "hrm_leave_approve"; |
| | | |
| | | /** |
| | | * å建请åç³è¯· |
| | |
| | | PageResult<HrmLeaveApplicationRespVO> getLeaveApplicationPage(HrmLeaveApplicationPageReqVO pageReqVO); |
| | | |
| | | /** |
| | | * æäº¤è¯·åç³è¯·å®¡æ¹ |
| | | * æäº¤è¯·åç³è¯·å®¡æ¹ï¼è稿 / å®¡æ ¸ä¸éè¿ â 审æ¹ä¸ï¼ |
| | | * |
| | | * 审æ¹äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸æå®ï¼æäº¤æ¶æ ééæ©ã |
| | | * |
| | | * @param id ç³è¯·ID |
| | | * @param processDefinitionKey æµç¨å®ä¹Key |
| | | * @param userId æäº¤äººID |
| | | */ |
| | | void submitLeaveApplication(Long id, String processDefinitionKey, Long userId); |
| | | void submitLeaveApplication(Long id); |
| | | |
| | | /** |
| | | * è·åå¯ç¨çå®¡æ¹æµç¨å®ä¹å表 |
| | | * è·å¾è¯·åç³è¯·ç审æ¹äººç¼å·éåï¼ä¾åç«¯å¤ææ¯å¦å±ç¤ºå®¡æ ¸æé® |
| | | * |
| | | * @return æµç¨å®ä¹å表 |
| | | * @return 审æ¹äººç¨æ·ç¼å·éå |
| | | */ |
| | | List<Map<String, Object>> getApproveProcessDefinitionList(); |
| | | Set<Long> getLeaveApplicationApproverUserIds(); |
| | | |
| | | /** |
| | | * æ´æ°è¯·åç³è¯·å®¡æ¹ç¶æï¼BPM åè°ï¼ |
| | | * å®¡æ ¸è¯·åç³è¯·ï¼å®¡æ¹ä¸ â å®¡æ ¸éè¿ / å®¡æ ¸ä¸éè¿ï¼ |
| | | * |
| | | * @param id ç³è¯·ID |
| | | * @param status 审æ¹ç¶æ |
| | | * @param pass æ¯å¦éè¿ |
| | | * @param reviewRemark å®¡æ ¸æè§ï¼ä¸éè¿æ¶å¿
å¡«ï¼ |
| | | */ |
| | | void updateLeaveApplicationAuditStatus(Long id, Integer status); |
| | | |
| | | /** |
| | | * æ ¹æ®æµç¨å®ä¾IDè·å请åç³è¯· |
| | | * |
| | | * @param processInstanceId æµç¨å®ä¾ID |
| | | * @return 请åç³è¯· |
| | | */ |
| | | HrmLeaveApplicationDO getLeaveApplicationByProcessInstanceId(String processInstanceId); |
| | | void auditLeaveApplication(Long id, Boolean pass, String reviewRemark); |
| | | |
| | | } |
| | |
| | | package cn.iocoder.yudao.module.hrm.service.approval; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.ObjUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; |
| | | 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.dal.dataobject.definition.BpmProcessDefinitionInfoDO; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmCategoryService; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmLeaveApplicationPageReqVO; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmLeaveApplicationRespVO; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmLeaveApplicationSaveReqVO; |
| | |
| | | import cn.iocoder.yudao.module.hrm.dal.redis.HrmNoRedisDAO; |
| | | import cn.iocoder.yudao.module.hrm.enums.HrmAuditStatusEnum; |
| | | import cn.iocoder.yudao.module.hrm.enums.HrmLeaveTypeEnum; |
| | | import cn.iocoder.yudao.module.system.api.approval.ApprovalConfigApi; |
| | | import cn.iocoder.yudao.module.system.api.dept.DeptApi; |
| | | import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; |
| | | import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi; |
| | |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | | import jakarta.annotation.Resource; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.flowable.engine.repository.ProcessDefinition; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Collections; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; |
| | | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| | | import static cn.iocoder.yudao.module.hrm.enums.ErrorCodeConstants.*; |
| | | |
| | | /** |
| | |
| | | @Slf4j |
| | | public class HrmLeaveApplicationServiceImpl implements HrmLeaveApplicationService { |
| | | |
| | | /** |
| | | * 请åç³è¯·å®¡æ¹çä¸å¡ç±»åç¼ç |
| | | * |
| | | * ä¸ system_approval_config.biz_type 对åºï¼å®¡æ¹äººå¨ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãä¸ç»´æ¤ã |
| | | */ |
| | | private static final String LEAVE_APPROVE_BIZ_TYPE = "hrm_leave_approve"; |
| | | |
| | | @Resource |
| | | private HrmLeaveApplicationMapper leaveApplicationMapper; |
| | | @Resource |
| | |
| | | @Resource |
| | | private AdminUserApi adminUserApi; |
| | | @Resource |
| | | private BpmProcessInstanceApi bpmProcessInstanceApi; |
| | | @Resource |
| | | private BpmCategoryService bpmCategoryService; |
| | | @Resource |
| | | private StorageAttachmentApi storageAttachmentApi; |
| | | @Resource |
| | | private BpmProcessDefinitionService bpmProcessDefinitionService; |
| | | private ApprovalConfigApi approvalConfigApi; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void submitLeaveApplication(Long id, String processDefinitionKey, Long userId) { |
| | | // 1. æ ¡éªè¯·åç³è¯·æ¯å¦åå¨ |
| | | public void submitLeaveApplication(Long id) { |
| | | // 1. æ ¡éªåå¨ + å¯æäº¤ç¶æï¼è稿 / å®¡æ ¸ä¸éè¿ï¼ |
| | | HrmLeaveApplicationDO application = validateLeaveApplicationExists(id); |
| | | if (ObjUtil.notEqual(application.getStatus(), HrmAuditStatusEnum.DRAFT.getStatus())) { |
| | | throw exception(LEAVE_APPLICATION_SUBMIT_FAIL_NOT_DRAFT); |
| | | if (!Objects.equals(application.getStatus(), HrmAuditStatusEnum.DRAFT.getStatus()) |
| | | && !Objects.equals(application.getStatus(), HrmAuditStatusEnum.REJECT.getStatus())) { |
| | | throw exception(LEAVE_APPLICATION_SUBMIT_FAIL_NOT_EDITABLE); |
| | | } |
| | | |
| | | // 2. æ ¡éªåç±»åæµç¨å®ä¹æ¯å¦åå¨ |
| | | validateApproveCategoryAndProcessDefinition(); |
| | | // 2. æ ¡éªå®¡æ¹é
置已å¯ç¨ä¸é
ç½®äºææå®¡æ¹äººï¼æªé
ç½®æ¶æåºå¸¦æç¡®æç¤ºçä¸å¡å¼å¸¸ï¼ |
| | | approvalConfigApi.validateApprovalEnabledAndGetApprovers(LEAVE_APPROVE_BIZ_TYPE); |
| | | |
| | | // 3. æ ¡éªä¼ å
¥çæµç¨å®ä¹ Key æ¯å¦å±äºè¯¥åç±»ä¸å¤äºæ¿æ´»ç¶æ |
| | | ProcessDefinition processDefinition = bpmProcessDefinitionService.getActiveProcessDefinition(processDefinitionKey); |
| | | if (processDefinition == null) { |
| | | throw exception(LEAVE_APPLICATION_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | // 3. ç¶æç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æï¼é¿å
æ®çãå®¡æ ¸ä¸éè¿ãçåå |
| | | leaveApplicationMapper.submitAndResetAuditInfo(id, HrmAuditStatusEnum.PROCESS.getStatus()); |
| | | } |
| | | |
| | | // 4. åå»ºå®¡æ¹æµç¨å®ä¾ |
| | | String processInstanceId = bpmProcessInstanceApi.createProcessInstance(userId, new BpmProcessInstanceCreateReqDTO() |
| | | .setProcessDefinitionKey(processDefinitionKey).setBusinessKey(String.valueOf(id))); |
| | | @Override |
| | | public Set<Long> getLeaveApplicationApproverUserIds() { |
| | | return approvalConfigApi.getApproverUserIds(LEAVE_APPROVE_BIZ_TYPE); |
| | | } |
| | | |
| | | // 5. æ´æ°è¯·åç³è¯·å·¥ä½æµç¼å· |
| | | leaveApplicationMapper.updateById(HrmLeaveApplicationDO.builder() |
| | | .id(id) |
| | | .processInstanceId(processInstanceId) |
| | | .status(HrmAuditStatusEnum.PROCESS.getStatus()) |
| | | .build()); |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void auditLeaveApplication(Long id, Boolean pass, String reviewRemark) { |
| | | // 1. æ ¡éªåå¨ |
| | | HrmLeaveApplicationDO application = validateLeaveApplicationExists(id); |
| | | // 2. æ ¡éªå¤äºå®¡æ¹ä¸ç¶æ |
| | | if (!Objects.equals(application.getStatus(), HrmAuditStatusEnum.PROCESS.getStatus())) { |
| | | throw exception(LEAVE_APPLICATION_AUDIT_FAIL_NOT_PROCESS); |
| | | } |
| | | // 3. æ ¡éªå½åç»å½ç¨æ·æ¯è¯¥ä¸å¡ç±»åç审æ¹äººï¼æç¾ï¼ä»»ä¸äººåå¯å®¡æ ¸ï¼ |
| | | Long userId = getLoginUserId(); |
| | | approvalConfigApi.validateApprover(LEAVE_APPROVE_BIZ_TYPE, userId); |
| | | // 4. å®¡æ ¸ä¸éè¿ï¼å¿
须填ååå ï¼ç¶æç½®ä¸ºå®¡æ ¸ä¸éè¿ï¼éåæäº¤äººä¿®æ¹åå¯éæ°æäº¤ |
| | | if (!Boolean.TRUE.equals(pass)) { |
| | | if (StrUtil.isBlank(reviewRemark)) { |
| | | throw exception(LEAVE_APPLICATION_AUDIT_REJECT_REASON_REQUIRED); |
| | | } |
| | | leaveApplicationMapper.auditLeaveApplication(id, HrmAuditStatusEnum.REJECT.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | return; |
| | | } |
| | | // 5. å®¡æ ¸éè¿ï¼è®°å½å®¡æ ¸äººä¸å®¡æ ¸æè§ï¼ç¶æç½®ä¸ºå®¡æ ¸éè¿ |
| | | leaveApplicationMapper.auditLeaveApplication(id, HrmAuditStatusEnum.APPROVE.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éª BPM 请å审æ¹åç±»åæµç¨å®ä¹æ¯å¦åå¨ |
| | | * è·åç¨æ·æµç§° |
| | | * |
| | | * @param userId ç¨æ·ç¼å· |
| | | * @return æµç§°ï¼ç¨æ·ä¸å卿¶è¿å null |
| | | */ |
| | | private void validateApproveCategoryAndProcessDefinition() { |
| | | // 1. æ ¡éªåç±»æ¯å¦åå¨ |
| | | List<String> codes = Collections.singletonList(APPROVE_CATEGORY_CODE); |
| | | Map<String, ?> categoryMap = bpmCategoryService.getCategoryMap(codes); |
| | | if (!categoryMap.containsKey(APPROVE_CATEGORY_CODE)) { |
| | | throw exception(LEAVE_APPLICATION_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | private String getUserNickname(Long userId) { |
| | | if (userId == null) { |
| | | return null; |
| | | } |
| | | |
| | | // 2. æ ¡éªåç±»ä¸æ¯å¦æå¯ç¨çæµç¨å®ä¹ |
| | | List<BpmProcessDefinitionInfoDO> definitionInfoList = bpmProcessDefinitionService |
| | | .getProcessDefinitionInfoListByCategory(APPROVE_CATEGORY_CODE); |
| | | if (CollUtil.isEmpty(definitionInfoList)) { |
| | | throw exception(LEAVE_APPLICATION_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | |
| | | // 3. æ ¡éªæ¯å¦ææ¿æ´»ç¶æçæµç¨å®ä¹ |
| | | Set<String> processDefinitionIds = convertSet(definitionInfoList, BpmProcessDefinitionInfoDO::getProcessDefinitionId); |
| | | List<ProcessDefinition> processDefinitions = bpmProcessDefinitionService.getProcessDefinitionList(processDefinitionIds); |
| | | boolean hasActiveDefinition = processDefinitions.stream() |
| | | .anyMatch(pd -> !pd.isSuspended()); |
| | | if (!hasActiveDefinition) { |
| | | throw exception(LEAVE_APPLICATION_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getApproveProcessDefinitionList() { |
| | | // 1. æ ¡éªåç±»åæµç¨å®ä¹æ¯å¦åå¨ |
| | | validateApproveCategoryAndProcessDefinition(); |
| | | |
| | | // 2. è·ååç±»ä¸çæµç¨å®ä¹ä¿¡æ¯ |
| | | List<BpmProcessDefinitionInfoDO> definitionInfoList = bpmProcessDefinitionService |
| | | .getProcessDefinitionInfoListByCategory(APPROVE_CATEGORY_CODE); |
| | | |
| | | // 3. è·åæµç¨å®ä¹è¯¦æ
|
| | | Set<String> processDefinitionIds = convertSet(definitionInfoList, BpmProcessDefinitionInfoDO::getProcessDefinitionId); |
| | | List<ProcessDefinition> processDefinitions = bpmProcessDefinitionService.getProcessDefinitionList(processDefinitionIds); |
| | | |
| | | // 4. è¿æ»¤ï¼åªä¿çæ¿æ´»ç¶æï¼ä¸ç¸å key åªä¿çææ°çæ¬ |
| | | Map<String, ProcessDefinition> latestVersionMap = new HashMap<>(); |
| | | for (ProcessDefinition pd : processDefinitions) { |
| | | if (pd.isSuspended()) { |
| | | continue; |
| | | } |
| | | ProcessDefinition existing = latestVersionMap.get(pd.getKey()); |
| | | if (existing == null || pd.getVersion() > existing.getVersion()) { |
| | | latestVersionMap.put(pd.getKey(), pd); |
| | | } |
| | | } |
| | | |
| | | // 5. è¿åæµç¨å®ä¹å表 |
| | | List<Map<String, Object>> result = new ArrayList<>(); |
| | | for (ProcessDefinition pd : latestVersionMap.values()) { |
| | | Map<String, Object> item = new HashMap<>(); |
| | | item.put("id", pd.getId()); |
| | | item.put("key", pd.getKey()); |
| | | item.put("name", pd.getName()); |
| | | item.put("version", pd.getVersion()); |
| | | result.add(item); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | @Override |
| | | public void updateLeaveApplicationAuditStatus(Long id, Integer status) { |
| | | // æ ¡éªåå¨ |
| | | HrmLeaveApplicationDO application = validateLeaveApplicationExists(id); |
| | | // æ ¡éªç¶æä¸ºå®¡æ¹ä¸ |
| | | if (!Objects.equals(application.getStatus(), HrmAuditStatusEnum.PROCESS.getStatus())) { |
| | | log.error("[updateLeaveApplicationAuditStatus][application({}) ä¸å¤äºå®¡æ¹ä¸ï¼æ æ³æ´æ°å®¡æ¹ç»æ({})]", |
| | | id, status); |
| | | throw exception(LEAVE_APPLICATION_UPDATE_AUDIT_STATUS_FAIL_NOT_PROCESS); |
| | | } |
| | | // æ´æ°ç¶æ |
| | | leaveApplicationMapper.updateById(HrmLeaveApplicationDO.builder() |
| | | .id(id) |
| | | .status(status) |
| | | .approveTime(java.time.LocalDateTime.now()) |
| | | .build()); |
| | | } |
| | | |
| | | @Override |
| | | public HrmLeaveApplicationDO getLeaveApplicationByProcessInstanceId(String processInstanceId) { |
| | | return leaveApplicationMapper.selectByProcessInstanceId(processInstanceId); |
| | | AdminUserRespDTO user = adminUserApi.getUser(userId); |
| | | return user == null ? null : user.getNickname(); |
| | | } |
| | | |
| | | } |
| | |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmRegularizeApplicationSaveReqVO; |
| | | import cn.iocoder.yudao.module.hrm.dal.dataobject.approval.HrmRegularizeApplicationDO; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | /** |
| | | * 转æ£ç³è¯· Service æ¥å£ |
| | |
| | | * @author è¶
级管çå |
| | | */ |
| | | public interface HrmRegularizeApplicationService { |
| | | |
| | | /** |
| | | * 审æ¹åç±»ç¼ç ï¼è½¬æ£å®¡æ¹ |
| | | */ |
| | | String APPROVE_CATEGORY_CODE = "hrm_regularize_approve"; |
| | | |
| | | /** |
| | | * å建转æ£ç³è¯· |
| | |
| | | PageResult<HrmRegularizeApplicationRespVO> getRegularizeApplicationPage(HrmRegularizeApplicationPageReqVO pageReqVO); |
| | | |
| | | /** |
| | | * æäº¤è½¬æ£ç³è¯·å®¡æ¹ |
| | | * æäº¤è½¬æ£ç³è¯·å®¡æ¹ï¼è稿 / å®¡æ ¸ä¸éè¿ â 审æ¹ä¸ï¼ |
| | | * |
| | | * 审æ¹äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸æå®ï¼æäº¤æ¶æ ééæ©ã |
| | | * |
| | | * @param id ç³è¯·ID |
| | | * @param processDefinitionKey æµç¨å®ä¹Key |
| | | * @param userId å起人ID |
| | | */ |
| | | void submitRegularizeApplication(Long id, String processDefinitionKey, Long userId); |
| | | void submitRegularizeApplication(Long id); |
| | | |
| | | /** |
| | | * æ´æ°è½¬æ£ç³è¯·å®¡æ¹ç¶æ |
| | | * è·å¾è½¬æ£ç³è¯·ç审æ¹äººç¼å·éåï¼ä¾åç«¯å¤ææ¯å¦å±ç¤ºå®¡æ ¸æé® |
| | | * |
| | | * @return 审æ¹äººç¨æ·ç¼å·éå |
| | | */ |
| | | Set<Long> getRegularizeApplicationApproverUserIds(); |
| | | |
| | | /** |
| | | * å®¡æ ¸è½¬æ£ç³è¯·ï¼å®¡æ¹ä¸ â å®¡æ ¸éè¿ / å®¡æ ¸ä¸éè¿ï¼ |
| | | * |
| | | * å®¡æ ¸éè¿æ¶ååå工主档ï¼ç¶æ=å¨èï¼ç¨å·¥æ§è´¨=æ£å¼ï¼è½¬æ£æ¥æï¼ã |
| | | * |
| | | * @param id ç³è¯·ID |
| | | * @param status 审æ¹ç¶æ |
| | | * @param pass æ¯å¦éè¿ |
| | | * @param reviewRemark å®¡æ ¸æè§ï¼ä¸éè¿æ¶å¿
å¡«ï¼ |
| | | */ |
| | | void updateRegularizeApplicationAuditStatus(Long id, Integer status); |
| | | |
| | | /** |
| | | * æ ¹æ®æµç¨å®ä¾IDè·å转æ£ç³è¯· |
| | | * |
| | | * @param processInstanceId æµç¨å®ä¾ID |
| | | * @return ç³è¯·ä¿¡æ¯ |
| | | */ |
| | | HrmRegularizeApplicationDO getRegularizeApplicationByProcessInstanceId(String processInstanceId); |
| | | |
| | | /** |
| | | * è·å转æ£å®¡æ¹æµç¨å®ä¹å表 |
| | | * |
| | | * @return æµç¨å®ä¹å表 |
| | | */ |
| | | List<Map<String, Object>> getApproveProcessDefinitionList(); |
| | | void auditRegularizeApplication(Long id, Boolean pass, String reviewRemark); |
| | | |
| | | } |
| | |
| | | package cn.iocoder.yudao.module.hrm.service.approval; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.ObjUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; |
| | | 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.dal.dataobject.definition.BpmProcessDefinitionInfoDO; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmCategoryService; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmRegularizeApplicationPageReqVO; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmRegularizeApplicationRespVO; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmRegularizeApplicationSaveReqVO; |
| | | import cn.iocoder.yudao.module.hrm.dal.dataobject.approval.HrmRegularizeApplicationDO; |
| | | import cn.iocoder.yudao.module.hrm.dal.dataobject.employee.HrmEmployeeDO; |
| | | import cn.iocoder.yudao.module.hrm.dal.mysql.approval.HrmRegularizeApplicationMapper; |
| | | import cn.iocoder.yudao.module.hrm.dal.mysql.employee.HrmEmployeeMapper; |
| | | import cn.iocoder.yudao.module.hrm.dal.redis.HrmNoRedisDAO; |
| | | import cn.iocoder.yudao.module.hrm.enums.HrmAuditStatusEnum; |
| | | import cn.iocoder.yudao.module.hrm.enums.HrmEmploymentTypeEnum; |
| | | import cn.iocoder.yudao.module.system.api.approval.ApprovalConfigApi; |
| | | import cn.iocoder.yudao.module.system.api.dept.DeptApi; |
| | | import cn.iocoder.yudao.module.system.api.dept.PostApi; |
| | | import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; |
| | |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | | import jakarta.annotation.Resource; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.flowable.engine.repository.ProcessDefinition; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.time.LocalDate; |
| | | import java.util.Collections; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | | import java.util.Set; |
| | | import java.util.stream.Collectors; |
| | | import java.util.stream.Stream; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; |
| | | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| | | import static cn.iocoder.yudao.module.hrm.enums.ErrorCodeConstants.*; |
| | | |
| | | /** |
| | |
| | | @Slf4j |
| | | public class HrmRegularizeApplicationServiceImpl implements HrmRegularizeApplicationService { |
| | | |
| | | /** |
| | | * 转æ£ç³è¯·å®¡æ¹çä¸å¡ç±»åç¼ç |
| | | * |
| | | * ä¸ system_approval_config.biz_type 对åºï¼å®¡æ¹äººå¨ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãä¸ç»´æ¤ã |
| | | */ |
| | | private static final String REGULARIZE_APPROVE_BIZ_TYPE = "hrm_regularize_approve"; |
| | | |
| | | /** |
| | | * åå·¥ç¶æï¼å¨è |
| | | */ |
| | | private static final Integer EMPLOYEE_STATUS_ACTIVE = 1; |
| | | |
| | | /** |
| | | * ç¨å·¥æ§è´¨ï¼æ£å¼ |
| | | */ |
| | | private static final Integer EMPLOYMENT_TYPE_FORMAL = 1; |
| | | |
| | | @Resource |
| | | private HrmRegularizeApplicationMapper regularizeApplicationMapper; |
| | | @Resource |
| | |
| | | @Resource |
| | | private AdminUserApi adminUserApi; |
| | | @Resource |
| | | private BpmProcessInstanceApi bpmProcessInstanceApi; |
| | | private ApprovalConfigApi approvalConfigApi; |
| | | @Resource |
| | | private BpmCategoryService bpmCategoryService; |
| | | @Resource |
| | | private BpmProcessDefinitionService bpmProcessDefinitionService; |
| | | private HrmEmployeeMapper employeeMapper; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void submitRegularizeApplication(Long id, String processDefinitionKey, Long userId) { |
| | | public void submitRegularizeApplication(Long id) { |
| | | // 1. æ ¡éªåå¨ + å¯æäº¤ç¶æï¼è稿 / å®¡æ ¸ä¸éè¿ï¼ |
| | | HrmRegularizeApplicationDO application = validateRegularizeApplicationExists(id); |
| | | if (ObjUtil.notEqual(application.getStatus(), HrmAuditStatusEnum.DRAFT.getStatus())) { |
| | | throw exception(REGULARIZE_APPLICATION_SUBMIT_FAIL_NOT_DRAFT); |
| | | } |
| | | validateApproveCategoryAndProcessDefinition(); |
| | | ProcessDefinition processDefinition = bpmProcessDefinitionService.getActiveProcessDefinition(processDefinitionKey); |
| | | if (processDefinition == null) { |
| | | throw exception(REGULARIZE_APPLICATION_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | String processInstanceId = bpmProcessInstanceApi.createProcessInstance(userId, new BpmProcessInstanceCreateReqDTO() |
| | | .setProcessDefinitionKey(processDefinitionKey).setBusinessKey(String.valueOf(id))); |
| | | regularizeApplicationMapper.updateById(HrmRegularizeApplicationDO.builder() |
| | | .id(id) |
| | | .processInstanceId(processInstanceId) |
| | | .status(HrmAuditStatusEnum.PROCESS.getStatus()) |
| | | .build()); |
| | | if (!Objects.equals(application.getStatus(), HrmAuditStatusEnum.DRAFT.getStatus()) |
| | | && !Objects.equals(application.getStatus(), HrmAuditStatusEnum.REJECT.getStatus())) { |
| | | throw exception(REGULARIZE_APPLICATION_SUBMIT_FAIL_NOT_EDITABLE); |
| | | } |
| | | |
| | | private void validateApproveCategoryAndProcessDefinition() { |
| | | List<String> codes = Collections.singletonList(APPROVE_CATEGORY_CODE); |
| | | Map<String, ?> categoryMap = bpmCategoryService.getCategoryMap(codes); |
| | | if (!categoryMap.containsKey(APPROVE_CATEGORY_CODE)) { |
| | | throw exception(REGULARIZE_APPLICATION_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | List<BpmProcessDefinitionInfoDO> definitionInfoList = bpmProcessDefinitionService |
| | | .getProcessDefinitionInfoListByCategory(APPROVE_CATEGORY_CODE); |
| | | if (CollUtil.isEmpty(definitionInfoList)) { |
| | | throw exception(REGULARIZE_APPLICATION_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | Set<String> processDefinitionIds = convertSet(definitionInfoList, BpmProcessDefinitionInfoDO::getProcessDefinitionId); |
| | | List<ProcessDefinition> processDefinitions = bpmProcessDefinitionService.getProcessDefinitionList(processDefinitionIds); |
| | | boolean hasActiveDefinition = processDefinitions.stream().anyMatch(pd -> !pd.isSuspended()); |
| | | if (!hasActiveDefinition) { |
| | | throw exception(REGULARIZE_APPLICATION_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | // 2. æ ¡éªå®¡æ¹é
置已å¯ç¨ä¸é
ç½®äºææå®¡æ¹äººï¼æªé
ç½®æ¶æåºå¸¦æç¡®æç¤ºçä¸å¡å¼å¸¸ï¼ |
| | | approvalConfigApi.validateApprovalEnabledAndGetApprovers(REGULARIZE_APPROVE_BIZ_TYPE); |
| | | |
| | | // 3. ç¶æç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æï¼é¿å
æ®çãå®¡æ ¸ä¸éè¿ãçåå |
| | | regularizeApplicationMapper.submitAndResetAuditInfo(id, HrmAuditStatusEnum.PROCESS.getStatus()); |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getApproveProcessDefinitionList() { |
| | | validateApproveCategoryAndProcessDefinition(); |
| | | List<BpmProcessDefinitionInfoDO> definitionInfoList = bpmProcessDefinitionService |
| | | .getProcessDefinitionInfoListByCategory(APPROVE_CATEGORY_CODE); |
| | | Set<String> processDefinitionIds = convertSet(definitionInfoList, BpmProcessDefinitionInfoDO::getProcessDefinitionId); |
| | | List<ProcessDefinition> processDefinitions = bpmProcessDefinitionService.getProcessDefinitionList(processDefinitionIds); |
| | | Map<String, ProcessDefinition> latestVersionMap = new HashMap<>(); |
| | | for (ProcessDefinition pd : processDefinitions) { |
| | | if (pd.isSuspended()) continue; |
| | | ProcessDefinition existing = latestVersionMap.get(pd.getKey()); |
| | | if (existing == null || pd.getVersion() > existing.getVersion()) { |
| | | latestVersionMap.put(pd.getKey(), pd); |
| | | } |
| | | } |
| | | List<Map<String, Object>> result = new ArrayList<>(); |
| | | for (ProcessDefinition pd : latestVersionMap.values()) { |
| | | Map<String, Object> item = new HashMap<>(); |
| | | item.put("id", pd.getId()); |
| | | item.put("key", pd.getKey()); |
| | | item.put("name", pd.getName()); |
| | | item.put("version", pd.getVersion()); |
| | | result.add(item); |
| | | } |
| | | return result; |
| | | public Set<Long> getRegularizeApplicationApproverUserIds() { |
| | | return approvalConfigApi.getApproverUserIds(REGULARIZE_APPROVE_BIZ_TYPE); |
| | | } |
| | | |
| | | @Override |
| | | public void updateRegularizeApplicationAuditStatus(Long id, Integer status) { |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void auditRegularizeApplication(Long id, Boolean pass, String reviewRemark) { |
| | | // 1. æ ¡éªåå¨ |
| | | HrmRegularizeApplicationDO application = validateRegularizeApplicationExists(id); |
| | | // 2. æ ¡éªå¤äºå®¡æ¹ä¸ç¶æ |
| | | if (!Objects.equals(application.getStatus(), HrmAuditStatusEnum.PROCESS.getStatus())) { |
| | | log.error("[updateRegularizeApplicationAuditStatus][application({}) ä¸å¤äºå®¡æ¹ä¸ï¼æ æ³æ´æ°å®¡æ¹ç»æ({})]", id, status); |
| | | throw exception(REGULARIZE_APPLICATION_UPDATE_AUDIT_STATUS_FAIL_NOT_PROCESS); |
| | | throw exception(REGULARIZE_APPLICATION_AUDIT_FAIL_NOT_PROCESS); |
| | | } |
| | | regularizeApplicationMapper.updateById(HrmRegularizeApplicationDO.builder() |
| | | .id(id) |
| | | .status(status) |
| | | .approveTime(java.time.LocalDateTime.now()) |
| | | // 3. æ ¡éªå½åç»å½ç¨æ·æ¯è¯¥ä¸å¡ç±»åç审æ¹äººï¼æç¾ï¼ä»»ä¸äººåå¯å®¡æ ¸ï¼ |
| | | Long userId = getLoginUserId(); |
| | | approvalConfigApi.validateApprover(REGULARIZE_APPROVE_BIZ_TYPE, userId); |
| | | // 4. å®¡æ ¸ä¸éè¿ï¼å¿
须填ååå ï¼ç¶æç½®ä¸ºå®¡æ ¸ä¸éè¿ï¼éåæäº¤äººä¿®æ¹åå¯éæ°æäº¤ |
| | | if (!Boolean.TRUE.equals(pass)) { |
| | | if (StrUtil.isBlank(reviewRemark)) { |
| | | throw exception(REGULARIZE_APPLICATION_AUDIT_REJECT_REASON_REQUIRED); |
| | | } |
| | | regularizeApplicationMapper.auditRegularizeApplication(id, HrmAuditStatusEnum.REJECT.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | return; |
| | | } |
| | | // 5. å®¡æ ¸éè¿ï¼è®°å½å®¡æ ¸äººä¸å®¡æ ¸æè§ï¼ç¶æç½®ä¸ºå®¡æ ¸éè¿ |
| | | regularizeApplicationMapper.auditRegularizeApplication(id, HrmAuditStatusEnum.APPROVE.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | |
| | | // 6. å®¡æ ¸éè¿åç½®ä¸å¡é»è¾ï¼ååå工主档ï¼ç¶æ=å¨èï¼ç¨å·¥æ§è´¨=æ£å¼ï¼è½¬æ£æ¥æ = æè½¬æ£æ¥ææå½å¤©ï¼ |
| | | writeBackEmployee(application); |
| | | } |
| | | |
| | | /** |
| | | * å®¡æ ¸éè¿åååå工主档 |
| | | * |
| | | * @param application 转æ£ç³è¯· |
| | | */ |
| | | private void writeBackEmployee(HrmRegularizeApplicationDO application) { |
| | | HrmEmployeeDO employee = employeeMapper.selectByUserId(application.getUserId()); |
| | | if (employee == null) { |
| | | log.warn("[writeBackEmployee] 转æ£ç³è¯·({}) ç¨æ·({}) æªæ¾å°å工档æ¡ï¼è·³è¿åå", application.getId(), application.getUserId()); |
| | | return; |
| | | } |
| | | LocalDate regularDate = application.getExpectedDate() != null ? application.getExpectedDate() : LocalDate.now(); |
| | | employeeMapper.updateById(HrmEmployeeDO.builder() |
| | | .id(employee.getId()) |
| | | .employeeStatus(EMPLOYEE_STATUS_ACTIVE) |
| | | .employmentType(EMPLOYMENT_TYPE_FORMAL) |
| | | .regularDate(regularDate) |
| | | .build()); |
| | | } |
| | | |
| | | @Override |
| | | public HrmRegularizeApplicationDO getRegularizeApplicationByProcessInstanceId(String processInstanceId) { |
| | | return regularizeApplicationMapper.selectByProcessInstanceId(processInstanceId); |
| | | /** |
| | | * è·åç¨æ·æµç§° |
| | | * |
| | | * @param userId ç¨æ·ç¼å· |
| | | * @return æµç§°ï¼ç¨æ·ä¸å卿¶è¿å null |
| | | */ |
| | | private String getUserNickname(Long userId) { |
| | | if (userId == null) { |
| | | return null; |
| | | } |
| | | AdminUserRespDTO user = adminUserApi.getUser(userId); |
| | | return user == null ? null : user.getNickname(); |
| | | } |
| | | |
| | | } |
| | |
| | | import cn.iocoder.yudao.module.hrm.dal.dataobject.approval.HrmResignationApplicationDO; |
| | | import jakarta.validation.Valid; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | /** |
| | | * 离èç³è¯· Service æ¥å£ |
| | |
| | | * @author è¶
级管çå |
| | | */ |
| | | public interface HrmResignationApplicationService { |
| | | |
| | | /** |
| | | * BPM 离èå®¡æ¹æµç¨æ è¯ |
| | | */ |
| | | String BPM_PROCESS_DEFINITION_KEY = "hrm_resignation"; |
| | | |
| | | /** |
| | | * BPM 离è审æ¹åç±»ç¼ç |
| | | */ |
| | | String APPROVE_CATEGORY_CODE = "hrm_resignation_approve"; |
| | | |
| | | /** |
| | | * å建离èç³è¯· |
| | |
| | | PageResult<HrmResignationApplicationRespVO> getResignationApplicationPage(HrmResignationApplicationPageReqVO pageReqVO); |
| | | |
| | | /** |
| | | * æäº¤ç¦»èç³è¯·å®¡æ¹ |
| | | * æäº¤ç¦»èç³è¯·å®¡æ¹ï¼è稿 / å®¡æ ¸ä¸éè¿ â 审æ¹ä¸ï¼ |
| | | * |
| | | * 审æ¹äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸æå®ï¼æäº¤æ¶æ ééæ©ã |
| | | * |
| | | * @param id ç³è¯·ID |
| | | * @param processDefinitionKey æµç¨å®ä¹Key |
| | | * @param userId æäº¤äººID |
| | | */ |
| | | void submitResignationApplication(Long id, String processDefinitionKey, Long userId); |
| | | void submitResignationApplication(Long id); |
| | | |
| | | /** |
| | | * è·åå¯ç¨çå®¡æ¹æµç¨å®ä¹å表 |
| | | * è·å¾ç¦»èç³è¯·ç审æ¹äººç¼å·éåï¼ä¾åç«¯å¤ææ¯å¦å±ç¤ºå®¡æ ¸æé® |
| | | * |
| | | * @return æµç¨å®ä¹å表 |
| | | * @return 审æ¹äººç¨æ·ç¼å·éå |
| | | */ |
| | | List<Map<String, Object>> getApproveProcessDefinitionList(); |
| | | Set<Long> getResignationApplicationApproverUserIds(); |
| | | |
| | | /** |
| | | * æ´æ°ç¦»èç³è¯·å®¡æ¹ç¶æï¼BPM åè°ï¼ |
| | | * å®¡æ ¸ç¦»èç³è¯·ï¼å®¡æ¹ä¸ â å®¡æ ¸éè¿ / å®¡æ ¸ä¸éè¿ï¼ |
| | | * |
| | | * å®¡æ ¸éè¿æ¶ååå工主档ï¼ç¶æ=离èï¼ç¦»èæ¥æï¼ã |
| | | * |
| | | * @param id ç³è¯·ID |
| | | * @param status 审æ¹ç¶æ |
| | | * @param pass æ¯å¦éè¿ |
| | | * @param reviewRemark å®¡æ ¸æè§ï¼ä¸éè¿æ¶å¿
å¡«ï¼ |
| | | */ |
| | | void updateResignationApplicationAuditStatus(Long id, Integer status); |
| | | |
| | | /** |
| | | * æ ¹æ®æµç¨å®ä¾IDè·å离èç³è¯· |
| | | * |
| | | * @param processInstanceId æµç¨å®ä¾ID |
| | | * @return 离èç³è¯· |
| | | */ |
| | | HrmResignationApplicationDO getResignationApplicationByProcessInstanceId(String processInstanceId); |
| | | void auditResignationApplication(Long id, Boolean pass, String reviewRemark); |
| | | |
| | | /** |
| | | * æ´æ°ç¦»èç³è¯·äº¤æ¥ç¶æ |
| | |
| | | package cn.iocoder.yudao.module.hrm.service.approval; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.ObjUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | 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.dal.dataobject.definition.BpmProcessDefinitionInfoDO; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmCategoryService; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmResignationApplicationPageReqVO; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmResignationApplicationRespVO; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmResignationApplicationSaveReqVO; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmResignationHandoverReqVO; |
| | | import cn.iocoder.yudao.module.hrm.dal.dataobject.approval.HrmResignationApplicationDO; |
| | | import cn.iocoder.yudao.module.hrm.dal.dataobject.employee.HrmEmployeeDO; |
| | | import cn.iocoder.yudao.module.hrm.dal.mysql.approval.HrmResignationApplicationMapper; |
| | | import cn.iocoder.yudao.module.hrm.dal.mysql.employee.HrmEmployeeMapper; |
| | | import cn.iocoder.yudao.module.hrm.dal.redis.HrmNoRedisDAO; |
| | | import cn.iocoder.yudao.module.hrm.enums.HrmAuditStatusEnum; |
| | | import cn.iocoder.yudao.module.hrm.enums.HrmResignationTypeEnum; |
| | | import cn.iocoder.yudao.module.hrm.service.handover.HrmUserHandoverService; |
| | | import cn.iocoder.yudao.module.system.api.approval.ApprovalConfigApi; |
| | | import cn.iocoder.yudao.module.system.api.dept.DeptApi; |
| | | import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; |
| | | import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi; |
| | |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | | import jakarta.annotation.Resource; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.flowable.engine.repository.ProcessDefinition; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.time.LocalDate; |
| | | import java.util.Collections; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | |
| | | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; |
| | | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| | | import static cn.iocoder.yudao.module.hrm.enums.ErrorCodeConstants.*; |
| | | |
| | | /** |
| | |
| | | private static final Integer HANDOVER_STATUS_IN_PROGRESS = 10; |
| | | private static final Integer HANDOVER_STATUS_COMPLETED = 20; |
| | | |
| | | /** |
| | | * 离èç³è¯·å®¡æ¹çä¸å¡ç±»åç¼ç |
| | | * |
| | | * ä¸ system_approval_config.biz_type 对åºï¼å®¡æ¹äººå¨ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãä¸ç»´æ¤ã |
| | | */ |
| | | private static final String RESIGNATION_APPROVE_BIZ_TYPE = "hrm_resignation_approve"; |
| | | |
| | | /** |
| | | * åå·¥ç¶æï¼ç¦»è |
| | | */ |
| | | private static final Integer EMPLOYEE_STATUS_RESIGNED = 3; |
| | | |
| | | @Resource |
| | | private HrmResignationApplicationMapper resignationApplicationMapper; |
| | | @Resource |
| | |
| | | @Resource |
| | | private AdminUserApi adminUserApi; |
| | | @Resource |
| | | private BpmProcessInstanceApi bpmProcessInstanceApi; |
| | | @Resource |
| | | private BpmCategoryService bpmCategoryService; |
| | | @Resource |
| | | private StorageAttachmentApi storageAttachmentApi; |
| | | @Resource |
| | | private BpmProcessDefinitionService bpmProcessDefinitionService; |
| | | private ApprovalConfigApi approvalConfigApi; |
| | | @Resource |
| | | private HrmEmployeeMapper employeeMapper; |
| | | @Resource |
| | | private HrmUserHandoverService handoverService; |
| | | |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void submitResignationApplication(Long id, String processDefinitionKey, Long userId) { |
| | | public void submitResignationApplication(Long id) { |
| | | // 1. æ ¡éªåå¨ + å¯æäº¤ç¶æï¼è稿 / å®¡æ ¸ä¸éè¿ï¼ |
| | | HrmResignationApplicationDO application = validateResignationApplicationExists(id); |
| | | if (ObjUtil.notEqual(application.getStatus(), HrmAuditStatusEnum.DRAFT.getStatus())) { |
| | | throw exception(RESIGNATION_APPLICATION_SUBMIT_FAIL_NOT_DRAFT); |
| | | } |
| | | validateApproveCategoryAndProcessDefinition(); |
| | | ProcessDefinition processDefinition = bpmProcessDefinitionService.getActiveProcessDefinition(processDefinitionKey); |
| | | if (processDefinition == null) { |
| | | throw exception(RESIGNATION_APPLICATION_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | String processInstanceId = bpmProcessInstanceApi.createProcessInstance(userId, new BpmProcessInstanceCreateReqDTO() |
| | | .setProcessDefinitionKey(processDefinitionKey).setBusinessKey(String.valueOf(id))); |
| | | resignationApplicationMapper.updateById(HrmResignationApplicationDO.builder() |
| | | .id(id) |
| | | .processInstanceId(processInstanceId) |
| | | .status(HrmAuditStatusEnum.PROCESS.getStatus()) |
| | | .build()); |
| | | if (!Objects.equals(application.getStatus(), HrmAuditStatusEnum.DRAFT.getStatus()) |
| | | && !Objects.equals(application.getStatus(), HrmAuditStatusEnum.REJECT.getStatus())) { |
| | | throw exception(RESIGNATION_APPLICATION_SUBMIT_FAIL_NOT_EDITABLE); |
| | | } |
| | | |
| | | private void validateApproveCategoryAndProcessDefinition() { |
| | | List<String> codes = Collections.singletonList(APPROVE_CATEGORY_CODE); |
| | | Map<String, ?> categoryMap = bpmCategoryService.getCategoryMap(codes); |
| | | if (!categoryMap.containsKey(APPROVE_CATEGORY_CODE)) { |
| | | throw exception(RESIGNATION_APPLICATION_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | List<BpmProcessDefinitionInfoDO> definitionInfoList = bpmProcessDefinitionService |
| | | .getProcessDefinitionInfoListByCategory(APPROVE_CATEGORY_CODE); |
| | | if (CollUtil.isEmpty(definitionInfoList)) { |
| | | throw exception(RESIGNATION_APPLICATION_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | Set<String> processDefinitionIds = convertSet(definitionInfoList, BpmProcessDefinitionInfoDO::getProcessDefinitionId); |
| | | List<ProcessDefinition> processDefinitions = bpmProcessDefinitionService.getProcessDefinitionList(processDefinitionIds); |
| | | boolean hasActiveDefinition = processDefinitions.stream().anyMatch(pd -> !pd.isSuspended()); |
| | | if (!hasActiveDefinition) { |
| | | throw exception(RESIGNATION_APPLICATION_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | // 2. æ ¡éªå®¡æ¹é
置已å¯ç¨ä¸é
ç½®äºææå®¡æ¹äººï¼æªé
ç½®æ¶æåºå¸¦æç¡®æç¤ºçä¸å¡å¼å¸¸ï¼ |
| | | approvalConfigApi.validateApprovalEnabledAndGetApprovers(RESIGNATION_APPROVE_BIZ_TYPE); |
| | | |
| | | // 3. ç¶æç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æï¼é¿å
æ®çãå®¡æ ¸ä¸éè¿ãçåå |
| | | resignationApplicationMapper.submitAndResetAuditInfo(id, HrmAuditStatusEnum.PROCESS.getStatus()); |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getApproveProcessDefinitionList() { |
| | | validateApproveCategoryAndProcessDefinition(); |
| | | List<BpmProcessDefinitionInfoDO> definitionInfoList = bpmProcessDefinitionService |
| | | .getProcessDefinitionInfoListByCategory(APPROVE_CATEGORY_CODE); |
| | | Set<String> processDefinitionIds = convertSet(definitionInfoList, BpmProcessDefinitionInfoDO::getProcessDefinitionId); |
| | | List<ProcessDefinition> processDefinitions = bpmProcessDefinitionService.getProcessDefinitionList(processDefinitionIds); |
| | | Map<String, ProcessDefinition> latestVersionMap = new HashMap<>(); |
| | | for (ProcessDefinition pd : processDefinitions) { |
| | | if (pd.isSuspended()) continue; |
| | | ProcessDefinition existing = latestVersionMap.get(pd.getKey()); |
| | | if (existing == null || pd.getVersion() > existing.getVersion()) { |
| | | latestVersionMap.put(pd.getKey(), pd); |
| | | } |
| | | } |
| | | List<Map<String, Object>> result = new ArrayList<>(); |
| | | for (ProcessDefinition pd : latestVersionMap.values()) { |
| | | Map<String, Object> item = new HashMap<>(); |
| | | item.put("id", pd.getId()); |
| | | item.put("key", pd.getKey()); |
| | | item.put("name", pd.getName()); |
| | | item.put("version", pd.getVersion()); |
| | | result.add(item); |
| | | } |
| | | return result; |
| | | public Set<Long> getResignationApplicationApproverUserIds() { |
| | | return approvalConfigApi.getApproverUserIds(RESIGNATION_APPROVE_BIZ_TYPE); |
| | | } |
| | | |
| | | @Override |
| | | public void updateResignationApplicationAuditStatus(Long id, Integer status) { |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void auditResignationApplication(Long id, Boolean pass, String reviewRemark) { |
| | | // 1. æ ¡éªåå¨ |
| | | HrmResignationApplicationDO application = validateResignationApplicationExists(id); |
| | | // 2. æ ¡éªå¤äºå®¡æ¹ä¸ç¶æ |
| | | if (!Objects.equals(application.getStatus(), HrmAuditStatusEnum.PROCESS.getStatus())) { |
| | | log.error("[updateResignationApplicationAuditStatus][application({}) ä¸å¤äºå®¡æ¹ä¸ï¼æ æ³æ´æ°å®¡æ¹ç»æ({})]", id, status); |
| | | throw exception(RESIGNATION_APPLICATION_UPDATE_AUDIT_STATUS_FAIL_NOT_PROCESS); |
| | | throw exception(RESIGNATION_APPLICATION_AUDIT_FAIL_NOT_PROCESS); |
| | | } |
| | | resignationApplicationMapper.updateById(HrmResignationApplicationDO.builder() |
| | | .id(id) |
| | | .status(status) |
| | | .approveTime(java.time.LocalDateTime.now()) |
| | | // 3. æ ¡éªå½åç»å½ç¨æ·æ¯è¯¥ä¸å¡ç±»åç审æ¹äººï¼æç¾ï¼ä»»ä¸äººåå¯å®¡æ ¸ï¼ |
| | | Long userId = getLoginUserId(); |
| | | approvalConfigApi.validateApprover(RESIGNATION_APPROVE_BIZ_TYPE, userId); |
| | | // 4. å®¡æ ¸ä¸éè¿ï¼å¿
须填ååå ï¼ç¶æç½®ä¸ºå®¡æ ¸ä¸éè¿ï¼éåæäº¤äººä¿®æ¹åå¯éæ°æäº¤ |
| | | if (!Boolean.TRUE.equals(pass)) { |
| | | if (StrUtil.isBlank(reviewRemark)) { |
| | | throw exception(RESIGNATION_APPLICATION_AUDIT_REJECT_REASON_REQUIRED); |
| | | } |
| | | resignationApplicationMapper.auditResignationApplication(id, HrmAuditStatusEnum.REJECT.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | return; |
| | | } |
| | | // 5. å®¡æ ¸éè¿ï¼è®°å½å®¡æ ¸äººä¸å®¡æ ¸æè§ï¼ç¶æç½®ä¸ºå®¡æ ¸éè¿ |
| | | resignationApplicationMapper.auditResignationApplication(id, HrmAuditStatusEnum.APPROVE.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | |
| | | // 6. å®¡æ ¸éè¿åç½®ä¸å¡é»è¾ï¼ååå工主档ï¼ç¶æ=离èï¼ç¦»èæ¥æ = å®é
ç¦»èæ¥ææé¢è®¡ç¦»èæ¥æï¼ |
| | | writeBackEmployee(application); |
| | | } |
| | | |
| | | /** |
| | | * å®¡æ ¸éè¿åååå工主档 |
| | | * |
| | | * @param application 离èç³è¯· |
| | | */ |
| | | private void writeBackEmployee(HrmResignationApplicationDO application) { |
| | | HrmEmployeeDO employee = employeeMapper.selectByUserId(application.getUserId()); |
| | | if (employee == null) { |
| | | log.warn("[writeBackEmployee] 离èç³è¯·({}) ç¨æ·({}) æªæ¾å°å工档æ¡ï¼è·³è¿åå", application.getId(), application.getUserId()); |
| | | return; |
| | | } |
| | | LocalDate leaveDate = application.getActualDate() != null |
| | | ? application.getActualDate() : application.getExpectedDate(); |
| | | employeeMapper.updateById(HrmEmployeeDO.builder() |
| | | .id(employee.getId()) |
| | | .employeeStatus(EMPLOYEE_STATUS_RESIGNED) |
| | | .leaveDate(leaveDate) |
| | | .build()); |
| | | } |
| | | |
| | | @Override |
| | | public HrmResignationApplicationDO getResignationApplicationByProcessInstanceId(String processInstanceId) { |
| | | return resignationApplicationMapper.selectByProcessInstanceId(processInstanceId); |
| | | /** |
| | | * è·åç¨æ·æµç§° |
| | | * |
| | | * @param userId ç¨æ·ç¼å· |
| | | * @return æµç§°ï¼ç¨æ·ä¸å卿¶è¿å null |
| | | */ |
| | | private String getUserNickname(Long userId) { |
| | | if (userId == null) { |
| | | return null; |
| | | } |
| | | AdminUserRespDTO user = adminUserApi.getUser(userId); |
| | | return user == null ? null : user.getNickname(); |
| | | } |
| | | |
| | | @Override |
| | |
| | | import cn.iocoder.yudao.module.hrm.dal.dataobject.approval.HrmTransferApplicationDO; |
| | | import jakarta.validation.Valid; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | /** |
| | | * è°å²ç³è¯· Service æ¥å£ |
| | |
| | | * @author è¶
级管çå |
| | | */ |
| | | public interface HrmTransferApplicationService { |
| | | |
| | | /** |
| | | * BPM è°å²å®¡æ¹æµç¨æ è¯ |
| | | */ |
| | | String BPM_PROCESS_DEFINITION_KEY = "hrm_transfer"; |
| | | |
| | | /** |
| | | * BPM è°å²å®¡æ¹åç±»ç¼ç |
| | | */ |
| | | String APPROVE_CATEGORY_CODE = "hrm_transfer_approve"; |
| | | |
| | | /** |
| | | * å建è°å²ç³è¯· |
| | |
| | | PageResult<HrmTransferApplicationRespVO> getTransferApplicationPage(HrmTransferApplicationPageReqVO pageReqVO); |
| | | |
| | | /** |
| | | * æäº¤è°å²ç³è¯·å®¡æ¹ |
| | | * æäº¤è°å²ç³è¯·å®¡æ¹ï¼è稿 / å®¡æ ¸ä¸éè¿ â 审æ¹ä¸ï¼ |
| | | * |
| | | * 审æ¹äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸æå®ï¼æäº¤æ¶æ ééæ©ã |
| | | * |
| | | * @param id ç³è¯·ID |
| | | * @param processDefinitionKey æµç¨å®ä¹Key |
| | | * @param userId æäº¤äººID |
| | | */ |
| | | void submitTransferApplication(Long id, String processDefinitionKey, Long userId); |
| | | void submitTransferApplication(Long id); |
| | | |
| | | /** |
| | | * è·åå¯ç¨çå®¡æ¹æµç¨å®ä¹å表 |
| | | * è·å¾è°å²ç³è¯·ç审æ¹äººç¼å·éåï¼ä¾åç«¯å¤ææ¯å¦å±ç¤ºå®¡æ ¸æé® |
| | | * |
| | | * @return æµç¨å®ä¹å表 |
| | | * @return 审æ¹äººç¨æ·ç¼å·éå |
| | | */ |
| | | List<Map<String, Object>> getApproveProcessDefinitionList(); |
| | | Set<Long> getTransferApplicationApproverUserIds(); |
| | | |
| | | /** |
| | | * æ´æ°è°å²ç³è¯·å®¡æ¹ç¶æï¼BPM åè°ï¼ |
| | | * å®¡æ ¸è°å²ç³è¯·ï¼å®¡æ¹ä¸ â å®¡æ ¸éè¿ / å®¡æ ¸ä¸éè¿ï¼ |
| | | * |
| | | * å®¡æ ¸éè¿æ¶ååå工主档ï¼é¨é¨ = ç®æ é¨é¨ï¼å²ä½ = ç®æ å²ä½ï¼ã |
| | | * |
| | | * @param id ç³è¯·ID |
| | | * @param status 审æ¹ç¶æ |
| | | * @param pass æ¯å¦éè¿ |
| | | * @param reviewRemark å®¡æ ¸æè§ï¼ä¸éè¿æ¶å¿
å¡«ï¼ |
| | | */ |
| | | void updateTransferApplicationAuditStatus(Long id, Integer status); |
| | | |
| | | /** |
| | | * æ ¹æ®æµç¨å®ä¾IDè·åè°å²ç³è¯· |
| | | * |
| | | * @param processInstanceId æµç¨å®ä¾ID |
| | | * @return è°å²ç³è¯· |
| | | */ |
| | | HrmTransferApplicationDO getTransferApplicationByProcessInstanceId(String processInstanceId); |
| | | void auditTransferApplication(Long id, Boolean pass, String reviewRemark); |
| | | |
| | | } |
| | |
| | | package cn.iocoder.yudao.module.hrm.service.approval; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.ObjUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | 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.dal.dataobject.definition.BpmProcessDefinitionInfoDO; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmCategoryService; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmTransferApplicationPageReqVO; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmTransferApplicationRespVO; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmTransferApplicationSaveReqVO; |
| | | import cn.iocoder.yudao.module.hrm.dal.dataobject.approval.HrmTransferApplicationDO; |
| | | import cn.iocoder.yudao.module.hrm.dal.dataobject.employee.HrmEmployeeDO; |
| | | import cn.iocoder.yudao.module.hrm.dal.mysql.approval.HrmTransferApplicationMapper; |
| | | import cn.iocoder.yudao.module.hrm.dal.mysql.employee.HrmEmployeeMapper; |
| | | import cn.iocoder.yudao.module.hrm.dal.redis.HrmNoRedisDAO; |
| | | import cn.iocoder.yudao.module.hrm.enums.HrmAuditStatusEnum; |
| | | import cn.iocoder.yudao.module.hrm.enums.HrmTransferTypeEnum; |
| | | import cn.iocoder.yudao.module.system.api.approval.ApprovalConfigApi; |
| | | import cn.iocoder.yudao.module.system.api.dept.DeptApi; |
| | | import cn.iocoder.yudao.module.system.api.dept.PostApi; |
| | | import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi; |
| | |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | | import jakarta.annotation.Resource; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.flowable.engine.repository.ProcessDefinition; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Collections; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | |
| | | import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; |
| | | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| | | import static cn.iocoder.yudao.module.hrm.enums.ErrorCodeConstants.*; |
| | | |
| | | /** |
| | |
| | | @Slf4j |
| | | public class HrmTransferApplicationServiceImpl implements HrmTransferApplicationService { |
| | | |
| | | /** |
| | | * è°å²ç³è¯·å®¡æ¹çä¸å¡ç±»åç¼ç |
| | | * |
| | | * ä¸ system_approval_config.biz_type 对åºï¼å®¡æ¹äººå¨ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãä¸ç»´æ¤ã |
| | | */ |
| | | private static final String TRANSFER_APPROVE_BIZ_TYPE = "hrm_transfer_approve"; |
| | | |
| | | @Resource |
| | | private HrmTransferApplicationMapper transferApplicationMapper; |
| | | @Resource |
| | |
| | | @Resource |
| | | private AdminUserApi adminUserApi; |
| | | @Resource |
| | | private BpmProcessInstanceApi bpmProcessInstanceApi; |
| | | @Resource |
| | | private BpmCategoryService bpmCategoryService; |
| | | @Resource |
| | | private StorageAttachmentApi storageAttachmentApi; |
| | | @Resource |
| | | private BpmProcessDefinitionService bpmProcessDefinitionService; |
| | | private ApprovalConfigApi approvalConfigApi; |
| | | @Resource |
| | | private HrmEmployeeMapper employeeMapper; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void submitTransferApplication(Long id, String processDefinitionKey, Long userId) { |
| | | public void submitTransferApplication(Long id) { |
| | | // 1. æ ¡éªåå¨ + å¯æäº¤ç¶æï¼è稿 / å®¡æ ¸ä¸éè¿ï¼ |
| | | HrmTransferApplicationDO application = validateTransferApplicationExists(id); |
| | | if (ObjUtil.notEqual(application.getStatus(), HrmAuditStatusEnum.DRAFT.getStatus())) { |
| | | throw exception(TRANSFER_APPLICATION_SUBMIT_FAIL_NOT_DRAFT); |
| | | } |
| | | validateApproveCategoryAndProcessDefinition(); |
| | | ProcessDefinition processDefinition = bpmProcessDefinitionService.getActiveProcessDefinition(processDefinitionKey); |
| | | if (processDefinition == null) { |
| | | throw exception(TRANSFER_APPLICATION_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | String processInstanceId = bpmProcessInstanceApi.createProcessInstance(userId, new BpmProcessInstanceCreateReqDTO() |
| | | .setProcessDefinitionKey(processDefinitionKey).setBusinessKey(String.valueOf(id))); |
| | | transferApplicationMapper.updateById(HrmTransferApplicationDO.builder() |
| | | .id(id) |
| | | .processInstanceId(processInstanceId) |
| | | .status(HrmAuditStatusEnum.PROCESS.getStatus()) |
| | | .build()); |
| | | if (!Objects.equals(application.getStatus(), HrmAuditStatusEnum.DRAFT.getStatus()) |
| | | && !Objects.equals(application.getStatus(), HrmAuditStatusEnum.REJECT.getStatus())) { |
| | | throw exception(TRANSFER_APPLICATION_SUBMIT_FAIL_NOT_EDITABLE); |
| | | } |
| | | |
| | | private void validateApproveCategoryAndProcessDefinition() { |
| | | List<String> codes = Collections.singletonList(APPROVE_CATEGORY_CODE); |
| | | Map<String, ?> categoryMap = bpmCategoryService.getCategoryMap(codes); |
| | | if (!categoryMap.containsKey(APPROVE_CATEGORY_CODE)) { |
| | | throw exception(TRANSFER_APPLICATION_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | List<BpmProcessDefinitionInfoDO> definitionInfoList = bpmProcessDefinitionService |
| | | .getProcessDefinitionInfoListByCategory(APPROVE_CATEGORY_CODE); |
| | | if (CollUtil.isEmpty(definitionInfoList)) { |
| | | throw exception(TRANSFER_APPLICATION_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | Set<String> processDefinitionIds = convertSet(definitionInfoList, BpmProcessDefinitionInfoDO::getProcessDefinitionId); |
| | | List<ProcessDefinition> processDefinitions = bpmProcessDefinitionService.getProcessDefinitionList(processDefinitionIds); |
| | | boolean hasActiveDefinition = processDefinitions.stream().anyMatch(pd -> !pd.isSuspended()); |
| | | if (!hasActiveDefinition) { |
| | | throw exception(TRANSFER_APPLICATION_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | // 2. æ ¡éªå®¡æ¹é
置已å¯ç¨ä¸é
ç½®äºææå®¡æ¹äººï¼æªé
ç½®æ¶æåºå¸¦æç¡®æç¤ºçä¸å¡å¼å¸¸ï¼ |
| | | approvalConfigApi.validateApprovalEnabledAndGetApprovers(TRANSFER_APPROVE_BIZ_TYPE); |
| | | |
| | | // 3. ç¶æç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æï¼é¿å
æ®çãå®¡æ ¸ä¸éè¿ãçåå |
| | | transferApplicationMapper.submitAndResetAuditInfo(id, HrmAuditStatusEnum.PROCESS.getStatus()); |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getApproveProcessDefinitionList() { |
| | | validateApproveCategoryAndProcessDefinition(); |
| | | List<BpmProcessDefinitionInfoDO> definitionInfoList = bpmProcessDefinitionService |
| | | .getProcessDefinitionInfoListByCategory(APPROVE_CATEGORY_CODE); |
| | | Set<String> processDefinitionIds = convertSet(definitionInfoList, BpmProcessDefinitionInfoDO::getProcessDefinitionId); |
| | | List<ProcessDefinition> processDefinitions = bpmProcessDefinitionService.getProcessDefinitionList(processDefinitionIds); |
| | | Map<String, ProcessDefinition> latestVersionMap = new HashMap<>(); |
| | | for (ProcessDefinition pd : processDefinitions) { |
| | | if (pd.isSuspended()) continue; |
| | | ProcessDefinition existing = latestVersionMap.get(pd.getKey()); |
| | | if (existing == null || pd.getVersion() > existing.getVersion()) { |
| | | latestVersionMap.put(pd.getKey(), pd); |
| | | } |
| | | } |
| | | List<Map<String, Object>> result = new ArrayList<>(); |
| | | for (ProcessDefinition pd : latestVersionMap.values()) { |
| | | Map<String, Object> item = new HashMap<>(); |
| | | item.put("id", pd.getId()); |
| | | item.put("key", pd.getKey()); |
| | | item.put("name", pd.getName()); |
| | | item.put("version", pd.getVersion()); |
| | | result.add(item); |
| | | } |
| | | return result; |
| | | public Set<Long> getTransferApplicationApproverUserIds() { |
| | | return approvalConfigApi.getApproverUserIds(TRANSFER_APPROVE_BIZ_TYPE); |
| | | } |
| | | |
| | | @Override |
| | | public void updateTransferApplicationAuditStatus(Long id, Integer status) { |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void auditTransferApplication(Long id, Boolean pass, String reviewRemark) { |
| | | // 1. æ ¡éªåå¨ |
| | | HrmTransferApplicationDO application = validateTransferApplicationExists(id); |
| | | // 2. æ ¡éªå¤äºå®¡æ¹ä¸ç¶æ |
| | | if (!Objects.equals(application.getStatus(), HrmAuditStatusEnum.PROCESS.getStatus())) { |
| | | log.error("[updateTransferApplicationAuditStatus][application({}) ä¸å¤äºå®¡æ¹ä¸ï¼æ æ³æ´æ°å®¡æ¹ç»æ({})]", id, status); |
| | | throw exception(TRANSFER_APPLICATION_UPDATE_AUDIT_STATUS_FAIL_NOT_PROCESS); |
| | | throw exception(TRANSFER_APPLICATION_AUDIT_FAIL_NOT_PROCESS); |
| | | } |
| | | transferApplicationMapper.updateById(HrmTransferApplicationDO.builder() |
| | | .id(id) |
| | | .status(status) |
| | | .approveTime(java.time.LocalDateTime.now()) |
| | | // 3. æ ¡éªå½åç»å½ç¨æ·æ¯è¯¥ä¸å¡ç±»åç审æ¹äººï¼æç¾ï¼ä»»ä¸äººåå¯å®¡æ ¸ï¼ |
| | | Long userId = getLoginUserId(); |
| | | approvalConfigApi.validateApprover(TRANSFER_APPROVE_BIZ_TYPE, userId); |
| | | // 4. å®¡æ ¸ä¸éè¿ï¼å¿
须填ååå ï¼ç¶æç½®ä¸ºå®¡æ ¸ä¸éè¿ï¼éåæäº¤äººä¿®æ¹åå¯éæ°æäº¤ |
| | | if (!Boolean.TRUE.equals(pass)) { |
| | | if (StrUtil.isBlank(reviewRemark)) { |
| | | throw exception(TRANSFER_APPLICATION_AUDIT_REJECT_REASON_REQUIRED); |
| | | } |
| | | transferApplicationMapper.auditTransferApplication(id, HrmAuditStatusEnum.REJECT.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | return; |
| | | } |
| | | // 5. å®¡æ ¸éè¿ï¼è®°å½å®¡æ ¸äººä¸å®¡æ ¸æè§ï¼ç¶æç½®ä¸ºå®¡æ ¸éè¿ |
| | | transferApplicationMapper.auditTransferApplication(id, HrmAuditStatusEnum.APPROVE.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | |
| | | // 6. å®¡æ ¸éè¿åç½®ä¸å¡é»è¾ï¼ååå工主档ï¼é¨é¨ = ç®æ é¨é¨ï¼å²ä½ = ç®æ å²ä½ï¼ |
| | | writeBackEmployee(application); |
| | | } |
| | | |
| | | /** |
| | | * å®¡æ ¸éè¿åååå工主档 |
| | | * |
| | | * @param application è°å²ç³è¯· |
| | | */ |
| | | private void writeBackEmployee(HrmTransferApplicationDO application) { |
| | | HrmEmployeeDO employee = employeeMapper.selectByUserId(application.getUserId()); |
| | | if (employee == null) { |
| | | log.warn("[writeBackEmployee] è°å²ç³è¯·({}) ç¨æ·({}) æªæ¾å°å工档æ¡ï¼è·³è¿åå", application.getId(), application.getUserId()); |
| | | return; |
| | | } |
| | | employeeMapper.updateById(HrmEmployeeDO.builder() |
| | | .id(employee.getId()) |
| | | .deptId(application.getTargetDeptId()) |
| | | .postId(application.getTargetPostId()) |
| | | .build()); |
| | | } |
| | | |
| | | @Override |
| | | public HrmTransferApplicationDO getTransferApplicationByProcessInstanceId(String processInstanceId) { |
| | | return transferApplicationMapper.selectByProcessInstanceId(processInstanceId); |
| | | /** |
| | | * è·åç¨æ·æµç§° |
| | | * |
| | | * @param userId ç¨æ·ç¼å· |
| | | * @return æµç§°ï¼ç¨æ·ä¸å卿¶è¿å null |
| | | */ |
| | | private String getUserNickname(Long userId) { |
| | | if (userId == null) { |
| | | return null; |
| | | } |
| | | AdminUserRespDTO user = adminUserApi.getUser(userId); |
| | | return user == null ? null : user.getNickname(); |
| | | } |
| | | |
| | | } |
| | |
| | | import cn.iocoder.yudao.module.hrm.dal.dataobject.attendance.HrmAttendanceExceptionDO; |
| | | import jakarta.validation.Valid; |
| | | |
| | | import java.util.Set; |
| | | |
| | | /** |
| | | * èå¤å¼å¸¸ç³è¯· Service æ¥å£ |
| | | * |
| | |
| | | HrmAttendanceExceptionDO getAttendanceException(Long id); |
| | | |
| | | /** |
| | | * æäº¤èå¤å¼å¸¸ç³è¯· |
| | | * æäº¤èå¤å¼å¸¸ç³è¯·å®¡æ¹ï¼è稿 / å®¡æ ¸ä¸éè¿ â 审æ¹ä¸ï¼ |
| | | * |
| | | * 审æ¹äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸æå®ï¼æäº¤æ¶æ ééæ©ã |
| | | * |
| | | * @param id ç³è¯·ID |
| | | * @param processDefinitionKey æµç¨å®ä¹Key |
| | | * @param userId æäº¤äººID |
| | | */ |
| | | void submitAttendanceException(Long id, String processDefinitionKey, Long userId); |
| | | void submitAttendanceException(Long id); |
| | | |
| | | /** |
| | | * æ´æ°èå¤å¼å¸¸ç³è¯·å®¡æ¹ç¶æ |
| | | * è·å¾èå¤å¼å¸¸ç³è¯·ç审æ¹äººç¼å·éåï¼ä¾åç«¯å¤ææ¯å¦å±ç¤ºå®¡æ ¸æé® |
| | | * |
| | | * @return 审æ¹äººç¨æ·ç¼å·éå |
| | | */ |
| | | Set<Long> getAttendanceExceptionApproverUserIds(); |
| | | |
| | | /** |
| | | * å®¡æ ¸èå¤å¼å¸¸ç³è¯·ï¼å®¡æ¹ä¸ â å®¡æ ¸éè¿ / å®¡æ ¸ä¸éè¿ï¼ |
| | | * |
| | | * å®¡æ ¸éè¿æ¶æ§è¡åç½®ä¸å¡é»è¾ï¼è¡¥å¡åå¡«ä¸ä¸çæ¶é´ / å çååå çæ¶é¿ã |
| | | * |
| | | * @param id ç³è¯·ID |
| | | * @param auditStatus 审æ¹ç¶æ |
| | | * @param pass æ¯å¦éè¿ |
| | | * @param reviewRemark å®¡æ ¸æè§ï¼ä¸éè¿æ¶å¿
å¡«ï¼ |
| | | */ |
| | | void updateAttendanceExceptionAuditStatus(Long id, Integer auditStatus); |
| | | void auditAttendanceException(Long id, Boolean pass, String reviewRemark); |
| | | |
| | | } |
| | |
| | | package cn.iocoder.yudao.module.hrm.service.attendance; |
| | | |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | 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.service.definition.BpmProcessDefinitionService; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.attendance.vo.HrmAttendanceExceptionPageReqVO; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.attendance.vo.HrmAttendanceExceptionSaveReqVO; |
| | | import cn.iocoder.yudao.module.hrm.dal.dataobject.attendance.HrmAttendanceExceptionDO; |
| | | import cn.iocoder.yudao.module.hrm.dal.mysql.attendance.HrmAttendanceExceptionMapper; |
| | | import cn.iocoder.yudao.module.system.api.approval.ApprovalConfigApi; |
| | | import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | | import cn.iocoder.yudao.module.hrm.dal.redis.HrmNoRedisDAO; |
| | | import cn.iocoder.yudao.module.hrm.enums.HrmAttendanceExceptionTypeEnum; |
| | | import cn.iocoder.yudao.module.hrm.enums.HrmAuditStatusEnum; |
| | | import cn.iocoder.yudao.module.hrm.dal.dataobject.employee.HrmEmployeeDO; |
| | | import cn.iocoder.yudao.module.hrm.service.employee.HrmEmployeeService; |
| | |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.util.Set; |
| | | |
| | | 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.hrm.enums.ErrorCodeConstants.*; |
| | | |
| | | /** |
| | |
| | | @Slf4j |
| | | public class HrmAttendanceExceptionServiceImpl implements HrmAttendanceExceptionService { |
| | | |
| | | /** |
| | | * èå¤å¼å¸¸ç³è¯·å®¡æ¹çä¸å¡ç±»åç¼ç |
| | | * |
| | | * ä¸ system_approval_config.biz_type 对åºï¼å®¡æ¹äººå¨ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãä¸ç»´æ¤ã |
| | | */ |
| | | private static final String ATTENDANCE_APPROVE_BIZ_TYPE = "hrm_attendance_approve"; |
| | | |
| | | @Resource |
| | | private HrmAttendanceExceptionMapper attendanceExceptionMapper; |
| | | @Resource |
| | | private HrmNoRedisDAO noRedisDAO; |
| | | @Resource |
| | | private BpmProcessInstanceApi bpmProcessInstanceApi; |
| | | @Resource |
| | | private StorageAttachmentApi storageAttachmentApi; |
| | | @Resource |
| | | private BpmProcessDefinitionService bpmProcessDefinitionService; |
| | | private ApprovalConfigApi approvalConfigApi; |
| | | @Resource |
| | | private AdminUserApi adminUserApi; |
| | | @Resource |
| | | private HrmEmployeeService employeeService; |
| | | @Resource |
| | | private HrmAttendanceRecordService attendanceRecordService; |
| | | |
| | | @Override |
| | | public Long createAttendanceException(HrmAttendanceExceptionSaveReqVO createReqVO) { |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void submitAttendanceException(Long id, String processDefinitionKey, Long userId) { |
| | | // 1. æ ¡éªå¼å¸¸ç³è¯·åå¨ä¸ä¸ºèç¨¿ç¶æ |
| | | public void submitAttendanceException(Long id) { |
| | | // 1. æ ¡éªåå¨ + å¯æäº¤ç¶æï¼è稿 / å®¡æ ¸ä¸éè¿ï¼ |
| | | HrmAttendanceExceptionDO exception = validateAttendanceExceptionExists(id); |
| | | if (!HrmAuditStatusEnum.DRAFT.getStatus().equals(exception.getStatus())) { |
| | | throw exception(ATTENDANCE_EXCEPTION_SUBMIT_FAIL_NOT_DRAFT); |
| | | if (!HrmAuditStatusEnum.DRAFT.getStatus().equals(exception.getStatus()) |
| | | && !HrmAuditStatusEnum.REJECT.getStatus().equals(exception.getStatus())) { |
| | | throw exception(ATTENDANCE_EXCEPTION_SUBMIT_FAIL_NOT_EDITABLE); |
| | | } |
| | | |
| | | // 2. æ ¡éªæµç¨å®ä¹åå¨ä¸ä¸ºæ¿æ´»ç¶æ |
| | | if (processDefinitionKey != null) { |
| | | bpmProcessDefinitionService.getActiveProcessDefinition(processDefinitionKey); |
| | | // 2. æ ¡éªå®¡æ¹é
置已å¯ç¨ä¸é
ç½®äºææå®¡æ¹äººï¼æªé
ç½®æ¶æåºå¸¦æç¡®æç¤ºçä¸å¡å¼å¸¸ï¼ |
| | | approvalConfigApi.validateApprovalEnabledAndGetApprovers(ATTENDANCE_APPROVE_BIZ_TYPE); |
| | | |
| | | // 3. ç¶æç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æï¼é¿å
æ®çãå®¡æ ¸ä¸éè¿ãçåå |
| | | attendanceExceptionMapper.submitAndResetAuditInfo(id, HrmAuditStatusEnum.PROCESS.getStatus()); |
| | | } |
| | | |
| | | // 3. åå»ºå®¡æ¹æµç¨å®ä¾ |
| | | String processInstanceId = bpmProcessInstanceApi.createProcessInstance(userId, |
| | | new BpmProcessInstanceCreateReqDTO() |
| | | .setProcessDefinitionKey(processDefinitionKey) |
| | | .setBusinessKey(String.valueOf(id))); |
| | | |
| | | // 4. æ´æ°å¼å¸¸ç³è¯·ç¶æ |
| | | attendanceExceptionMapper.updateById(HrmAttendanceExceptionDO.builder() |
| | | .id(id) |
| | | .processInstanceId(processInstanceId) |
| | | .status(HrmAuditStatusEnum.PROCESS.getStatus()) |
| | | .build()); |
| | | @Override |
| | | public Set<Long> getAttendanceExceptionApproverUserIds() { |
| | | return approvalConfigApi.getApproverUserIds(ATTENDANCE_APPROVE_BIZ_TYPE); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void updateAttendanceExceptionAuditStatus(Long id, Integer auditStatus) { |
| | | // 1. æ ¡éªå¼å¸¸ç³è¯·åå¨ |
| | | public void auditAttendanceException(Long id, Boolean pass, String reviewRemark) { |
| | | // 1. æ ¡éªåå¨ |
| | | HrmAttendanceExceptionDO exception = validateAttendanceExceptionExists(id); |
| | | // 2. æ ¡éªå½åç¶æä¸ºå®¡æ¹ä¸ |
| | | // 2. æ ¡éªå¤äºå®¡æ¹ä¸ç¶æ |
| | | if (!HrmAuditStatusEnum.PROCESS.getStatus().equals(exception.getStatus())) { |
| | | throw exception(ATTENDANCE_EXCEPTION_UPDATE_AUDIT_STATUS_FAIL); |
| | | throw exception(ATTENDANCE_EXCEPTION_AUDIT_FAIL_NOT_PROCESS); |
| | | } |
| | | // 3. æ´æ°ç¶æ |
| | | attendanceExceptionMapper.updateById(HrmAttendanceExceptionDO.builder() |
| | | .id(id) |
| | | .status(auditStatus) |
| | | .approveTime(LocalDateTime.now()) |
| | | .build()); |
| | | // 3. æ ¡éªå½åç»å½ç¨æ·æ¯è¯¥ä¸å¡ç±»åç审æ¹äººï¼æç¾ï¼ä»»ä¸äººåå¯å®¡æ ¸ï¼ |
| | | Long userId = getLoginUserId(); |
| | | approvalConfigApi.validateApprover(ATTENDANCE_APPROVE_BIZ_TYPE, userId); |
| | | // 4. å®¡æ ¸ä¸éè¿ï¼å¿
须填ååå ï¼ç¶æç½®ä¸ºå®¡æ ¸ä¸éè¿ï¼éåæäº¤äººä¿®æ¹åå¯éæ°æäº¤ |
| | | if (!Boolean.TRUE.equals(pass)) { |
| | | if (StrUtil.isBlank(reviewRemark)) { |
| | | throw exception(ATTENDANCE_EXCEPTION_AUDIT_REJECT_REASON_REQUIRED); |
| | | } |
| | | attendanceExceptionMapper.auditAttendanceException(id, HrmAuditStatusEnum.REJECT.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | return; |
| | | } |
| | | // 5. å®¡æ ¸éè¿ï¼è®°å½å®¡æ ¸äººä¸å®¡æ ¸æè§ï¼ç¶æç½®ä¸ºå®¡æ ¸éè¿ |
| | | attendanceExceptionMapper.auditAttendanceException(id, HrmAuditStatusEnum.APPROVE.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | |
| | | // 6. å®¡æ ¸éè¿åç½®ä¸å¡é»è¾ï¼è¡¥å¡åå¡«ä¸ä¸çæ¶é´ / å çååå çæ¶é¿ |
| | | if (HrmAttendanceExceptionTypeEnum.SUPPLEMENT.getType().equals(exception.getType())) { |
| | | log.info("[auditAttendanceException] è¡¥å¡ç³è¯·({}) 审æ¹éè¿ï¼å¼å§æ´æ°èå¤è®°å½", id); |
| | | attendanceRecordService.supplementClockIn(exception); |
| | | } else if (HrmAttendanceExceptionTypeEnum.OVERTIME.getType().equals(exception.getType())) { |
| | | log.info("[auditAttendanceException] å çç³è¯·({}) 审æ¹éè¿ï¼å¼å§ååå çæ¶é¿", id); |
| | | attendanceRecordService.recordOvertime(exception); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·åç¨æ·æµç§° |
| | | * |
| | | * @param userId ç¨æ·ç¼å· |
| | | * @return æµç§°ï¼ç¨æ·ä¸å卿¶è¿å null |
| | | */ |
| | | private String getUserNickname(Long userId) { |
| | | if (userId == null) { |
| | | return null; |
| | | } |
| | | AdminUserRespDTO user = adminUserApi.getUser(userId); |
| | | return user == null ? null : user.getNickname(); |
| | | } |
| | | |
| | | } |
| | |
| | | |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | /** |
| | | * HRM 绩æèæ ¸æ¹æ¡ Service æ¥å£ |
| | |
| | | void saveAppraiseItems(HrmPerformanceAppraiseItemSaveReqVO saveReqVO); |
| | | |
| | | /** |
| | | * æäº¤ç»©æèæ ¸æ¹æ¡å®¡æ¹ |
| | | * æäº¤ç»©æèæ ¸æ¹æ¡å®¡æ¹ï¼è稿 / å®¡æ ¸ä¸éè¿ â 审æ¹ä¸ï¼ |
| | | * |
| | | * 审æ¹äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸æå®ï¼æäº¤æ¶æ ééæ©ã |
| | | * |
| | | * @param id æ¹æ¡ç¼å· |
| | | */ |
| | | void submitAppraise(Long id, String processDefinitionKey, Long userId); |
| | | void submitAppraise(Long id); |
| | | |
| | | /** |
| | | * 审æ¹ç»©æèæ ¸æ¹æ¡ï¼éè¿/驳åï¼manualï¼ |
| | | * è·å¾ç»©æèæ ¸æ¹æ¡ç审æ¹äººç¼å·éåï¼ä¾åç«¯å¤ææ¯å¦å±ç¤ºå®¡æ ¸æé® |
| | | * |
| | | * @return 审æ¹äººç¨æ·ç¼å·éå |
| | | */ |
| | | void auditAppraise(HrmPerformanceAppraiseAuditReqVO auditReqVO); |
| | | Set<Long> getAppraiseApproverUserIds(); |
| | | |
| | | /** |
| | | * æ´æ°ç»©æèæ ¸æ¹æ¡å®¡æ¹ç¶æï¼BPM çå¬åè°ï¼ |
| | | * å®¡æ ¸ç»©æèæ ¸æ¹æ¡ï¼å®¡æ¹ä¸ â å®¡æ ¸éè¿ / å®¡æ ¸ä¸éè¿ï¼ |
| | | * |
| | | * å®¡æ ¸éè¿æ¶æ¹æ¡ç¶ææµè½¬ä¸ºãå·²åå¸ãã |
| | | * |
| | | * @param id æ¹æ¡ç¼å· |
| | | * @param pass æ¯å¦éè¿ |
| | | * @param reviewRemark å®¡æ ¸æè§ï¼ä¸éè¿æ¶å¿
å¡«ï¼ |
| | | */ |
| | | void updateAppraiseAuditStatus(Long id, Integer bpmResult); |
| | | |
| | | /** |
| | | * è·å¾ç»©æèæ ¸æ¹æ¡å®¡æ¹æµç¨å®ä¹å表 |
| | | */ |
| | | List<Map<String, Object>> getAppraiseApproveProcessDefinitionList(); |
| | | void auditAppraise(Long id, Boolean pass, String reviewRemark); |
| | | |
| | | /** |
| | | * ä¿ååå·¥èæ ¸ç»æï¼æå工鿿 æåï¼èªå¨è®¡ç®ç»¼åå¾å䏿¡£çº§ï¼ |
| | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | 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.dal.dataobject.definition.BpmProcessDefinitionInfoDO; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmCategoryService; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.performanceappraise.vo.*; |
| | | import cn.iocoder.yudao.module.hrm.dal.dataobject.employee.HrmEmployeeDO; |
| | | import cn.iocoder.yudao.module.hrm.dal.dataobject.performanceappraise.*; |
| | |
| | | import cn.iocoder.yudao.module.hrm.dal.mysql.performanceappraise.*; |
| | | import cn.iocoder.yudao.module.hrm.enums.HrmAuditStatusEnum; |
| | | import cn.iocoder.yudao.module.hrm.enums.ErrorCodeConstants; |
| | | import cn.iocoder.yudao.module.system.api.approval.ApprovalConfigApi; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | | import jakarta.annotation.Resource; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.flowable.engine.repository.ProcessDefinition; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.time.LocalDateTime; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; |
| | | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| | | import static cn.iocoder.yudao.module.hrm.util.HrmAuditStatusUtils.convertBpmResultToAuditStatus; |
| | | |
| | | /** |
| | | * HRM 绩æèæ ¸æ¹æ¡ Service å®ç°ç±» |
| | |
| | | private static final Integer EMPLOYEE_STATUS_ACTIVE = 1; |
| | | |
| | | /** |
| | | * BPM 绩æèæ ¸å®¡æ¹åç±»ç¼ç |
| | | * 绩æèæ ¸æ¹æ¡å®¡æ¹çä¸å¡ç±»åç¼ç |
| | | * |
| | | * ä¸ system_approval_config.biz_type 对åºï¼å®¡æ¹äººå¨ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãä¸ç»´æ¤ã |
| | | */ |
| | | private static final String APPRAISE_APPROVE_CATEGORY_CODE = "performance_appraise_approve"; |
| | | private static final String APPRAISE_APPROVE_BIZ_TYPE = "performance_appraise_approve"; |
| | | |
| | | @Resource |
| | | private HrmPerformanceAppraiseMapper appraiseMapper; |
| | |
| | | @Resource |
| | | private HrmEmployeeMapper employeeMapper; |
| | | @Resource |
| | | private BpmProcessInstanceApi bpmProcessInstanceApi; |
| | | private ApprovalConfigApi approvalConfigApi; |
| | | @Resource |
| | | private BpmCategoryService bpmCategoryService; |
| | | @Resource |
| | | private BpmProcessDefinitionService bpmProcessDefinitionService; |
| | | private AdminUserApi adminUserApi; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | HrmPerformanceAppraiseDO oldAppraise = validateAppraiseCanModify(updateReqVO.getId()); |
| | | HrmPerformanceAppraiseDO updateObj = BeanUtils.toBean(updateReqVO, HrmPerformanceAppraiseDO.class, req -> req |
| | | .setStatus(oldAppraise.getStatus()) |
| | | .setAuditStatus(oldAppraise.getAuditStatus()) |
| | | .setProcessInstanceId(oldAppraise.getProcessInstanceId())); |
| | | .setAuditStatus(oldAppraise.getAuditStatus())); |
| | | updateObj.setScopeTeamIds(CollUtil.isEmpty(updateReqVO.getScopeTeamIds()) |
| | | ? null : JSONUtil.toJsonStr(updateReqVO.getScopeTeamIds())); |
| | | appraiseMapper.updateById(updateObj); |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void submitAppraise(Long id, String processDefinitionKey, Long userId) { |
| | | // 1. æ ¡éªæ¹æ¡æ¯å¦å¨èç¨¿ç¶æ |
| | | public void submitAppraise(Long id) { |
| | | // 1. æ ¡éªæ¹æ¡åå¨ + å¯æäº¤ç¶æï¼è稿 / å®¡æ ¸ä¸éè¿ï¼ |
| | | HrmPerformanceAppraiseDO appraise = appraiseMapper.selectById(id); |
| | | if (appraise == null) { |
| | | throw exception(ErrorCodeConstants.PERFORMANCE_APPRAISE_NOT_EXISTS); |
| | | } |
| | | if (ObjUtil.notEqual(appraise.getAuditStatus(), HrmAuditStatusEnum.DRAFT.getStatus())) { |
| | | throw exception(ErrorCodeConstants.PERFORMANCE_APPRAISE_SUBMIT_FAIL_NOT_DRAFT); |
| | | if (ObjUtil.notEqual(appraise.getAuditStatus(), HrmAuditStatusEnum.DRAFT.getStatus()) |
| | | && ObjUtil.notEqual(appraise.getAuditStatus(), HrmAuditStatusEnum.REJECT.getStatus())) { |
| | | throw exception(ErrorCodeConstants.PERFORMANCE_APPRAISE_SUBMIT_FAIL_NOT_EDITABLE); |
| | | } |
| | | if (CollUtil.isEmpty(itemMapper.selectListByAppraiseId(id))) { |
| | | throw exception(ErrorCodeConstants.PERFORMANCE_APPRAISE_ITEM_EMPTY); |
| | | } |
| | | |
| | | // 2. æ ¡éªå®¡æ¹åç±»åæµç¨å®ä¹æ¯å¦åå¨ï¼ä¸ä¼ å
¥çæµç¨å®ä¹å¤äºæ¿æ´»ç¶æ |
| | | validateAppraiseApproveCategoryAndProcessDefinition(); |
| | | ProcessDefinition processDefinition = bpmProcessDefinitionService.getActiveProcessDefinition(processDefinitionKey); |
| | | if (processDefinition == null) { |
| | | throw exception(ErrorCodeConstants.PERFORMANCE_APPRAISE_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | // 2. æ ¡éªå®¡æ¹é
置已å¯ç¨ä¸é
ç½®äºææå®¡æ¹äººï¼æªé
ç½®æ¶æåºå¸¦æç¡®æç¤ºçä¸å¡å¼å¸¸ï¼ |
| | | approvalConfigApi.validateApprovalEnabledAndGetApprovers(APPRAISE_APPROVE_BIZ_TYPE); |
| | | |
| | | // 3. 审æ¹ç¶æç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æï¼é¿å
æ®çãå®¡æ ¸ä¸éè¿ãçåå |
| | | appraiseMapper.submitAndResetAuditInfo(id, HrmAuditStatusEnum.PROCESS.getStatus()); |
| | | } |
| | | |
| | | // 3. åå»ºå®¡æ¹æµç¨å®ä¾ |
| | | String processInstanceId = bpmProcessInstanceApi.createProcessInstance(userId, |
| | | new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(processDefinitionKey) |
| | | .setBusinessKey(String.valueOf(id))); |
| | | |
| | | // 4. æ´æ°æ¹æ¡æµç¨ç¼å·ä¸å®¡æ¹ç¶æ |
| | | appraiseMapper.updateById(new HrmPerformanceAppraiseDO().setId(id).setProcessInstanceId(processInstanceId) |
| | | .setAuditStatus(HrmAuditStatusEnum.PROCESS.getStatus())); |
| | | @Override |
| | | public Set<Long> getAppraiseApproverUserIds() { |
| | | return approvalConfigApi.getApproverUserIds(APPRAISE_APPROVE_BIZ_TYPE); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void auditAppraise(HrmPerformanceAppraiseAuditReqVO auditReqVO) { |
| | | HrmPerformanceAppraiseDO appraise = validateAppraiseExists(auditReqVO.getId()); |
| | | public void auditAppraise(Long id, Boolean pass, String reviewRemark) { |
| | | // 1. æ ¡éªåå¨ |
| | | HrmPerformanceAppraiseDO appraise = validateAppraiseExists(id); |
| | | // 2. æ ¡éªå¤äºå®¡æ¹ä¸ç¶æ |
| | | if (ObjUtil.notEqual(appraise.getAuditStatus(), HrmAuditStatusEnum.PROCESS.getStatus())) { |
| | | throw exception(ErrorCodeConstants.PERFORMANCE_APPRAISE_UPDATE_AUDIT_STATUS_FAIL_NOT_PROCESS); |
| | | throw exception(ErrorCodeConstants.PERFORMANCE_APPRAISE_AUDIT_FAIL_NOT_PROCESS); |
| | | } |
| | | Integer auditStatus = auditReqVO.getAuditStatus(); |
| | | if (!Objects.equals(auditStatus, HrmAuditStatusEnum.APPROVE.getStatus()) |
| | | && !Objects.equals(auditStatus, HrmAuditStatusEnum.REJECT.getStatus())) { |
| | | throw exception(ErrorCodeConstants.PERFORMANCE_APPRAISE_UPDATE_AUDIT_STATUS_FAIL_NOT_PROCESS); |
| | | // 3. æ ¡éªå½åç»å½ç¨æ·æ¯è¯¥ä¸å¡ç±»åç审æ¹äººï¼æç¾ï¼ä»»ä¸äººåå¯å®¡æ ¸ï¼ |
| | | Long userId = getLoginUserId(); |
| | | approvalConfigApi.validateApprover(APPRAISE_APPROVE_BIZ_TYPE, userId); |
| | | // 4. å®¡æ ¸ä¸éè¿ï¼å¿
须填ååå ï¼å®¡æ¹ç¶æç½®ä¸ºå®¡æ ¸ä¸éè¿ï¼éåæäº¤äººä¿®æ¹åå¯éæ°æäº¤ |
| | | if (!Boolean.TRUE.equals(pass)) { |
| | | if (StrUtil.isBlank(reviewRemark)) { |
| | | throw exception(ErrorCodeConstants.PERFORMANCE_APPRAISE_AUDIT_REJECT_REASON_REQUIRED); |
| | | } |
| | | HrmPerformanceAppraiseDO update = new HrmPerformanceAppraiseDO() |
| | | .setId(appraise.getId()) |
| | | .setAuditStatus(auditStatus) |
| | | .setAuditUserId(getLoginUserId()) |
| | | .setAuditTime(LocalDateTime.now()); |
| | | if (auditReqVO.getRemark() != null) { |
| | | update.setAuditRemark(auditReqVO.getRemark()); |
| | | // æ¹æ¡ç¶æä¿æä¸å |
| | | appraiseMapper.auditAppraise(id, HrmAuditStatusEnum.REJECT.getStatus(), appraise.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | return; |
| | | } |
| | | // 审æ¹éè¿ -> æ¹æ¡åå¸ |
| | | if (Objects.equals(auditStatus, HrmAuditStatusEnum.APPROVE.getStatus())) { |
| | | update.setStatus(STATUS_PUBLISHED); |
| | | } |
| | | appraiseMapper.updateById(update); |
| | | // 5. å®¡æ ¸éè¿ï¼è®°å½å®¡æ ¸äººä¸å®¡æ ¸æè§ï¼å®¡æ¹ç¶æç½®ä¸ºå®¡æ ¸éè¿ |
| | | // 6. å®¡æ ¸éè¿åç½®ä¸å¡é»è¾ï¼æ¹æ¡ç¶ææµè½¬ä¸ºãå·²åå¸ã |
| | | appraiseMapper.auditAppraise(id, HrmAuditStatusEnum.APPROVE.getStatus(), STATUS_PUBLISHED, |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void updateAppraiseAuditStatus(Long id, Integer bpmResult) { |
| | | // 1.1 æ ¡éªæ¹æ¡æ¯å¦åå¨ |
| | | HrmPerformanceAppraiseDO appraise = appraiseMapper.selectById(id); |
| | | if (appraise == null) { |
| | | throw exception(ErrorCodeConstants.PERFORMANCE_APPRAISE_NOT_EXISTS); |
| | | /** |
| | | * è·åç¨æ·æµç§° |
| | | * |
| | | * @param userId ç¨æ·ç¼å· |
| | | * @return æµç§°ï¼ç¨æ·ä¸å卿¶è¿å null |
| | | */ |
| | | private String getUserNickname(Long userId) { |
| | | if (userId == null) { |
| | | return null; |
| | | } |
| | | // 1.2 åªæå®¡æ¹ä¸ï¼å¯ä»¥æ´æ°å®¡æ¹ç»æ |
| | | if (ObjUtil.notEqual(appraise.getAuditStatus(), HrmAuditStatusEnum.PROCESS.getStatus())) { |
| | | log.error("[updateAppraiseAuditStatus][appraise({}) ä¸å¤äºå®¡æ¹ä¸ï¼æ æ³æ´æ°å®¡æ¹ç»æ({})]", appraise.getId(), bpmResult); |
| | | throw exception(ErrorCodeConstants.PERFORMANCE_APPRAISE_UPDATE_AUDIT_STATUS_FAIL_NOT_PROCESS); |
| | | } |
| | | |
| | | // 2. æ´æ°æ¹æ¡å®¡æ¹ç»æ |
| | | Integer auditStatus = convertBpmResultToAuditStatus(bpmResult); |
| | | HrmPerformanceAppraiseDO update = new HrmPerformanceAppraiseDO().setId(id).setAuditStatus(auditStatus); |
| | | if (Objects.equals(auditStatus, HrmAuditStatusEnum.APPROVE.getStatus())) { |
| | | update.setStatus(STATUS_PUBLISHED); |
| | | } |
| | | appraiseMapper.updateById(update); |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getAppraiseApproveProcessDefinitionList() { |
| | | // 1. æ ¡éªå®¡æ¹åç±»åæµç¨å®ä¹æ¯å¦åå¨ |
| | | validateAppraiseApproveCategoryAndProcessDefinition(); |
| | | |
| | | // 2. è·ååç±»ä¸çæµç¨å®ä¹ä¿¡æ¯ |
| | | List<BpmProcessDefinitionInfoDO> definitionInfoList = bpmProcessDefinitionService |
| | | .getProcessDefinitionInfoListByCategory(APPRAISE_APPROVE_CATEGORY_CODE); |
| | | |
| | | // 3. è·åæµç¨å®ä¹è¯¦æ
|
| | | Set<String> processDefinitionIds = convertSet(definitionInfoList, BpmProcessDefinitionInfoDO::getProcessDefinitionId); |
| | | List<ProcessDefinition> processDefinitions = bpmProcessDefinitionService.getProcessDefinitionList(processDefinitionIds); |
| | | |
| | | // 4. è¿æ»¤ï¼åªä¿çæ¿æ´»ç¶æï¼ä¸ç¸å key åªä¿çææ°çæ¬ |
| | | Map<String, ProcessDefinition> latestVersionMap = new HashMap<>(); |
| | | for (ProcessDefinition pd : processDefinitions) { |
| | | if (pd.isSuspended()) { |
| | | continue; |
| | | } |
| | | ProcessDefinition existing = latestVersionMap.get(pd.getKey()); |
| | | if (existing == null || pd.getVersion() > existing.getVersion()) { |
| | | latestVersionMap.put(pd.getKey(), pd); |
| | | } |
| | | } |
| | | |
| | | // 5. è¿åæµç¨å®ä¹å表 |
| | | List<Map<String, Object>> result = new ArrayList<>(); |
| | | for (ProcessDefinition pd : latestVersionMap.values()) { |
| | | Map<String, Object> item = new HashMap<>(); |
| | | item.put("id", pd.getId()); |
| | | item.put("key", pd.getKey()); |
| | | item.put("name", pd.getName()); |
| | | item.put("version", pd.getVersion()); |
| | | result.add(item); |
| | | } |
| | | return result; |
| | | AdminUserRespDTO user = adminUserApi.getUser(userId); |
| | | return user == null ? null : user.getNickname(); |
| | | } |
| | | |
| | | @Override |
| | |
| | | throw exception(ErrorCodeConstants.PERFORMANCE_APPRAISE_UPDATE_FAIL_NOT_DRAFT); |
| | | } |
| | | return appraise; |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éª BPM 绩æèæ ¸å®¡æ¹åç±»åæµç¨å®ä¹æ¯å¦åå¨ |
| | | */ |
| | | private void validateAppraiseApproveCategoryAndProcessDefinition() { |
| | | // 1. æ ¡éªåç±»æ¯å¦åå¨ |
| | | Map<String, ?> categoryMap = bpmCategoryService.getCategoryMap(Collections.singletonList(APPRAISE_APPROVE_CATEGORY_CODE)); |
| | | if (!categoryMap.containsKey(APPRAISE_APPROVE_CATEGORY_CODE)) { |
| | | throw exception(ErrorCodeConstants.PERFORMANCE_APPRAISE_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | |
| | | // 2. æ ¡éªåç±»ä¸æ¯å¦æå¯ç¨çæµç¨å®ä¹ |
| | | List<BpmProcessDefinitionInfoDO> definitionInfoList = bpmProcessDefinitionService |
| | | .getProcessDefinitionInfoListByCategory(APPRAISE_APPROVE_CATEGORY_CODE); |
| | | if (CollUtil.isEmpty(definitionInfoList)) { |
| | | throw exception(ErrorCodeConstants.PERFORMANCE_APPRAISE_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | |
| | | // 3. æ ¡éªæ¯å¦ææ¿æ´»ç¶æçæµç¨å®ä¹ |
| | | Set<String> processDefinitionIds = convertSet(definitionInfoList, BpmProcessDefinitionInfoDO::getProcessDefinitionId); |
| | | List<ProcessDefinition> processDefinitions = bpmProcessDefinitionService.getProcessDefinitionList(processDefinitionIds); |
| | | boolean hasActiveDefinition = processDefinitions.stream().anyMatch(pd -> !pd.isSuspended()); |
| | | if (!hasActiveDefinition) { |
| | | throw exception(ErrorCodeConstants.PERFORMANCE_APPRAISE_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | } |
| | | |
| | | } |
| | |
| | | import cn.iocoder.yudao.framework.common.util.collection.MapUtils; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pd.project.vo.MesPdProjectAuditReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pd.project.vo.MesPdProjectPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pd.project.vo.MesPdProjectRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pd.project.vo.MesPdProjectSaveReqVO; |
| | |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | import java.util.stream.Stream; |
| | | |
| | | import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; |
| | |
| | | } |
| | | |
| | | @PutMapping("/submit-approval") |
| | | @Operation(summary = "æäº¤è®¾è®¡é¡¹ç®å®¡æ¹ï¼å¾
å®¡æ ¸â审æ¹ä¸ï¼") |
| | | @Operation(summary = "æäº¤è®¾è®¡é¡¹ç®å®¡æ¹ï¼å¾
å®¡æ ¸â审æ¹ä¸ï¼ï¼å®¡æ ¸äººç±å®¡æ¹é
ç½®ç»ä¸æå®") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @Parameter(name = "processDefinitionKey", description = "æµç¨å®ä¹ Key", required = true) |
| | | @PreAuthorize("@ss.hasPermission('mes:pd-project:update')") |
| | | public CommonResult<Boolean> submitProjectApproval(@RequestParam("id") Long id, |
| | | @RequestParam("processDefinitionKey") String processDefinitionKey) { |
| | | projectService.submitProjectApproval(id, processDefinitionKey); |
| | | public CommonResult<Boolean> submitProjectApproval(@RequestParam("id") Long id) { |
| | | projectService.submitProjectApproval(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approve-process-list") |
| | | @Operation(summary = "è·å¾è®¾è®¡é¡¹ç®å®¡æ¹æµç¨å表") |
| | | @PreAuthorize("@ss.hasPermission('mes:pd-project:update')") |
| | | public CommonResult<List<Map<String, Object>>> getProjectApproveProcessDefinitionList() { |
| | | return success(projectService.getProjectApproveProcessDefinitionList()); |
| | | @PutMapping("/audit") |
| | | @Operation(summary = "å®¡æ ¸è®¾è®¡é¡¹ç®ï¼å®¡æ¹ä¸âå¾
彿¡£/å¾
å®¡æ ¸ï¼ï¼ä»
审æ¹äººæ¬äººå¯æä½") |
| | | @PreAuthorize("@ss.hasPermission('mes:pd-project:audit')") |
| | | public CommonResult<Boolean> auditProject(@Valid @RequestBody MesPdProjectAuditReqVO auditReqVO) { |
| | | projectService.auditProject(auditReqVO.getId(), auditReqVO.getPass(), auditReqVO.getReviewRemark()); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approver-ids") |
| | | @Operation(summary = "è·å¾è®¾è®¡é¡¹ç®çå®¡æ ¸äººç¼å·éåï¼ä¾åç«¯å¤ææ¯å¦å±ç¤ºå®¡æ ¸æé®") |
| | | @PreAuthorize("@ss.hasPermission('mes:pd-project:query')") |
| | | public CommonResult<Set<Long>> getApproverUserIds() { |
| | | return success(projectService.getProjectApproverUserIds()); |
| | | } |
| | | |
| | | @PutMapping("/archive") |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.pd.project.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * 设计项ç®å®¡æ ¸ Request VO |
| | | * |
| | | * å®¡æ ¸éè¿ / ä¸éè¿å
±ç¨æ¬ VOï¼ç± pass åºåï¼ |
| | | * éè¿æ¶å®¡æ ¸æè§éå¡«ï¼ä¸éè¿æ¶å®¡æ ¸æè§ï¼ä¸éè¿åå ï¼å¿
å¡«ï¼ç± Service æ ¡éªã |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Schema(description = "管çåå° - MES 设计项ç®å®¡æ ¸ Request VO") |
| | | @Data |
| | | public class MesPdProjectAuditReqVO { |
| | | |
| | | @Schema(description = "ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| | | @NotNull(message = "设计项ç®ç¼å·ä¸è½ä¸ºç©º") |
| | | private Long id; |
| | | |
| | | @Schema(description = "æ¯å¦éè¿ï¼true=å®¡æ ¸éè¿ / false=å®¡æ ¸ä¸éè¿", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") |
| | | @NotNull(message = "è¯·éæ©å®¡æ ¸ç»æ") |
| | | private Boolean pass; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶éå¡« / å®¡æ ¸ä¸éè¿æ¶å¿
å¡«ï¼å³ä¸éè¿åå ï¼", example = "èµæéè¡¥å
宿´") |
| | | private String reviewRemark; |
| | | |
| | | } |
| | |
| | | @ExcelProperty("夿³¨") |
| | | private String remark; |
| | | |
| | | @Schema(description = "BPM æµç¨å®ä¾ç¼å·") |
| | | private String processInstanceId; |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·", example = "2") |
| | | private Long reviewerId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººå§å", example = "æå·¥") |
| | | @ExcelProperty("å®¡æ ¸äºº") |
| | | private String reviewerName; |
| | | |
| | | @Schema(description = "å®¡æ ¸æ¶é´") |
| | | @ExcelProperty("å®¡æ ¸æ¶é´") |
| | | private LocalDateTime reviewTime; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼", example = "èµæéè¡¥å
宿´") |
| | | @ExcelProperty("å®¡æ ¸æè§") |
| | | private String reviewRemark; |
| | | |
| | | @Schema(description = "å建æ¶é´", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @ExcelProperty("å建æ¶é´") |
| | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pd.techconfirm.vo.ProductTechConfirmAuditReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pd.techconfirm.vo.ProductTechConfirmPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pd.techconfirm.vo.ProductTechConfirmRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pd.techconfirm.vo.ProductTechConfirmSaveReqVO; |
| | |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.io.IOException; |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | |
| | | } |
| | | |
| | | @DeleteMapping("/delete") |
| | | @Operation(summary = "å é¤äº§åææ¯ç¡®è®¤å½") |
| | | @Operation(summary = "å é¤äº§åææ¯ç¡®è®¤å½ï¼ä»
è稿 / å®¡æ ¸ä¸éè¿ç¶æå¯å é¤ï¼") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @PreAuthorize("@ss.hasPermission('mes:pd-tech-confirm:delete')") |
| | | public CommonResult<Boolean> deleteTechConfirm(@RequestParam("id") Long id) { |
| | |
| | | return success(true); |
| | | } |
| | | |
| | | @PutMapping("/submit-approval") |
| | | @Operation(summary = "æäº¤ææ¯ç¡®è®¤å½å®¡æ ¸ï¼è稿/å®¡æ ¸ä¸éè¿âå¾
å®¡æ ¸ï¼ï¼å®¡æ ¸äººç±å®¡æ¹é
ç½®ç»ä¸æå®") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @PreAuthorize("@ss.hasPermission('mes:pd-tech-confirm:update')") |
| | | public CommonResult<Boolean> submitTechConfirmAudit(@RequestParam("id") Long id) { |
| | | techConfirmService.submitTechConfirmAudit(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @PutMapping("/audit") |
| | | @Operation(summary = "å®¡æ ¸ææ¯ç¡®è®¤å½ï¼å¾
å®¡æ ¸âå·²å®¡æ ¸/å®¡æ ¸ä¸éè¿ï¼ï¼ä»
审æ¹äººæ¬äººå¯æä½") |
| | | @PreAuthorize("@ss.hasPermission('mes:pd-tech-confirm:audit')") |
| | | public CommonResult<Boolean> auditTechConfirm(@Valid @RequestBody ProductTechConfirmAuditReqVO auditReqVO) { |
| | | techConfirmService.auditTechConfirm(auditReqVO.getId(), auditReqVO.getPass(), auditReqVO.getReviewRemark()); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approver-ids") |
| | | @Operation(summary = "è·å¾ææ¯ç¡®è®¤å½çå®¡æ ¸äººç¼å·éåï¼ä¾åç«¯å¤ææ¯å¦å±ç¤ºå®¡æ ¸æé®") |
| | | @PreAuthorize("@ss.hasPermission('mes:pd-tech-confirm:query')") |
| | | public CommonResult<Set<Long>> getApproverUserIds() { |
| | | return success(techConfirmService.getTechConfirmApproverUserIds()); |
| | | } |
| | | |
| | | @PutMapping("/customer-confirm") |
| | | @Operation(summary = "客æ·ç¡®è®¤ï¼å·²å®¡æ ¸â客æ·å·²ç¡®è®¤ï¼") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @Parameter(name = "customerConfirmUser", description = "客æ·ç¡®è®¤äººå§å", required = true) |
| | | @PreAuthorize("@ss.hasPermission('mes:pd-tech-confirm:update')") |
| | | public CommonResult<Boolean> confirmTechConfirmByCustomer(@RequestParam("id") Long id, |
| | | @RequestParam("customerConfirmUser") String customerConfirmUser) { |
| | | techConfirmService.confirmTechConfirmByCustomer(id, customerConfirmUser); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/get") |
| | | @Operation(summary = "è·å¾äº§åææ¯ç¡®è®¤å½") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true, example = "1024") |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.pd.techconfirm.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * äº§åææ¯ç¡®è®¤å½å®¡æ ¸ Request VO |
| | | * |
| | | * å®¡æ ¸éè¿ / ä¸éè¿å
±ç¨æ¬ VOï¼ç± pass åºåï¼ |
| | | * éè¿æ¶å®¡æ ¸æè§éå¡«ï¼ä¸éè¿æ¶å®¡æ ¸æè§ï¼ä¸éè¿åå ï¼å¿
å¡«ï¼ç± Service æ ¡éªã |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Schema(description = "管çåå° - äº§åææ¯ç¡®è®¤å½å®¡æ ¸ Request VO") |
| | | @Data |
| | | public class ProductTechConfirmAuditReqVO { |
| | | |
| | | @Schema(description = "ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| | | @NotNull(message = "ææ¯ç¡®è®¤å½ç¼å·ä¸è½ä¸ºç©º") |
| | | private Long id; |
| | | |
| | | @Schema(description = "æ¯å¦éè¿ï¼true=å®¡æ ¸éè¿ / false=å®¡æ ¸ä¸éè¿", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") |
| | | @NotNull(message = "è¯·éæ©å®¡æ ¸ç»æ") |
| | | private Boolean pass; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶éå¡« / å®¡æ ¸ä¸éè¿æ¶å¿
å¡«ï¼å³ä¸éè¿åå ï¼", example = "åæ°éä¸å®¢æ·åæ¬¡æ ¸å¯¹") |
| | | private String reviewRemark; |
| | | |
| | | } |
| | |
| | | @ExcelProperty("ç¼å¶æ¶é´") |
| | | private LocalDateTime draftTime; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººID", example = "2") |
| | | @Schema(description = "å®¡æ ¸äººIDï¼æäº¤å®¡æ ¸æ¶ç±ç¼å¶äººæå®ï¼", example = "2") |
| | | private Long reviewerId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººå§å", example = "æå·¥") |
| | |
| | | @ExcelProperty("å®¡æ ¸æ¶é´") |
| | | private LocalDateTime reviewTime; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ¹éè¿æ¶çæè§ / 驳忶çåå ï¼", example = "åæ°éä¸å®¢æ·åæ¬¡æ ¸å¯¹") |
| | | @ExcelProperty("å®¡æ ¸æè§") |
| | | private String reviewRemark; |
| | | |
| | | @Schema(description = "客æ·ç¡®è®¤äºº", example = "çç»ç") |
| | | @ExcelProperty("客æ·ç¡®è®¤äºº") |
| | | private String customerConfirmUser; |
| | |
| | | @ExcelProperty("客æ·ç¡®è®¤æ¶é´") |
| | | private LocalDateTime customerConfirmTime; |
| | | |
| | | @Schema(description = "ç¶æï¼0=è稿ï¼1=å¾
å®¡æ ¸ï¼2=å·²å®¡æ ¸ï¼3=客æ·å·²ç¡®è®¤ï¼", example = "0") |
| | | @Schema(description = "ç¶æï¼0=è稿ï¼1=å¾
å®¡æ ¸ï¼2=å·²å®¡æ ¸ï¼3=客æ·å·²ç¡®è®¤ï¼4=å®¡æ ¸ä¸éè¿ï¼", example = "0") |
| | | @ExcelProperty(value = "ç¶æ", converter = DictConvert.class) |
| | | @DictFormat(DictTypeConstants.PRODUCT_TECH_CONFIRM_STATUS) |
| | | private Integer status; |
| | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * äº§åææ¯ç¡®è®¤å½æ°å¢/ä¿®æ¹ Request VO |
| | | * |
| | | * 注æï¼æ¬ VO åªæ¿è½½ç¨æ·å¯å¡«åçä¸å¡å段ã |
| | | * ç¶æãç¼å¶äºº/ç¼å¶æ¶é´ãå®¡æ ¸äºº/å®¡æ ¸æ¶é´ã客æ·ç¡®è®¤äºº/客æ·ç¡®è®¤æ¶é´åç±ä¸å¡æµç¨é©±å¨ï¼ |
| | | * 䏿¥ååç«¯ä¼ åï¼å æ¤ä¸å¨æ¬ VO ä¸å®ä¹ï¼ |
| | | * <ul> |
| | | * <li>ç¶æï¼å建æ¶åºå®ä¸ºè稿ï¼ç±æäº¤å®¡æ¹ãBPM 审æ¹åè°ã客æ·ç¡®è®¤éæ¥æ¨è¿</li> |
| | | * <li>ç¼å¶äºº/ç¼å¶æ¶é´ï¼å建æ¶åå½åç»å½ç¨æ·ä¸å½åæ¶é´</li> |
| | | * <li>å®¡æ ¸äºº/å®¡æ ¸æ¶é´ï¼BPM 审æ¹ç»ææ¶å审æ¹äººåå
¥</li> |
| | | * <li>客æ·ç¡®è®¤äºº/客æ·ç¡®è®¤æ¶é´ï¼å®¢æ·ç¡®è®¤æ¶åå½åç»å½ç¨æ·ä¸å½åæ¶é´</li> |
| | | * </ul> |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Schema(description = "管çåå° - äº§åææ¯ç¡®è®¤å½æ°å¢/ä¿®æ¹ Request VO") |
| | | @Data |
| | | public class ProductTechConfirmSaveReqVO { |
| | | |
| | | @Schema(description = "ç¼å·", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "1024") |
| | | @Schema(description = "ç¼å·ï¼æ°å¢æ¶ä¸ºç©ºï¼ä¿®æ¹æ¶å¿
å¡«ï¼", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "1024") |
| | | private Long id; |
| | | |
| | | @Schema(description = "确认å½ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "TC20260801001") |
| | |
| | | |
| | | @Schema(description = "模æ¿ç±»åï¼å¥¥å°å©/æ¥æ¬/éç¨ï¼", example = "general") |
| | | private String templateType; |
| | | |
| | | @Schema(description = "ç¼å¶äººID", example = "1") |
| | | private Long drafterId; |
| | | |
| | | @Schema(description = "ç¼å¶äººå§å", example = "è¡ä¸") |
| | | private String drafterName; |
| | | |
| | | @Schema(description = "ç¼å¶æ¶é´") |
| | | private LocalDateTime draftTime; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººID", example = "2") |
| | | private Long reviewerId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººå§å", example = "æå·¥") |
| | | private String reviewerName; |
| | | |
| | | @Schema(description = "å®¡æ ¸æ¶é´") |
| | | private LocalDateTime reviewTime; |
| | | |
| | | @Schema(description = "客æ·ç¡®è®¤äºº", example = "çç»ç") |
| | | private String customerConfirmUser; |
| | | |
| | | @Schema(description = "客æ·ç¡®è®¤æ¶é´") |
| | | private LocalDateTime customerConfirmTime; |
| | | |
| | | @Schema(description = "ç¶æï¼0=è稿ï¼1=å¾
å®¡æ ¸ï¼2=å·²å®¡æ ¸ï¼3=客æ·å·²ç¡®è®¤ï¼", example = "0") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "夿³¨", example = "æµè¯å¤æ³¨") |
| | | private String remark; |
| | |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | |
| | |
| | | } |
| | | |
| | | @PutMapping("/submit-approval") |
| | | @Operation(summary = "æäº¤è®¾å¤å
¥åºå审æ¹") |
| | | @Operation(summary = "æäº¤è®¾å¤å
¥åºå审æ¹ï¼è稿â审æ¹ä¸ï¼ï¼å®¡æ ¸äººç±å®¡æ¹é
ç½®ç»ä¸æå®") |
| | | @PreAuthorize("@ss.hasPermission('mes:wm:equipment-receipt:submit')") |
| | | public CommonResult<Boolean> submitApproval(@RequestParam("id") Long id, |
| | | @RequestParam("processDefinitionKey") String processDefinitionKey) { |
| | | equipmentReceiptService.submitEquipmentReceiptApproval(id, processDefinitionKey); |
| | | public CommonResult<Boolean> submitApproval(@RequestParam("id") Long id) { |
| | | equipmentReceiptService.submitEquipmentReceiptApproval(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approval-process-list") |
| | | @Operation(summary = "è·å¾è®¾å¤å
¥åºå®¡æ¹æµç¨å®ä¹å表") |
| | | @PutMapping("/audit") |
| | | @Operation(summary = "å®¡æ ¸è®¾å¤å
¥åºåï¼å®¡æ¹ä¸â已审æ¹/è稿ï¼ï¼ä»
审æ¹äººæ¬äººå¯æä½") |
| | | @PreAuthorize("@ss.hasPermission('mes:wm:equipment-receipt:audit')") |
| | | public CommonResult<Boolean> audit(@Valid @RequestBody MesWmEquipmentReceiptAuditReqVO auditReqVO) { |
| | | equipmentReceiptService.auditEquipmentReceipt(auditReqVO.getId(), auditReqVO.getPass(), auditReqVO.getReviewRemark()); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approver-ids") |
| | | @Operation(summary = "è·å¾è®¾å¤å
¥åºåçå®¡æ ¸äººç¼å·éåï¼ä¾åç«¯å¤ææ¯å¦å±ç¤ºå®¡æ ¸æé®") |
| | | @PreAuthorize("@ss.hasPermission('mes:wm:equipment-receipt:query')") |
| | | public CommonResult<List<Map<String, Object>>> approvalProcessList() { |
| | | return success(equipmentReceiptService.getEquipmentReceiptApprovalProcessDefinitionList()); |
| | | public CommonResult<Set<Long>> approverIds() { |
| | | return success(equipmentReceiptService.getEquipmentReceiptApproverUserIds()); |
| | | } |
| | | |
| | | @PutMapping("/finish") |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.wm.equipmentreceipt.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * 设å¤å
¥åºåå®¡æ ¸ Request VO |
| | | * |
| | | * å®¡æ ¸éè¿ / ä¸éè¿å
±ç¨æ¬ VOï¼ç± pass åºåï¼ |
| | | * éè¿æ¶å®¡æ ¸æè§éå¡«ï¼ä¸éè¿æ¶å®¡æ ¸æè§ï¼ä¸éè¿åå ï¼å¿
å¡«ï¼ç± Service æ ¡éªã |
| | | */ |
| | | @Schema(description = "管çåå° - MES 设å¤å
¥åºåå®¡æ ¸ Request VO") |
| | | @Data |
| | | public class MesWmEquipmentReceiptAuditReqVO { |
| | | |
| | | @Schema(description = "ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| | | @NotNull(message = "设å¤å
¥åºåç¼å·ä¸è½ä¸ºç©º") |
| | | private Long id; |
| | | |
| | | @Schema(description = "æ¯å¦éè¿ï¼true=å®¡æ ¸éè¿ / false=å®¡æ ¸ä¸éè¿", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") |
| | | @NotNull(message = "è¯·éæ©å®¡æ ¸ç»æ") |
| | | private Boolean pass; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶éå¡« / å®¡æ ¸ä¸éè¿æ¶å¿
å¡«ï¼å³ä¸éè¿åå ï¼", example = "æ°éé忬¡æ ¸å¯¹") |
| | | private String reviewRemark; |
| | | |
| | | } |
| | |
| | | @Schema(description = "ç¶æ", example = "0") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "BPM æµç¨å®ä¾ç¼å·") |
| | | private String processInstanceId; |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·", example = "2") |
| | | private Long reviewerId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººå§å", example = "æå·¥") |
| | | private String reviewerName; |
| | | |
| | | @Schema(description = "å®¡æ ¸æ¶é´") |
| | | private LocalDateTime reviewTime; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼", example = "æ°éé忬¡æ ¸å¯¹") |
| | | private String reviewRemark; |
| | | |
| | | @Schema(description = "夿³¨", example = "夿³¨ä¿¡æ¯") |
| | | private String remark; |
| | |
| | | import cn.iocoder.yudao.framework.common.util.collection.MapUtils; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.MesWmItemReceiptAuditReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.MesWmItemReceiptPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.MesWmItemReceiptRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.MesWmItemReceiptSaveReqVO; |
| | |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | |
| | | } |
| | | |
| | | @PutMapping("/submit") |
| | | @Operation(summary = "æäº¤éè´å
¥åºå") |
| | | @Operation(summary = "æäº¤éè´å
¥åºå审æ¹ï¼è稿âå¾
䏿¶ï¼ï¼å®¡æ ¸äººç±å®¡æ¹é
ç½®ç»ä¸æå®") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @PreAuthorize("@ss.hasPermission('mes:wm-item-receipt:update')") |
| | | public CommonResult<Boolean> submitItemReceipt(@RequestParam("id") Long id) { |
| | | itemReceiptService.submitItemReceipt(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @PutMapping("/audit") |
| | | @Operation(summary = "å®¡æ ¸éè´å
¥åºåï¼å¾
䏿¶âå¾
æ§è¡å
¥åº/è稿ï¼ï¼ä»
审æ¹äººæ¬äººå¯æä½") |
| | | @PreAuthorize("@ss.hasPermission('mes:wm-item-receipt:audit')") |
| | | public CommonResult<Boolean> auditItemReceipt(@Valid @RequestBody MesWmItemReceiptAuditReqVO auditReqVO) { |
| | | itemReceiptService.auditItemReceipt(auditReqVO.getId(), auditReqVO.getPass(), auditReqVO.getReviewRemark()); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approver-ids") |
| | | @Operation(summary = "è·å¾éè´å
¥åºåçå®¡æ ¸äººç¼å·éåï¼ä¾åç«¯å¤ææ¯å¦å±ç¤ºå®¡æ ¸æé®") |
| | | @PreAuthorize("@ss.hasPermission('mes:wm-item-receipt:query')") |
| | | public CommonResult<Set<Long>> approverIds() { |
| | | return success(itemReceiptService.getItemReceiptApproverUserIds()); |
| | | } |
| | | |
| | | @PutMapping("/stock") |
| | |
| | | @PreAuthorize("@ss.hasPermission('mes:wm-item-receipt:create')") |
| | | public CommonResult<Long> generateFromArrivalNotice(@RequestParam("arrivalNoticeId") Long arrivalNoticeId) { |
| | | return success(itemReceiptService.generateItemReceiptFromArrivalNotice(arrivalNoticeId)); |
| | | } |
| | | |
| | | @PutMapping("/submit-approval") |
| | | @Operation(summary = "æäº¤éè´å
¥åºå审æ¹") |
| | | @Parameter(name = "id", description = "å
¥åºåç¼å·", required = true) |
| | | @Parameter(name = "processDefinitionKey", description = "æµç¨å®ä¹ Key", required = true) |
| | | @PreAuthorize("@ss.hasPermission('mes:wm-item-receipt:update')") |
| | | public CommonResult<Boolean> submitApproval(@RequestParam("id") Long id, |
| | | @RequestParam("processDefinitionKey") String processDefinitionKey) { |
| | | itemReceiptService.submitItemReceiptApproval(id, processDefinitionKey); |
| | | return success(true); |
| | | } |
| | | |
| | | // ==================== æ¼æ¥ VO ==================== |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * éè´å
¥åºåå®¡æ ¸ Request VO |
| | | * |
| | | * å®¡æ ¸éè¿ / ä¸éè¿å
±ç¨æ¬ VOï¼ç± pass åºåï¼ |
| | | * éè¿æ¶å®¡æ ¸æè§éå¡«ï¼ä¸éè¿æ¶å®¡æ ¸æè§ï¼ä¸éè¿åå ï¼å¿
å¡«ï¼ç± Service æ ¡éªã |
| | | */ |
| | | @Schema(description = "管çåå° - MES éè´å
¥åºåå®¡æ ¸ Request VO") |
| | | @Data |
| | | public class MesWmItemReceiptAuditReqVO { |
| | | |
| | | @Schema(description = "ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| | | @NotNull(message = "éè´å
¥åºåç¼å·ä¸è½ä¸ºç©º") |
| | | private Long id; |
| | | |
| | | @Schema(description = "æ¯å¦éè¿ï¼true=å®¡æ ¸éè¿ / false=å®¡æ ¸ä¸éè¿", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") |
| | | @NotNull(message = "è¯·éæ©å®¡æ ¸ç»æ") |
| | | private Boolean pass; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶éå¡« / å®¡æ ¸ä¸éè¿æ¶å¿
å¡«ï¼å³ä¸éè¿åå ï¼", example = "æ°éé忬¡æ ¸å¯¹") |
| | | private String reviewRemark; |
| | | |
| | | } |
| | |
| | | @ExcelProperty("ç¶æ") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "BPM æµç¨å®ä¾ç¼å·", example = "xxx") |
| | | private String processInstanceId; |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·", example = "2") |
| | | private Long reviewerId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººå§å", example = "æå·¥") |
| | | private String reviewerName; |
| | | |
| | | @Schema(description = "å®¡æ ¸æ¶é´") |
| | | private LocalDateTime reviewTime; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼", example = "æ°éé忬¡æ ¸å¯¹") |
| | | private String reviewRemark; |
| | | |
| | | @Schema(description = "夿³¨", example = "夿³¨") |
| | | @ExcelProperty("夿³¨") |
| | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.miscissue.vo.MesWmMiscIssueAuditReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.miscissue.vo.MesWmMiscIssuePageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.miscissue.vo.MesWmMiscIssueRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.miscissue.vo.MesWmMiscIssueSaveReqVO; |
| | |
| | | import java.io.IOException; |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | |
| | | } |
| | | |
| | | @PutMapping("/submit") |
| | | @Operation(summary = "æäº¤æé¡¹åºåºå审æ¹") |
| | | @Operation(summary = "æäº¤æé¡¹åºåºå审æ¹ï¼è稿â审æ¹ä¸ï¼ï¼å®¡æ ¸äººç±å®¡æ¹é
ç½®ç»ä¸æå®") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @Parameter(name = "processDefinitionKey", description = "æµç¨å®ä¹ Key", required = true) |
| | | @PreAuthorize("@ss.hasPermission('mes:wm-misc-issue:update')") |
| | | public CommonResult<Boolean> submitMiscIssue(@RequestParam("id") Long id, |
| | | @RequestParam("processDefinitionKey") String processDefinitionKey) { |
| | | miscIssueService.submitMiscIssueApproval(id, processDefinitionKey); |
| | | public CommonResult<Boolean> submitMiscIssue(@RequestParam("id") Long id) { |
| | | miscIssueService.submitMiscIssueApproval(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approval-process-list") |
| | | @Operation(summary = "è·å¾æé¡¹åºåºå®¡æ¹æµç¨å®ä¹å表") |
| | | @PutMapping("/audit") |
| | | @Operation(summary = "å®¡æ ¸æé¡¹åºåºåï¼å®¡æ¹ä¸âå¾
æ§è¡åºåº/è稿ï¼ï¼ä»
审æ¹äººæ¬äººå¯æä½") |
| | | @PreAuthorize("@ss.hasPermission('mes:wm-misc-issue:audit')") |
| | | public CommonResult<Boolean> auditMiscIssue(@Valid @RequestBody MesWmMiscIssueAuditReqVO auditReqVO) { |
| | | miscIssueService.auditMiscIssue(auditReqVO.getId(), auditReqVO.getPass(), auditReqVO.getReviewRemark()); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approver-ids") |
| | | @Operation(summary = "è·å¾æé¡¹åºåºåçå®¡æ ¸äººç¼å·éåï¼ä¾åç«¯å¤ææ¯å¦å±ç¤ºå®¡æ ¸æé®") |
| | | @PreAuthorize("@ss.hasPermission('mes:wm-misc-issue:query')") |
| | | public CommonResult<List<java.util.Map<String, Object>>> getApprovalProcessList() { |
| | | return success(miscIssueService.getMiscIssueApprovalProcessDefinitionList()); |
| | | public CommonResult<Set<Long>> getApproverUserIds() { |
| | | return success(miscIssueService.getMiscIssueApproverUserIds()); |
| | | } |
| | | |
| | | @PutMapping("/finish") |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.wm.miscissue.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * æé¡¹åºåºåå®¡æ ¸ Request VO |
| | | * |
| | | * å®¡æ ¸éè¿ / ä¸éè¿å
±ç¨æ¬ VOï¼ç± pass åºåï¼ |
| | | * éè¿æ¶å®¡æ ¸æè§éå¡«ï¼ä¸éè¿æ¶å®¡æ ¸æè§ï¼ä¸éè¿åå ï¼å¿
å¡«ï¼ç± Service æ ¡éªã |
| | | */ |
| | | @Schema(description = "管çåå° - æé¡¹åºåºåå®¡æ ¸ Request VO") |
| | | @Data |
| | | public class MesWmMiscIssueAuditReqVO { |
| | | |
| | | @Schema(description = "ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| | | @NotNull(message = "æé¡¹åºåºåç¼å·ä¸è½ä¸ºç©º") |
| | | private Long id; |
| | | |
| | | @Schema(description = "æ¯å¦éè¿ï¼true=å®¡æ ¸éè¿ / false=å®¡æ ¸ä¸éè¿", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") |
| | | @NotNull(message = "è¯·éæ©å®¡æ ¸ç»æ") |
| | | private Boolean pass; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶éå¡« / å®¡æ ¸ä¸éè¿æ¶å¿
å¡«ï¼å³ä¸éè¿åå ï¼", example = "åºåºæ°éé忬¡æ ¸å¯¹") |
| | | private String reviewRemark; |
| | | |
| | | } |
| | |
| | | @Schema(description = "ç¶æ", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "BPM æµç¨å®ä¾ç¼å·", example = "xxx") |
| | | private String processInstanceId; |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·", example = "1") |
| | | private Long reviewerId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººå§å", example = "å¼ ä¸") |
| | | private String reviewerName; |
| | | |
| | | @Schema(description = "å®¡æ ¸æ¶é´") |
| | | private LocalDateTime reviewTime; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼éè¿æ¶çæè§ / ä¸éè¿æ¶çåå ï¼", example = "åºåºæ°éé忬¡æ ¸å¯¹") |
| | | private String reviewRemark; |
| | | |
| | | @Schema(description = "夿³¨", example = "夿³¨") |
| | | private String remark; |
| | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.miscreceipt.vo.MesWmMiscReceiptAuditReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.miscreceipt.vo.MesWmMiscReceiptPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.miscreceipt.vo.MesWmMiscReceiptRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.miscreceipt.vo.MesWmMiscReceiptSaveReqVO; |
| | |
| | | |
| | | import java.io.IOException; |
| | | import java.util.List; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | |
| | | } |
| | | |
| | | @PutMapping("/submit") |
| | | @Operation(summary = "æäº¤æé¡¹å
¥åºå审æ¹") |
| | | @Operation(summary = "æäº¤æé¡¹å
¥åºå审æ¹ï¼è稿â审æ¹ä¸ï¼ï¼å®¡æ ¸äººç±å®¡æ¹é
ç½®ç»ä¸æå®") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @Parameter(name = "processDefinitionKey", description = "æµç¨å®ä¹ Key", required = true) |
| | | @PreAuthorize("@ss.hasPermission('mes:wm:misc-receipt:submit')") |
| | | public CommonResult<Boolean> submitMiscReceipt(@RequestParam("id") Long id, |
| | | @RequestParam("processDefinitionKey") String processDefinitionKey) { |
| | | miscReceiptService.submitMiscReceiptApproval(id, processDefinitionKey); |
| | | public CommonResult<Boolean> submitMiscReceipt(@RequestParam("id") Long id) { |
| | | miscReceiptService.submitMiscReceiptApproval(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approval-process-list") |
| | | @Operation(summary = "è·å¾æé¡¹å
¥åºå®¡æ¹æµç¨å®ä¹å表") |
| | | @PutMapping("/audit") |
| | | @Operation(summary = "å®¡æ ¸æé¡¹å
¥åºåï¼å®¡æ¹ä¸â已审æ¹/è稿ï¼ï¼ä»
审æ¹äººæ¬äººå¯æä½") |
| | | @PreAuthorize("@ss.hasPermission('mes:wm:misc-receipt:audit')") |
| | | public CommonResult<Boolean> auditMiscReceipt(@Valid @RequestBody MesWmMiscReceiptAuditReqVO auditReqVO) { |
| | | miscReceiptService.auditMiscReceipt(auditReqVO.getId(), auditReqVO.getPass(), auditReqVO.getReviewRemark()); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approver-ids") |
| | | @Operation(summary = "è·å¾æé¡¹å
¥åºåçå®¡æ ¸äººç¼å·éåï¼ä¾åç«¯å¤ææ¯å¦å±ç¤ºå®¡æ ¸æé®") |
| | | @PreAuthorize("@ss.hasPermission('mes:wm:misc-receipt:query')") |
| | | public CommonResult<List<java.util.Map<String, Object>>> getApprovalProcessList() { |
| | | return success(miscReceiptService.getMiscReceiptApprovalProcessDefinitionList()); |
| | | public CommonResult<Set<Long>> getApproverUserIds() { |
| | | return success(miscReceiptService.getMiscReceiptApproverUserIds()); |
| | | } |
| | | |
| | | @PutMapping("/finish") |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.wm.miscreceipt.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * æé¡¹å
¥åºåå®¡æ ¸ Request VO |
| | | * |
| | | * å®¡æ ¸éè¿ / ä¸éè¿å
±ç¨æ¬ VOï¼ç± pass åºåï¼ |
| | | * éè¿æ¶å®¡æ ¸æè§éå¡«ï¼ä¸éè¿æ¶å®¡æ ¸æè§ï¼ä¸éè¿åå ï¼å¿
å¡«ï¼ç± Service æ ¡éªã |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Schema(description = "管çåå° - æé¡¹å
¥åºåå®¡æ ¸ Request VO") |
| | | @Data |
| | | public class MesWmMiscReceiptAuditReqVO { |
| | | |
| | | @Schema(description = "ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| | | @NotNull(message = "æé¡¹å
¥åºåç¼å·ä¸è½ä¸ºç©º") |
| | | private Long id; |
| | | |
| | | @Schema(description = "æ¯å¦éè¿ï¼true=å®¡æ ¸éè¿ / false=å®¡æ ¸ä¸éè¿", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") |
| | | @NotNull(message = "è¯·éæ©å®¡æ ¸ç»æ") |
| | | private Boolean pass; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶éå¡« / å®¡æ ¸ä¸éè¿æ¶å¿
å¡«ï¼å³ä¸éè¿åå ï¼", example = "å
¥åºæ°éé忬¡æ ¸å¯¹") |
| | | private String reviewRemark; |
| | | |
| | | } |
| | |
| | | @Schema(description = "ç¶æ", example = "0") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "BPM æµç¨å®ä¾ç¼å·", example = "xxx") |
| | | private String processInstanceId; |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·", example = "1") |
| | | private Long reviewerId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººå§å", example = "å¼ ä¸") |
| | | private String reviewerName; |
| | | |
| | | @Schema(description = "å®¡æ ¸æ¶é´") |
| | | private LocalDateTime reviewTime; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼éè¿æ¶çæè§ / ä¸éè¿æ¶çåå ï¼", example = "å
¥åºæ°éé忬¡æ ¸å¯¹") |
| | | private String reviewRemark; |
| | | |
| | | @Schema(description = "夿³¨", example = "夿³¨") |
| | | private String remark; |
| | |
| | | import cn.iocoder.yudao.framework.common.util.collection.MapUtils; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.MesWmReturnVendorAuditReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.MesWmReturnVendorPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.MesWmReturnVendorRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.MesWmReturnVendorSaveReqVO; |
| | |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | |
| | | } |
| | | |
| | | @PutMapping("/submit") |
| | | @Operation(summary = "æäº¤ä¾åºåéè´§å审æ¹") |
| | | @Operation(summary = "æäº¤ä¾åºåéè´§å审æ¹ï¼è稿âå¾
æ£è´§ï¼ï¼å®¡æ ¸äººç±å®¡æ¹é
ç½®ç»ä¸æå®") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @Parameter(name = "processDefinitionKey", description = "æµç¨å®ä¹ Key", required = true) |
| | | @PreAuthorize("@ss.hasPermission('mes:wm-return-vendor:update')") |
| | | public CommonResult<Boolean> submitReturnVendor(@RequestParam("id") Long id, |
| | | @RequestParam("processDefinitionKey") String processDefinitionKey) { |
| | | returnVendorService.submitReturnVendorApproval(id, processDefinitionKey); |
| | | public CommonResult<Boolean> submitReturnVendor(@RequestParam("id") Long id) { |
| | | returnVendorService.submitReturnVendorApproval(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approval-process-list") |
| | | @Operation(summary = "è·å¾ä¾åºåéè´§å®¡æ¹æµç¨å®ä¹å表") |
| | | @PutMapping("/audit") |
| | | @Operation(summary = "å®¡æ ¸ä¾åºåéè´§åï¼å¾
æ£è´§âå¾
æ§è¡éè´§/è稿ï¼ï¼ä»
审æ¹äººæ¬äººå¯æä½") |
| | | @PreAuthorize("@ss.hasPermission('mes:wm-return-vendor:audit')") |
| | | public CommonResult<Boolean> auditReturnVendor(@Valid @RequestBody MesWmReturnVendorAuditReqVO auditReqVO) { |
| | | returnVendorService.auditReturnVendor(auditReqVO.getId(), auditReqVO.getPass(), auditReqVO.getReviewRemark()); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approver-ids") |
| | | @Operation(summary = "è·å¾ä¾åºåéè´§åçå®¡æ ¸äººç¼å·éåï¼ä¾åç«¯å¤ææ¯å¦å±ç¤ºå®¡æ ¸æé®") |
| | | @PreAuthorize("@ss.hasPermission('mes:wm-return-vendor:query')") |
| | | public CommonResult<List<java.util.Map<String, Object>>> getApprovalProcessList() { |
| | | return success(returnVendorService.getReturnVendorApprovalProcessDefinitionList()); |
| | | public CommonResult<Set<Long>> getApproverUserIds() { |
| | | return success(returnVendorService.getReturnVendorApproverUserIds()); |
| | | } |
| | | |
| | | @PutMapping("/stock") |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * ä¾åºåéè´§åå®¡æ ¸ Request VO |
| | | * |
| | | * å®¡æ ¸éè¿ / ä¸éè¿å
±ç¨æ¬ VOï¼ç± pass åºåï¼ |
| | | * éè¿æ¶å®¡æ ¸æè§éå¡«ï¼ä¸éè¿æ¶å®¡æ ¸æè§ï¼ä¸éè¿åå ï¼å¿
å¡«ï¼ç± Service æ ¡éªã |
| | | */ |
| | | @Schema(description = "管çåå° - ä¾åºåéè´§åå®¡æ ¸ Request VO") |
| | | @Data |
| | | public class MesWmReturnVendorAuditReqVO { |
| | | |
| | | @Schema(description = "ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| | | @NotNull(message = "ä¾åºåéè´§åç¼å·ä¸è½ä¸ºç©º") |
| | | private Long id; |
| | | |
| | | @Schema(description = "æ¯å¦éè¿ï¼true=å®¡æ ¸éè¿ / false=å®¡æ ¸ä¸éè¿", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") |
| | | @NotNull(message = "è¯·éæ©å®¡æ ¸ç»æ") |
| | | private Boolean pass; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶éå¡« / å®¡æ ¸ä¸éè¿æ¶å¿
å¡«ï¼å³ä¸éè¿åå ï¼", example = "éè´§æ°éé忬¡æ ¸å¯¹") |
| | | private String reviewRemark; |
| | | |
| | | } |
| | |
| | | @Schema(description = "ç¶æ", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "BPM æµç¨å®ä¾ç¼å·", example = "xxx") |
| | | private String processInstanceId; |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·", example = "1") |
| | | private Long reviewerId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººå§å", example = "å¼ ä¸") |
| | | private String reviewerName; |
| | | |
| | | @Schema(description = "å®¡æ ¸æ¶é´") |
| | | private LocalDateTime reviewTime; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼éè¿æ¶çæè§ / ä¸éè¿æ¶çåå ï¼", example = "éè´§æ°éé忬¡æ ¸å¯¹") |
| | | private String reviewRemark; |
| | | |
| | | @Schema(description = "夿³¨", example = "夿³¨") |
| | | private String remark; |
| | |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | |
| | | } |
| | | |
| | | @PutMapping("/submit-approval") |
| | | @Operation(summary = "æäº¤çç¹ç»æå®¡æ¹") |
| | | @Operation(summary = "æäº¤çç¹ç»æå®¡æ¹ï¼çç¹ä¸âçç¹ä¸Â·ç»æå®¡æ¹ä¸ï¼ï¼å®¡æ ¸äººç±å®¡æ¹é
ç½®ç»ä¸æå®") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @Parameter(name = "processDefinitionKey", description = "æµç¨å®ä¹ Key", required = true) |
| | | @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:update')") |
| | | public CommonResult<Boolean> submitStockTakingTaskResultApproval(@RequestParam("id") Long id, |
| | | @RequestParam("processDefinitionKey") String processDefinitionKey) { |
| | | stockTakingTaskService.submitStockTakingResultApproval(id, processDefinitionKey); |
| | | public CommonResult<Boolean> submitStockTakingTaskResultApproval(@RequestParam("id") Long id) { |
| | | stockTakingTaskService.submitStockTakingResultApproval(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approval-process-list") |
| | | @Operation(summary = "è·å¾çç¹ç»æå®¡æ¹æµç¨å®ä¹å表") |
| | | @PutMapping("/audit") |
| | | @Operation(summary = "å®¡æ ¸çç¹ç»æï¼ç»æå®¡æ¹ä¸â已宿/çç¹ä¸ï¼ï¼ä»
审æ¹äººæ¬äººå¯æä½") |
| | | @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:audit')") |
| | | public CommonResult<Boolean> auditStockTakingTaskResult(@Valid @RequestBody MesWmStockTakingTaskAuditReqVO auditReqVO) { |
| | | stockTakingTaskService.auditStockTakingResult(auditReqVO.getId(), auditReqVO.getPass(), auditReqVO.getReviewRemark()); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approver-ids") |
| | | @Operation(summary = "è·å¾çç¹ç»æå®¡æ¹çå®¡æ ¸äººç¼å·éåï¼ä¾åç«¯å¤ææ¯å¦å±ç¤ºå®¡æ ¸æé®") |
| | | @PreAuthorize("@ss.hasPermission('mes:wm-stock-taking-task:query')") |
| | | public CommonResult<List<Map<String, Object>>> getStockTakingTaskResultApprovalProcessDefinitionList() { |
| | | return success(stockTakingTaskService.getStockTakingTaskResultApprovalProcessDefinitionList()); |
| | | public CommonResult<Set<Long>> getApproverUserIds() { |
| | | return success(stockTakingTaskService.getStockTakingTaskApproverUserIds()); |
| | | } |
| | | |
| | | @PutMapping("/cancel") |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * çç¹ç»æå®¡æ ¸ Request VO |
| | | * |
| | | * å®¡æ ¸éè¿ / ä¸éè¿å
±ç¨æ¬ VOï¼ç± pass åºåï¼ |
| | | * éè¿æ¶å®¡æ ¸æè§éå¡«ï¼ä¸éè¿æ¶å®¡æ ¸æè§ï¼ä¸éè¿åå ï¼å¿
å¡«ï¼ç± Service æ ¡éªã |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Schema(description = "管çåå° - çç¹ç»æå®¡æ ¸ Request VO") |
| | | @Data |
| | | public class MesWmStockTakingTaskAuditReqVO { |
| | | |
| | | @Schema(description = "ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| | | @NotNull(message = "çç¹ä»»å¡ç¼å·ä¸è½ä¸ºç©º") |
| | | private Long id; |
| | | |
| | | @Schema(description = "æ¯å¦éè¿ï¼true=å®¡æ ¸éè¿ / false=å®¡æ ¸ä¸éè¿", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") |
| | | @NotNull(message = "è¯·éæ©å®¡æ ¸ç»æ") |
| | | private Boolean pass; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶éå¡« / å®¡æ ¸ä¸éè¿æ¶å¿
å¡«ï¼å³ä¸éè¿åå ï¼", example = "çäºå·®å¼éé说æ") |
| | | private String reviewRemark; |
| | | |
| | | } |
| | |
| | | @ExcelProperty("ç¶æ") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "BPM æµç¨å®ä¾ç¼å·ï¼é空表示çç¹ç»æå·²æäº¤å®¡æ¹", example = "xxx") |
| | | private String processInstanceId; |
| | | @Schema(description = "å®¡æ ¸äººç¨æ·ç¼å·", example = "1") |
| | | private Long reviewerId; |
| | | |
| | | @Schema(description = "å®¡æ ¸äººå§å", example = "å¼ ä¸") |
| | | private String reviewerName; |
| | | |
| | | @Schema(description = "ç»æå®¡æ¹æäº¤æ¶é´ / å®¡æ ¸æ¶é´", example = "2026-09-16 10:00:00") |
| | | private LocalDateTime reviewTime; |
| | | |
| | | @Schema(description = "å®¡æ ¸æè§ï¼éè¿æ¶çæè§ / ä¸éè¿æ¶çåå ï¼", example = "çäºå·®å¼éé说æ") |
| | | private String reviewRemark; |
| | | |
| | | @Schema(description = "夿³¨", example = "夿³¨") |
| | | @ExcelProperty("夿³¨") |
| | |
| | | */ |
| | | private Integer status; |
| | | /** |
| | | * BPM æµç¨å®ä¾ç¼å· |
| | | * å®¡æ ¸äººç¨æ·ç¼å· |
| | | * |
| | | * 审æ¹äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç mes_pd_project_approveï¼ï¼ |
| | | * æäº¤æ¶ä¸æå®ï¼æ¤å¤è®°å½å®é
æ§è¡å®¡æ ¸çç¨æ·ã |
| | | */ |
| | | private String processInstanceId; |
| | | private Long reviewerId; |
| | | /** |
| | | * BPM æµç¨å®ä¹ Key |
| | | * å®¡æ ¸äººå§åï¼å®¡æ ¸æ¶åä½è®°å½ï¼é¿å
å表å±ç¤ºåæ¥ç¨æ·ï¼ |
| | | */ |
| | | private String processDefinitionKey; |
| | | private String reviewerName; |
| | | /** |
| | | * å®¡æ ¸æ¶é´ |
| | | */ |
| | | private LocalDateTime reviewTime; |
| | | /** |
| | | * å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼ |
| | | */ |
| | | private String reviewRemark; |
| | | /** |
| | | * ä¸»è®¾è®¡å¸ |
| | | * |
| | |
| | | private LocalDateTime draftTime; |
| | | /** |
| | | * å®¡æ ¸äººID |
| | | * |
| | | * å®¡æ ¸äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç pd_tech_confirm_approveï¼ï¼ |
| | | * æäº¤å®¡æ ¸æ¶ä¸æå®ï¼æ¤å¤è®°å½çæ¯å®é
æ§è¡å®¡æ ¸çç¨æ·ï¼å®¡æ ¸éè¿åä¸ååå¨ã |
| | | */ |
| | | private Long reviewerId; |
| | | /** |
| | | * å®¡æ ¸äººå§å |
| | | * å®¡æ ¸äººå§åï¼å®¡æ ¸æ¶åä½è®°å½ï¼é¿å
å表å±ç¤ºæ¶åæ¥ç¨æ·ï¼ |
| | | */ |
| | | private String reviewerName; |
| | | /** |
| | | * å®¡æ ¸æ¶é´ |
| | | */ |
| | | private LocalDateTime reviewTime; |
| | | /** |
| | | * å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼ |
| | | */ |
| | | private String reviewRemark; |
| | | /** |
| | | * 客æ·ç¡®è®¤äºº |
| | | */ |
| | |
| | | */ |
| | | private LocalDateTime customerConfirmTime; |
| | | /** |
| | | * ç¶æï¼0=è稿ï¼1=å¾
å®¡æ ¸ï¼2=å·²å®¡æ ¸ï¼3=客æ·å·²ç¡®è®¤ï¼ |
| | | * ç¶æï¼0=è稿ï¼1=å¾
å®¡æ ¸ï¼2=å·²å®¡æ ¸ï¼3=客æ·å·²ç¡®è®¤ï¼4=å®¡æ ¸ä¸éè¿ï¼ |
| | | * |
| | | * åªç±ä¸å¡æµç¨é©±å¨ï¼ä¸æ¥ååç«¯ç´æ¥èµå¼ï¼ |
| | | * å建æ¶åºå®ä¸ºèç¨¿ï¼æäº¤å®¡æ ¸å置为å¾
å®¡æ ¸ï¼å®¡æ ¸éè¿/ä¸éè¿ç± |
| | | * {@link cn.iocoder.yudao.module.mes.service.pd.techconfirm.ProductTechConfirmService#auditTechConfirm} æ¨è¿ï¼ |
| | | * 客æ·ç¡®è®¤ç± |
| | | * {@link cn.iocoder.yudao.module.mes.service.pd.techconfirm.ProductTechConfirmService#confirmTechConfirmByCustomer} æ¨è¿ã |
| | | * |
| | | * åå
¸ {@link DictTypeConstants#PRODUCT_TECH_CONFIRM_STATUS} |
| | | * æä¸¾ {@link cn.iocoder.yudao.module.mes.enums.pd.MesPdTechConfirmStatusEnum} |
| | | */ |
| | | private Integer status; |
| | | /** |
| | |
| | | */ |
| | | private Integer status; |
| | | /** |
| | | * BPM æµç¨å®ä¾ç¼å· |
| | | * å®¡æ ¸äººç¨æ·ç¼å· |
| | | * |
| | | * 审æ¹äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç equipment_receipt_approveï¼ï¼ |
| | | * æäº¤æ¶ä¸æå®ï¼æ¤å¤è®°å½å®é
æ§è¡å®¡æ ¸çç¨æ·ã |
| | | */ |
| | | private String processInstanceId; |
| | | private Long reviewerId; |
| | | /** |
| | | * å®¡æ ¸äººå§åï¼å®¡æ ¸æ¶åä½è®°å½ï¼é¿å
å表å±ç¤ºåæ¥ç¨æ·ï¼ |
| | | */ |
| | | private String reviewerName; |
| | | /** |
| | | * å®¡æ ¸æ¶é´ |
| | | */ |
| | | private LocalDateTime reviewTime; |
| | | /** |
| | | * å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼ |
| | | */ |
| | | private String reviewRemark; |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | |
| | | */ |
| | | private Integer status; |
| | | /** |
| | | * BPM æµç¨å®ä¾ç¼å· |
| | | * å®¡æ ¸äººç¨æ·ç¼å· |
| | | * |
| | | * 审æ¹äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç item_receipt_approveï¼ï¼ |
| | | * æäº¤æ¶ä¸æå®ï¼æ¤å¤è®°å½å®é
æ§è¡å®¡æ ¸çç¨æ·ã |
| | | */ |
| | | private String processInstanceId; |
| | | private Long reviewerId; |
| | | /** |
| | | * BPM æµç¨å®ä¹ Key |
| | | * å®¡æ ¸äººå§åï¼å®¡æ ¸æ¶åä½è®°å½ï¼é¿å
å表å±ç¤ºåæ¥ç¨æ·ï¼ |
| | | */ |
| | | private String processDefinitionKey; |
| | | private String reviewerName; |
| | | /** |
| | | * å®¡æ ¸æ¶é´ |
| | | */ |
| | | private LocalDateTime reviewTime; |
| | | /** |
| | | * å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼ |
| | | */ |
| | | private String reviewRemark; |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | |
| | | */ |
| | | private Integer status; |
| | | /** |
| | | * BPM æµç¨å®ä¾ç¼å· |
| | | * å®¡æ ¸äººç¨æ·ç¼å· |
| | | * |
| | | * å®¡æ ¸äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç misc_issue_approveï¼ï¼ |
| | | * æäº¤æ¶ä¸æå®ï¼æ¤å¤è®°å½å®é
æ§è¡å®¡æ ¸çç¨æ·ã |
| | | */ |
| | | private String processInstanceId; |
| | | private Long reviewerId; |
| | | /** |
| | | * å®¡æ ¸äººå§åï¼å®¡æ ¸æ¶åä½è®°å½ï¼é¿å
å表å±ç¤ºåæ¥ç¨æ·ï¼ |
| | | */ |
| | | private String reviewerName; |
| | | /** |
| | | * å®¡æ ¸æ¶é´ |
| | | */ |
| | | private LocalDateTime reviewTime; |
| | | /** |
| | | * å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼ |
| | | */ |
| | | private String reviewRemark; |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | |
| | | */ |
| | | private Integer status; |
| | | /** |
| | | * BPM æµç¨å®ä¾ç¼å· |
| | | * å®¡æ ¸äººç¨æ·ç¼å· |
| | | * |
| | | * å®¡æ ¸äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç misc_receipt_approveï¼ï¼ |
| | | * æäº¤æ¶ä¸æå®ï¼æ¤å¤è®°å½å®é
æ§è¡å®¡æ ¸çç¨æ·ã |
| | | */ |
| | | private String processInstanceId; |
| | | private Long reviewerId; |
| | | /** |
| | | * å®¡æ ¸äººå§åï¼å®¡æ ¸æ¶åä½è®°å½ï¼é¿å
å表å±ç¤ºåæ¥ç¨æ·ï¼ |
| | | */ |
| | | private String reviewerName; |
| | | /** |
| | | * å®¡æ ¸æ¶é´ |
| | | */ |
| | | private LocalDateTime reviewTime; |
| | | /** |
| | | * å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼ |
| | | */ |
| | | private String reviewRemark; |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | |
| | | */ |
| | | private Integer status; |
| | | /** |
| | | * BPM æµç¨å®ä¾ç¼å· |
| | | * å®¡æ ¸äººç¨æ·ç¼å· |
| | | * |
| | | * å®¡æ ¸äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç return_vendor_approveï¼ï¼ |
| | | * æäº¤æ¶ä¸æå®ï¼æ¤å¤è®°å½å®é
æ§è¡å®¡æ ¸çç¨æ·ã |
| | | */ |
| | | private String processInstanceId; |
| | | private Long reviewerId; |
| | | /** |
| | | * å®¡æ ¸äººå§åï¼å®¡æ ¸æ¶åä½è®°å½ï¼é¿å
å表å±ç¤ºåæ¥ç¨æ·ï¼ |
| | | */ |
| | | private String reviewerName; |
| | | /** |
| | | * å®¡æ ¸æ¶é´ |
| | | */ |
| | | private LocalDateTime reviewTime; |
| | | /** |
| | | * å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼ |
| | | */ |
| | | private String reviewRemark; |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | |
| | | private Integer status; |
| | | |
| | | /** |
| | | * BPM æµç¨å®ä¾ç¼å· |
| | | * å®¡æ ¸äººç¨æ·ç¼å· |
| | | * |
| | | * é空表示çç¹ç»æå·²æäº¤ BPM 审æ¹ï¼æ£å¨çå¾
审æ¹ç»æ |
| | | * å®¡æ ¸äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç stock_taking_result_approveï¼ï¼ |
| | | * æäº¤æ¶ä¸æå®ï¼æ¤å¤è®°å½å®é
æ§è¡å®¡æ ¸çç¨æ·ãå®¡æ ¸ä¸éè¿åä¿çï¼è¡¨ç¤ºç»æå®¡æ¹å·²è¢«å¤çè¿ã |
| | | */ |
| | | private String processInstanceId; |
| | | private Long reviewerId; |
| | | /** |
| | | * å®¡æ ¸äººå§åï¼å®¡æ ¸æ¶åä½è®°å½ï¼é¿å
å表å±ç¤ºåæ¥ç¨æ·ï¼ |
| | | */ |
| | | private String reviewerName; |
| | | /** |
| | | * ç»æå®¡æ¹æäº¤æ¶é´ / å®¡æ ¸æ¶é´ |
| | | * |
| | | * æ¬ä»»å¡çç¶æ 2ï¼çç¹ä¸ï¼åæ¶æ¿è½½ãçç¹ä¸ãä¸ãçç¹ç»æå®¡æ¹ä¸ãä¸¤ä¸ªé¶æ®µï¼ |
| | | * æ
ç¨æ¬å段åºåé¶æ®µï¼ |
| | | * <ul> |
| | | * <li>æäº¤ç»æå®¡æ¹æ¶åå
¥æäº¤æ¶é´ï¼å®¡æ ¸äººä¸å®¡æ ¸æè§ä¸ºç©º ââ ç»æå®¡æ¹å·²æäº¤ãçå¾
å®¡æ ¸ï¼</li> |
| | | * <li>å®¡æ ¸æ¶æ´æ°ä¸ºå®é
å®¡æ ¸æ¶é´ ââ ä¸ reviewerId ä¸åé空ï¼è¡¨ç¤ºæ¬è½®ç»æå®¡æ¹å·²å¤ç宿¯ï¼</li> |
| | | * <li>两è
ç空表示æ¬è½®ç»æå®¡æ¹å°æªæäº¤ï¼å¯ç»§ç»å½å
¥å®çæ°éã</li> |
| | | * </ul> |
| | | */ |
| | | private LocalDateTime reviewTime; |
| | | /** |
| | | * å®¡æ ¸æè§ï¼å®¡æ ¸éè¿æ¶çæè§ / å®¡æ ¸ä¸éè¿æ¶çåå ï¼ |
| | | */ |
| | | private String reviewRemark; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pd.project.vo.MesPdProjectPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pd.project.MesPdProjectDO; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.time.LocalDateTime; |
| | | |
| | | @Mapper |
| | | public interface MesPdProjectMapper extends BaseMapperX<MesPdProjectDO> { |
| | |
| | | return selectOne(MesPdProjectDO::getTaskCode, taskCode); |
| | | } |
| | | |
| | | /** |
| | | * æäº¤å®¡æ¹ï¼ç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | * |
| | | * ç¨ UpdateWrapper èé updateByIdï¼MyBatis-Plus é»è®¤æ´æ°çç¥å¿½ç¥ nullï¼ |
| | | * ç´æ¥ updateById æ æ³æå®¡æ ¸ä¸éè¿åæ®ççå®¡æ ¸äºº / å®¡æ ¸æ¶é´ / å®¡æ ¸æè§æ¸
空ã |
| | | * |
| | | * @param id ç¼å· |
| | | * @param status ç®æ ç¶æï¼å®¡æ¹ä¸ï¼ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int submitAndResetAuditInfo(Long id, Integer status) { |
| | | return update(null, new LambdaUpdateWrapper<MesPdProjectDO>() |
| | | .eq(MesPdProjectDO::getId, id) |
| | | .set(MesPdProjectDO::getStatus, status) |
| | | .set(MesPdProjectDO::getReviewerId, null) |
| | | .set(MesPdProjectDO::getReviewerName, null) |
| | | .set(MesPdProjectDO::getReviewTime, null) |
| | | .set(MesPdProjectDO::getReviewRemark, null)); |
| | | } |
| | | |
| | | /** |
| | | * å®¡æ ¸ï¼åå
¥å®¡æ ¸ç»æãå®¡æ ¸äººä¸å®¡æ ¸æè§ |
| | | * |
| | | * reviewRemark å
许为 nullï¼å®¡æ ¸éè¿æ¶æè§å¯éï¼ï¼æ
åæ ·ä½¿ç¨ UpdateWrapper ç´åã |
| | | * |
| | | * @param id ç¼å· |
| | | * @param status ç®æ ç¶æï¼å¾
彿¡£ / å¾
å®¡æ ¸ï¼ |
| | | * @param reviewerId å®¡æ ¸äººç¼å· |
| | | * @param reviewerName å®¡æ ¸äººå§å |
| | | * @param reviewRemark å®¡æ ¸æè§ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int auditProject(Long id, Integer status, Long reviewerId, |
| | | String reviewerName, String reviewRemark) { |
| | | return update(null, new LambdaUpdateWrapper<MesPdProjectDO>() |
| | | .eq(MesPdProjectDO::getId, id) |
| | | .set(MesPdProjectDO::getStatus, status) |
| | | .set(MesPdProjectDO::getReviewerId, reviewerId) |
| | | .set(MesPdProjectDO::getReviewerName, reviewerName) |
| | | .set(MesPdProjectDO::getReviewTime, LocalDateTime.now()) |
| | | .set(MesPdProjectDO::getReviewRemark, reviewRemark)); |
| | | } |
| | | |
| | | } |
| | |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pd.techconfirm.vo.ProductTechConfirmPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pd.techconfirm.ProductTechConfirmDO; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.time.LocalDateTime; |
| | | |
| | | @Mapper |
| | | public interface ProductTechConfirmMapper extends BaseMapperX<ProductTechConfirmDO> { |
| | |
| | | .orderByDesc(ProductTechConfirmDO::getId)); |
| | | } |
| | | |
| | | /** |
| | | * æäº¤å®¡æ ¸ï¼ç½®ä¸ºå¾
å®¡æ ¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | * |
| | | * ä¹æä»¥ç¨ UpdateWrapper èé updateByIdï¼MyBatis-Plus é»è®¤çåæ®µæ´æ°çç¥ä¼å¿½ç¥ nullï¼ |
| | | * ç´æ¥ updateById æ æ³æå®¡æ ¸ä¸éè¿åæ®ççå®¡æ ¸äººãå®¡æ ¸æ¶é´ãå®¡æ ¸æè§çæ£æ¸
空ã |
| | | * |
| | | * @param id ç¼å· |
| | | * @param status ç®æ ç¶æï¼å¾
å®¡æ ¸ï¼ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int submitAndResetAuditInfo(Long id, Integer status) { |
| | | return update(null, new LambdaUpdateWrapper<ProductTechConfirmDO>() |
| | | .eq(ProductTechConfirmDO::getId, id) |
| | | .set(ProductTechConfirmDO::getStatus, status) |
| | | .set(ProductTechConfirmDO::getReviewerId, null) |
| | | .set(ProductTechConfirmDO::getReviewerName, null) |
| | | .set(ProductTechConfirmDO::getReviewTime, null) |
| | | .set(ProductTechConfirmDO::getReviewRemark, null)); |
| | | } |
| | | |
| | | /** |
| | | * å®¡æ ¸ï¼åå
¥å®¡æ ¸ç»æãå®¡æ ¸äººä¸å®¡æ ¸æè§ |
| | | * |
| | | * reviewRemark å
许为 nullï¼å®¡æ ¸éè¿æ¶æè§å¯éï¼ï¼æ
åæ ·ä½¿ç¨ UpdateWrapper ç´åã |
| | | * |
| | | * @param id ç¼å· |
| | | * @param status ç®æ ç¶æï¼å·²å®¡æ ¸ / å®¡æ ¸ä¸éè¿ï¼ |
| | | * @param reviewerId å®¡æ ¸äººç¼å· |
| | | * @param reviewerName å®¡æ ¸äººå§å |
| | | * @param reviewRemark å®¡æ ¸æè§ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int auditTechConfirm(Long id, Integer status, Long reviewerId, |
| | | String reviewerName, String reviewRemark) { |
| | | return update(null, new LambdaUpdateWrapper<ProductTechConfirmDO>() |
| | | .eq(ProductTechConfirmDO::getId, id) |
| | | .set(ProductTechConfirmDO::getStatus, status) |
| | | .set(ProductTechConfirmDO::getReviewerId, reviewerId) |
| | | .set(ProductTechConfirmDO::getReviewerName, reviewerName) |
| | | .set(ProductTechConfirmDO::getReviewTime, LocalDateTime.now()) |
| | | .set(ProductTechConfirmDO::getReviewRemark, reviewRemark)); |
| | | } |
| | | |
| | | } |
| | |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.equipmentreceipt.vo.MesWmEquipmentReceiptPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.equipmentreceipt.MesWmEquipmentReceiptDO; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * MES 设å¤å
¥åºå Mapper |
| | |
| | | return selectOne(MesWmEquipmentReceiptDO::getCode, code); |
| | | } |
| | | |
| | | /** |
| | | * æäº¤å®¡æ¹ï¼ç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | * |
| | | * ç¨ UpdateWrapper èé updateByIdï¼MyBatis-Plus é»è®¤æ´æ°çç¥å¿½ç¥ nullï¼ |
| | | * ç´æ¥ updateById æ æ³æå®¡æ ¸ä¸éè¿åæ®ççå®¡æ ¸äºº / å®¡æ ¸æ¶é´ / å®¡æ ¸æè§æ¸
空ã |
| | | * |
| | | * @param id ç¼å· |
| | | * @param status ç®æ ç¶æï¼å®¡æ¹ä¸ï¼ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int submitAndResetAuditInfo(Long id, Integer status) { |
| | | return update(null, new LambdaUpdateWrapper<MesWmEquipmentReceiptDO>() |
| | | .eq(MesWmEquipmentReceiptDO::getId, id) |
| | | .set(MesWmEquipmentReceiptDO::getStatus, status) |
| | | .set(MesWmEquipmentReceiptDO::getReviewerId, null) |
| | | .set(MesWmEquipmentReceiptDO::getReviewerName, null) |
| | | .set(MesWmEquipmentReceiptDO::getReviewTime, null) |
| | | .set(MesWmEquipmentReceiptDO::getReviewRemark, null)); |
| | | } |
| | | |
| | | /** |
| | | * å®¡æ ¸ï¼åå
¥å®¡æ ¸ç»æãå®¡æ ¸äººä¸å®¡æ ¸æè§ |
| | | * |
| | | * @param id ç¼å· |
| | | * @param status ç®æ ç¶æï¼å·²å®¡æ¹ / èç¨¿ï¼ |
| | | * @param reviewerId å®¡æ ¸äººç¼å· |
| | | * @param reviewerName å®¡æ ¸äººå§å |
| | | * @param reviewRemark å®¡æ ¸æè§ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int auditEquipmentReceipt(Long id, Integer status, Long reviewerId, |
| | | String reviewerName, String reviewRemark) { |
| | | return update(null, new LambdaUpdateWrapper<MesWmEquipmentReceiptDO>() |
| | | .eq(MesWmEquipmentReceiptDO::getId, id) |
| | | .set(MesWmEquipmentReceiptDO::getStatus, status) |
| | | .set(MesWmEquipmentReceiptDO::getReviewerId, reviewerId) |
| | | .set(MesWmEquipmentReceiptDO::getReviewerName, reviewerName) |
| | | .set(MesWmEquipmentReceiptDO::getReviewTime, LocalDateTime.now()) |
| | | .set(MesWmEquipmentReceiptDO::getReviewRemark, reviewRemark)); |
| | | } |
| | | |
| | | } |
| | |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.MesWmItemReceiptPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptDO; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | return selectOne(MesWmItemReceiptDO::getNoticeId, noticeId); |
| | | } |
| | | |
| | | /** |
| | | * æäº¤å®¡æ¹ï¼ç½®ä¸ºå¾
䏿¶ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | * |
| | | * ç¨ UpdateWrapper èé updateByIdï¼MyBatis-Plus é»è®¤æ´æ°çç¥å¿½ç¥ nullï¼ |
| | | * ç´æ¥ updateById æ æ³æå®¡æ ¸ä¸éè¿åæ®ççå®¡æ ¸äºº / å®¡æ ¸æ¶é´ / å®¡æ ¸æè§æ¸
空ã |
| | | * |
| | | * @param id ç¼å· |
| | | * @param status ç®æ ç¶æï¼å¾
䏿¶ï¼ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int submitAndResetAuditInfo(Long id, Integer status) { |
| | | return update(null, new LambdaUpdateWrapper<MesWmItemReceiptDO>() |
| | | .eq(MesWmItemReceiptDO::getId, id) |
| | | .set(MesWmItemReceiptDO::getStatus, status) |
| | | .set(MesWmItemReceiptDO::getReviewerId, null) |
| | | .set(MesWmItemReceiptDO::getReviewerName, null) |
| | | .set(MesWmItemReceiptDO::getReviewTime, null) |
| | | .set(MesWmItemReceiptDO::getReviewRemark, null)); |
| | | } |
| | | |
| | | /** |
| | | * å®¡æ ¸ï¼åå
¥å®¡æ ¸ç»æãå®¡æ ¸äººä¸å®¡æ ¸æè§ |
| | | * |
| | | * @param id ç¼å· |
| | | * @param status ç®æ ç¶æï¼å¾
æ§è¡å
¥åº / èç¨¿ï¼ |
| | | * @param reviewerId å®¡æ ¸äººç¼å· |
| | | * @param reviewerName å®¡æ ¸äººå§å |
| | | * @param reviewRemark å®¡æ ¸æè§ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int auditItemReceipt(Long id, Integer status, Long reviewerId, |
| | | String reviewerName, String reviewRemark) { |
| | | return update(null, new LambdaUpdateWrapper<MesWmItemReceiptDO>() |
| | | .eq(MesWmItemReceiptDO::getId, id) |
| | | .set(MesWmItemReceiptDO::getStatus, status) |
| | | .set(MesWmItemReceiptDO::getReviewerId, reviewerId) |
| | | .set(MesWmItemReceiptDO::getReviewerName, reviewerName) |
| | | .set(MesWmItemReceiptDO::getReviewTime, LocalDateTime.now()) |
| | | .set(MesWmItemReceiptDO::getReviewRemark, reviewRemark)); |
| | | } |
| | | |
| | | } |
| | |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.miscissue.vo.MesWmMiscIssuePageReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.miscissue.MesWmMiscIssueDO; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | return selectList(MesWmMiscIssueDO::getStatus, status); |
| | | } |
| | | |
| | | /** |
| | | * æäº¤å®¡æ¹ï¼ç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | * |
| | | * ç¨ UpdateWrapper èé updateByIdï¼MyBatis-Plus é»è®¤æ´æ°çç¥å¿½ç¥ nullï¼ |
| | | * ç´æ¥ updateById æ æ³æå®¡æ ¸ä¸éè¿åæ®ççå®¡æ ¸äºº / å®¡æ ¸æ¶é´ / å®¡æ ¸æè§æ¸
空ã |
| | | * |
| | | * @param id ç¼å· |
| | | * @param status ç®æ ç¶æï¼å®¡æ¹ä¸ï¼ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int submitAndResetAuditInfo(Long id, Integer status) { |
| | | return update(null, new LambdaUpdateWrapper<MesWmMiscIssueDO>() |
| | | .eq(MesWmMiscIssueDO::getId, id) |
| | | .set(MesWmMiscIssueDO::getStatus, status) |
| | | .set(MesWmMiscIssueDO::getReviewerId, null) |
| | | .set(MesWmMiscIssueDO::getReviewerName, null) |
| | | .set(MesWmMiscIssueDO::getReviewTime, null) |
| | | .set(MesWmMiscIssueDO::getReviewRemark, null)); |
| | | } |
| | | |
| | | /** |
| | | * å®¡æ ¸ï¼åå
¥å®¡æ ¸ç»æãå®¡æ ¸äººä¸å®¡æ ¸æè§ |
| | | * |
| | | * @param id ç¼å· |
| | | * @param status ç®æ ç¶æï¼å¾
æ§è¡åºåº / èç¨¿ï¼ |
| | | * @param reviewerId å®¡æ ¸äººç¼å· |
| | | * @param reviewerName å®¡æ ¸äººå§å |
| | | * @param reviewRemark å®¡æ ¸æè§ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int auditMiscIssue(Long id, Integer status, Long reviewerId, |
| | | String reviewerName, String reviewRemark) { |
| | | return update(null, new LambdaUpdateWrapper<MesWmMiscIssueDO>() |
| | | .eq(MesWmMiscIssueDO::getId, id) |
| | | .set(MesWmMiscIssueDO::getStatus, status) |
| | | .set(MesWmMiscIssueDO::getReviewerId, reviewerId) |
| | | .set(MesWmMiscIssueDO::getReviewerName, reviewerName) |
| | | .set(MesWmMiscIssueDO::getReviewTime, LocalDateTime.now()) |
| | | .set(MesWmMiscIssueDO::getReviewRemark, reviewRemark)); |
| | | } |
| | | |
| | | } |
| | |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.miscreceipt.vo.MesWmMiscReceiptPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.miscreceipt.MesWmMiscReceiptDO; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * MES æé¡¹å
¥åºå Mapper |
| | |
| | | return selectOne(MesWmMiscReceiptDO::getCode, code); |
| | | } |
| | | |
| | | /** |
| | | * æäº¤å®¡æ¹ï¼ç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | * |
| | | * ç¨ UpdateWrapper èé updateByIdï¼MyBatis-Plus é»è®¤æ´æ°çç¥å¿½ç¥ nullï¼ |
| | | * ç´æ¥ updateById æ æ³æå®¡æ ¸ä¸éè¿åæ®ççå®¡æ ¸äºº / å®¡æ ¸æ¶é´ / å®¡æ ¸æè§æ¸
空ã |
| | | * |
| | | * @param id ç¼å· |
| | | * @param status ç®æ ç¶æï¼å®¡æ¹ä¸ï¼ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int submitAndResetAuditInfo(Long id, Integer status) { |
| | | return update(null, new LambdaUpdateWrapper<MesWmMiscReceiptDO>() |
| | | .eq(MesWmMiscReceiptDO::getId, id) |
| | | .set(MesWmMiscReceiptDO::getStatus, status) |
| | | .set(MesWmMiscReceiptDO::getReviewerId, null) |
| | | .set(MesWmMiscReceiptDO::getReviewerName, null) |
| | | .set(MesWmMiscReceiptDO::getReviewTime, null) |
| | | .set(MesWmMiscReceiptDO::getReviewRemark, null)); |
| | | } |
| | | |
| | | /** |
| | | * å®¡æ ¸ï¼åå
¥å®¡æ ¸ç»æãå®¡æ ¸äººä¸å®¡æ ¸æè§ |
| | | * |
| | | * @param id ç¼å· |
| | | * @param status ç®æ ç¶æï¼å·²å®¡æ¹ / èç¨¿ï¼ |
| | | * @param reviewerId å®¡æ ¸äººç¼å· |
| | | * @param reviewerName å®¡æ ¸äººå§å |
| | | * @param reviewRemark å®¡æ ¸æè§ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int auditMiscReceipt(Long id, Integer status, Long reviewerId, |
| | | String reviewerName, String reviewRemark) { |
| | | return update(null, new LambdaUpdateWrapper<MesWmMiscReceiptDO>() |
| | | .eq(MesWmMiscReceiptDO::getId, id) |
| | | .set(MesWmMiscReceiptDO::getStatus, status) |
| | | .set(MesWmMiscReceiptDO::getReviewerId, reviewerId) |
| | | .set(MesWmMiscReceiptDO::getReviewerName, reviewerName) |
| | | .set(MesWmMiscReceiptDO::getReviewTime, LocalDateTime.now()) |
| | | .set(MesWmMiscReceiptDO::getReviewRemark, reviewRemark)); |
| | | } |
| | | |
| | | } |
| | |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.MesWmReturnVendorPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor.MesWmReturnVendorDO; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * MES ä¾åºåéè´§å Mapper |
| | |
| | | return selectOne(MesWmReturnVendorDO::getCode, code); |
| | | } |
| | | |
| | | /** |
| | | * æäº¤å®¡æ¹ï¼ç½®ä¸ºå¾
æ£è´§ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | * |
| | | * ç¨ UpdateWrapper èé updateByIdï¼MyBatis-Plus é»è®¤æ´æ°çç¥å¿½ç¥ nullï¼ |
| | | * ç´æ¥ updateById æ æ³æå®¡æ ¸ä¸éè¿åæ®ççå®¡æ ¸äºº / å®¡æ ¸æ¶é´ / å®¡æ ¸æè§æ¸
空ã |
| | | * |
| | | * @param id ç¼å· |
| | | * @param status ç®æ ç¶æï¼å¾
æ£è´§ï¼ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int submitAndResetAuditInfo(Long id, Integer status) { |
| | | return update(null, new LambdaUpdateWrapper<MesWmReturnVendorDO>() |
| | | .eq(MesWmReturnVendorDO::getId, id) |
| | | .set(MesWmReturnVendorDO::getStatus, status) |
| | | .set(MesWmReturnVendorDO::getReviewerId, null) |
| | | .set(MesWmReturnVendorDO::getReviewerName, null) |
| | | .set(MesWmReturnVendorDO::getReviewTime, null) |
| | | .set(MesWmReturnVendorDO::getReviewRemark, null)); |
| | | } |
| | | |
| | | /** |
| | | * å®¡æ ¸ï¼åå
¥å®¡æ ¸ç»æãå®¡æ ¸äººä¸å®¡æ ¸æè§ |
| | | * |
| | | * @param id ç¼å· |
| | | * @param status ç®æ ç¶æï¼å¾
æ§è¡éè´§ / èç¨¿ï¼ |
| | | * @param reviewerId å®¡æ ¸äººç¼å· |
| | | * @param reviewerName å®¡æ ¸äººå§å |
| | | * @param reviewRemark å®¡æ ¸æè§ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int auditReturnVendor(Long id, Integer status, Long reviewerId, |
| | | String reviewerName, String reviewRemark) { |
| | | return update(null, new LambdaUpdateWrapper<MesWmReturnVendorDO>() |
| | | .eq(MesWmReturnVendorDO::getId, id) |
| | | .set(MesWmReturnVendorDO::getStatus, status) |
| | | .set(MesWmReturnVendorDO::getReviewerId, reviewerId) |
| | | .set(MesWmReturnVendorDO::getReviewerName, reviewerName) |
| | | .set(MesWmReturnVendorDO::getReviewTime, LocalDateTime.now()) |
| | | .set(MesWmReturnVendorDO::getReviewRemark, reviewRemark)); |
| | | } |
| | | |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * MES çç¹ä»»å¡ Mapper |
| | | * |
| | |
| | | } |
| | | |
| | | /** |
| | | * æ¸
空 BPM æµç¨å®ä¾ç¼å· |
| | | * å¼å§çç¹ï¼ç½®ä¸ºçç¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | * |
| | | * ç¨äºçç¹ç»æå®¡æ¹è¢«é©³å/åæ¶å置空ï¼ä»»å¡åå°å¯éæ°æäº¤ç»æå®¡æ¹çç¶æ |
| | | * ç¨ UpdateWrapper èé updateByIdï¼MyBatis-Plus é»è®¤æ´æ°çç¥å¿½ç¥ nullï¼ |
| | | * ç´æ¥ updateById æ æ³æå®¡æ ¸äºº / å®¡æ ¸æ¶é´ / å®¡æ ¸æè§çæ£æ¸
空ã |
| | | * |
| | | * @param id çç¹ä»»å¡ç¼å· |
| | | * @param status ç®æ ç¶æï¼çç¹ä¸ï¼ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int submitAndResetAuditInfo(Long id, Integer status) { |
| | | return update(null, new LambdaUpdateWrapper<MesWmStockTakingTaskDO>() |
| | | .eq(MesWmStockTakingTaskDO::getId, id) |
| | | .set(MesWmStockTakingTaskDO::getStatus, status) |
| | | .set(MesWmStockTakingTaskDO::getReviewerId, null) |
| | | .set(MesWmStockTakingTaskDO::getReviewerName, null) |
| | | .set(MesWmStockTakingTaskDO::getReviewTime, null) |
| | | .set(MesWmStockTakingTaskDO::getReviewRemark, null)); |
| | | } |
| | | |
| | | /** |
| | | * æäº¤ç»æå®¡æ¹ï¼åå
¥æäº¤æ¶é´å¹¶æ¸
空ä¸ä¸è½®çå®¡æ ¸äººä¸å®¡æ ¸æè§ |
| | | * |
| | | * ä»»å¡ç¶æä¿æãçç¹ä¸ãä¸åï¼è¯¥ç¶æåæ¶æ¿è½½çç¹ä¸ä¸ç»æå®¡æ¹ä¸ä¸¤ä¸ªé¶æ®µï¼ï¼ |
| | | * 以 reviewTime éç©ºä¸ reviewerId 为空表示ãç»æå®¡æ¹å·²æäº¤ãçå¾
å®¡æ ¸ãã |
| | | * ä¸ä¿®æ¹ status åæ®µï¼æ
ç¨ UpdateWrapper 精确åå
¥ã |
| | | * |
| | | * @param id çç¹ä»»å¡ç¼å· |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int markResultApprovalSubmitted(Long id) { |
| | | return update(null, new LambdaUpdateWrapper<MesWmStockTakingTaskDO>() |
| | | .eq(MesWmStockTakingTaskDO::getId, id) |
| | | .set(MesWmStockTakingTaskDO::getReviewTime, LocalDateTime.now()) |
| | | .set(MesWmStockTakingTaskDO::getReviewerId, null) |
| | | .set(MesWmStockTakingTaskDO::getReviewerName, null) |
| | | .set(MesWmStockTakingTaskDO::getReviewRemark, null)); |
| | | } |
| | | |
| | | /** |
| | | * å®¡æ ¸ç»æï¼åå
¥å®¡æ ¸ç»æãå®¡æ ¸äººä¸å®¡æ ¸æè§ |
| | | * |
| | | * @param id çç¹ä»»å¡ç¼å· |
| | | * @param status ç®æ ç¶æï¼å·²å®æ / çç¹ä¸ï¼ |
| | | * @param reviewerId å®¡æ ¸äººç¼å· |
| | | * @param reviewerName å®¡æ ¸äººå§å |
| | | * @param reviewRemark å®¡æ ¸æè§ |
| | | * @return å½±åè¡æ° |
| | | */ |
| | | default int auditStockTakingTask(Long id, Integer status, Long reviewerId, |
| | | String reviewerName, String reviewRemark) { |
| | | return update(null, new LambdaUpdateWrapper<MesWmStockTakingTaskDO>() |
| | | .eq(MesWmStockTakingTaskDO::getId, id) |
| | | .set(MesWmStockTakingTaskDO::getStatus, status) |
| | | .set(MesWmStockTakingTaskDO::getReviewerId, reviewerId) |
| | | .set(MesWmStockTakingTaskDO::getReviewerName, reviewerName) |
| | | .set(MesWmStockTakingTaskDO::getReviewTime, LocalDateTime.now()) |
| | | .set(MesWmStockTakingTaskDO::getReviewRemark, reviewRemark)); |
| | | } |
| | | |
| | | /** |
| | | * æ¸
ç©ºå®¡æ ¸æ è®° |
| | | * |
| | | * ç¨äºä»»å¡åæ¶åæ¸
é¤ç»æå®¡æ¹ç迹 |
| | | * |
| | | * @param id çç¹ä»»å¡ç¼å· |
| | | */ |
| | | default void clearProcessInstanceId(Long id) { |
| | | default void clearAuditInfo(Long id) { |
| | | update(null, new LambdaUpdateWrapper<MesWmStockTakingTaskDO>() |
| | | .eq(MesWmStockTakingTaskDO::getId, id) |
| | | .set(MesWmStockTakingTaskDO::getProcessInstanceId, null)); |
| | | .set(MesWmStockTakingTaskDO::getReviewerId, null) |
| | | .set(MesWmStockTakingTaskDO::getReviewerName, null) |
| | | .set(MesWmStockTakingTaskDO::getReviewTime, null) |
| | | .set(MesWmStockTakingTaskDO::getReviewRemark, null)); |
| | | } |
| | | |
| | | default PageResult<MesWmStockTakingTaskDO> selectPage(MesWmStockTakingTaskPageReqVO reqVO) { |
| | |
| | | ErrorCode WM_ITEM_RECEIPT_STATUS_ERROR = new ErrorCode(1_040_705_005, "å
¥åºåç¶æä¸æ£ç¡®"); |
| | | ErrorCode WM_ITEM_RECEIPT_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_705_006, "已宿æå·²åæ¶çå
¥åºåä¸å
è®¸åæ¶"); |
| | | ErrorCode WM_ITEM_RECEIPT_ALREADY_EXISTS = new ErrorCode(1_040_705_007, "该å°è´§éç¥åå·²çæå
¥åºåï¼ä¸è½éå¤çæ"); |
| | | ErrorCode WM_ITEM_RECEIPT_NOT_APPROVING = new ErrorCode(1_040_705_008, "åªæå¾
䏿¶ç¶æçéè´å
¥åºåæè½å®¡æ ¸"); |
| | | ErrorCode WM_ITEM_RECEIPT_REJECT_REASON_REQUIRED = new ErrorCode(1_040_705_009, "å®¡æ ¸ä¸éè¿æ¶å¿
须填åä¸éè¿åå "); |
| | | ErrorCode WM_PURCHASE_ORDER_NOT_EXISTS = new ErrorCode(1_040_705_008, "éè´è®¢åä¸åå¨"); |
| | | ErrorCode WM_PURCHASE_ORDER_NO_ITEM = new ErrorCode(1_040_705_008, "éè´è®¢åæ æç»æ°æ®"); |
| | | ErrorCode WM_ITEM_RECEIPT_LINE_NOT_EXISTS = new ErrorCode(1_040_705_100, "éè´å
¥åºåè¡ä¸åå¨"); |
| | |
| | | ErrorCode WM_RETURN_VENDOR_CODE_DUPLICATE = new ErrorCode(1_040_711_005, "ä¾åºåéè´§åç¼å·å·²åå¨"); |
| | | ErrorCode WM_RETURN_VENDOR_NO_DETAIL = new ErrorCode(1_040_711_006, "ä¾åºåéè´§åæ²¡ææ£è´§æç»ï¼æ æ³æ§è¡éè´§"); |
| | | ErrorCode WM_RETURN_VENDOR_DETAIL_ITEM_MISMATCH = new ErrorCode(1_040_711_007, "æ£è´§æç»çç©æä¸éè´§åè¡çç©æä¸ä¸è´"); |
| | | ErrorCode WM_RETURN_VENDOR_NOT_APPROVING = new ErrorCode(1_040_711_008, "åªæå¾
æ£è´§ç¶æçä¾åºåéè´§åæè½å®¡æ ¸"); |
| | | ErrorCode WM_RETURN_VENDOR_REJECT_REASON_REQUIRED = new ErrorCode(1_040_711_009, "å®¡æ ¸ä¸éè¿æ¶å¿
须填åä¸éè¿åå "); |
| | | ErrorCode WM_RETURN_VENDOR_LINE_NOT_EXISTS = new ErrorCode(1_040_711_100, "ä¾åºåéè´§åè¡ä¸åå¨"); |
| | | ErrorCode WM_RETURN_VENDOR_DETAIL_NOT_EXISTS = new ErrorCode(1_040_711_200, "ä¾åºåéè´§åæç»ä¸åå¨"); |
| | | ErrorCode WM_RETURN_VENDOR_DETAIL_QUANTITY_INVALID = new ErrorCode(1_040_711_201, "éè´§æç»æ°éå¿
é¡»å¤§äº 0"); |
| | |
| | | ErrorCode WM_STOCK_TAKING_TASK_NOT_FINISHED = new ErrorCode(1_040_714_121, "åªæå·²å®æç¶æççç¹ä»»å¡æè½å¤çå·®å¼"); |
| | | ErrorCode WM_STOCK_TAKING_TASK_NO_RESULT = new ErrorCode(1_040_714_122, "çç¹ä»»å¡è³å°éè¦ä¸æ¡çç¹ç»ææå
许æäº¤ç»æå®¡æ¹"); |
| | | ErrorCode WM_STOCK_TAKING_TASK_ALREADY_SUBMIT_APPROVAL = new ErrorCode(1_040_714_123, "çç¹ç»æå®¡æ¹å·²æäº¤ï¼è¯·å¿éå¤æäº¤"); |
| | | ErrorCode WM_STOCK_TAKING_TASK_RESULT_NOT_SUBMITTED = new ErrorCode(1_040_714_124, "åªæå·²æäº¤ç»æå®¡æ¹ççç¹ä»»å¡æè½å®¡æ ¸"); |
| | | ErrorCode WM_STOCK_TAKING_TASK_REJECT_REASON_REQUIRED = new ErrorCode(1_040_714_125, "å®¡æ ¸ä¸éè¿æ¶å¿
须填åä¸éè¿åå "); |
| | | |
| | | // ========== MES ä»åºç®¡ç-éå®åºåºåï¼1-040-714-000ï¼ ========== |
| | | ErrorCode WM_PRODUCT_SALES_NOT_EXISTS = new ErrorCode(1_040_714_000, "éå®åºåºåä¸åå¨"); |
| | |
| | | ErrorCode WM_MISC_ISSUE_NO_LINE = new ErrorCode(1_040_715_003, "æé¡¹åºåºåè³å°éè¦ä¸æ¡è¡æ°æ®"); |
| | | ErrorCode WM_MISC_ISSUE_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_715_004, "æé¡¹åºåºå已宿æå·²åæ¶ï¼æ æ³åæ¶"); |
| | | ErrorCode WM_MISC_ISSUE_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_715_005, "æé¡¹åºåºåè¡æ°éä¸æç»æ°éä¸ä¸è´"); |
| | | ErrorCode WM_MISC_ISSUE_NOT_APPROVING = new ErrorCode(1_040_715_006, "åªæå®¡æ¹ä¸ç¶æçæé¡¹åºåºåæè½å®¡æ ¸"); |
| | | ErrorCode WM_MISC_ISSUE_REJECT_REASON_REQUIRED = new ErrorCode(1_040_715_007, "å®¡æ ¸ä¸éè¿æ¶å¿
须填åä¸éè¿åå "); |
| | | ErrorCode WM_MISC_ISSUE_LINE_NOT_EXISTS = new ErrorCode(1_040_715_100, "æé¡¹åºåºåè¡ä¸åå¨"); |
| | | ErrorCode WM_MISC_ISSUE_DETAIL_NOT_EXISTS = new ErrorCode(1_040_715_200, "æé¡¹åºåºåæç»ä¸åå¨"); |
| | | |
| | |
| | | ErrorCode WM_MISC_RECEIPT_STATUS_NOT_APPROVED = new ErrorCode(1_040_716_003, "åªæå·²å®¡æ¹ç¶ææå
许æ§è¡å
¥åº"); |
| | | ErrorCode WM_MISC_RECEIPT_NO_LINE = new ErrorCode(1_040_716_004, "è³å°éè¦ä¸æ¡è¡é¡¹ç®"); |
| | | ErrorCode WM_MISC_RECEIPT_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_716_005, "已宿æå·²åæ¶çå
¥åºåä¸å
è®¸åæ¶"); |
| | | ErrorCode WM_MISC_RECEIPT_NOT_APPROVING = new ErrorCode(1_040_716_006, "åªæå®¡æ¹ä¸ç¶æçæé¡¹å
¥åºåæè½å®¡æ ¸"); |
| | | ErrorCode WM_MISC_RECEIPT_REJECT_REASON_REQUIRED = new ErrorCode(1_040_716_007, "å®¡æ ¸ä¸éè¿æ¶å¿
须填åä¸éè¿åå "); |
| | | ErrorCode WM_MISC_RECEIPT_LINE_NOT_EXISTS = new ErrorCode(1_040_716_100, "æé¡¹å
¥åºåè¡ä¸åå¨"); |
| | | ErrorCode WM_MISC_RECEIPT_WAREHOUSE_REQUIRED = new ErrorCode(1_040_716_101, "ä»åºä¸è½ä¸ºç©º"); |
| | | ErrorCode WM_MISC_RECEIPT_QUANTITY_INVALID = new ErrorCode(1_040_716_102, "å
¥åºæ°éå¿
é¡»å¤§äº 0"); |
| | |
| | | ErrorCode WM_EQUIP_RECEIPT_LINE_NOT_EXISTS = new ErrorCode(1_040_733_100, "设å¤å
¥åºåè¡ä¸åå¨"); |
| | | ErrorCode WM_EQUIP_RECEIPT_MACHINERY_NOT_VALID = new ErrorCode(1_040_733_101, "æéè®¾å¤æªå
³èç©æï¼æ æ³å
¥åº"); |
| | | ErrorCode WM_EQUIP_RECEIPT_QUANTITY_INVALID = new ErrorCode(1_040_733_102, "å
¥åºæ°éå¿
é¡»å¤§äº 0"); |
| | | ErrorCode WM_EQUIP_RECEIPT_NOT_APPROVING = new ErrorCode(1_040_733_006, "åªæå®¡æ¹ä¸ç¶æç设å¤å
¥åºåæè½å®¡æ ¸"); |
| | | ErrorCode WM_EQUIP_RECEIPT_REJECT_REASON_REQUIRED = new ErrorCode(1_040_733_007, "å®¡æ ¸ä¸éè¿æ¶å¿
须填åä¸éè¿åå "); |
| | | |
| | | // ========== MES ä»åºç®¡ç-è£
ç®±åï¼1-040-740-000ï¼ ========== |
| | | ErrorCode WM_PACKAGE_NOT_EXISTS = new ErrorCode(1_040_740_000, "è£
ç®±åä¸åå¨"); |
| | |
| | | ErrorCode PD_PROJECT_NOT_AUDIT_FOR_ARCHIVE = new ErrorCode(1_040_800_006, "åªæå¾
彿¡£ç¶æçè®¾è®¡é¡¹ç®æè½å½æ¡£"); |
| | | ErrorCode PD_PROJECT_AUDIT_NOT_FINISHED = new ErrorCode(1_040_800_007, "该项ç®ä¸å卿ªå®¡æ ¸çèµæï¼è¯·å
宿ææèµæå®¡æ ¸"); |
| | | ErrorCode PD_PROJECT_NOT_UPLOAD_FOR_APPROVAL = new ErrorCode(1_040_800_008, "åªæå¾
å®¡æ ¸ç¶æçè®¾è®¡é¡¹ç®æè½æäº¤å®¡æ¹"); |
| | | ErrorCode PD_PROJECT_NOT_APPROVING = new ErrorCode(1_040_800_009, "设计项ç®ä¸å¤äºå®¡æ¹ä¸ç¶æ"); |
| | | ErrorCode PD_PROJECT_BPM_CATEGORY_NOT_EXISTS = new ErrorCode(1_040_800_010, "设计项ç®å®¡æ¹åç±»ä¸åå¨ï¼è¯·å
é
ç½® BPM å®¡æ¹æµç¨"); |
| | | ErrorCode PD_PROJECT_NOT_APPROVING = new ErrorCode(1_040_800_009, "åªæå®¡æ¹ä¸ç¶æçè®¾è®¡é¡¹ç®æè½å®¡æ ¸"); |
| | | ErrorCode PD_PROJECT_AUDIT_REJECT_REASON_REQUIRED = new ErrorCode(1_040_800_010, "å®¡æ ¸ä¸éè¿æ¶å¿
须填åä¸éè¿åå "); |
| | | |
| | | // ========== MES 产å设计-èµæå表ï¼1-040-801-000ï¼ ========== |
| | | ErrorCode PD_DOCUMENT_NOT_EXISTS = new ErrorCode(1_040_801_000, "è®¾è®¡èµæä¸åå¨"); |
| | |
| | | // ========== MES 产å设计-ææ¯ç¡®è®¤å½ï¼1-040-808-000ï¼ ========== |
| | | ErrorCode PD_TECH_CONFIRM_NOT_EXISTS = new ErrorCode(1_040_808_000, "ææ¯ç¡®è®¤å½ä¸åå¨"); |
| | | ErrorCode PD_TECH_CONFIRM_NO_DUPLICATE = new ErrorCode(1_040_808_001, "确认å½ç¼å·å·²åå¨"); |
| | | ErrorCode PD_TECH_CONFIRM_NOT_EDITABLE = new ErrorCode(1_040_808_002, "åªæè稿æå®¡æ ¸ä¸éè¿ç¶æçææ¯ç¡®è®¤å½æè½ä¿®æ¹æå é¤"); |
| | | ErrorCode PD_TECH_CONFIRM_NOT_EDITABLE_FOR_SUBMIT = new ErrorCode(1_040_808_003, "åªæè稿æå®¡æ ¸ä¸éè¿ç¶æçææ¯ç¡®è®¤å½æè½æäº¤å®¡æ ¸"); |
| | | ErrorCode PD_TECH_CONFIRM_NOT_PENDING_AUDIT = new ErrorCode(1_040_808_004, "åªæå¾
å®¡æ ¸ç¶æçææ¯ç¡®è®¤å½æè½å®¡æ ¸"); |
| | | ErrorCode PD_TECH_CONFIRM_REJECT_REASON_REQUIRED = new ErrorCode(1_040_808_007, "å®¡æ ¸ä¸éè¿æ¶å¿
须填åä¸éè¿åå "); |
| | | ErrorCode PD_TECH_CONFIRM_NOT_AUDITED_FOR_CUSTOMER_CONFIRM = new ErrorCode(1_040_808_008, "åªæå·²å®¡æ ¸ç¶æçææ¯ç¡®è®¤å½æè½è¿è¡å®¢æ·ç¡®è®¤"); |
| | | |
| | | // ========== MES 产å设计-äº§åæ¡£æ¡ä¸åºç¡æ°æ®ï¼1-040-809-000ï¼ ========== |
| | | ErrorCode PD_PRODUCT_NOT_EXISTS = new ErrorCode(1_040_809_000, "äº§åæ¡£æ¡ä¸åå¨"); |
| | |
| | | /** |
| | | * å¾
彿¡£ |
| | | * |
| | | * å¯¹åº MesPdProjectService#updateProjectAuditStatus æ¹æ³ï¼BPM 审æ¹éè¿åï¼ |
| | | * å¯¹åº MesPdProjectService#auditProject æ¹æ³ï¼å®¡æ ¸éè¿åï¼ |
| | | */ |
| | | AUDIT(MesPdStatusConstants.AUDIT, "å¾
彿¡£"), |
| | | /** |
| | |
| | | /** |
| | | * 审æ¹ä¸ |
| | | * |
| | | * å¯¹åº MesPdProjectService#submitProjectApproval æ¹æ³ |
| | | * å¯¹åº MesPdProjectService#submitProjectApproval æ¹æ³ï¼å®¡æ ¸éè¿å置为å¾
彿¡£ï¼ä¸éè¿éåå¾
å®¡æ ¸ |
| | | */ |
| | | APPROVING(MesPdStatusConstants.APPROVING, "审æ¹ä¸"); |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.enums.pd; |
| | | |
| | | import cn.iocoder.yudao.framework.common.core.ArrayValuable; |
| | | import lombok.Getter; |
| | | import lombok.RequiredArgsConstructor; |
| | | |
| | | import java.util.Arrays; |
| | | |
| | | /** |
| | | * 产å设计-ææ¯ç¡®è®¤å½ç¶æ |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @RequiredArgsConstructor |
| | | @Getter |
| | | public enum MesPdTechConfirmStatusEnum implements ArrayValuable<Integer> { |
| | | |
| | | DRAFT(0, "è稿"), |
| | | PENDING_AUDIT(1, "å¾
å®¡æ ¸"), |
| | | AUDITED(2, "å·²å®¡æ ¸"), |
| | | CUSTOMER_CONFIRMED(3, "客æ·å·²ç¡®è®¤"), |
| | | REJECTED(4, "å®¡æ ¸ä¸éè¿"); |
| | | |
| | | private final Integer status; |
| | | private final String name; |
| | | |
| | | public static final Integer[] ARRAYS = Arrays.stream(values()).map(MesPdTechConfirmStatusEnum::getStatus).toArray(Integer[]::new); |
| | | |
| | | public static String getNameByStatus(Integer status) { |
| | | if (status == null) { |
| | | return null; |
| | | } |
| | | for (MesPdTechConfirmStatusEnum e : values()) { |
| | | if (e.getStatus().equals(status)) { |
| | | return e.getName(); |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public Integer[] array() { |
| | | return ARRAYS; |
| | | } |
| | | |
| | | } |
| | |
| | | /** |
| | | * å¾
æ§è¡åºåº |
| | | * |
| | | * å¯¹åº MesWmMiscIssueService#updateMiscIssueAuditStatus æ¹æ³ |
| | | * å¯¹åº MesWmMiscIssueService#auditMiscIssue æ¹æ³ |
| | | */ |
| | | APPROVED(MesOrderStatusConstants.APPROVED, "å¾
æ§è¡åºåº"), |
| | | /** |
| | |
| | | /** |
| | | * å·²å®¡æ¹ |
| | | * |
| | | * å¯¹åº MesWmMiscReceiptService#updateMiscReceiptAuditStatus æ¹æ³ |
| | | * å¯¹åº MesWmMiscReceiptService#auditMiscReceipt æ¹æ³ |
| | | */ |
| | | APPROVED(MesOrderStatusConstants.APPROVED, "已审æ¹"), |
| | | /** |
| | |
| | | /** |
| | | * 已宿 |
| | | * |
| | | * çç¹ç»æå®¡æ¹éè¿åï¼ç±ç»æå®¡æ¹åè°ç½®ä¸ºå·²å®æå¹¶èªå¨æ ¸éå·®å¼ |
| | | * çç¹ç»æå®¡æ ¸éè¿åï¼ç±ç»æå®¡æ ¸ç½®ä¸ºå·²å®æå¹¶èªå¨æ ¸éå·®å¼ |
| | | */ |
| | | FINISHED(MesOrderStatusConstants.FINISHED, "已宿"), |
| | | /** |
| | |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | /** |
| | | * MES è®¾è®¡é¡¹ç® Service æ¥å£ |
| | |
| | | |
| | | /** |
| | | * æäº¤è®¾è®¡é¡¹ç®å®¡æ¹ï¼å¾
å®¡æ ¸â审æ¹ä¸ï¼ |
| | | * <p> |
| | | * å建 BPM æµç¨å®ä¾ï¼å®¡æ¹éè¿åç±çå¬å¨åè°æ´æ°ä¸ºå¾
彿¡£ |
| | | * |
| | | * å®¡æ ¸äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç mes_pd_project_approveï¼ï¼ |
| | | * æäº¤æ¶æ éæå®ï¼æªå¯ç¨å®¡æ¹ææªé
ç½®ææå®¡æ ¸äººæ¶æåºä¸å¡å¼å¸¸ã |
| | | * |
| | | * @param id ç¼å· |
| | | * @param processDefinitionKey æµç¨å®ä¹ Key |
| | | */ |
| | | void submitProjectApproval(Long id, String processDefinitionKey); |
| | | void submitProjectApproval(Long id); |
| | | |
| | | /** |
| | | * è·å¾è®¾è®¡é¡¹ç®å®¡æ¹æµç¨å表 |
| | | * è·å¾è®¾è®¡é¡¹ç®å®¡æ¹çå®¡æ ¸äººç¼å·éå |
| | | * |
| | | * @return æµç¨å表ï¼id/name/version/keyï¼ |
| | | * ä¾åç«¯å¤æå½åç»å½ç¨æ·æ¯å¦åºå±ç¤ºãå®¡æ ¸ãæé®ï¼æªé
ç½®æ¶è¿å空éåã |
| | | * |
| | | * @return å®¡æ ¸äººç¨æ·ç¼å·éå |
| | | */ |
| | | List<Map<String, Object>> getProjectApproveProcessDefinitionList(); |
| | | Set<Long> getProjectApproverUserIds(); |
| | | |
| | | /** |
| | | * æ´æ°è®¾è®¡é¡¹ç®å®¡æ¹ç¶æï¼BPM çå¬å¨åè°ï¼ |
| | | * å®¡æ ¸è®¾è®¡é¡¹ç®ï¼å®¡æ¹ä¸âå¾
彿¡£ / å¾
å®¡æ ¸ï¼ |
| | | * |
| | | * ä»
ä¸å¡ç¼ç mes_pd_project_approve é
ç½®çå®¡æ ¸äººå¯æä½ï¼å¤äººæ¶æç¾ï¼ï¼ä¸ä»
å¨å®¡æ¹ä¸ç¶æä¸å
许ã |
| | | * å®¡æ ¸éè¿ç½®ä¸ºå¾
彿¡£ï¼å®¡æ ¸ä¸éè¿å¿
须填ååå ï¼éåå¾
å®¡æ ¸ç¶æå¯ä¿®æ¹åéæ°æäº¤ã |
| | | * |
| | | * @param id ç¼å· |
| | | * @param bpmResult BPM 审æ¹ç»æ |
| | | * @param pass æ¯å¦éè¿ï¼true=éè¿ / false=ä¸éè¿ |
| | | * @param reviewRemark å®¡æ ¸æè§ï¼å®¡æ ¸ä¸éè¿æ¶å¿
å¡« |
| | | */ |
| | | void updateProjectAuditStatus(Long id, Integer bpmResult); |
| | | void auditProject(Long id, Boolean pass, String reviewRemark); |
| | | |
| | | /** |
| | | * 彿¡£è®¾è®¡é¡¹ç®ï¼å¾
彿¡£â已彿¡£ï¼ |
| | |
| | | package cn.iocoder.yudao.module.mes.service.pd.project; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | 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.dal.dataobject.definition.BpmCategoryDO; |
| | | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO; |
| | | import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatusEnum; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmCategoryService; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pd.project.vo.MesPdProjectPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pd.project.vo.MesPdProjectSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pd.document.MesPdDocumentDO; |
| | |
| | | import cn.iocoder.yudao.module.mes.enums.pd.MesPdProjectStatusEnum; |
| | | import cn.iocoder.yudao.module.mes.service.md.autocode.MesMdAutoCodeRecordService; |
| | | import cn.iocoder.yudao.module.mes.service.pd.document.MesPdDocumentService; |
| | | import cn.iocoder.yudao.module.system.api.approval.ApprovalConfigApi; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import jakarta.annotation.Resource; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.flowable.engine.repository.ProcessDefinition; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.util.ArrayList; |
| | | import java.util.Collection; |
| | | import java.util.Collections; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; |
| | |
| | | public class MesPdProjectServiceImpl implements MesPdProjectService { |
| | | |
| | | /** |
| | | * BPM 产å项ç®å®¡æ¹åç±»ç¼ç |
| | | * 设计项ç®å®¡æ¹çä¸å¡ç±»åç¼ç |
| | | * |
| | | * ä¸ system_approval_config.biz_type 对åºï¼å®¡æ ¸äººå¨ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãä¸ç»´æ¤ã |
| | | */ |
| | | private static final String BPM_PROCESS_DEFINITION_CATEGORY_CODE = "mes_pd_project_approve"; |
| | | private static final String PROJECT_APPROVE_BIZ_TYPE = "mes_pd_project_approve"; |
| | | |
| | | @Resource |
| | | private MesPdProjectMapper projectMapper; |
| | |
| | | private MesMdAutoCodeRecordService autoCodeRecordService; |
| | | |
| | | @Resource |
| | | private BpmProcessInstanceApi processInstanceApi; |
| | | private AdminUserApi adminUserApi; |
| | | |
| | | @Resource |
| | | private BpmCategoryService bpmCategoryService; |
| | | |
| | | @Resource |
| | | private BpmProcessDefinitionService bpmProcessDefinitionService; |
| | | private ApprovalConfigApi approvalConfigApi; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void submitProjectApproval(Long id, String processDefinitionKey) { |
| | | public void submitProjectApproval(Long id) { |
| | | // 1. æ ¡éªåå¨ + å¾
å®¡æ ¸ç¶æ |
| | | MesPdProjectDO project = validateProjectExists(id); |
| | | if (!MesPdProjectStatusEnum.UPLOAD.getStatus().equals(project.getStatus())) { |
| | |
| | | if (documentAuditMapper.existsPendingAuditByDocumentIds(documentIds)) { |
| | | throw exception(PD_PROJECT_AUDIT_NOT_FINISHED); |
| | | } |
| | | // 3. å建 BPM æµç¨å®ä¾ |
| | | String processInstanceId = processInstanceApi.createProcessInstance(getLoginUserId(), |
| | | new BpmProcessInstanceCreateReqDTO() |
| | | .setProcessDefinitionKey(processDefinitionKey) |
| | | .setBusinessKey(String.valueOf(id))); |
| | | // 4. æ´æ°é¡¹ç®ç¶æä¸ºå®¡æ¹ä¸ |
| | | projectMapper.updateById(MesPdProjectDO.builder() |
| | | .id(id) |
| | | .status(MesPdProjectStatusEnum.APPROVING.getStatus()) |
| | | .processInstanceId(processInstanceId) |
| | | .processDefinitionKey(processDefinitionKey) |
| | | .build()); |
| | | // 3. æ ¡éªå®¡æ¹é
置已å¯ç¨ä¸é
ç½®äºææå®¡æ ¸äººï¼æªé
ç½®æ¶æåºå¸¦æç¡®æç¤ºçä¸å¡å¼å¸¸ï¼ |
| | | approvalConfigApi.validateApprovalEnabledAndGetApprovers(PROJECT_APPROVE_BIZ_TYPE); |
| | | // 4. ç¶æç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | projectMapper.submitAndResetAuditInfo(id, MesPdProjectStatusEnum.APPROVING.getStatus()); |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getProjectApproveProcessDefinitionList() { |
| | | // 1. æ ¡éªåç±»æ¯å¦åå¨ |
| | | List<BpmCategoryDO> categories = bpmCategoryService.getCategoryListByCode( |
| | | Collections.singletonList(BPM_PROCESS_DEFINITION_CATEGORY_CODE)); |
| | | if (CollUtil.isEmpty(categories)) { |
| | | throw exception(PD_PROJECT_BPM_CATEGORY_NOT_EXISTS); |
| | | } |
| | | // 2. è·ååç±»ä¸çæµç¨å®ä¹ä¿¡æ¯ |
| | | List<BpmProcessDefinitionInfoDO> definitionInfoList = bpmProcessDefinitionService |
| | | .getProcessDefinitionInfoListByCategory(BPM_PROCESS_DEFINITION_CATEGORY_CODE); |
| | | if (CollUtil.isEmpty(definitionInfoList)) { |
| | | return Collections.emptyList(); |
| | | } |
| | | // 3. è¿æ»¤æ¿æ´»ç¶æï¼ä¿çææ°çæ¬ |
| | | Map<String, ProcessDefinition> latestVersionMap = new HashMap<>(); |
| | | for (BpmProcessDefinitionInfoDO info : definitionInfoList) { |
| | | ProcessDefinition pd = bpmProcessDefinitionService.getProcessDefinition(info.getProcessDefinitionId()); |
| | | if (pd == null || pd.isSuspended()) { |
| | | continue; |
| | | } |
| | | ProcessDefinition existing = latestVersionMap.get(pd.getKey()); |
| | | if (existing == null || pd.getVersion() > existing.getVersion()) { |
| | | latestVersionMap.put(pd.getKey(), pd); |
| | | } |
| | | } |
| | | // 4. è¿åæµç¨å®ä¹å表 |
| | | List<Map<String, Object>> result = new ArrayList<>(); |
| | | for (ProcessDefinition pd : latestVersionMap.values()) { |
| | | Map<String, Object> item = new HashMap<>(); |
| | | item.put("id", pd.getId()); |
| | | item.put("key", pd.getKey()); |
| | | item.put("name", pd.getName()); |
| | | result.add(item); |
| | | } |
| | | return result; |
| | | public Set<Long> getProjectApproverUserIds() { |
| | | return approvalConfigApi.getApproverUserIds(PROJECT_APPROVE_BIZ_TYPE); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void updateProjectAuditStatus(Long id, Integer bpmResult) { |
| | | public void auditProject(Long id, Boolean pass, String reviewRemark) { |
| | | // 1. æ ¡éªåå¨ |
| | | MesPdProjectDO project = validateProjectExists(id); |
| | | // 2. æ ¡éªå¤äºå®¡æ¹ä¸ç¶æ |
| | | if (!MesPdProjectStatusEnum.APPROVING.getStatus().equals(project.getStatus())) { |
| | | log.warn("[updateProjectAuditStatus] 设计项ç®({}) ä¸å¤äºå®¡æ¹ä¸ç¶æï¼å½åç¶æï¼{}", id, project.getStatus()); |
| | | throw exception(PD_PROJECT_NOT_APPROVING); |
| | | } |
| | | // 3. æ ¡éªå½åç»å½ç¨æ·æ¯è¯¥ä¸å¡ç±»åçå®¡æ ¸äººï¼æç¾ï¼ä»»ä¸äººåå¯å®¡æ ¸ï¼ |
| | | Long userId = getLoginUserId(); |
| | | approvalConfigApi.validateApprover(PROJECT_APPROVE_BIZ_TYPE, userId); |
| | | // 4. å®¡æ ¸ä¸éè¿ï¼å¿
须填ååå ï¼éåå¾
å®¡æ ¸ç¶æï¼å¯ä¿®æ¹åéæ°æäº¤ |
| | | if (!Boolean.TRUE.equals(pass)) { |
| | | if (StrUtil.isBlank(reviewRemark)) { |
| | | throw exception(PD_PROJECT_AUDIT_REJECT_REASON_REQUIRED); |
| | | } |
| | | projectMapper.auditProject(id, MesPdProjectStatusEnum.UPLOAD.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | return; |
| | | } |
| | | // 2. æ ¹æ®å®¡æ¹ç»ææ´æ°ç¶æ |
| | | Integer newStatus = convertBpmResultToProjectStatus(bpmResult); |
| | | if (newStatus != null) { |
| | | projectMapper.updateById(MesPdProjectDO.builder() |
| | | .id(id) |
| | | .status(newStatus) |
| | | .build()); |
| | | } |
| | | // 5. å®¡æ ¸éè¿ï¼è®°å½å®¡æ ¸äººä¸å®¡æ ¸æè§ï¼ç¶æç½®ä¸ºå¾
彿¡£ |
| | | projectMapper.auditProject(id, MesPdProjectStatusEnum.AUDIT.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | } |
| | | |
| | | /** |
| | | * è½¬æ¢ BPM 审æ¹ç»æä¸ºè®¾è®¡é¡¹ç®ç¶æ |
| | | * è·åç¨æ·æµç§° |
| | | * |
| | | * @param userId ç¨æ·ç¼å· |
| | | * @return æµç§°ï¼ç¨æ·ä¸å卿¶è¿å null |
| | | */ |
| | | private Integer convertBpmResultToProjectStatus(Integer bpmResult) { |
| | | if (BpmTaskStatusEnum.APPROVE.getStatus().equals(bpmResult)) { |
| | | return MesPdProjectStatusEnum.AUDIT.getStatus(); |
| | | } else if (BpmTaskStatusEnum.REJECT.getStatus().equals(bpmResult)) { |
| | | return MesPdProjectStatusEnum.UPLOAD.getStatus(); |
| | | } else if (BpmTaskStatusEnum.CANCEL.getStatus().equals(bpmResult)) { |
| | | return MesPdProjectStatusEnum.UPLOAD.getStatus(); |
| | | } |
| | | private String getUserNickname(Long userId) { |
| | | if (userId == null) { |
| | | return null; |
| | | } |
| | | AdminUserRespDTO user = adminUserApi.getUser(userId); |
| | | return user == null ? null : user.getNickname(); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pd.techconfirm.vo.ProductTechConfirmSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pd.techconfirm.ProductTechConfirmDO; |
| | | |
| | | import java.util.Set; |
| | | |
| | | /** |
| | | * MES äº§åææ¯ç¡®è®¤å½ Service æ¥å£ |
| | | * |
| | | * ç¶ææµè½¬å®å
¨ç±ä¸å¡æµç¨é©±å¨ï¼ä¸æ¥ååç«¯ç´æ¥æå®ç¶æï¼ |
| | | * <pre> |
| | | * 0 è稿 --æäº¤å®¡æ ¸--> 1 å¾
å®¡æ ¸ --å®¡æ ¸éè¿--> 2 å·²å®¡æ ¸ --客æ·ç¡®è®¤--> 3 客æ·å·²ç¡®è®¤ |
| | | * ^ | |
| | | * | +--å®¡æ ¸ä¸éè¿--> 4 å®¡æ ¸ä¸éè¿ |
| | | * | | |
| | | * +----------------------------------------+ å®¡æ ¸ä¸éè¿å¯ä¿®æ¹åéæ°æäº¤ |
| | | * </pre> |
| | | * åªæè稿ä¸å®¡æ ¸ä¸éè¿ç¶æå
许修æ¹ä¸å¡å段ï¼å¾
å®¡æ ¸ / å·²å®¡æ ¸ / 客æ·å·²ç¡®è®¤ä¸ºéå®æç»æã |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | public interface ProductTechConfirmService { |
| | | |
| | | /** |
| | | * åå»ºææ¯ç¡®è®¤å½ |
| | | * |
| | | * ç¶æåºå®ä¸ºè稿ï¼ç¼å¶äºº / ç¼å¶æ¶é´åå½åç»å½ç¨æ·ä¸å½åæ¶é´ã |
| | | * |
| | | * @param createReqVO åå»ºä¿¡æ¯ |
| | | * @return ç¼å· |
| | | */ |
| | | Long createTechConfirm(ProductTechConfirmSaveReqVO createReqVO); |
| | | |
| | | /** |
| | | * ä¿®æ¹ææ¯ç¡®è®¤å½ |
| | | * |
| | | * ä»
è稿ä¸å®¡æ ¸ä¸éè¿ç¶æå
许修æ¹ï¼å
¶ä½ç¶æä¸å¾æç»ã |
| | | * |
| | | * @param updateReqVO ä¿®æ¹ä¿¡æ¯ |
| | | */ |
| | | void updateTechConfirm(ProductTechConfirmSaveReqVO updateReqVO); |
| | | |
| | | /** |
| | | * å 餿æ¯ç¡®è®¤å½ |
| | | * |
| | | * ä»
è稿ä¸å®¡æ ¸ä¸éè¿ç¶æå
许å é¤ã |
| | | * |
| | | * @param id ç¼å· |
| | | */ |
| | | void deleteTechConfirm(Long id); |
| | | |
| | | /** |
| | | * è·å¾ææ¯ç¡®è®¤å½ |
| | | * |
| | | * @param id ç¼å· |
| | | * @return ææ¯ç¡®è®¤å½ |
| | | */ |
| | | ProductTechConfirmDO getTechConfirm(Long id); |
| | | |
| | | /** |
| | | * è·å¾ææ¯ç¡®è®¤å½å页 |
| | | * |
| | | * @param pageReqVO å页æ¥è¯¢ |
| | | * @return ææ¯ç¡®è®¤å½å页 |
| | | */ |
| | | PageResult<ProductTechConfirmDO> getTechConfirmPage(ProductTechConfirmPageReqVO pageReqVO); |
| | | |
| | | /** |
| | | * æäº¤å®¡æ ¸ï¼è稿 / å®¡æ ¸ä¸éè¿ â å¾
å®¡æ ¸ï¼ |
| | | * |
| | | * å®¡æ ¸äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç pd_tech_confirm_approveï¼ï¼ |
| | | * æäº¤æ¶æ éæå®ï¼æªå¯ç¨å®¡æ¹ææªé
ç½®ææå®¡æ ¸äººæ¶æåºä¸å¡å¼å¸¸ã |
| | | * |
| | | * @param id ç¼å· |
| | | */ |
| | | void submitTechConfirmAudit(Long id); |
| | | |
| | | /** |
| | | * è·å¾ææ¯ç¡®è®¤å½å®¡æ ¸çå®¡æ ¸äººç¼å·éå |
| | | * |
| | | * ä¾åç«¯å¤æå½åç»å½ç¨æ·æ¯å¦åºå±ç¤ºãå®¡æ ¸ãæé®ï¼æªé
ç½®æ¶è¿å空éåã |
| | | * |
| | | * @return å®¡æ ¸äººç¨æ·ç¼å·éå |
| | | */ |
| | | Set<Long> getTechConfirmApproverUserIds(); |
| | | |
| | | /** |
| | | * å®¡æ ¸ææ¯ç¡®è®¤å½ï¼å¾
å®¡æ ¸ â å·²å®¡æ ¸ / å®¡æ ¸ä¸éè¿ï¼ |
| | | * |
| | | * ä»
ä¸å¡ç¼ç pd_tech_confirm_approve é
ç½®çå®¡æ ¸äººå¯æä½ï¼å¤äººæ¶æç¾ï¼ï¼ä¸ä»
å¨å¾
å®¡æ ¸ç¶æä¸å
许ã |
| | | * å®¡æ ¸éè¿è®°å½å®¡æ ¸äººä¸å®¡æ ¸æ¶é´ï¼å®¡æ ¸ä¸éè¿å¿
须填åä¸éè¿åå ï¼ |
| | | * ä½¿åæ®éåå¯ä¿®æ¹ç¶æï¼ç±ç¼å¶äººä¿®æ¹åéæ°æäº¤ã |
| | | * |
| | | * @param id ç¼å· |
| | | * @param pass æ¯å¦éè¿ï¼true=éè¿ / false=ä¸éè¿ |
| | | * @param reviewRemark å®¡æ ¸æè§ï¼å®¡æ ¸ä¸éè¿æ¶å¿
å¡« |
| | | */ |
| | | void auditTechConfirm(Long id, Boolean pass, String reviewRemark); |
| | | |
| | | /** |
| | | * 客æ·ç¡®è®¤ï¼å·²å®¡æ ¸ â 客æ·å·²ç¡®è®¤ï¼ |
| | | * |
| | | * ç±ä¸å¡åä»£å®¢æ·æ§è¡ï¼è®°å½å®¢æ·ç¡®è®¤äººä¸å®¢æ·ç¡®è®¤æ¶é´ã |
| | | * |
| | | * @param id ç¼å· |
| | | * @param customerConfirmUser 客æ·ç¡®è®¤äººå§å |
| | | */ |
| | | void confirmTechConfirmByCustomer(Long id, String customerConfirmUser); |
| | | |
| | | } |
| | |
| | | package cn.iocoder.yudao.module.mes.service.pd.techconfirm; |
| | | |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pd.techconfirm.vo.ProductTechConfirmPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pd.techconfirm.vo.ProductTechConfirmSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pd.techconfirm.ProductTechConfirmDO; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.pd.techconfirm.ProductTechConfirmMapper; |
| | | import cn.iocoder.yudao.module.mes.enums.pd.MesPdTechConfirmStatusEnum; |
| | | import cn.iocoder.yudao.module.system.api.approval.ApprovalConfigApi; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | | import jakarta.annotation.Resource; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PD_TECH_CONFIRM_NOT_EXISTS; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PD_TECH_CONFIRM_NO_DUPLICATE; |
| | | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; |
| | | |
| | | /** |
| | | * MES äº§åææ¯ç¡®è®¤å½ Service å®ç°ç±» |
| | | * |
| | | * ç¶æå®å
¨ç±ä¸å¡æµç¨é©±å¨ï¼å端ä¸åä¸ç¶æèµå¼ãåç¶æçåå
¥å
¥å£ä¸¥æ ¼åºåï¼ |
| | | * <ul> |
| | | * <li>è稿ï¼{@link #createTechConfirm} å建æ¶åå
¥ï¼{@link #auditTechConfirm} 客æ·ç¡®è®¤è¢«é©³åæ¶åé</li> |
| | | * <li>å¾
å®¡æ ¸ï¼{@link #submitTechConfirmAudit} æäº¤å®¡æ ¸ååå
¥ï¼åæ¶è®°å½ç¼å¶äººæå®çå®¡æ ¸äºº</li> |
| | | * <li>å·²å®¡æ ¸ï¼{@link #auditTechConfirm} å®¡æ ¸éè¿æ¶åå
¥ï¼åæ¶è®°å½å®¡æ ¸æ¶é´ä¸å®¡æ ¸æè§</li> |
| | | * <li>å®¡æ ¸ä¸éè¿ï¼{@link #auditTechConfirm} å®¡æ ¸ä¸éè¿æ¶åå
¥ï¼ä¿çä¸éè¿åå ä¾ç¼å¶äººä¿®æ¹åéæ°æäº¤</li> |
| | | * <li>客æ·å·²ç¡®è®¤ï¼{@link #confirmTechConfirmByCustomer} 客æ·ç¡®è®¤ååå
¥</li> |
| | | * </ul> |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Service |
| | | @Validated |
| | | @Slf4j |
| | | public class ProductTechConfirmServiceImpl implements ProductTechConfirmService { |
| | | |
| | | /** |
| | | * ææ¯ç¡®è®¤å½å®¡æ¹çä¸å¡ç±»åç¼ç |
| | | * |
| | | * ä¸ system_approval_config.biz_type 对åºï¼å®¡æ ¸äººå¨ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãä¸ç»´æ¤ã |
| | | */ |
| | | private static final String TECH_CONFIRM_APPROVE_BIZ_TYPE = "pd_tech_confirm_approve"; |
| | | |
| | | @Resource |
| | | private ProductTechConfirmMapper techConfirmMapper; |
| | | |
| | | @Resource |
| | | private AdminUserApi adminUserApi; |
| | | |
| | | @Resource |
| | | private ApprovalConfigApi approvalConfigApi; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Long createTechConfirm(ProductTechConfirmSaveReqVO createReqVO) { |
| | | // æ ¡éªç¡®è®¤å½ç¼å·å¯ä¸ |
| | | validateConfirmNoUnique(createReqVO.getConfirmNo(), null); |
| | | // æå
¥ |
| | | // æå
¥ï¼ç¶æåºå®ä¸ºè稿ï¼ç¼å¶äºº / ç¼å¶æ¶é´åå½åç»å½ç¨æ·ä¸å½åæ¶é´ |
| | | Long userId = getLoginUserId(); |
| | | ProductTechConfirmDO techConfirm = BeanUtils.toBean(createReqVO, ProductTechConfirmDO.class); |
| | | techConfirm.setStatus(MesPdTechConfirmStatusEnum.DRAFT.getStatus()); |
| | | techConfirm.setDrafterId(userId); |
| | | techConfirm.setDrafterName(getUserNickname(userId)); |
| | | techConfirm.setDraftTime(LocalDateTime.now()); |
| | | // å®¡æ ¸äººç±æäº¤å®¡æ ¸æ¶æå®ï¼åå»ºæ¶æ¸
空ï¼é¿å
åç«¯ä¼ å带å
¥ |
| | | techConfirm.setReviewerId(null); |
| | | techConfirm.setReviewerName(null); |
| | | techConfirm.setReviewTime(null); |
| | | techConfirm.setReviewRemark(null); |
| | | techConfirm.setCustomerConfirmUser(null); |
| | | techConfirm.setCustomerConfirmTime(null); |
| | | techConfirmMapper.insert(techConfirm); |
| | | return techConfirm.getId(); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void updateTechConfirm(ProductTechConfirmSaveReqVO updateReqVO) { |
| | | // æ ¡éªåå¨ |
| | | validateTechConfirmExists(updateReqVO.getId()); |
| | | ProductTechConfirmDO techConfirm = validateTechConfirmExists(updateReqVO.getId()); |
| | | // æ ¡éªç¶æä¸ºè稿æå®¡æ ¸ä¸éè¿ |
| | | validateTechConfirmEditable(techConfirm); |
| | | // æ ¡éªç¡®è®¤å½ç¼å·å¯ä¸ï¼æé¤èªèº«ï¼ |
| | | validateConfirmNoUnique(updateReqVO.getConfirmNo(), updateReqVO.getId()); |
| | | // æ´æ° |
| | | // æ´æ°ï¼ç¶æãç¼å¶äººãå®¡æ ¸äººã客æ·ç¡®è®¤äººçæµç¨å段ä¸å¾ä¸æ¥æ¶åç«¯ä¼ åï¼æ¤å¤åªè½ä¸å¡å段 |
| | | ProductTechConfirmDO updateObj = BeanUtils.toBean(updateReqVO, ProductTechConfirmDO.class); |
| | | techConfirmMapper.updateById(updateObj); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void deleteTechConfirm(Long id) { |
| | | // æ ¡éªåå¨ |
| | | validateTechConfirmExists(id); |
| | | ProductTechConfirmDO techConfirm = validateTechConfirmExists(id); |
| | | // æ ¡éªç¶æä¸ºè稿æå®¡æ ¸ä¸éè¿ |
| | | validateTechConfirmEditable(techConfirm); |
| | | // å é¤ |
| | | techConfirmMapper.deleteById(id); |
| | | } |
| | |
| | | @Override |
| | | public PageResult<ProductTechConfirmDO> getTechConfirmPage(ProductTechConfirmPageReqVO pageReqVO) { |
| | | return techConfirmMapper.selectPage(pageReqVO); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void submitTechConfirmAudit(Long id) { |
| | | // 1. æ ¡éªåå¨ + å¯æäº¤ç¶æï¼è稿 / å®¡æ ¸ä¸éè¿ï¼ |
| | | ProductTechConfirmDO techConfirm = validateTechConfirmExists(id); |
| | | if (!MesPdTechConfirmStatusEnum.DRAFT.getStatus().equals(techConfirm.getStatus()) |
| | | && !MesPdTechConfirmStatusEnum.REJECTED.getStatus().equals(techConfirm.getStatus())) { |
| | | throw exception(PD_TECH_CONFIRM_NOT_EDITABLE_FOR_SUBMIT); |
| | | } |
| | | // 2. æ ¡éªå®¡æ¹é
置已å¯ç¨ä¸é
ç½®äºææå®¡æ ¸äººï¼æªé
ç½®æ¶æåºå¸¦æç¡®æç¤ºçä¸å¡å¼å¸¸ï¼ |
| | | approvalConfigApi.validateApprovalEnabledAndGetApprovers(TECH_CONFIRM_APPROVE_BIZ_TYPE); |
| | | // 3. æ´æ°ç¶æä¸ºå¾
å®¡æ ¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | // ç¨ UpdateWrapper èé updateByIdï¼MyBatis-Plus é»è®¤æ´æ°çç¥ä¼å¿½ç¥ nullï¼ |
| | | // ç´æ¥ updateById æ æ³æå®¡æ ¸ä¸éè¿åæ®ççå®¡æ ¸äºº / å®¡æ ¸æ¶é´ / å®¡æ ¸æè§çæ£æ¸
空ã |
| | | techConfirmMapper.submitAndResetAuditInfo(id, MesPdTechConfirmStatusEnum.PENDING_AUDIT.getStatus()); |
| | | } |
| | | |
| | | @Override |
| | | public Set<Long> getTechConfirmApproverUserIds() { |
| | | return approvalConfigApi.getApproverUserIds(TECH_CONFIRM_APPROVE_BIZ_TYPE); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void auditTechConfirm(Long id, Boolean pass, String reviewRemark) { |
| | | // 1. æ ¡éªåå¨ |
| | | ProductTechConfirmDO techConfirm = validateTechConfirmExists(id); |
| | | // 2. æ ¡éªå¤äºå¾
å®¡æ ¸ç¶æ |
| | | if (!MesPdTechConfirmStatusEnum.PENDING_AUDIT.getStatus().equals(techConfirm.getStatus())) { |
| | | throw exception(PD_TECH_CONFIRM_NOT_PENDING_AUDIT); |
| | | } |
| | | // 3. æ ¡éªå½åç»å½ç¨æ·æ¯è¯¥ä¸å¡ç±»åçå®¡æ ¸äººï¼æç¾ï¼ä»»ä¸äººåå¯å®¡æ ¸ï¼ |
| | | Long userId = getLoginUserId(); |
| | | approvalConfigApi.validateApprover(TECH_CONFIRM_APPROVE_BIZ_TYPE, userId); |
| | | // 4. å®¡æ ¸ä¸éè¿ï¼å¿
须填ååå ï¼ç¶æç½®ä¸ºå®¡æ ¸ä¸éè¿ï¼éåç¼å¶äººä¿®æ¹åå¯éæ°æäº¤ |
| | | if (!Boolean.TRUE.equals(pass)) { |
| | | if (StrUtil.isBlank(reviewRemark)) { |
| | | throw exception(PD_TECH_CONFIRM_REJECT_REASON_REQUIRED); |
| | | } |
| | | techConfirmMapper.auditTechConfirm(id, MesPdTechConfirmStatusEnum.REJECTED.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | return; |
| | | } |
| | | // 5. å®¡æ ¸éè¿ï¼è®°å½å®¡æ ¸äººä¸å®¡æ ¸æè§ï¼ç¶æç½®ä¸ºå·²å®¡æ ¸ |
| | | techConfirmMapper.auditTechConfirm(id, MesPdTechConfirmStatusEnum.AUDITED.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void confirmTechConfirmByCustomer(Long id, String customerConfirmUser) { |
| | | // 1. æ ¡éªåå¨ + å·²å®¡æ ¸ç¶æ |
| | | ProductTechConfirmDO techConfirm = validateTechConfirmExists(id); |
| | | if (!MesPdTechConfirmStatusEnum.AUDITED.getStatus().equals(techConfirm.getStatus())) { |
| | | throw exception(PD_TECH_CONFIRM_NOT_AUDITED_FOR_CUSTOMER_CONFIRM); |
| | | } |
| | | // 2. æ´æ°ç¶æä¸ºå®¢æ·å·²ç¡®è®¤ï¼å¹¶è®°å½å®¢æ·ç¡®è®¤äººä¸ç¡®è®¤æ¶é´ |
| | | techConfirmMapper.updateById(ProductTechConfirmDO.builder() |
| | | .id(id) |
| | | .status(MesPdTechConfirmStatusEnum.CUSTOMER_CONFIRMED.getStatus()) |
| | | .customerConfirmUser(customerConfirmUser) |
| | | .customerConfirmTime(LocalDateTime.now()) |
| | | .build()); |
| | | } |
| | | |
| | | /** |
| | | * è·åç¨æ·æµç§° |
| | | * |
| | | * @param userId ç¨æ·ç¼å· |
| | | * @return æµç§°ï¼ç¨æ·ä¸å卿¶è¿å null |
| | | */ |
| | | private String getUserNickname(Long userId) { |
| | | if (userId == null) { |
| | | return null; |
| | | } |
| | | AdminUserRespDTO user = adminUserApi.getUser(userId); |
| | | return user == null ? null : user.getNickname(); |
| | | } |
| | | |
| | | private void validateConfirmNoUnique(String confirmNo, Long excludeId) { |
| | |
| | | return techConfirm; |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éªææ¯ç¡®è®¤å½å¤äºå¯ä¿®æ¹ç¶æ |
| | | * |
| | | * åªæè稿ä¸å®¡æ ¸ä¸éè¿å
许修æ¹ä¸å é¤ï¼å¾
å®¡æ ¸ / å·²å®¡æ ¸ / 客æ·å·²ç¡®è®¤ä¸ºéå®æç»æã |
| | | * å®¡æ ¸ä¸éè¿çåæ®ééåç»ç¼å¶äººä¿®æ¹åéæ°æäº¤ï¼å æ¤åæ ·æ¾å¼ã |
| | | * |
| | | * @param techConfirm ææ¯ç¡®è®¤å½ |
| | | */ |
| | | private void validateTechConfirmEditable(ProductTechConfirmDO techConfirm) { |
| | | if (!MesPdTechConfirmStatusEnum.DRAFT.getStatus().equals(techConfirm.getStatus()) |
| | | && !MesPdTechConfirmStatusEnum.REJECTED.getStatus().equals(techConfirm.getStatus())) { |
| | | throw exception(PD_TECH_CONFIRM_NOT_EDITABLE); |
| | | } |
| | | } |
| | | |
| | | } |
| | |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.equipmentreceipt.MesWmEquipmentReceiptDO; |
| | | import jakarta.validation.Valid; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | public interface MesWmEquipmentReceiptService { |
| | | |
| | | String APPROVE_CATEGORY_CODE = "equipment_receipt_approve"; |
| | | |
| | | Long createEquipmentReceipt(@Valid MesWmEquipmentReceiptSaveReqVO createReqVO); |
| | | |
| | |
| | | |
| | | PageResult<MesWmEquipmentReceiptDO> getEquipmentReceiptPage(MesWmEquipmentReceiptPageReqVO pageReqVO); |
| | | |
| | | void submitEquipmentReceiptApproval(Long id, String processDefinitionKey); |
| | | /** |
| | | * æäº¤è®¾å¤å
¥åºå审æ¹ï¼è稿 â 审æ¹ä¸ï¼ |
| | | * |
| | | * å®¡æ ¸äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç equipment_receipt_approveï¼ï¼ |
| | | * æäº¤æ¶æ éæå®ï¼æªå¯ç¨å®¡æ¹ææªé
ç½®ææå®¡æ ¸äººæ¶æåºä¸å¡å¼å¸¸ã |
| | | * |
| | | * @param id ç¼å· |
| | | */ |
| | | void submitEquipmentReceiptApproval(Long id); |
| | | |
| | | void updateEquipmentReceiptAuditStatus(Long id, Integer bpmResult); |
| | | /** |
| | | * è·å¾è®¾å¤å
¥åºå审æ¹çå®¡æ ¸äººç¼å·éå |
| | | * |
| | | * ä¾åç«¯å¤æå½åç»å½ç¨æ·æ¯å¦åºå±ç¤ºãå®¡æ ¸ãæé®ï¼æªé
ç½®æ¶è¿å空éåã |
| | | * |
| | | * @return å®¡æ ¸äººç¨æ·ç¼å·éå |
| | | */ |
| | | Set<Long> getEquipmentReceiptApproverUserIds(); |
| | | |
| | | List<Map<String, Object>> getEquipmentReceiptApprovalProcessDefinitionList(); |
| | | /** |
| | | * å®¡æ ¸è®¾å¤å
¥åºåï¼å®¡æ¹ä¸ â å·²å®¡æ¹ / èç¨¿ï¼ |
| | | * |
| | | * ä»
ä¸å¡ç¼ç equipment_receipt_approve é
ç½®çå®¡æ ¸äººå¯æä½ï¼å¤äººæ¶æç¾ï¼ï¼ä¸ä»
å¨å®¡æ¹ä¸ç¶æä¸å
许ã |
| | | * å®¡æ ¸éè¿ç½®ä¸ºå·²å®¡æ¹ï¼å¯æ§è¡å
¥åºï¼ï¼å®¡æ ¸ä¸éè¿å¿
须填ååå ï¼éåè稿å¯ä¿®æ¹åéæ°æäº¤ã |
| | | * |
| | | * @param id ç¼å· |
| | | * @param pass æ¯å¦éè¿ï¼true=éè¿ / false=ä¸éè¿ |
| | | * @param reviewRemark å®¡æ ¸æè§ï¼å®¡æ ¸ä¸éè¿æ¶å¿
å¡« |
| | | */ |
| | | void auditEquipmentReceipt(Long id, Boolean pass, String reviewRemark); |
| | | |
| | | void finishEquipmentReceipt(Long id); |
| | | |
| | |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.ObjUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | 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.dal.dataobject.definition.BpmProcessDefinitionInfoDO; |
| | | import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatusEnum; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.equipmentreceipt.vo.MesWmEquipmentReceiptPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.equipmentreceipt.vo.MesWmEquipmentReceiptSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.equipmentreceipt.MesWmEquipmentReceiptDO; |
| | |
| | | import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseLocationService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService; |
| | | import cn.iocoder.yudao.module.system.api.approval.ApprovalConfigApi; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | | import jakarta.annotation.Resource; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.flowable.engine.repository.ProcessDefinition; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.security.core.Authentication; |
| | | import org.springframework.security.core.context.SecurityContextHolder; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.*; |
| | | import java.util.List; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; |
| | | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; |
| | | |
| | | /** |
| | |
| | | @Validated |
| | | @Slf4j |
| | | public class MesWmEquipmentReceiptServiceImpl implements MesWmEquipmentReceiptService { |
| | | |
| | | /** |
| | | * 设å¤å
¥åºå审æ¹çä¸å¡ç±»åç¼ç |
| | | * |
| | | * ä¸ system_approval_config.biz_type 对åºï¼å®¡æ ¸äººå¨ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãä¸ç»´æ¤ã |
| | | */ |
| | | private static final String EQUIPMENT_RECEIPT_APPROVE_BIZ_TYPE = "equipment_receipt_approve"; |
| | | |
| | | @Resource |
| | | private MesWmEquipmentReceiptMapper equipmentReceiptMapper; |
| | |
| | | @Resource |
| | | private MesWmWarehouseAreaService wmAreaService; |
| | | @Resource |
| | | private BpmProcessInstanceApi processInstanceApi; |
| | | private AdminUserApi adminUserApi; |
| | | @Resource |
| | | private BpmProcessDefinitionService bpmProcessDefinitionService; |
| | | private ApprovalConfigApi approvalConfigApi; |
| | | |
| | | @Override |
| | | public Long createEquipmentReceipt(MesWmEquipmentReceiptSaveReqVO createReqVO) { |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void submitEquipmentReceiptApproval(Long id, String processDefinitionKey) { |
| | | // æ ¡éªåå¨ + èç¨¿ç¶æ |
| | | public void submitEquipmentReceiptApproval(Long id) { |
| | | // 1. æ ¡éªåå¨ + èç¨¿ç¶æ |
| | | validateEquipmentReceiptExistsAndPrepare(id); |
| | | // æ ¡éªè³å°æä¸æ¡è¡ |
| | | // 2. æ ¡éªè³å°æä¸æ¡è¡ |
| | | List<MesWmEquipmentReceiptLineDO> lines = equipmentReceiptLineService.getEquipmentReceiptLineListByReceiptId(id); |
| | | if (CollUtil.isEmpty(lines)) { |
| | | throw exception(WM_EQUIP_RECEIPT_NO_LINE); |
| | | } |
| | | // å建 BPM æµç¨å®ä¾ |
| | | String processInstanceId = processInstanceApi.createProcessInstance(getCurrentUserId(), |
| | | new BpmProcessInstanceCreateReqDTO() |
| | | .setProcessDefinitionKey(processDefinitionKey) |
| | | .setBusinessKey(String.valueOf(id))); |
| | | // æäº¤å®¡æ¹ï¼è稿 â 审æ¹ä¸ï¼ |
| | | equipmentReceiptMapper.updateById(new MesWmEquipmentReceiptDO() |
| | | .setId(id) |
| | | .setStatus(MesWmEquipmentReceiptStatusEnum.APPROVING.getStatus()) |
| | | .setProcessInstanceId(processInstanceId)); |
| | | // 3. æ ¡éªå®¡æ¹é
置已å¯ç¨ä¸é
ç½®äºææå®¡æ ¸äººï¼æªé
ç½®æ¶æåºå¸¦æç¡®æç¤ºçä¸å¡å¼å¸¸ï¼ |
| | | approvalConfigApi.validateApprovalEnabledAndGetApprovers(EQUIPMENT_RECEIPT_APPROVE_BIZ_TYPE); |
| | | // 4. ç¶æç½®ä¸ºå®¡æ¹ä¸ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | equipmentReceiptMapper.submitAndResetAuditInfo(id, MesWmEquipmentReceiptStatusEnum.APPROVING.getStatus()); |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getEquipmentReceiptApprovalProcessDefinitionList() { |
| | | return getProcessDefinitionListByCategory(APPROVE_CATEGORY_CODE); |
| | | public Set<Long> getEquipmentReceiptApproverUserIds() { |
| | | return approvalConfigApi.getApproverUserIds(EQUIPMENT_RECEIPT_APPROVE_BIZ_TYPE); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void updateEquipmentReceiptAuditStatus(Long id, Integer bpmResult) { |
| | | public void auditEquipmentReceipt(Long id, Boolean pass, String reviewRemark) { |
| | | // 1. æ ¡éªåå¨ |
| | | MesWmEquipmentReceiptDO receipt = validateEquipmentReceiptExists(id); |
| | | // 2. æ ¡éªå¤äºå®¡æ¹ä¸ç¶æ |
| | | if (!MesWmEquipmentReceiptStatusEnum.APPROVING.getStatus().equals(receipt.getStatus())) { |
| | | log.warn("[updateEquipmentReceiptAuditStatus] 设å¤å
¥åºå({}) ä¸å¤äºå®¡æ¹ä¸ç¶æ", id); |
| | | throw exception(WM_EQUIP_RECEIPT_NOT_APPROVING); |
| | | } |
| | | // 3. æ ¡éªå½åç»å½ç¨æ·æ¯è¯¥ä¸å¡ç±»åçå®¡æ ¸äººï¼æç¾ï¼ä»»ä¸äººåå¯å®¡æ ¸ï¼ |
| | | Long userId = getLoginUserId(); |
| | | approvalConfigApi.validateApprover(EQUIPMENT_RECEIPT_APPROVE_BIZ_TYPE, userId); |
| | | // 4. å®¡æ ¸ä¸éè¿ï¼å¿
须填ååå ï¼éåè稿å¯ä¿®æ¹åéæ°æäº¤ |
| | | if (!Boolean.TRUE.equals(pass)) { |
| | | if (StrUtil.isBlank(reviewRemark)) { |
| | | throw exception(WM_EQUIP_RECEIPT_REJECT_REASON_REQUIRED); |
| | | } |
| | | equipmentReceiptMapper.auditEquipmentReceipt(id, MesWmEquipmentReceiptStatusEnum.PREPARE.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | return; |
| | | } |
| | | // 2. æ ¹æ®å®¡æ¹ç»ææ´æ°ç¶æ |
| | | Integer newStatus = convertBpmResultToStatus(bpmResult); |
| | | if (newStatus != null) { |
| | | equipmentReceiptMapper.updateById(new MesWmEquipmentReceiptDO().setId(id).setStatus(newStatus)); |
| | | } |
| | | // 5. å®¡æ ¸éè¿ï¼è®°å½å®¡æ ¸äººä¸å®¡æ ¸æè§ï¼ç¶æç½®ä¸ºå·²å®¡æ¹ï¼å¯æ§è¡å
¥åºï¼ |
| | | equipmentReceiptMapper.auditEquipmentReceipt(id, MesWmEquipmentReceiptStatusEnum.APPROVED.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | } |
| | | |
| | | private Integer convertBpmResultToStatus(Integer bpmResult) { |
| | | if (BpmTaskStatusEnum.APPROVE.getStatus().equals(bpmResult)) { |
| | | return MesWmEquipmentReceiptStatusEnum.APPROVED.getStatus(); |
| | | } |
| | | if (BpmTaskStatusEnum.REJECT.getStatus().equals(bpmResult)) { |
| | | return MesWmEquipmentReceiptStatusEnum.PREPARE.getStatus(); |
| | | } |
| | | if (BpmTaskStatusEnum.CANCEL.getStatus().equals(bpmResult)) { |
| | | return MesWmEquipmentReceiptStatusEnum.CANCELED.getStatus(); |
| | | } |
| | | /** |
| | | * è·åç¨æ·æµç§° |
| | | * |
| | | * @param userId ç¨æ·ç¼å· |
| | | * @return æµç§°ï¼ç¨æ·ä¸å卿¶è¿å null |
| | | */ |
| | | private String getUserNickname(Long userId) { |
| | | if (userId == null) { |
| | | return null; |
| | | } |
| | | |
| | | private List<Map<String, Object>> getProcessDefinitionListByCategory(String categoryCode) { |
| | | List<BpmProcessDefinitionInfoDO> definitionInfoList = bpmProcessDefinitionService |
| | | .getProcessDefinitionInfoListByCategory(categoryCode); |
| | | if (CollUtil.isEmpty(definitionInfoList)) { |
| | | return Collections.emptyList(); |
| | | } |
| | | // è¿æ»¤æ¿æ´»ç¶æï¼ä¿çææ°çæ¬ |
| | | Map<String, ProcessDefinition> latestVersionMap = new HashMap<>(); |
| | | for (BpmProcessDefinitionInfoDO info : definitionInfoList) { |
| | | ProcessDefinition pd = bpmProcessDefinitionService.getProcessDefinition(info.getProcessDefinitionId()); |
| | | if (pd == null || pd.isSuspended()) { |
| | | continue; |
| | | } |
| | | ProcessDefinition existing = latestVersionMap.get(pd.getKey()); |
| | | if (existing == null || pd.getVersion() > existing.getVersion()) { |
| | | latestVersionMap.put(pd.getKey(), pd); |
| | | } |
| | | } |
| | | List<Map<String, Object>> result = new ArrayList<>(); |
| | | for (ProcessDefinition pd : latestVersionMap.values()) { |
| | | Map<String, Object> item = new HashMap<>(); |
| | | item.put("id", pd.getId()); |
| | | item.put("key", pd.getKey()); |
| | | item.put("name", pd.getName()); |
| | | result.add(item); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | private Long getCurrentUserId() { |
| | | Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); |
| | | if (authentication != null && authentication.getPrincipal() instanceof Long) { |
| | | return (Long) authentication.getPrincipal(); |
| | | } |
| | | return 1L; // é»è®¤ç¨æ· |
| | | AdminUserRespDTO user = adminUserApi.getUser(userId); |
| | | return user == null ? null : user.getNickname(); |
| | | } |
| | | |
| | | @Override |
| | |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; |
| | | |
| | |
| | | PageResult<MesWmItemReceiptDO> getItemReceiptPage(MesWmItemReceiptPageReqVO pageReqVO); |
| | | |
| | | /** |
| | | * æäº¤éè´å
¥åºåï¼è稿 â å¾
䏿¶ï¼ |
| | | * æäº¤éè´å
¥åºå审æ¹ï¼è稿 â å¾
䏿¶ï¼ |
| | | * |
| | | * å®¡æ ¸äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç item_receipt_approveï¼ï¼ |
| | | * æäº¤æ¶æ éæå®ï¼æªå¯ç¨å®¡æ¹ææªé
ç½®ææå®¡æ ¸äººæ¶æåºä¸å¡å¼å¸¸ã |
| | | * |
| | | * @param id ç¼å· |
| | | */ |
| | |
| | | Long generateItemReceiptFromArrivalNotice(Long arrivalNoticeId); |
| | | |
| | | /** |
| | | * æäº¤éè´å
¥åºåå®¡æ¹ |
| | | * è·å¾éè´å
¥åºå审æ¹çå®¡æ ¸äººç¼å·éå |
| | | * |
| | | * @param id å
¥åºåç¼å· |
| | | * @param processDefinitionKey æµç¨å®ä¹ Key |
| | | * ä¾åç«¯å¤æå½åç»å½ç¨æ·æ¯å¦åºå±ç¤ºãå®¡æ ¸ãæé®ï¼æªé
ç½®æ¶è¿å空éåã |
| | | * |
| | | * @return å®¡æ ¸äººç¨æ·ç¼å·éå |
| | | */ |
| | | void submitItemReceiptApproval(Long id, String processDefinitionKey); |
| | | Set<Long> getItemReceiptApproverUserIds(); |
| | | |
| | | /** |
| | | * æ´æ°éè´å
¥åºå审æ¹ç¶æï¼ç± BPM Listener åè°ï¼ |
| | | * å®¡æ ¸éè´å
¥åºåï¼å¾
䏿¶ â å¾
æ§è¡å
¥åº / èç¨¿ï¼ |
| | | * |
| | | * ä»
ä¸å¡ç¼ç item_receipt_approve é
ç½®çå®¡æ ¸äººå¯æä½ï¼å¤äººæ¶æç¾ï¼ï¼ä¸ä»
å¨å¾
䏿¶ç¶æä¸å
许ã |
| | | * å®¡æ ¸éè¿ç½®ä¸ºå¾
æ§è¡å
¥åºï¼å®¡æ ¸ä¸éè¿å¿
须填ååå ï¼éåè稿å¯ä¿®æ¹åéæ°æäº¤ã |
| | | * |
| | | * @param id å
¥åºåç¼å· |
| | | * @param bpmResult BPM 审æ¹ç»æ |
| | | * @param pass æ¯å¦éè¿ï¼true=éè¿ / false=ä¸éè¿ |
| | | * @param reviewRemark å®¡æ ¸æè§ï¼å®¡æ ¸ä¸éè¿æ¶å¿
å¡« |
| | | */ |
| | | void updateItemReceiptAuditStatus(Long id, Integer bpmResult); |
| | | void auditItemReceipt(Long id, Boolean pass, String reviewRemark); |
| | | |
| | | } |
| | |
| | | import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants; |
| | | import cn.iocoder.yudao.module.mes.enums.wm.MesWmItemReceiptStatusEnum; |
| | | import cn.iocoder.yudao.module.mes.enums.wm.MesWmTransactionTypeEnum; |
| | | import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatusEnum; |
| | | import cn.iocoder.yudao.module.mes.service.qc.iqc.MesQcIqcService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.arrivalnotice.MesWmArrivalNoticeService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.arrivalnotice.MesWmArrivalNoticeLineService; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.arrivalnotice.MesWmArrivalNoticeLineDO; |
| | | import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO; |
| | | import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi; |
| | | import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; |
| | | import cn.iocoder.yudao.module.erp.api.purchase.PurchaseOrderApi; |
| | | import cn.iocoder.yudao.module.srm.api.supplier.SrmSupplierApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO; |
| | | import org.springframework.security.core.Authentication; |
| | | import org.springframework.security.core.context.SecurityContextHolder; |
| | | import cn.iocoder.yudao.module.system.api.approval.ApprovalConfigApi; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; |
| | | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; |
| | | |
| | | /** |
| | |
| | | @Validated |
| | | @Slf4j |
| | | public class MesWmItemReceiptServiceImpl implements MesWmItemReceiptService { |
| | | |
| | | /** |
| | | * éè´å
¥åºå审æ¹çä¸å¡ç±»åç¼ç |
| | | * |
| | | * ä¸ system_approval_config.biz_type 对åºï¼å®¡æ ¸äººå¨ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãä¸ç»´æ¤ã |
| | | */ |
| | | private static final String ITEM_RECEIPT_APPROVE_BIZ_TYPE = "item_receipt_approve"; |
| | | |
| | | @Resource |
| | | private MesWmItemReceiptMapper itemReceiptMapper; |
| | |
| | | private MesWmArrivalNoticeLineService arrivalNoticeLineService; |
| | | |
| | | @Resource |
| | | private BpmProcessInstanceApi processInstanceApi; |
| | | private AdminUserApi adminUserApi; |
| | | |
| | | @Resource |
| | | private ApprovalConfigApi approvalConfigApi; |
| | | |
| | | @Resource |
| | | private PurchaseOrderApi purchaseOrderApi; |
| | |
| | | // æ ¡éªç©ææ¹æ¬¡ç®¡çï¼å¦æç©æå¼å¯æ¹æ¬¡ç®¡çï¼åæç»çæ¹æ¬¡å·ä¸è½ä¸ºç©º |
| | | validateBatchManagement(lines); |
| | | |
| | | // æäº¤ï¼è稿 â å¾
䏿¶ï¼ |
| | | itemReceiptMapper.updateById(new MesWmItemReceiptDO() |
| | | .setId(id).setStatus(MesWmItemReceiptStatusEnum.APPROVING.getStatus())); |
| | | // æ ¡éªå®¡æ¹é
置已å¯ç¨ä¸é
ç½®äºææå®¡æ ¸äººï¼æªé
ç½®æ¶æåºå¸¦æç¡®æç¤ºçä¸å¡å¼å¸¸ï¼ |
| | | approvalConfigApi.validateApprovalEnabledAndGetApprovers(ITEM_RECEIPT_APPROVE_BIZ_TYPE); |
| | | |
| | | // æäº¤ï¼è稿 â å¾
䏿¶ï¼ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | itemReceiptMapper.submitAndResetAuditInfo(id, MesWmItemReceiptStatusEnum.APPROVING.getStatus()); |
| | | } |
| | | |
| | | @Override |
| | | public Set<Long> getItemReceiptApproverUserIds() { |
| | | return approvalConfigApi.getApproverUserIds(ITEM_RECEIPT_APPROVE_BIZ_TYPE); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void auditItemReceipt(Long id, Boolean pass, String reviewRemark) { |
| | | // 1. æ ¡éªåå¨ |
| | | MesWmItemReceiptDO receipt = validateItemReceiptExists(id); |
| | | // 2. æ ¡éªå¤äºå¾
䏿¶ç¶æ |
| | | if (!MesWmItemReceiptStatusEnum.APPROVING.getStatus().equals(receipt.getStatus())) { |
| | | throw exception(WM_ITEM_RECEIPT_NOT_APPROVING); |
| | | } |
| | | // 3. æ ¡éªå½åç»å½ç¨æ·æ¯è¯¥ä¸å¡ç±»åçå®¡æ ¸äººï¼æç¾ï¼ä»»ä¸äººåå¯å®¡æ ¸ï¼ |
| | | Long userId = getLoginUserId(); |
| | | approvalConfigApi.validateApprover(ITEM_RECEIPT_APPROVE_BIZ_TYPE, userId); |
| | | // 4. å®¡æ ¸ä¸éè¿ï¼å¿
须填ååå ï¼éåè稿å¯ä¿®æ¹åéæ°æäº¤ |
| | | if (!Boolean.TRUE.equals(pass)) { |
| | | if (StrUtil.isBlank(reviewRemark)) { |
| | | throw exception(WM_ITEM_RECEIPT_REJECT_REASON_REQUIRED); |
| | | } |
| | | itemReceiptMapper.auditItemReceipt(id, MesWmItemReceiptStatusEnum.PREPARE.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | return; |
| | | } |
| | | // 5. å®¡æ ¸éè¿ï¼è®°å½å®¡æ ¸äººä¸å®¡æ ¸æè§ï¼ç¶æç½®ä¸ºå¾
æ§è¡å
¥åº |
| | | itemReceiptMapper.auditItemReceipt(id, MesWmItemReceiptStatusEnum.APPROVED.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | } |
| | | |
| | | /** |
| | | * è·åç¨æ·æµç§° |
| | | * |
| | | * @param userId ç¨æ·ç¼å· |
| | | * @return æµç§°ï¼ç¨æ·ä¸å卿¶è¿å null |
| | | */ |
| | | private String getUserNickname(Long userId) { |
| | | if (userId == null) { |
| | | return null; |
| | | } |
| | | AdminUserRespDTO user = adminUserApi.getUser(userId); |
| | | return user == null ? null : user.getNickname(); |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | return receipt.getId(); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void submitItemReceiptApproval(Long id, String processDefinitionKey) { |
| | | // 1. æ ¡éªåå¨ + èç¨¿ç¶æ |
| | | validateItemReceiptExistsAndDraft(id); |
| | | |
| | | // 2. å建 BPM æµç¨å®ä¾ |
| | | Long userId = getCurrentUserId(); |
| | | String processInstanceId = processInstanceApi.createProcessInstance(userId, |
| | | new BpmProcessInstanceCreateReqDTO() |
| | | .setProcessDefinitionKey(processDefinitionKey) |
| | | .setBusinessKey(String.valueOf(id))); |
| | | |
| | | // 3. æ´æ°å
¥åºåç¶æä¸ºå®¡æ¹ä¸ |
| | | itemReceiptMapper.updateById(new MesWmItemReceiptDO() |
| | | .setId(id) |
| | | .setStatus(MesWmItemReceiptStatusEnum.APPROVING.getStatus()) |
| | | .setProcessInstanceId(processInstanceId)); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void updateItemReceiptAuditStatus(Long id, Integer bpmResult) { |
| | | // 1. æ ¡éªåå¨ |
| | | MesWmItemReceiptDO receipt = validateItemReceiptExists(id); |
| | | if (!MesWmItemReceiptStatusEnum.APPROVING.getStatus().equals(receipt.getStatus())) { |
| | | log.warn("[updateItemReceiptAuditStatus] å
¥åºå({}) ä¸å¤äºå®¡æ¹ä¸ç¶æ", id); |
| | | return; |
| | | } |
| | | |
| | | // 2. æ ¹æ®å®¡æ¹ç»ææ´æ°ç¶æ |
| | | Integer newStatus = convertBpmResultToReceiptStatus(bpmResult); |
| | | if (newStatus != null) { |
| | | itemReceiptMapper.updateById(new MesWmItemReceiptDO() |
| | | .setId(id).setStatus(newStatus)); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è½¬æ¢ BPM 审æ¹ç»æä¸ºå
¥åºåç¶æ |
| | | */ |
| | | private Integer convertBpmResultToReceiptStatus(Integer bpmResult) { |
| | | if (BpmTaskStatusEnum.APPROVE.getStatus().equals(bpmResult)) { |
| | | return MesWmItemReceiptStatusEnum.APPROVED.getStatus(); |
| | | } else if (BpmTaskStatusEnum.REJECT.getStatus().equals(bpmResult)) { |
| | | return MesWmItemReceiptStatusEnum.PREPARE.getStatus(); |
| | | } else if (BpmTaskStatusEnum.CANCEL.getStatus().equals(bpmResult)) { |
| | | return MesWmItemReceiptStatusEnum.CANCELED.getStatus(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * è·åå½åç¨æ· ID |
| | | */ |
| | | private Long getCurrentUserId() { |
| | | Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); |
| | | if (authentication != null && authentication.getPrincipal() instanceof Long) { |
| | | return (Long) authentication.getPrincipal(); |
| | | } |
| | | return 1L; // é»è®¤ç¨æ· |
| | | } |
| | | |
| | | /** |
| | |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.miscissue.MesWmMiscIssueDO; |
| | | import jakarta.validation.Valid; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | /** |
| | | * MES æé¡¹åºåºå Service æ¥å£ |
| | | */ |
| | | public interface MesWmMiscIssueService { |
| | | |
| | | /** |
| | | * æé¡¹åºåº BPM 审æ¹åç±»ç¼ç |
| | | */ |
| | | String APPROVE_CATEGORY_CODE = "misc_issue_approve"; |
| | | |
| | | /** |
| | | * å建æé¡¹åºåºå |
| | |
| | | PageResult<MesWmMiscIssueDO> getMiscIssuePage(MesWmMiscIssuePageReqVO pageReqVO); |
| | | |
| | | /** |
| | | * æäº¤æé¡¹åºåºå审æ¹ï¼è稿 â 审æ¹ä¸ï¼ï¼å建 BPM æµç¨å®ä¾ |
| | | * æäº¤æé¡¹åºåºå审æ¹ï¼è稿 â 审æ¹ä¸ï¼ |
| | | * |
| | | * å®¡æ ¸äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç misc_issue_approveï¼ï¼ |
| | | * æäº¤æ¶æ éæå®ï¼æªå¯ç¨å®¡æ¹ææªé
ç½®ææå®¡æ ¸äººæ¶æåºä¸å¡å¼å¸¸ã |
| | | * |
| | | * @param id ç¼å· |
| | | * @param processDefinitionKey æµç¨å®ä¹ Key |
| | | */ |
| | | void submitMiscIssueApproval(Long id, String processDefinitionKey); |
| | | void submitMiscIssueApproval(Long id); |
| | | |
| | | /** |
| | | * æ´æ°æé¡¹åºåºå审æ¹ç¶æï¼å®¡æ¹ä¸ â å¾
æ§è¡åºåº/è稿/å·²åæ¶ï¼ |
| | | * è·å¾æé¡¹åºåºå审æ¹çå®¡æ ¸äººç¼å·éå |
| | | * |
| | | * ä¾åç«¯å¤æå½åç»å½ç¨æ·æ¯å¦åºå±ç¤ºãå®¡æ ¸ãæé®ï¼æªé
ç½®æ¶è¿å空éåã |
| | | * |
| | | * @return å®¡æ ¸äººç¨æ·ç¼å·éå |
| | | */ |
| | | Set<Long> getMiscIssueApproverUserIds(); |
| | | |
| | | /** |
| | | * å®¡æ ¸æé¡¹åºåºåï¼å®¡æ¹ä¸ â å¾
æ§è¡åºåº / èç¨¿ï¼ |
| | | * |
| | | * ä»
ä¸å¡ç¼ç misc_issue_approve é
ç½®çå®¡æ ¸äººå¯æä½ï¼å¤äººæ¶æç¾ï¼ï¼ä¸ä»
å¨å®¡æ¹ä¸ç¶æä¸å
许ã |
| | | * å®¡æ ¸éè¿ç½®ä¸ºå¾
æ§è¡åºåºï¼å¯æ§è¡åºåºï¼ï¼å®¡æ ¸ä¸éè¿å¿
须填ååå ï¼éåè稿å¯ä¿®æ¹åéæ°æäº¤ã |
| | | * |
| | | * @param id ç¼å· |
| | | * @param bpmResult BPM 审æ¹ç»æ |
| | | * @param pass æ¯å¦éè¿ï¼true=éè¿ / false=ä¸éè¿ |
| | | * @param reviewRemark å®¡æ ¸æè§ï¼å®¡æ ¸ä¸éè¿æ¶å¿
å¡« |
| | | */ |
| | | void updateMiscIssueAuditStatus(Long id, Integer bpmResult); |
| | | |
| | | /** |
| | | * è·åæé¡¹åºåºå®¡æ¹å¯ç¨ç BPM æµç¨å®ä¹å表 |
| | | * |
| | | * @return æµç¨å®ä¹å表ï¼id/key/nameï¼ |
| | | */ |
| | | List<Map<String, Object>> getMiscIssueApprovalProcessDefinitionList(); |
| | | void auditMiscIssue(Long id, Boolean pass, String reviewRemark); |
| | | |
| | | /** |
| | | * æ§è¡åºåºï¼å¾
æ§è¡åºåº â 已宿ï¼ï¼æ£ååºå |
| | |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.ObjUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; |
| | |
| | | import cn.iocoder.yudao.module.mes.enums.wm.MesWmTransactionTypeEnum; |
| | | import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO; |
| | | 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.dal.dataobject.definition.BpmProcessDefinitionInfoDO; |
| | | import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatusEnum; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; |
| | | import cn.iocoder.yudao.module.system.api.approval.ApprovalConfigApi; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | | import jakarta.annotation.Resource; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.flowable.engine.repository.ProcessDefinition; |
| | | import org.springframework.security.core.Authentication; |
| | | import org.springframework.security.core.context.SecurityContextHolder; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.util.*; |
| | | import java.util.List; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; |
| | | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; |
| | | |
| | | /** |
| | |
| | | @Slf4j |
| | | public class MesWmMiscIssueServiceImpl implements MesWmMiscIssueService { |
| | | |
| | | /** |
| | | * æé¡¹åºåºå审æ¹çä¸å¡ç±»åç¼ç |
| | | * |
| | | * ä¸ system_approval_config.biz_type 对åºï¼å®¡æ ¸äººå¨ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãä¸ç»´æ¤ã |
| | | */ |
| | | private static final String MISC_ISSUE_APPROVE_BIZ_TYPE = "misc_issue_approve"; |
| | | |
| | | @Resource |
| | | private MesWmMiscIssueMapper miscIssueMapper; |
| | | |
| | |
| | | @Resource |
| | | private MesWmTransactionService wmTransactionService; |
| | | @Resource |
| | | private BpmProcessInstanceApi processInstanceApi; |
| | | private AdminUserApi adminUserApi; |
| | | @Resource |
| | | private BpmProcessDefinitionService bpmProcessDefinitionService; |
| | | private ApprovalConfigApi approvalConfigApi; |
| | | |
| | | @Override |
| | | public Long createMiscIssue(MesWmMiscIssueSaveReqVO createReqVO) { |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void submitMiscIssueApproval(Long id, String processDefinitionKey) { |
| | | // æ ¡éªåå¨ + èç¨¿ç¶æ |
| | | public void submitMiscIssueApproval(Long id) { |
| | | // 1. æ ¡éªåå¨ + èç¨¿ç¶æ |
| | | validateMiscIssueExistsAndDraft(id); |
| | | // æ ¡éªè³å°æä¸æ¡è¡ |
| | | // 2. æ ¡éªè³å°æä¸æ¡è¡ |
| | | List<MesWmMiscIssueLineDO> lines = miscIssueLineService.getMiscIssueLineListByIssueId(id); |
| | | if (CollUtil.isEmpty(lines)) { |
| | | throw exception(WM_MISC_ISSUE_NO_LINE); |
| | | } |
| | | // å建 BPM æµç¨å®ä¾ |
| | | String processInstanceId = processInstanceApi.createProcessInstance(getCurrentUserId(), |
| | | new BpmProcessInstanceCreateReqDTO() |
| | | .setProcessDefinitionKey(processDefinitionKey) |
| | | .setBusinessKey(String.valueOf(id))); |
| | | // æäº¤å®¡æ¹ï¼è稿 â 审æ¹ä¸ï¼ |
| | | miscIssueMapper.updateById(new MesWmMiscIssueDO() |
| | | .setId(id) |
| | | .setStatus(MesWmMiscIssueStatusEnum.APPROVING.getStatus()) |
| | | .setProcessInstanceId(processInstanceId)); |
| | | // 3. æ ¡éªå®¡æ¹é
置已å¯ç¨ä¸é
ç½®äºææå®¡æ ¸äººï¼æªé
ç½®æ¶æåºå¸¦æç¡®æç¤ºçä¸å¡å¼å¸¸ï¼ |
| | | approvalConfigApi.validateApprovalEnabledAndGetApprovers(MISC_ISSUE_APPROVE_BIZ_TYPE); |
| | | // 4. æäº¤å®¡æ¹ï¼è稿 â 审æ¹ä¸ï¼ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | miscIssueMapper.submitAndResetAuditInfo(id, MesWmMiscIssueStatusEnum.APPROVING.getStatus()); |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getMiscIssueApprovalProcessDefinitionList() { |
| | | return getProcessDefinitionListByCategory(APPROVE_CATEGORY_CODE); |
| | | public Set<Long> getMiscIssueApproverUserIds() { |
| | | return approvalConfigApi.getApproverUserIds(MISC_ISSUE_APPROVE_BIZ_TYPE); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void updateMiscIssueAuditStatus(Long id, Integer bpmResult) { |
| | | public void auditMiscIssue(Long id, Boolean pass, String reviewRemark) { |
| | | // 1. æ ¡éªåå¨ |
| | | MesWmMiscIssueDO issue = validateMiscIssueExists(id); |
| | | // 2. æ ¡éªå¤äºå®¡æ¹ä¸ç¶æ |
| | | if (!MesWmMiscIssueStatusEnum.APPROVING.getStatus().equals(issue.getStatus())) { |
| | | log.warn("[updateMiscIssueAuditStatus] æé¡¹åºåºå({}) ä¸å¤äºå®¡æ¹ä¸ç¶æ", id); |
| | | throw exception(WM_MISC_ISSUE_NOT_APPROVING); |
| | | } |
| | | // 3. æ ¡éªå½åç»å½ç¨æ·æ¯è¯¥ä¸å¡ç±»åçå®¡æ ¸äººï¼æç¾ï¼ä»»ä¸äººåå¯å®¡æ ¸ï¼ |
| | | Long userId = getLoginUserId(); |
| | | approvalConfigApi.validateApprover(MISC_ISSUE_APPROVE_BIZ_TYPE, userId); |
| | | // 4. å®¡æ ¸ä¸éè¿ï¼å¿
须填ååå ï¼éåè稿å¯ä¿®æ¹åéæ°æäº¤ |
| | | if (!Boolean.TRUE.equals(pass)) { |
| | | if (StrUtil.isBlank(reviewRemark)) { |
| | | throw exception(WM_MISC_ISSUE_REJECT_REASON_REQUIRED); |
| | | } |
| | | miscIssueMapper.auditMiscIssue(id, MesWmMiscIssueStatusEnum.PREPARE.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | return; |
| | | } |
| | | // 2. æ ¹æ®å®¡æ¹ç»ææ´æ°ç¶æ |
| | | Integer newStatus = convertBpmResultToStatus(bpmResult); |
| | | if (newStatus != null) { |
| | | miscIssueMapper.updateById(new MesWmMiscIssueDO().setId(id).setStatus(newStatus)); |
| | | } |
| | | // 5. å®¡æ ¸éè¿ï¼è®°å½å®¡æ ¸äººä¸å®¡æ ¸æè§ï¼ç¶æç½®ä¸ºå¾
æ§è¡åºåº |
| | | miscIssueMapper.auditMiscIssue(id, MesWmMiscIssueStatusEnum.APPROVED.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | } |
| | | |
| | | private Integer convertBpmResultToStatus(Integer bpmResult) { |
| | | if (BpmTaskStatusEnum.APPROVE.getStatus().equals(bpmResult)) { |
| | | return MesWmMiscIssueStatusEnum.APPROVED.getStatus(); |
| | | } |
| | | if (BpmTaskStatusEnum.REJECT.getStatus().equals(bpmResult)) { |
| | | return MesWmMiscIssueStatusEnum.PREPARE.getStatus(); |
| | | } |
| | | if (BpmTaskStatusEnum.CANCEL.getStatus().equals(bpmResult)) { |
| | | return MesWmMiscIssueStatusEnum.CANCELED.getStatus(); |
| | | } |
| | | /** |
| | | * è·åç¨æ·æµç§° |
| | | * |
| | | * @param userId ç¨æ·ç¼å· |
| | | * @return æµç§°ï¼ç¨æ·ä¸å卿¶è¿å null |
| | | */ |
| | | private String getUserNickname(Long userId) { |
| | | if (userId == null) { |
| | | return null; |
| | | } |
| | | |
| | | private List<Map<String, Object>> getProcessDefinitionListByCategory(String categoryCode) { |
| | | List<BpmProcessDefinitionInfoDO> definitionInfoList = bpmProcessDefinitionService |
| | | .getProcessDefinitionInfoListByCategory(categoryCode); |
| | | if (CollUtil.isEmpty(definitionInfoList)) { |
| | | return Collections.emptyList(); |
| | | } |
| | | // è¿æ»¤æ¿æ´»ç¶æï¼ä¿çææ°çæ¬ |
| | | Map<String, ProcessDefinition> latestVersionMap = new HashMap<>(); |
| | | for (BpmProcessDefinitionInfoDO info : definitionInfoList) { |
| | | ProcessDefinition pd = bpmProcessDefinitionService.getProcessDefinition(info.getProcessDefinitionId()); |
| | | if (pd == null || pd.isSuspended()) { |
| | | continue; |
| | | } |
| | | ProcessDefinition existing = latestVersionMap.get(pd.getKey()); |
| | | if (existing == null || pd.getVersion() > existing.getVersion()) { |
| | | latestVersionMap.put(pd.getKey(), pd); |
| | | } |
| | | } |
| | | List<Map<String, Object>> result = new ArrayList<>(); |
| | | for (ProcessDefinition pd : latestVersionMap.values()) { |
| | | Map<String, Object> item = new HashMap<>(); |
| | | item.put("id", pd.getId()); |
| | | item.put("key", pd.getKey()); |
| | | item.put("name", pd.getName()); |
| | | result.add(item); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | private Long getCurrentUserId() { |
| | | Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); |
| | | if (authentication != null && authentication.getPrincipal() instanceof Long) { |
| | | return (Long) authentication.getPrincipal(); |
| | | } |
| | | return 1L; // é»è®¤ç¨æ· |
| | | AdminUserRespDTO user = adminUserApi.getUser(userId); |
| | | return user == null ? null : user.getNickname(); |
| | | } |
| | | |
| | | @Override |
| | |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.miscreceipt.MesWmMiscReceiptDO; |
| | | import jakarta.validation.Valid; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | /** |
| | | * MES æé¡¹å
¥åºå Service æ¥å£ |
| | |
| | | * @author è¶
级管çå |
| | | */ |
| | | public interface MesWmMiscReceiptService { |
| | | |
| | | /** |
| | | * æé¡¹å
¥åº BPM 审æ¹åç±»ç¼ç |
| | | */ |
| | | String APPROVE_CATEGORY_CODE = "misc_receipt_approve"; |
| | | |
| | | /** |
| | | * å建æé¡¹å
¥åºå |
| | |
| | | PageResult<MesWmMiscReceiptDO> getMiscReceiptPage(MesWmMiscReceiptPageReqVO pageReqVO); |
| | | |
| | | /** |
| | | * æäº¤æé¡¹å
¥åºå审æ¹ï¼è稿 â 审æ¹ä¸ï¼ï¼å建 BPM æµç¨å®ä¾ |
| | | * æäº¤æé¡¹å
¥åºå审æ¹ï¼è稿 â 审æ¹ä¸ï¼ |
| | | * |
| | | * å®¡æ ¸äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç misc_receipt_approveï¼ï¼ |
| | | * æäº¤æ¶æ éæå®ï¼æªå¯ç¨å®¡æ¹ææªé
ç½®ææå®¡æ ¸äººæ¶æåºä¸å¡å¼å¸¸ã |
| | | * |
| | | * @param id ç¼å· |
| | | * @param processDefinitionKey æµç¨å®ä¹ Key |
| | | */ |
| | | void submitMiscReceiptApproval(Long id, String processDefinitionKey); |
| | | void submitMiscReceiptApproval(Long id); |
| | | |
| | | /** |
| | | * æ´æ°æé¡¹å
¥åºå审æ¹ç¶æï¼å®¡æ¹ä¸ â 已审æ¹/è稿/å·²åæ¶ï¼ |
| | | * è·å¾æé¡¹å
¥åºå审æ¹çå®¡æ ¸äººç¼å·éå |
| | | * |
| | | * ä¾åç«¯å¤æå½åç»å½ç¨æ·æ¯å¦åºå±ç¤ºãå®¡æ ¸ãæé®ï¼æªé
ç½®æ¶è¿å空éåã |
| | | * |
| | | * @return å®¡æ ¸äººç¨æ·ç¼å·éå |
| | | */ |
| | | Set<Long> getMiscReceiptApproverUserIds(); |
| | | |
| | | /** |
| | | * å®¡æ ¸æé¡¹å
¥åºåï¼å®¡æ¹ä¸ â å·²å®¡æ¹ / èç¨¿ï¼ |
| | | * |
| | | * ä»
ä¸å¡ç¼ç misc_receipt_approve é
ç½®çå®¡æ ¸äººå¯æä½ï¼å¤äººæ¶æç¾ï¼ï¼ä¸ä»
å¨å®¡æ¹ä¸ç¶æä¸å
许ã |
| | | * å®¡æ ¸éè¿ç½®ä¸ºå·²å®¡æ¹ï¼å¯æ§è¡å
¥åºï¼ï¼å®¡æ ¸ä¸éè¿å¿
须填ååå ï¼éåè稿å¯ä¿®æ¹åéæ°æäº¤ã |
| | | * |
| | | * @param id ç¼å· |
| | | * @param bpmResult BPM 审æ¹ç»æ |
| | | * @param pass æ¯å¦éè¿ï¼true=éè¿ / false=ä¸éè¿ |
| | | * @param reviewRemark å®¡æ ¸æè§ï¼å®¡æ ¸ä¸éè¿æ¶å¿
å¡« |
| | | */ |
| | | void updateMiscReceiptAuditStatus(Long id, Integer bpmResult); |
| | | |
| | | /** |
| | | * è·åæé¡¹å
¥åºå®¡æ¹å¯ç¨ç BPM æµç¨å®ä¹å表 |
| | | * |
| | | * @return æµç¨å®ä¹å表ï¼id/key/nameï¼ |
| | | */ |
| | | List<Map<String, Object>> getMiscReceiptApprovalProcessDefinitionList(); |
| | | void auditMiscReceipt(Long id, Boolean pass, String reviewRemark); |
| | | |
| | | /** |
| | | * æ§è¡å
¥åºï¼å·²å®¡æ¹ â 已宿ï¼ï¼æ´æ°åºåå°è´¦ |
| | |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.ObjUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.miscreceipt.vo.MesWmMiscReceiptPageReqVO; |
| | |
| | | import cn.iocoder.yudao.module.mes.enums.wm.MesWmTransactionTypeEnum; |
| | | import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO; |
| | | 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.dal.dataobject.definition.BpmProcessDefinitionInfoDO; |
| | | import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatusEnum; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; |
| | | import cn.iocoder.yudao.module.system.api.approval.ApprovalConfigApi; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | | import jakarta.annotation.Resource; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.flowable.engine.repository.ProcessDefinition; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.security.core.Authentication; |
| | | import org.springframework.security.core.context.SecurityContextHolder; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.util.*; |
| | | import java.util.List; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; |
| | | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; |
| | | |
| | | /** |
| | |
| | | @Slf4j |
| | | public class MesWmMiscReceiptServiceImpl implements MesWmMiscReceiptService { |
| | | |
| | | /** |
| | | * æé¡¹å
¥åºå审æ¹çä¸å¡ç±»åç¼ç |
| | | * |
| | | * ä¸ system_approval_config.biz_type 对åºï¼å®¡æ ¸äººå¨ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãä¸ç»´æ¤ã |
| | | */ |
| | | private static final String MISC_RECEIPT_APPROVE_BIZ_TYPE = "misc_receipt_approve"; |
| | | |
| | | @Resource |
| | | private MesWmMiscReceiptMapper miscReceiptMapper; |
| | | |
| | |
| | | @Resource |
| | | private MesWmTransactionService wmTransactionService; |
| | | @Resource |
| | | private BpmProcessInstanceApi processInstanceApi; |
| | | private AdminUserApi adminUserApi; |
| | | @Resource |
| | | private BpmProcessDefinitionService bpmProcessDefinitionService; |
| | | private ApprovalConfigApi approvalConfigApi; |
| | | |
| | | @Override |
| | | public Long createMiscReceipt(MesWmMiscReceiptSaveReqVO createReqVO) { |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void submitMiscReceiptApproval(Long id, String processDefinitionKey) { |
| | | // æ ¡éªåå¨ + èç¨¿ç¶æ |
| | | public void submitMiscReceiptApproval(Long id) { |
| | | // 1. æ ¡éªåå¨ + èç¨¿ç¶æ |
| | | validateMiscReceiptExistsAndPrepare(id); |
| | | // æ ¡éªè³å°æä¸æ¡è¡ |
| | | // 2. æ ¡éªè³å°æä¸æ¡è¡ |
| | | List<MesWmMiscReceiptLineDO> lines = miscReceiptLineService.getMiscReceiptLineListByReceiptId(id); |
| | | if (CollUtil.isEmpty(lines)) { |
| | | throw exception(WM_MISC_RECEIPT_NO_LINE); |
| | | } |
| | | // å建 BPM æµç¨å®ä¾ |
| | | String processInstanceId = processInstanceApi.createProcessInstance(getCurrentUserId(), |
| | | new BpmProcessInstanceCreateReqDTO() |
| | | .setProcessDefinitionKey(processDefinitionKey) |
| | | .setBusinessKey(String.valueOf(id))); |
| | | // æäº¤å®¡æ¹ï¼è稿 â 审æ¹ä¸ï¼ |
| | | miscReceiptMapper.updateById(new MesWmMiscReceiptDO() |
| | | .setId(id) |
| | | .setStatus(MesWmMiscReceiptStatusEnum.APPROVING.getStatus()) |
| | | .setProcessInstanceId(processInstanceId)); |
| | | // 3. æ ¡éªå®¡æ¹é
置已å¯ç¨ä¸é
ç½®äºææå®¡æ ¸äººï¼æªé
ç½®æ¶æåºå¸¦æç¡®æç¤ºçä¸å¡å¼å¸¸ï¼ |
| | | approvalConfigApi.validateApprovalEnabledAndGetApprovers(MISC_RECEIPT_APPROVE_BIZ_TYPE); |
| | | // 4. æäº¤å®¡æ¹ï¼è稿 â 审æ¹ä¸ï¼ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | miscReceiptMapper.submitAndResetAuditInfo(id, MesWmMiscReceiptStatusEnum.APPROVING.getStatus()); |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getMiscReceiptApprovalProcessDefinitionList() { |
| | | return getProcessDefinitionListByCategory(APPROVE_CATEGORY_CODE); |
| | | public Set<Long> getMiscReceiptApproverUserIds() { |
| | | return approvalConfigApi.getApproverUserIds(MISC_RECEIPT_APPROVE_BIZ_TYPE); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void updateMiscReceiptAuditStatus(Long id, Integer bpmResult) { |
| | | public void auditMiscReceipt(Long id, Boolean pass, String reviewRemark) { |
| | | // 1. æ ¡éªåå¨ |
| | | MesWmMiscReceiptDO receipt = validateMiscReceiptExists(id); |
| | | // 2. æ ¡éªå¤äºå®¡æ¹ä¸ç¶æ |
| | | if (!MesWmMiscReceiptStatusEnum.APPROVING.getStatus().equals(receipt.getStatus())) { |
| | | log.warn("[updateMiscReceiptAuditStatus] æé¡¹å
¥åºå({}) ä¸å¤äºå®¡æ¹ä¸ç¶æ", id); |
| | | throw exception(WM_MISC_RECEIPT_NOT_APPROVING); |
| | | } |
| | | // 3. æ ¡éªå½åç»å½ç¨æ·æ¯è¯¥ä¸å¡ç±»åçå®¡æ ¸äººï¼æç¾ï¼ä»»ä¸äººåå¯å®¡æ ¸ï¼ |
| | | Long userId = getLoginUserId(); |
| | | approvalConfigApi.validateApprover(MISC_RECEIPT_APPROVE_BIZ_TYPE, userId); |
| | | // 4. å®¡æ ¸ä¸éè¿ï¼å¿
须填ååå ï¼éåè稿å¯ä¿®æ¹åéæ°æäº¤ |
| | | if (!Boolean.TRUE.equals(pass)) { |
| | | if (StrUtil.isBlank(reviewRemark)) { |
| | | throw exception(WM_MISC_RECEIPT_REJECT_REASON_REQUIRED); |
| | | } |
| | | miscReceiptMapper.auditMiscReceipt(id, MesWmMiscReceiptStatusEnum.PREPARE.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | return; |
| | | } |
| | | // 2. æ ¹æ®å®¡æ¹ç»ææ´æ°ç¶æ |
| | | Integer newStatus = convertBpmResultToStatus(bpmResult); |
| | | if (newStatus != null) { |
| | | miscReceiptMapper.updateById(new MesWmMiscReceiptDO().setId(id).setStatus(newStatus)); |
| | | } |
| | | // 5. å®¡æ ¸éè¿ï¼è®°å½å®¡æ ¸äººä¸å®¡æ ¸æè§ï¼ç¶æç½®ä¸ºå·²å®¡æ¹ï¼å¯æ§è¡å
¥åºï¼ |
| | | miscReceiptMapper.auditMiscReceipt(id, MesWmMiscReceiptStatusEnum.APPROVED.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | } |
| | | |
| | | private Integer convertBpmResultToStatus(Integer bpmResult) { |
| | | if (BpmTaskStatusEnum.APPROVE.getStatus().equals(bpmResult)) { |
| | | return MesWmMiscReceiptStatusEnum.APPROVED.getStatus(); |
| | | } |
| | | if (BpmTaskStatusEnum.REJECT.getStatus().equals(bpmResult)) { |
| | | return MesWmMiscReceiptStatusEnum.PREPARE.getStatus(); |
| | | } |
| | | if (BpmTaskStatusEnum.CANCEL.getStatus().equals(bpmResult)) { |
| | | return MesWmMiscReceiptStatusEnum.CANCELED.getStatus(); |
| | | } |
| | | /** |
| | | * è·åç¨æ·æµç§° |
| | | * |
| | | * @param userId ç¨æ·ç¼å· |
| | | * @return æµç§°ï¼ç¨æ·ä¸å卿¶è¿å null |
| | | */ |
| | | private String getUserNickname(Long userId) { |
| | | if (userId == null) { |
| | | return null; |
| | | } |
| | | |
| | | private List<Map<String, Object>> getProcessDefinitionListByCategory(String categoryCode) { |
| | | List<BpmProcessDefinitionInfoDO> definitionInfoList = bpmProcessDefinitionService |
| | | .getProcessDefinitionInfoListByCategory(categoryCode); |
| | | if (CollUtil.isEmpty(definitionInfoList)) { |
| | | return Collections.emptyList(); |
| | | } |
| | | // è¿æ»¤æ¿æ´»ç¶æï¼ä¿çææ°çæ¬ |
| | | Map<String, ProcessDefinition> latestVersionMap = new HashMap<>(); |
| | | for (BpmProcessDefinitionInfoDO info : definitionInfoList) { |
| | | ProcessDefinition pd = bpmProcessDefinitionService.getProcessDefinition(info.getProcessDefinitionId()); |
| | | if (pd == null || pd.isSuspended()) { |
| | | continue; |
| | | } |
| | | ProcessDefinition existing = latestVersionMap.get(pd.getKey()); |
| | | if (existing == null || pd.getVersion() > existing.getVersion()) { |
| | | latestVersionMap.put(pd.getKey(), pd); |
| | | } |
| | | } |
| | | List<Map<String, Object>> result = new ArrayList<>(); |
| | | for (ProcessDefinition pd : latestVersionMap.values()) { |
| | | Map<String, Object> item = new HashMap<>(); |
| | | item.put("id", pd.getId()); |
| | | item.put("key", pd.getKey()); |
| | | item.put("name", pd.getName()); |
| | | result.add(item); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | private Long getCurrentUserId() { |
| | | Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); |
| | | if (authentication != null && authentication.getPrincipal() instanceof Long) { |
| | | return (Long) authentication.getPrincipal(); |
| | | } |
| | | return 1L; // é»è®¤ç¨æ· |
| | | AdminUserRespDTO user = adminUserApi.getUser(userId); |
| | | return user == null ? null : user.getNickname(); |
| | | } |
| | | |
| | | @Override |
| | |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor.MesWmReturnVendorDO; |
| | | import jakarta.validation.Valid; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | /** |
| | | * MES ä¾åºåéè´§å Service æ¥å£ |
| | | */ |
| | | public interface MesWmReturnVendorService { |
| | | |
| | | /** |
| | | * ä¾åºåéè´§ BPM 审æ¹åç±»ç¼ç |
| | | */ |
| | | String APPROVE_CATEGORY_CODE = "return_vendor_approve"; |
| | | |
| | | /** |
| | | * å建ä¾åºåéè´§å |
| | |
| | | MesWmReturnVendorDO validateReturnVendorExists(Long id); |
| | | |
| | | /** |
| | | * æäº¤ä¾åºåéè´§å审æ¹ï¼è稿 -> 审æ¹ä¸ï¼ï¼å建 BPM æµç¨å®ä¾ |
| | | * æäº¤ä¾åºåéè´§å审æ¹ï¼è稿 â å¾
æ£è´§ï¼ |
| | | * |
| | | * å®¡æ ¸äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½®ï¼ä¸å¡ç¼ç return_vendor_approveï¼ï¼ |
| | | * æäº¤æ¶æ éæå®ï¼æªå¯ç¨å®¡æ¹ææªé
ç½®ææå®¡æ ¸äººæ¶æåºä¸å¡å¼å¸¸ã |
| | | * |
| | | * @param id ç¼å· |
| | | * @param processDefinitionKey æµç¨å®ä¹ Key |
| | | */ |
| | | void submitReturnVendorApproval(Long id, String processDefinitionKey); |
| | | void submitReturnVendorApproval(Long id); |
| | | |
| | | /** |
| | | * æ´æ°ä¾åºåéè´§å审æ¹ç¶æï¼å®¡æ¹ä¸ -> å¾
æ§è¡éè´§/è稿/å·²åæ¶ï¼ |
| | | * è·å¾ä¾åºåéè´§å审æ¹çå®¡æ ¸äººç¼å·éå |
| | | * |
| | | * ä¾åç«¯å¤æå½åç»å½ç¨æ·æ¯å¦åºå±ç¤ºãå®¡æ ¸ãæé®ï¼æªé
ç½®æ¶è¿å空éåã |
| | | * |
| | | * @return å®¡æ ¸äººç¨æ·ç¼å·éå |
| | | */ |
| | | Set<Long> getReturnVendorApproverUserIds(); |
| | | |
| | | /** |
| | | * å®¡æ ¸ä¾åºåéè´§åï¼å¾
æ£è´§ â å¾
æ§è¡éè´§ / èç¨¿ï¼ |
| | | * |
| | | * ä»
ä¸å¡ç¼ç return_vendor_approve é
ç½®çå®¡æ ¸äººå¯æä½ï¼å¤äººæ¶æç¾ï¼ï¼ä¸ä»
å¨å¾
æ£è´§ç¶æä¸å
许ã |
| | | * å®¡æ ¸éè¿ç½®ä¸ºå¾
æ§è¡éè´§ï¼å¯å®æéè´§å¹¶æ£ååºåï¼ï¼å®¡æ ¸ä¸éè¿å¿
须填ååå ï¼ |
| | | * éåè稿å¯ä¿®æ¹åéæ°æäº¤ã |
| | | * |
| | | * @param id ç¼å· |
| | | * @param bpmResult BPM 审æ¹ç»æ |
| | | * @param pass æ¯å¦éè¿ï¼true=éè¿ / false=ä¸éè¿ |
| | | * @param reviewRemark å®¡æ ¸æè§ï¼å®¡æ ¸ä¸éè¿æ¶å¿
å¡« |
| | | */ |
| | | void updateReturnVendorAuditStatus(Long id, Integer bpmResult); |
| | | |
| | | /** |
| | | * è·åä¾åºåé货审æ¹å¯ç¨ç BPM æµç¨å®ä¹å表 |
| | | * |
| | | * @return æµç¨å®ä¹å表ï¼id/key/nameï¼ |
| | | */ |
| | | List<Map<String, Object>> getReturnVendorApprovalProcessDefinitionList(); |
| | | void auditReturnVendor(Long id, Boolean pass, String reviewRemark); |
| | | |
| | | /** |
| | | * æ§è¡æ£è´§ï¼å¾
æ£è´§ -> å¾
æ§è¡éè´§ï¼ |
| | |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.ObjUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | |
| | | import cn.iocoder.yudao.module.srm.api.supplier.SrmSupplierApi; |
| | | import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO; |
| | | 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.dal.dataobject.definition.BpmProcessDefinitionInfoDO; |
| | | import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatusEnum; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; |
| | | import cn.iocoder.yudao.module.system.api.approval.ApprovalConfigApi; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | | import jakarta.annotation.Resource; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.flowable.engine.repository.ProcessDefinition; |
| | | import org.springframework.security.core.Authentication; |
| | | import org.springframework.security.core.context.SecurityContextHolder; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.*; |
| | | import java.util.List; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; |
| | | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; |
| | | |
| | | /** |
| | |
| | | @Validated |
| | | @Slf4j |
| | | public class MesWmReturnVendorServiceImpl implements MesWmReturnVendorService { |
| | | |
| | | /** |
| | | * ä¾åºåéè´§å审æ¹çä¸å¡ç±»åç¼ç |
| | | * |
| | | * ä¸ system_approval_config.biz_type 对åºï¼å®¡æ ¸äººå¨ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãä¸ç»´æ¤ã |
| | | */ |
| | | private static final String RETURN_VENDOR_APPROVE_BIZ_TYPE = "return_vendor_approve"; |
| | | |
| | | @Resource |
| | | private MesWmReturnVendorMapper returnVendorMapper; |
| | |
| | | @Resource |
| | | private MesWmTransactionService wmTransactionService; |
| | | @Resource |
| | | private BpmProcessInstanceApi processInstanceApi; |
| | | private AdminUserApi adminUserApi; |
| | | @Resource |
| | | private BpmProcessDefinitionService bpmProcessDefinitionService; |
| | | private ApprovalConfigApi approvalConfigApi; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void submitReturnVendorApproval(Long id, String processDefinitionKey) { |
| | | // æ ¡éªåå¨ + èç¨¿ç¶æ |
| | | public void submitReturnVendorApproval(Long id) { |
| | | // 1. æ ¡éªåå¨ + èç¨¿ç¶æ |
| | | validateReturnVendorExistsAndPrepare(id); |
| | | // æ ¡éªè³å°æä¸æ¡è¡ |
| | | // 2. æ ¡éªè³å°æä¸æ¡è¡ |
| | | List<MesWmReturnVendorLineDO> lines = returnVendorLineService.getReturnVendorLineListByReturnId(id); |
| | | if (CollUtil.isEmpty(lines)) { |
| | | throw exception(WM_RETURN_VENDOR_NO_LINE); |
| | | } |
| | | // å建 BPM æµç¨å®ä¾ |
| | | String processInstanceId = processInstanceApi.createProcessInstance(getCurrentUserId(), |
| | | new BpmProcessInstanceCreateReqDTO() |
| | | .setProcessDefinitionKey(processDefinitionKey) |
| | | .setBusinessKey(String.valueOf(id))); |
| | | // æäº¤å®¡æ¹ï¼è稿 â 审æ¹ä¸ï¼ |
| | | returnVendorMapper.updateById(new MesWmReturnVendorDO() |
| | | .setId(id) |
| | | .setStatus(MesWmReturnVendorStatusEnum.APPROVING.getStatus()) |
| | | .setProcessInstanceId(processInstanceId)); |
| | | // 3. æ ¡éªå®¡æ¹é
置已å¯ç¨ä¸é
ç½®äºææå®¡æ ¸äººï¼æªé
ç½®æ¶æåºå¸¦æç¡®æç¤ºçä¸å¡å¼å¸¸ï¼ |
| | | approvalConfigApi.validateApprovalEnabledAndGetApprovers(RETURN_VENDOR_APPROVE_BIZ_TYPE); |
| | | // 4. æäº¤å®¡æ¹ï¼è稿 â å¾
æ£è´§ï¼ï¼å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æ |
| | | returnVendorMapper.submitAndResetAuditInfo(id, MesWmReturnVendorStatusEnum.APPROVING.getStatus()); |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getReturnVendorApprovalProcessDefinitionList() { |
| | | return getProcessDefinitionListByCategory(APPROVE_CATEGORY_CODE); |
| | | public Set<Long> getReturnVendorApproverUserIds() { |
| | | return approvalConfigApi.getApproverUserIds(RETURN_VENDOR_APPROVE_BIZ_TYPE); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void updateReturnVendorAuditStatus(Long id, Integer bpmResult) { |
| | | public void auditReturnVendor(Long id, Boolean pass, String reviewRemark) { |
| | | // 1. æ ¡éªåå¨ |
| | | MesWmReturnVendorDO returnVendor = validateReturnVendorExists(id); |
| | | // 2. æ ¡éªå¤äºå¾
æ£è´§ç¶æ |
| | | if (!MesWmReturnVendorStatusEnum.APPROVING.getStatus().equals(returnVendor.getStatus())) { |
| | | log.warn("[updateReturnVendorAuditStatus] ä¾åºåéè´§å({}) ä¸å¤äºå®¡æ¹ä¸ç¶æ", id); |
| | | throw exception(WM_RETURN_VENDOR_NOT_APPROVING); |
| | | } |
| | | // 3. æ ¡éªå½åç»å½ç¨æ·æ¯è¯¥ä¸å¡ç±»åçå®¡æ ¸äººï¼æç¾ï¼ä»»ä¸äººåå¯å®¡æ ¸ï¼ |
| | | Long userId = getLoginUserId(); |
| | | approvalConfigApi.validateApprover(RETURN_VENDOR_APPROVE_BIZ_TYPE, userId); |
| | | // 4. å®¡æ ¸ä¸éè¿ï¼å¿
须填ååå ï¼éåè稿å¯ä¿®æ¹åéæ°æäº¤ |
| | | if (!Boolean.TRUE.equals(pass)) { |
| | | if (StrUtil.isBlank(reviewRemark)) { |
| | | throw exception(WM_RETURN_VENDOR_REJECT_REASON_REQUIRED); |
| | | } |
| | | returnVendorMapper.auditReturnVendor(id, MesWmReturnVendorStatusEnum.PREPARE.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | return; |
| | | } |
| | | // 2. æ ¹æ®å®¡æ¹ç»ææ´æ°ç¶æ |
| | | Integer newStatus = convertBpmResultToStatus(bpmResult); |
| | | if (newStatus != null) { |
| | | returnVendorMapper.updateById(new MesWmReturnVendorDO().setId(id).setStatus(newStatus)); |
| | | } |
| | | // 5. å®¡æ ¸éè¿ï¼è®°å½å®¡æ ¸äººä¸å®¡æ ¸æè§ï¼ç¶æç½®ä¸ºå¾
æ§è¡éè´§ï¼å¯å®æéè´§å¹¶æ£ååºåï¼ |
| | | returnVendorMapper.auditReturnVendor(id, MesWmReturnVendorStatusEnum.APPROVED.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | } |
| | | |
| | | private Integer convertBpmResultToStatus(Integer bpmResult) { |
| | | if (BpmTaskStatusEnum.APPROVE.getStatus().equals(bpmResult)) { |
| | | return MesWmReturnVendorStatusEnum.APPROVED.getStatus(); |
| | | } |
| | | if (BpmTaskStatusEnum.REJECT.getStatus().equals(bpmResult)) { |
| | | return MesWmReturnVendorStatusEnum.PREPARE.getStatus(); |
| | | } |
| | | if (BpmTaskStatusEnum.CANCEL.getStatus().equals(bpmResult)) { |
| | | return MesWmReturnVendorStatusEnum.CANCELED.getStatus(); |
| | | } |
| | | /** |
| | | * è·åç¨æ·æµç§° |
| | | * |
| | | * @param userId ç¨æ·ç¼å· |
| | | * @return æµç§°ï¼ç¨æ·ä¸å卿¶è¿å null |
| | | */ |
| | | private String getUserNickname(Long userId) { |
| | | if (userId == null) { |
| | | return null; |
| | | } |
| | | |
| | | private List<Map<String, Object>> getProcessDefinitionListByCategory(String categoryCode) { |
| | | List<BpmProcessDefinitionInfoDO> definitionInfoList = bpmProcessDefinitionService |
| | | .getProcessDefinitionInfoListByCategory(categoryCode); |
| | | if (CollUtil.isEmpty(definitionInfoList)) { |
| | | return Collections.emptyList(); |
| | | } |
| | | // è¿æ»¤æ¿æ´»ç¶æï¼ä¿çææ°çæ¬ |
| | | Map<String, ProcessDefinition> latestVersionMap = new HashMap<>(); |
| | | for (BpmProcessDefinitionInfoDO info : definitionInfoList) { |
| | | ProcessDefinition pd = bpmProcessDefinitionService.getProcessDefinition(info.getProcessDefinitionId()); |
| | | if (pd == null || pd.isSuspended()) { |
| | | continue; |
| | | } |
| | | ProcessDefinition existing = latestVersionMap.get(pd.getKey()); |
| | | if (existing == null || pd.getVersion() > existing.getVersion()) { |
| | | latestVersionMap.put(pd.getKey(), pd); |
| | | } |
| | | } |
| | | List<Map<String, Object>> result = new ArrayList<>(); |
| | | for (ProcessDefinition pd : latestVersionMap.values()) { |
| | | Map<String, Object> item = new HashMap<>(); |
| | | item.put("id", pd.getId()); |
| | | item.put("key", pd.getKey()); |
| | | item.put("name", pd.getName()); |
| | | result.add(item); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | private Long getCurrentUserId() { |
| | | Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); |
| | | if (authentication != null && authentication.getPrincipal() instanceof Long) { |
| | | return (Long) authentication.getPrincipal(); |
| | | } |
| | | return 1L; // é»è®¤ç¨æ· |
| | | AdminUserRespDTO user = adminUserApi.getUser(userId); |
| | | return user == null ? null : user.getNickname(); |
| | | } |
| | | |
| | | @Override |
| | |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskDO; |
| | | import jakarta.validation.Valid; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | /** |
| | | * MES çç¹ä»»å¡ Service æ¥å£ |
| | |
| | | * @author è¶
级管çå |
| | | */ |
| | | public interface MesWmStockTakingTaskService { |
| | | |
| | | /** |
| | | * çç¹ç»æå®¡æ¹ BPM åç±»ç¼ç |
| | | */ |
| | | String APPROVE_CATEGORY_CODE = "stock_taking_result_approve"; |
| | | |
| | | /** |
| | | * å建çç¹ä»»å¡ |
| | |
| | | void submitStockTakingTask(Long id); |
| | | |
| | | /** |
| | | * æäº¤çç¹ç»æå®¡æ¹ï¼çç¹ä¸ â çç¹ä¸ + å建 BPM æµç¨å®ä¾ï¼ |
| | | * æäº¤çç¹ç»æå®¡æ¹ï¼çç¹ä¸ â çç¹ä¸Â·ç»æå®¡æ¹ä¸ï¼ |
| | | * |
| | | * <p>å½å
¥/导å
¥å®æåæäº¤ç»æå®¡æ¹ï¼æ ¡éªçç¹ä¸åå¨ä¸è³å°ä¸æ¡çç¹ç»æãä¸ç»æå®¡æ¹æªæäº¤è¿ï¼ |
| | | * å建 BPM æµç¨å®ä¾å¹¶åå {@code processInstanceId}ã审æ¹éè¿åææ§è¡å·®å¼æ ¸éå¹¶ç½®ä¸ºå·²å®æã |
| | | * <p>å½å
¥/导å
¥å®æåæäº¤ç»æå®¡æ¹ï¼æ ¡éªçç¹ä¸åå¨ä¸è³å°ä¸æ¡çç¹ç»æã䏿¬è½®ç»æå®¡æ¹æªæäº¤è¿ï¼ |
| | | * è®°å½æäº¤æ¶é´åçå¾
å®¡æ ¸ãå®¡æ ¸äººç±ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãæä¸å¡ç±»åç»ä¸é
ç½® |
| | | * ï¼ä¸å¡ç¼ç stock_taking_result_approveï¼ï¼æäº¤æ¶æ éæå®ï¼ |
| | | * æªå¯ç¨å®¡æ¹ææªé
ç½®ææå®¡æ ¸äººæ¶æåºä¸å¡å¼å¸¸ã审æ¹éè¿åææ§è¡å·®å¼æ ¸éå¹¶ç½®ä¸ºå·²å®æã |
| | | * |
| | | * @param id çç¹ä»»å¡ç¼å· |
| | | * @param processDefinitionKey BPM æµç¨å®ä¹ Key |
| | | */ |
| | | void submitStockTakingResultApproval(Long id, String processDefinitionKey); |
| | | void submitStockTakingResultApproval(Long id); |
| | | |
| | | /** |
| | | * æ´æ°çç¹ä»»å¡ç»æå®¡æ¹ç¶æï¼BPM 审æ¹åè°ï¼ |
| | | * è·å¾çç¹ç»æå®¡æ¹çå®¡æ ¸äººç¼å·éå |
| | | * |
| | | * <p>ä»
çç¹ä¸ç¶æå¤çï¼ |
| | | * ä¾åç«¯å¤æå½åç»å½ç¨æ·æ¯å¦åºå±ç¤ºãå®¡æ ¸ãæé®ï¼æªé
ç½®æ¶è¿å空éåã |
| | | * |
| | | * @return å®¡æ ¸äººç¨æ·ç¼å·éå |
| | | */ |
| | | Set<Long> getStockTakingTaskApproverUserIds(); |
| | | |
| | | /** |
| | | * å®¡æ ¸çç¹ç»æï¼çç¹ä¸Â·ç»æå®¡æ¹ä¸ â 已宿 / çç¹ä¸ï¼ |
| | | * |
| | | * <p>ä»
ä¸å¡ç¼ç stock_taking_result_approve é
ç½®çå®¡æ ¸äººå¯æä½ï¼å¤äººæ¶æç¾ï¼ï¼ |
| | | * ä¸ä»
å¨ç»æå®¡æ¹å·²æäº¤ãå°æªå®¡æ ¸æ¶å
è®¸ï¼ |
| | | * <ul> |
| | | * <li>审æ¹éè¿ï¼è§£å»åºåï¼åäºå¡èªå¨æ ¸éçç/çäºå¹¶ç½®ä¸ºå·²å®æï¼</li> |
| | | * <li>审æ¹é©³åï¼æ¸
空æµç¨å®ä¾ç¼å·ï¼ä»»å¡ä¿æçç¹ä¸ï¼å¯ä¿®æ¹å®çåéæ°æäº¤ï¼</li> |
| | | * <li>审æ¹åæ¶ï¼è§£å»åºåå¹¶ç½®ä¸ºå·²åæ¶ã</li> |
| | | * <li>å®¡æ ¸éè¿ï¼è§£å»åºåï¼åäºå¡èªå¨æ ¸éçç/çäºå¹¶ç½®ä¸ºå·²å®æï¼</li> |
| | | * <li>å®¡æ ¸ä¸éè¿ï¼å¿
须填ååå ï¼ä»»å¡ä¿æçç¹ä¸ï¼å¯ä¿®æ¹å®çåéæ°æäº¤ç»æå®¡æ¹ã</li> |
| | | * </ul> |
| | | * |
| | | * @param id çç¹ä»»å¡ç¼å· |
| | | * @param bpmResult BPM 审æ¹ç»æï¼éè¿/驳å/åæ¶ï¼ |
| | | * @param pass æ¯å¦éè¿ï¼true=éè¿ / false=ä¸éè¿ |
| | | * @param reviewRemark å®¡æ ¸æè§ï¼å®¡æ ¸ä¸éè¿æ¶å¿
å¡« |
| | | */ |
| | | void updateStockTakingTaskResultAuditStatus(Long id, Integer bpmResult); |
| | | |
| | | /** |
| | | * è·åçç¹ç»æå®¡æ¹å¯ç¨ç BPM æµç¨å®ä¹å表 |
| | | * |
| | | * @return æµç¨å®ä¹å表ï¼id/key/nameï¼ |
| | | */ |
| | | List<Map<String, Object>> getStockTakingTaskResultApprovalProcessDefinitionList(); |
| | | void auditStockTakingResult(Long id, Boolean pass, String reviewRemark); |
| | | |
| | | /** |
| | | * åæ¶çç¹ä»»å¡ |
| | |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.ObjUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.MesWmStockTakingTaskPageReqVO; |
| | |
| | | import cn.iocoder.yudao.module.mes.service.wm.stocktaking.plan.MesWmStockTakingPlanService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO; |
| | | import cn.iocoder.yudao.module.system.api.approval.ApprovalConfigApi; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | 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.dal.dataobject.definition.BpmProcessDefinitionInfoDO; |
| | | import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatusEnum; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | | import jakarta.annotation.Resource; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.flowable.engine.repository.ProcessDefinition; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.security.core.Authentication; |
| | | import org.springframework.security.core.context.SecurityContextHolder; |
| | |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDateTime; |
| | | import java.util.*; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; |
| | | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; |
| | | |
| | | /** |
| | |
| | | @Slf4j |
| | | public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskService { |
| | | |
| | | @Resource |
| | | private MesWmStockTakingTaskMapper stockTakingTaskMapper; |
| | | /** |
| | | * çç¹ç»æå®¡æ¹çä¸å¡ç±»åç¼ç |
| | | * |
| | | * ä¸ system_approval_config.biz_type 对åºï¼å®¡æ ¸äººå¨ãç³»ç»ç®¡ç - 审æ¹é
ç½®ãä¸ç»´æ¤ã |
| | | */ |
| | | private static final String STOCK_TAKING_RESULT_APPROVE_BIZ_TYPE = "stock_taking_result_approve"; |
| | | |
| | | @Resource |
| | | private BpmProcessInstanceApi processInstanceApi; |
| | | @Resource |
| | | private BpmProcessDefinitionService bpmProcessDefinitionService; |
| | | private MesWmStockTakingTaskMapper stockTakingTaskMapper; |
| | | |
| | | @Resource |
| | | private MesWmMaterialStockService materialStockService; |
| | |
| | | |
| | | @Resource |
| | | private AdminUserApi adminUserApi; |
| | | |
| | | @Resource |
| | | private ApprovalConfigApi approvalConfigApi; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | throw exception(WM_STOCK_TAKING_TASK_NO_LINE); |
| | | } |
| | | |
| | | // 2. æ´æ°ä»»å¡ç¶æä¸ºå®¡æ¹ä¸ |
| | | stockTakingTaskMapper.updateById(new MesWmStockTakingTaskDO().setId(id) |
| | | .setStatus(MesWmStockTakingTaskStatusEnum.APPROVING.getStatus())); |
| | | // 2. æ´æ°ä»»å¡ç¶æä¸ºçç¹ä¸ï¼å¹¶æ¸
ç©ºå®¡æ ¸æ è®° |
| | | stockTakingTaskMapper.submitAndResetAuditInfo(id, MesWmStockTakingTaskStatusEnum.APPROVING.getStatus()); |
| | | |
| | | // 3. æ ¹æ®å»ç»æ è¯ï¼å¯¹ç©èµè¿è¡å»ç» |
| | | if (Boolean.TRUE.equals(task.getFrozen())) { |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void submitStockTakingResultApproval(Long id, String processDefinitionKey) { |
| | | public void submitStockTakingResultApproval(Long id) { |
| | | // 1.1 æ ¡éªä»»å¡åå¨ä¸å¤äºçç¹ä¸ç¶æ |
| | | MesWmStockTakingTaskDO task = validateStockTakingTaskExistsAndApproving(id); |
| | | // 1.2 æ ¡éªç»æå®¡æ¹æªæäº¤è¿ï¼é¿å
éå¤æäº¤ï¼ |
| | | if (task.getProcessInstanceId() != null) { |
| | | // 1.2 æ ¡éªæ¬è½®ç»æå®¡æ¹æªæäº¤è¿ï¼é¿å
éå¤æäº¤ï¼ |
| | | if (isResultApprovalPending(task)) { |
| | | throw exception(WM_STOCK_TAKING_TASK_ALREADY_SUBMIT_APPROVAL); |
| | | } |
| | | // 1.3 æ ¡éªè³å°æä¸æ¡çç¹ç»æ |
| | |
| | | if (CollUtil.isEmpty(results)) { |
| | | throw exception(WM_STOCK_TAKING_TASK_NO_RESULT); |
| | | } |
| | | // 1.4 æ ¡éªå®¡æ¹é
置已å¯ç¨ä¸é
ç½®äºææå®¡æ ¸äººï¼æªé
ç½®æ¶æåºå¸¦æç¡®æç¤ºçä¸å¡å¼å¸¸ï¼ |
| | | approvalConfigApi.validateApprovalEnabledAndGetApprovers(STOCK_TAKING_RESULT_APPROVE_BIZ_TYPE); |
| | | |
| | | // 2. å建 BPM æµç¨å®ä¾ |
| | | String processInstanceId = processInstanceApi.createProcessInstance(getCurrentUserId(), |
| | | new BpmProcessInstanceCreateReqDTO() |
| | | .setProcessDefinitionKey(processDefinitionKey) |
| | | .setBusinessKey(String.valueOf(id))); |
| | | |
| | | // 3. ååæµç¨å®ä¾ç¼å·ï¼ä»»å¡ä¿æçç¹ä¸ï¼çå¾
审æ¹ï¼ |
| | | stockTakingTaskMapper.updateById(new MesWmStockTakingTaskDO() |
| | | .setId(id).setProcessInstanceId(processInstanceId)); |
| | | // 2. è®°å½æäº¤æ¶é´å¹¶æ¸
空ä¸ä¸è½®å®¡æ ¸ç»æï¼ä»»å¡ä¿æçç¹ä¸ï¼çå¾
å®¡æ ¸ï¼ |
| | | stockTakingTaskMapper.markResultApprovalSubmitted(id); |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getStockTakingTaskResultApprovalProcessDefinitionList() { |
| | | return getProcessDefinitionListByCategory(APPROVE_CATEGORY_CODE); |
| | | public Set<Long> getStockTakingTaskApproverUserIds() { |
| | | return approvalConfigApi.getApproverUserIds(STOCK_TAKING_RESULT_APPROVE_BIZ_TYPE); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void updateStockTakingTaskResultAuditStatus(Long id, Integer bpmResult) { |
| | | public void auditStockTakingResult(Long id, Boolean pass, String reviewRemark) { |
| | | // 1. æ ¡éªä»»å¡åå¨ |
| | | MesWmStockTakingTaskDO task = validateStockTakingTaskExists(id); |
| | | // 2. æ ¡éªå¤äºçç¹ä¸ï¼å«ç»æå®¡æ¹ä¸ï¼ç¶æ |
| | | if (!MesWmStockTakingTaskStatusEnum.APPROVING.getStatus().equals(task.getStatus())) { |
| | | log.warn("[updateStockTakingTaskResultAuditStatus] çç¹ä»»å¡({}) ä¸å¤äºçç¹ä¸ç¶æï¼å¿½ç¥å®¡æ¹äºä»¶", id); |
| | | throw exception(WM_STOCK_TAKING_TASK_NOT_APPROVING); |
| | | } |
| | | // 3. æ ¡éªæ¬è½®ç»æå®¡æ¹å·²æäº¤ä¸å°æªå®¡æ ¸ |
| | | if (!isResultApprovalPending(task)) { |
| | | throw exception(WM_STOCK_TAKING_TASK_RESULT_NOT_SUBMITTED); |
| | | } |
| | | // 4. æ ¡éªå½åç»å½ç¨æ·æ¯è¯¥ä¸å¡ç±»åçå®¡æ ¸äººï¼æç¾ï¼ä»»ä¸äººåå¯å®¡æ ¸ï¼ |
| | | Long userId = getLoginUserId(); |
| | | approvalConfigApi.validateApprover(STOCK_TAKING_RESULT_APPROVE_BIZ_TYPE, userId); |
| | | // 5. å®¡æ ¸ä¸éè¿ï¼å¿
须填ååå ï¼ä»»å¡ä¿æçç¹ä¸ï¼å¯ä¿®æ¹å®çåéæ°æäº¤ç»æå®¡æ¹ |
| | | if (!Boolean.TRUE.equals(pass)) { |
| | | if (StrUtil.isBlank(reviewRemark)) { |
| | | throw exception(WM_STOCK_TAKING_TASK_REJECT_REASON_REQUIRED); |
| | | } |
| | | stockTakingTaskMapper.auditStockTakingTask(id, MesWmStockTakingTaskStatusEnum.APPROVING.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | return; |
| | | } |
| | | // 2. 审æ¹éè¿ï¼å
ç½®ä¸ºå·²å®æï¼åè§£å»å¹¶åäºå¡èªå¨æ ¸éå·®å¼ |
| | | if (BpmTaskStatusEnum.APPROVE.getStatus().equals(bpmResult)) { |
| | | // 2.1 å
ç½®ä¸ºå·²å®æï¼ä»»å¡ç¶æåæ´åï¼åç»éå¤ç审æ¹äºä»¶è¯»åå° FINISHED å³è¢«å¿½ç¥ï¼é¿å
é夿 ¸é |
| | | stockTakingTaskMapper.updateById(new MesWmStockTakingTaskDO().setId(id) |
| | | .setStatus(MesWmStockTakingTaskStatusEnum.FINISHED.getStatus())); |
| | | // 2.2 è§£å»åºåï¼é¡»å¨å·®å¼æ ¸éåè§£å»ï¼å¦åæ ¸éäºå¡ä¼è¢«åºåå»ç»æ ¡éªæ¦æª |
| | | // 6. å®¡æ ¸éè¿ï¼å
ç½®ä¸ºå·²å®æå¹¶è®°å½å®¡æ ¸äººä¸å®¡æ ¸æè§ |
| | | stockTakingTaskMapper.auditStockTakingTask(id, MesWmStockTakingTaskStatusEnum.FINISHED.getStatus(), |
| | | userId, getUserNickname(userId), reviewRemark); |
| | | // 7. è§£å»åºåï¼é¡»å¨å·®å¼æ ¸éåè§£å»ï¼å¦åæ ¸éäºå¡ä¼è¢«åºåå»ç»æ ¡éªæ¦æª |
| | | if (Boolean.TRUE.equals(task.getFrozen())) { |
| | | updateMaterialStockFrozen(stockTakingTaskLineService.getStockTakingTaskLineListByTaskId(id), false); |
| | | } |
| | | // 2.3 èªå¨æ ¸éçç¹å·®å¼ï¼ççå
¥åº / çäºåºåºï¼åäºå¡å
æ´æ°åºåå°è´¦ï¼ä»»ä¸æ¥å¤±è´¥æ´ä½åæ»ï¼ä»»å¡åé为çç¹ä¸ |
| | | // 8. èªå¨æ ¸éçç¹å·®å¼ï¼ççå
¥åº / çäºåºåºï¼åäºå¡å
æ´æ°åºåå°è´¦ï¼ä»»ä¸æ¥å¤±è´¥æ´ä½åæ»ï¼ä»»å¡åé为çç¹ä¸ |
| | | doProcessStockTakingDifference(task); |
| | | return; |
| | | } |
| | | // 3. 审æ¹é©³åï¼æ¸
空æµç¨å®ä¾ç¼å·ï¼ä»»å¡ä¿æçç¹ä¸ï¼å¯ä¿®æ¹å®çåéæ°æäº¤ç»æå®¡æ¹ |
| | | if (BpmTaskStatusEnum.REJECT.getStatus().equals(bpmResult)) { |
| | | stockTakingTaskMapper.clearProcessInstanceId(id); |
| | | return; |
| | | } |
| | | // 4. 审æ¹åæ¶ï¼è§£å»åºåå¹¶ç½®ä¸ºå·²åæ¶ |
| | | if (BpmTaskStatusEnum.CANCEL.getStatus().equals(bpmResult)) { |
| | | if (Boolean.TRUE.equals(task.getFrozen())) { |
| | | updateMaterialStockFrozen(stockTakingTaskLineService.getStockTakingTaskLineListByTaskId(id), false); |
| | | } |
| | | stockTakingTaskMapper.clearProcessInstanceId(id); |
| | | stockTakingTaskMapper.updateById(new MesWmStockTakingTaskDO().setId(id) |
| | | .setStatus(MesWmStockTakingTaskStatusEnum.CANCELED.getStatus())); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·ååç±»ä¸çå¯ç¨ BPM æµç¨å®ä¹ï¼è¿æ»¤æèµ·æµç¨ï¼å Key ä¿çææ°çæ¬ï¼ |
| | | * 夿æ¬è½®çç¹ç»æå®¡æ¹æ¯å¦å·²æäº¤ä¸å°æªå®¡æ ¸ |
| | | * |
| | | * @param categoryCode æµç¨åç±»ç¼ç |
| | | * @return æµç¨å®ä¹å表ï¼id/key/nameï¼ |
| | | * ä»»å¡ç¶æ 2ï¼çç¹ä¸ï¼åæ¶æ¿è½½ãçç¹ä¸ãä¸ãçç¹ç»æå®¡æ¹ä¸ãä¸¤ä¸ªé¶æ®µï¼ |
| | | * 以 reviewTime éç©ºä¸ reviewerId 为空ä½ä¸ºãå·²æäº¤ãçå¾
å®¡æ ¸ãçå¤å®æ¡ä»¶ï¼ |
| | | * å®¡æ ¸ä¸éè¿å reviewerId é空ï¼ä»»å¡åå°å¯éæ°æäº¤ç»æå®¡æ¹çç¶æã |
| | | * |
| | | * @param task çç¹ä»»å¡ |
| | | * @return æ¯å¦å¤äºç»æå®¡æ¹ä¸ |
| | | */ |
| | | private List<Map<String, Object>> getProcessDefinitionListByCategory(String categoryCode) { |
| | | List<BpmProcessDefinitionInfoDO> definitionInfoList = bpmProcessDefinitionService |
| | | .getProcessDefinitionInfoListByCategory(categoryCode); |
| | | if (CollUtil.isEmpty(definitionInfoList)) { |
| | | return Collections.emptyList(); |
| | | private boolean isResultApprovalPending(MesWmStockTakingTaskDO task) { |
| | | return task.getReviewerId() == null && task.getReviewTime() != null; |
| | | } |
| | | // è¿æ»¤æ¿æ´»ç¶æï¼ä¿çææ°çæ¬ |
| | | Map<String, ProcessDefinition> latestVersionMap = new HashMap<>(); |
| | | for (BpmProcessDefinitionInfoDO info : definitionInfoList) { |
| | | ProcessDefinition pd = bpmProcessDefinitionService.getProcessDefinition(info.getProcessDefinitionId()); |
| | | if (pd == null || pd.isSuspended()) { |
| | | continue; |
| | | |
| | | /** |
| | | * è·åç¨æ·æµç§° |
| | | * |
| | | * @param userId ç¨æ·ç¼å· |
| | | * @return æµç§°ï¼ç¨æ·ä¸å卿¶è¿å null |
| | | */ |
| | | private String getUserNickname(Long userId) { |
| | | if (userId == null) { |
| | | return null; |
| | | } |
| | | ProcessDefinition existing = latestVersionMap.get(pd.getKey()); |
| | | if (existing == null || pd.getVersion() > existing.getVersion()) { |
| | | latestVersionMap.put(pd.getKey(), pd); |
| | | } |
| | | } |
| | | List<Map<String, Object>> result = new ArrayList<>(); |
| | | for (ProcessDefinition pd : latestVersionMap.values()) { |
| | | Map<String, Object> item = new HashMap<>(); |
| | | item.put("id", pd.getId()); |
| | | item.put("key", pd.getKey()); |
| | | item.put("name", pd.getName()); |
| | | result.add(item); |
| | | } |
| | | return result; |
| | | AdminUserRespDTO user = adminUserApi.getUser(userId); |
| | | return user == null ? null : user.getNickname(); |
| | | } |
| | | |
| | | private Long getCurrentUserId() { |
| | |
| | | } |
| | | task.setStatus(MesWmStockTakingTaskStatusEnum.CANCELED.getStatus()); |
| | | stockTakingTaskMapper.updateById(task); |
| | | // 忶忏
空æµç¨å®ä¾ç¼å·ï¼é¿å
æ®çå®¡æ¹æ è®°å½±ååç»éæ°å¼å§çç¹ |
| | | stockTakingTaskMapper.clearProcessInstanceId(id); |
| | | // 忶忏
ç©ºå®¡æ ¸æ è®°ï¼é¿å
æ®çå®¡æ¹æ è®°å½±ååç»éæ°å¼å§çç¹ |
| | | stockTakingTaskMapper.clearAuditInfo(id); |
| | | if (Boolean.TRUE.equals(task.getFrozen())) { |
| | | updateMaterialStockFrozen(stockTakingTaskLineService.getStockTakingTaskLineListByTaskId(id), false); |
| | | } |
| | |
| | | /** |
| | | * èªå¨æ ¸éçç¹å·®å¼ï¼æçç¹ç»æéè¡çæ IN/OUT åºåäºå¡æ´æ°åºåå°è´¦ |
| | | * |
| | | * <p>ä»
ç± {@link #updateStockTakingTaskResultAuditStatus} ç审æ¹éè¿åæ¯å¨åäºå¡å
è°ç¨ï¼ |
| | | * <p>ä»
ç± {@link #auditStockTakingResult} çå®¡æ ¸éè¿åæ¯å¨åäºå¡å
è°ç¨ï¼ |
| | | * 失败æ´ä½åæ»ï¼ä»»å¡åé为çç¹ä¸ç¶æï¼é¿å
éå¤è°æ´ã |
| | | * |
| | | * @param task å·²ç½®ä¸ºå·²å®æã已解å»ççç¹ä»»å¡ |
| | |
| | | import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; |
| | | import cn.iocoder.yudao.module.system.convert.user.UserConvert; |
| | | import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; |
| | | import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; |
| | | import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; |
| | | import cn.iocoder.yudao.module.system.enums.common.SexEnum; |
| | | import cn.iocoder.yudao.module.system.service.dept.DeptService; |
| | | import cn.iocoder.yudao.module.system.service.permission.PermissionService; |
| | | import cn.iocoder.yudao.module.system.service.permission.RoleService; |
| | | import cn.iocoder.yudao.module.system.service.user.AdminUserService; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | | import io.swagger.v3.oas.annotations.Parameter; |
| | |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | |
| | | private AdminUserService userService; |
| | | @Resource |
| | | private DeptService deptService; |
| | | @Resource |
| | | private RoleService roleService; |
| | | @Resource |
| | | private PermissionService permissionService; |
| | | |
| | | @PostMapping("/create") |
| | | @Operation(summary = "æ°å¢ç¨æ·") |
| | |
| | | return success(UserConvert.INSTANCE.convertSimpleList(list, deptMap)); |
| | | } |
| | | |
| | | @GetMapping("/list-by-role-code") |
| | | @Operation(summary = "è·å¾æå®è§è²ç¼ç çç¨æ·ç²¾ç®ä¿¡æ¯å表", description = "åªå
å«è¢«å¼å¯çç¨æ·ï¼ä¸»è¦ç¨äºå端ç䏿é项") |
| | | @Parameter(name = "code", description = "è§è²ç¼ç ", required = true, example = "production_submit_work") |
| | | public CommonResult<List<UserSimpleRespVO>> getUserListByRoleCode(@RequestParam("code") String code) { |
| | | // 1. æ¥è¯¢è§è² |
| | | RoleDO role = roleService.getRoleByCode(code); |
| | | if (role == null) { |
| | | return success(Collections.emptyList()); |
| | | } |
| | | // 2. æ¥è¯¢æ¥æè¯¥è§è²çç¨æ·ç¼å· |
| | | Set<Long> userIds = permissionService.getUserRoleIdListByRoleId(Collections.singletonList(role.getId())); |
| | | if (CollUtil.isEmpty(userIds)) { |
| | | return success(Collections.emptyList()); |
| | | } |
| | | // 3. æ¥è¯¢ç¨æ·ï¼åªä¿çå¼å¯ç¶æ |
| | | List<AdminUserDO> list = userService.getUserList(userIds).stream() |
| | | .filter(user -> CommonStatusEnum.ENABLE.getStatus().equals(user.getStatus())) |
| | | .collect(Collectors.toList()); |
| | | if (CollUtil.isEmpty(list)) { |
| | | return success(Collections.emptyList()); |
| | | } |
| | | // 4. æ¼æ¥é¨é¨æ°æ® |
| | | Map<Long, DeptDO> deptMap = deptService.getDeptMap(convertList(list, AdminUserDO::getDeptId)); |
| | | return success(UserConvert.INSTANCE.convertSimpleList(list, deptMap)); |
| | | } |
| | | |
| | | @GetMapping("/get") |
| | | @Operation(summary = "è·å¾ç¨æ·è¯¦æ
") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true, example = "1024") |
| | |
| | | RoleDO getRoleFromCache(Long id); |
| | | |
| | | /** |
| | | * æ ¹æ®è§è²ç¼ç è·å¾è§è² |
| | | * |
| | | * @param code è§è²ç¼ç |
| | | * @return è§è² |
| | | */ |
| | | RoleDO getRoleByCode(String code); |
| | | |
| | | /** |
| | | * è·å¾è§è²å表 |
| | | * |
| | | * @param ids è§è²ç¼å·æ°ç» |
| | |
| | | return roleMapper.selectById(id); |
| | | } |
| | | |
| | | @Override |
| | | public RoleDO getRoleByCode(String code) { |
| | | return roleMapper.selectByCode(code); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public List<RoleDO> getRoleListByStatus(Collection<Integer> statuses) { |