Quellcode durchsuchen

工作流V0.2版本代码提交

fuyuchuan vor 4 Monaten
Ursprung
Commit
56944df4d6
35 geänderte Dateien mit 1352 neuen und 128 gelöschten Zeilen
  1. 1 1
      service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/MybatisGeneratorUtils.java
  2. 64 2
      service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/web/OaApprovalController.java
  3. 54 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/web/OaDocumentController.java
  4. 19 1
      service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/web/OaFormDefinitionController.java
  5. 44 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/web/OaJbdDocumentController.java
  6. 0 21
      service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/web/OaQjDocumentController.java
  7. 50 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/web/OaQjdDocumentController.java
  8. 1 1
      service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaApproval.java
  9. 86 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaDocument.java
  10. 1 1
      service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaFormDefinition.java
  11. 15 16
      service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaJbdDocument.java
  12. 119 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaQjdDocument.java
  13. 2 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/mapper/OaApprovalMapper.java
  14. 16 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/mapper/OaDocumentMapper.java
  15. 18 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/mapper/OaJbdDocumentMapper.java
  16. 0 16
      service-oa/service-oa-biz/src/main/java/com/usky/oa/mapper/OaQjDocumentMapper.java
  17. 18 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/mapper/OaQjdDocumentMapper.java
  18. 11 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/OaApprovalService.java
  19. 50 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/OaDocumentService.java
  20. 24 1
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/OaFormDefinitionService.java
  21. 46 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/OaJbdDocumentService.java
  22. 0 16
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/OaQjDocumentService.java
  23. 46 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/OaQjdDocumentService.java
  24. 16 15
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/enums/OaBuiltInDocument.java
  25. 56 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaApprovalServiceImpl.java
  26. 96 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaDocumentServiceImpl.java
  27. 71 15
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaFormDefinitionServiceImpl.java
  28. 145 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaJbdDocumentServiceImpl.java
  29. 0 20
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaQjDocumentServiceImpl.java
  30. 161 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaQjdDocumentServiceImpl.java
  31. 54 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/vo/OaApprovalCountVO.java
  32. 19 0
      service-oa/service-oa-biz/src/main/java/com/usky/oa/service/vo/OaFormNameResponseVO.java
  33. 21 0
      service-oa/service-oa-biz/src/main/resources/mapper/oa/OaDocumentMapper.xml
  34. 26 0
      service-oa/service-oa-biz/src/main/resources/mapper/oa/OaJbdDocumentMapper.xml
  35. 2 2
      service-oa/service-oa-biz/src/main/resources/mapper/oa/OaQjdDocumentMapper.xml

+ 1 - 1
service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/MybatisGeneratorUtils.java

@@ -71,7 +71,7 @@ public class MybatisGeneratorUtils {
         // strategy.setTablePrefix("t_"); // 表名前缀
         strategy.setEntityLombokModel(true); // 使用lombok
         // 修改自己想要生成的表
-        strategy.setInclude("oa_approval", "oa_flow", "oa_form_definition", "oa_qj_document", "oa_node");  // 逆向工程使用的表   如果要生成多个,这里可以传入String[]
+        strategy.setInclude("oa_jb_document");  // 逆向工程使用的表   如果要生成多个,这里可以传入String[]
         mpg.setStrategy(strategy);
 
         // 关闭默认 xml 生成,调整生成 至 根目录

+ 64 - 2
service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/web/OaApprovalController.java

@@ -1,10 +1,16 @@
 package com.usky.oa.controller.web;
 
 
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.usky.oa.domain.OaDocument;
+import com.usky.oa.service.OaApprovalService;
+import com.usky.oa.service.vo.OaApprovalCountVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
 
 import org.springframework.stereotype.Controller;
 
+import java.util.List;
+
 /**
  * <p>
  * 审批表 前端控制器
@@ -13,9 +19,65 @@ import org.springframework.stereotype.Controller;
  * @author fu
  * @since 2024-12-10
  */
-@Controller
+@RestController
 @RequestMapping("/oaApproval")
 public class OaApprovalController {
 
+    @Autowired
+    private OaApprovalService oaApprovalService;
+
+    /**
+     * @description: 新增审批
+     * @author: fyc
+     * @email yuchuan.fu@chinausky.com
+     * @date: 2024/12/30 16:18
+     * @param: []
+     * @return: void
+     **/
+    @PostMapping("/add")
+    public void addApproval() {
+
+    }
+
+    /**
+     * @description: 修改审批
+     * @author: fyc
+     * @email yuchuan.fu@chinausky.com
+     * @date: 2024/12/30 16:19
+     * @param: []
+     * @return: void
+     **/
+    @PostMapping("/update")
+    public void updateApproval() {
+
+    }
+
+    /**
+     * @description: 删除审批
+     * @author: fyc
+     * @email yuchuan.fu@chinausky.com
+     * @date: 2024/12/30 16:19
+     * @param: []
+     * @return: void
+     **/
+    @DeleteMapping("/del")
+    public void delApproval() {
+
+    }
+
+    /**
+     * @description: 获取审批数量
+     * @author: fyc
+     * @email yuchuan.fu@chinausky.com
+     * @date: 2024/12/30 16:19
+     * @param: []
+     * @return: void
+     **/
+    @GetMapping("/approvalCount")
+    public OaApprovalCountVO approvalCount() {
+        return oaApprovalService.approvalCount();
+    }
+
+
 }
 

+ 54 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/web/OaDocumentController.java

@@ -0,0 +1,54 @@
+package com.usky.oa.controller.web;
+
+
+import com.usky.common.core.bean.CommonPage;
+import com.usky.oa.domain.OaDocument;
+import com.usky.oa.service.OaDocumentService;
+import com.usky.oa.service.vo.OaApprovalCountVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 单据总表 前端控制器
+ * </p>
+ *
+ * @author fu
+ * @since 2024-12-26
+ */
+@RestController
+@RequestMapping("/oaDocument")
+public class OaDocumentController {
+
+    @Autowired
+    private OaDocumentService oaDocumentService;
+
+    @PostMapping("/myApplication")
+    public CommonPage<OaDocument> myApplication(@RequestParam(value = "docNo", required = false) String docNo,
+                                                @RequestParam(value = "type", required = false) String type,
+                                                @RequestParam(value = "status", required = false) Integer status,
+                                                @RequestParam(value = "startTime", required = false) String startTime,
+                                                @RequestParam(value = "endTime", required = false) String endTime,
+                                                @RequestParam(value = "pageNum", required = false, defaultValue = "1") Integer pageNum,
+                                                @RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize) {
+        return oaDocumentService.myApplication(docNo, type, status, startTime, endTime, pageNum, pageSize);
+    }
+
+    @GetMapping("/documentDetails")
+    public Object documentDetails(@RequestParam(value = "docNo") String docNo,
+                                  @RequestParam(value = "type") String type) {
+        return oaDocumentService.documentDetails(docNo, type);
+    }
+
+    @DeleteMapping("/delDocument")
+    public void delDocument(@RequestParam(value = "type") String type,
+                            @RequestParam(value = "docNo") String docNo) {
+        oaDocumentService.delDocument(type, docNo);
+    }
+
+}
+

+ 19 - 1
service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/web/OaFormDefinitionController.java

@@ -9,11 +9,13 @@ import com.usky.oa.domain.OaFormDefinition;
 import com.usky.oa.service.OaFormDefinitionService;
 import com.usky.oa.service.enums.OaBuiltInDocument;
 import com.usky.oa.service.utils.OaDefinitionDocumentInfo;
+import com.usky.oa.service.vo.OaFormNameResponseVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -66,10 +68,26 @@ public class OaFormDefinitionController {
 
     // 内置单据枚举列表
     @GetMapping("/builtInFormEnums")
-    public List<OaDefinitionDocumentInfo> getBuiltInDocumentList() {
+    public List<OaDefinitionDocumentInfo> getBuiltInDocumentList(String sign, String name) {
         return Arrays.stream(OaBuiltInDocument.values())
                 .map(doc -> new OaDefinitionDocumentInfo(doc.getSign(), doc.getName()))
+                .filter(docInfo -> (sign == null || docInfo.getSign().equals(sign))
+                        && (name == null || docInfo.getName().contains(name)))
                 .collect(Collectors.toList());
     }
+
+    // 我的申请-依据权限展示表单
+    @GetMapping("/myForm")
+    public List<OaFormDefinition> myForm(String formSign) {
+        return oaFormDefinitionService.selectByScope(formSign);
+    }
+
+    // 表单名称列表
+    @GetMapping("/getFormName")
+    public List<OaFormNameResponseVO> getFormName() {
+        return oaFormDefinitionService.getFormName();
+    }
+
+
 }
 

+ 44 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/web/OaJbdDocumentController.java

@@ -0,0 +1,44 @@
+package com.usky.oa.controller.web;
+
+
+import com.usky.common.log.annotation.Log;
+import com.usky.common.log.enums.BusinessType;
+import com.usky.oa.domain.OaJbdDocument;
+import com.usky.oa.service.OaJbdDocumentService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * <p>
+ * 加班单据表 前端控制器
+ * </p>
+ *
+ * @author fu
+ * @since 2025-01-02
+ */
+@RestController
+@RequestMapping("/oaJbDocument")
+public class OaJbdDocumentController {
+
+    @Autowired
+    private OaJbdDocumentService oaJbdDocumentService;
+
+    @Log(title = "新增加班单", businessType = BusinessType.INSERT)
+    @PostMapping("/add")
+    public void addJbDocument(@RequestBody OaJbdDocument oaJbdDocument) {
+        oaJbdDocumentService.add(oaJbdDocument);
+    }
+
+    @Log(title = "更新加班单", businessType = BusinessType.UPDATE)
+    @PostMapping("/update")
+    public void updateJbDocument(OaJbdDocument oaJbdDocument) {
+        oaJbdDocumentService.update(oaJbdDocument);
+    }
+
+    @Log(title = "删除加班单", businessType = BusinessType.DELETE)
+    @DeleteMapping("/del/{docNo}")
+    public void delJbDocument(@PathVariable String docNo) {
+        oaJbdDocumentService.delByDocNo(docNo);
+    }
+
+}

+ 0 - 21
service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/web/OaQjDocumentController.java

@@ -1,21 +0,0 @@
-package com.usky.oa.controller.web;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.stereotype.Controller;
-
-/**
- * <p>
- * 请假单据表 前端控制器
- * </p>
- *
- * @author fu
- * @since 2024-12-10
- */
-@Controller
-@RequestMapping("/oaQjDocument")
-public class OaQjDocumentController {
-
-}
-

+ 50 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/web/OaQjdDocumentController.java

@@ -0,0 +1,50 @@
+package com.usky.oa.controller.web;
+
+
+import com.usky.common.core.bean.ApiResult;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.common.log.annotation.Log;
+import com.usky.common.log.enums.BusinessType;
+import com.usky.oa.domain.OaQjdDocument;
+import com.usky.oa.service.OaQjdDocumentService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * <p>
+ * 请假单据表 前端控制器
+ * </p>
+ *
+ * @author fu
+ * @since 2024-12-10
+ */
+@RestController
+@RequestMapping("/oaQjDocument")
+public class OaQjdDocumentController {
+
+    @Autowired
+    private OaQjdDocumentService oaQjdDocumentService;
+
+    // 新增请假单
+    @Log(title = "新增请假单", businessType = BusinessType.INSERT)
+    @PostMapping("/addQjDocument")
+    public void addQjDocument(@RequestBody OaQjdDocument oaQjdDocument) {
+        oaQjdDocumentService.addQjDocument(oaQjdDocument);
+    }
+
+    // 更新请假单
+    @Log(title = "更新请假单", businessType = BusinessType.UPDATE)
+    @PostMapping("/updateQjDocument")
+    public void updateQjDocument(@RequestBody OaQjdDocument oaQjdDocument) {
+        oaQjdDocumentService.updateQjDocument(oaQjdDocument);
+    }
+
+    // 删除请假单
+    @Log(title = "删除请假单", businessType = BusinessType.DELETE)
+    @DeleteMapping("/delQjDocument/{docNo}")
+    public void delQjDocument(String docNo) {
+        oaQjdDocumentService.delQjDocument(docNo);
+    }
+
+}
+

+ 1 - 1
service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaApproval.java

@@ -55,7 +55,7 @@ public class OaApproval implements Serializable {
     private Integer type;
 
     /**
-     * 审批状态(0:审批中 1:审批通过 2:审批不通过)
+     * 审批状态(0:审批中, 1:审批通过, 2:审批不通过, 3:撤销)
      */
     private Integer status;
 

+ 86 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaDocument.java

@@ -0,0 +1,86 @@
+package com.usky.oa.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 单据总表
+ * </p>
+ *
+ * @author fu
+ * @since 2024-12-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class OaDocument implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 单据总表主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 表单定义表主键
+     */
+    private Integer formId;
+
+    /**
+     * 表单标识
+     */
+    private String type;
+
+    /**
+     * 单据编号
+     */
+    private String docNo;
+
+    /**
+     * 申请人id
+     */
+    private Long proposer;
+
+    /**
+     * 单据状态 (0:未提交可以修改,1:审批中,2:审批通过,3:审批不通过)
+     */
+    private Integer status;
+
+    /**
+     * 创建者
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新者
+     */
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 部门id
+     */
+    private Long deptId;
+
+    /**
+     * 租户id
+     */
+    private Integer tenantId;
+
+
+}

+ 1 - 1
service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaFormDefinition.java

@@ -80,7 +80,7 @@ public class OaFormDefinition implements Serializable {
     private Integer formScope;
 
     /**
-     * 表单状态(0:未启用;1:启用;2:停用)
+     * 表单状态(1:启用;2:停用)
      */
     private Integer formStatus;
 

+ 15 - 16
service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaQjDocument.java → service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaJbdDocument.java

@@ -2,6 +2,7 @@ package com.usky.oa.domain;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
+
 import java.time.LocalDateTime;
 import java.io.Serializable;
 
@@ -11,33 +12,28 @@ import lombok.EqualsAndHashCode;
 
 /**
  * <p>
- * 请假单据表
+ * 加班单据表
  * </p>
  *
  * @author fu
- * @since 2024-12-10
+ * @since 2025-01-02
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
-public class OaQjDocument implements Serializable {
+public class OaJbdDocument implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
     /**
-     * 请假单据表主键
+     * 加班单据表主键
      */
     @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
 
     /**
-     * 请假类型(0:事假;1:年假;2:病假)
+     * 表单定义表主键
      */
-    private Integer type;
-
-    /**
-     * 审批节点id
-     */
-    private Integer nodeId;
+    private Integer formId;
 
     /**
      * 单据编号
@@ -67,17 +63,22 @@ public class OaQjDocument implements Serializable {
     private LocalDateTime endTime;
 
     /**
-     * 请假时长
+     * 加班时长(小时)
      */
     private Integer duration;
 
     /**
-     * 请假事由
+     * 核算方式(默认 0:申请调休)
+     */
+    private Integer accountingMethod;
+
+    /**
+     * 加班原因
      */
     private String reason;
 
     /**
-     * 图片URL
+     * 图片URL(打卡记录及日报)
      */
     private String image;
 
@@ -89,7 +90,6 @@ public class OaQjDocument implements Serializable {
     /**
      * 创建时间
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime createTime;
 
     /**
@@ -100,7 +100,6 @@ public class OaQjDocument implements Serializable {
     /**
      * 更新时间
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime updateTime;
 
     /**

+ 119 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/domain/OaQjdDocument.java

@@ -0,0 +1,119 @@
+package com.usky.oa.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 请假单据表
+ * </p>
+ *
+ * @author fu
+ * @since 2024-12-10
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class OaQjdDocument implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 请假单据表主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 表单id
+     */
+    private Integer formId;
+
+    /**
+     * 1:事假,2:病假(后续附上病假单、挂号单、病历册),3:年假(连续在我司工作一年以上的,才可享受),4:调休(有已获批准的加班流程),
+     * 5:婚假(附上结婚证),6:产假(后续附上出生证明),7:陪产假(后续附上出生证明),8:丧假(父母、配偶、子女死亡可申请3天),9:工伤假,
+     * 10:孕检假(后续附上挂号单、病例册)
+     */
+    private String type;
+
+    /**
+     * 单据编号
+     */
+    private String docNo;
+
+    /**
+     * 申请人id
+     */
+    private Long proposer;
+
+    /**
+     * 单据状态 (0:未提交可以修改,1:审批中,2:审批通过,3:审批不通过,4:撤销)
+     */
+    private Integer status;
+
+    /**
+     * 开始日期
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime startTime;
+
+    /**
+     * 结束日期
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime endTime;
+
+    /**
+     * 请假时长(小时)
+     */
+    private Integer duration;
+
+    /**
+     * 请假事由
+     */
+    private String reason;
+
+    /**
+     * 图片URL
+     */
+    private String image;
+
+    /**
+     * 创建者
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    /**
+     * 更新者
+     */
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    /**
+     * 部门id
+     */
+    private Long deptId;
+
+    /**
+     * 租户id
+     */
+    private Integer tenantId;
+
+
+}

+ 2 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/mapper/OaApprovalMapper.java

@@ -2,6 +2,7 @@ package com.usky.oa.mapper;
 
 import com.usky.oa.domain.OaApproval;
 import com.usky.common.mybatis.core.CrudMapper;
+import org.springframework.stereotype.Repository;
 
 /**
  * <p>
@@ -11,6 +12,7 @@ import com.usky.common.mybatis.core.CrudMapper;
  * @author fu
  * @since 2024-12-10
  */
+@Repository
 public interface OaApprovalMapper extends CrudMapper<OaApproval> {
 
 }

+ 16 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/mapper/OaDocumentMapper.java

@@ -0,0 +1,16 @@
+package com.usky.oa.mapper;
+
+import com.usky.oa.domain.OaDocument;
+import com.usky.common.mybatis.core.CrudMapper;
+
+/**
+ * <p>
+ * 单据总表 Mapper 接口
+ * </p>
+ *
+ * @author fu
+ * @since 2024-12-26
+ */
+public interface OaDocumentMapper extends CrudMapper<OaDocument> {
+
+}

+ 18 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/mapper/OaJbdDocumentMapper.java

@@ -0,0 +1,18 @@
+package com.usky.oa.mapper;
+
+import com.usky.oa.domain.OaJbdDocument;
+import com.usky.common.mybatis.core.CrudMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * <p>
+ * 加班单据表 Mapper 接口
+ * </p>
+ *
+ * @author fu
+ * @since 2025-01-02
+ */
+@Repository
+public interface OaJbdDocumentMapper extends CrudMapper<OaJbdDocument> {
+
+}

+ 0 - 16
service-oa/service-oa-biz/src/main/java/com/usky/oa/mapper/OaQjDocumentMapper.java

@@ -1,16 +0,0 @@
-package com.usky.oa.mapper;
-
-import com.usky.oa.domain.OaQjDocument;
-import com.usky.common.mybatis.core.CrudMapper;
-
-/**
- * <p>
- * 请假单据表 Mapper 接口
- * </p>
- *
- * @author fu
- * @since 2024-12-10
- */
-public interface OaQjDocumentMapper extends CrudMapper<OaQjDocument> {
-
-}

+ 18 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/mapper/OaQjdDocumentMapper.java

@@ -0,0 +1,18 @@
+package com.usky.oa.mapper;
+
+import com.usky.oa.domain.OaQjdDocument;
+import com.usky.common.mybatis.core.CrudMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * <p>
+ * 请假单据表 Mapper 接口
+ * </p>
+ *
+ * @author fu
+ * @since 2024-12-10
+ */
+@Repository
+public interface OaQjdDocumentMapper extends CrudMapper<OaQjdDocument> {
+
+}

+ 11 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/OaApprovalService.java

@@ -2,6 +2,11 @@ package com.usky.oa.service;
 
 import com.usky.oa.domain.OaApproval;
 import com.usky.common.mybatis.core.CrudService;
+import com.usky.oa.domain.OaDocument;
+import com.usky.oa.service.vo.OaApprovalCountVO;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +18,10 @@ import com.usky.common.mybatis.core.CrudService;
  */
 public interface OaApprovalService extends CrudService<OaApproval> {
 
+    /**
+     * 审批统计
+     * @return OaApprovalCountVO
+     */
+    OaApprovalCountVO approvalCount();
+
 }

+ 50 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/OaDocumentService.java

@@ -0,0 +1,50 @@
+package com.usky.oa.service;
+
+import com.usky.common.core.bean.CommonPage;
+import com.usky.oa.domain.OaDocument;
+import com.usky.common.mybatis.core.CrudService;
+import com.usky.oa.service.vo.OaApprovalCountVO;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 单据总表 服务类
+ * </p>
+ *
+ * @author fu
+ * @since 2024-12-26
+ */
+public interface OaDocumentService extends CrudService<OaDocument> {
+
+    /**
+     * @description: 我的申请
+     * @author: fyc
+     * @email yuchuan.fu@chinausky.com
+     * @date: 2024/12/31 13:17
+     * @param: []
+     * @return: java.util.List<com.usky.oa.domain.OaDocument>
+     **/
+    CommonPage<OaDocument> myApplication(String docNo, String type, Integer status, String startTime, String endTime, Integer pageNum, Integer pageSize);
+
+    /**
+     * @description: 单据详情
+     * @author: fyc
+     * @email yuchuan.fu@chinausky.com
+     * @date: 2024/12/31 13:17
+     * @param: []
+     * @return: java.util.List<com.usky.oa.domain.OaDocument>
+     **/
+    Object documentDetails(String docNo, String type);
+
+    /**
+     * @description: 删除单据
+     * @author: fyc
+     * @email yuchuan.fu@chinausky.com
+     * @date: 2024/12/31 13:17
+     * @param: []
+     * @return: java.util.List<com.usky.oa.domain.OaDocument>
+     **/
+    void delDocument(String type, String docNo);
+
+}

+ 24 - 1
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/OaFormDefinitionService.java

@@ -5,8 +5,12 @@ import com.usky.common.log.annotation.Log;
 import com.usky.common.log.enums.BusinessType;
 import com.usky.oa.domain.OaFormDefinition;
 import com.usky.common.mybatis.core.CrudService;
+import com.usky.oa.service.vo.OaFormNameResponseVO;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * <p>
  * 表单定义表 服务类
@@ -15,7 +19,6 @@ import org.springframework.stereotype.Service;
  * @author fu
  * @since 2024-12-10
  */
-@Service
 public interface OaFormDefinitionService extends CrudService<OaFormDefinition> {
 
     /**
@@ -46,4 +49,24 @@ public interface OaFormDefinitionService extends CrudService<OaFormDefinition> {
      */
     void validUpdateStatus(Integer formId, Integer formStatus);
 
+    /**
+     * @description: 根据表单标识查询表单信息-数据权限
+     * @author: fyc
+     * @email yuchuan.fu@chinausky.com
+     * @date: 2025/1/3 14:07
+     * @param: [formSign]
+     * @return: java.util.List<com.usky.oa.domain.OaFormDefinition>
+     **/
+    List<OaFormDefinition> selectByScope(String formSign);
+
+    /**
+     * @description: 获取表单名称列表
+     * @author: fyc
+     * @email yuchuan.fu@chinausky.com
+     * @date: 2025/1/3 14:07
+     * @param: []
+     * @return: java.util.Map<java.lang.Integer,java.lang.String>
+     **/
+    List<OaFormNameResponseVO> getFormName();
+
 }

+ 46 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/OaJbdDocumentService.java

@@ -0,0 +1,46 @@
+package com.usky.oa.service;
+
+import com.usky.oa.domain.OaJbdDocument;
+import com.usky.common.mybatis.core.CrudService;
+
+/**
+ * <p>
+ * 加班单据表 服务类
+ * </p>
+ *
+ * @author fu
+ * @since 2025-01-02
+ */
+public interface OaJbdDocumentService extends CrudService<OaJbdDocument> {
+
+    /**
+     * @description: 新增加班单据
+     * @author: fyc
+     * @email yuchuan.fu@chinausky.com
+     * @date: 2025/1/2 14:00
+     * @param: [oaJbDocument]
+     * @return: void
+     **/
+    void add(OaJbdDocument oaJbdDocument);
+
+    /**
+     * @description: 更新加班单据
+     * @author: fyc
+     * @email yuchuan.fu@chinausky.com
+     * @date: 2025/1/2 15:43
+     * @param: [oaJbDocument]
+     * @return: void
+     **/
+    void update(OaJbdDocument oaJbdDocument);
+
+    /**
+     * @description: 删除加班单据
+     * @author: fyc
+     * @email yuchuan.fu@chinausky.com
+     * @date: 2025/1/2 15:43
+     * @param: [id]
+     * @return: void
+     **/
+    void delByDocNo(String docNo);
+
+}

+ 0 - 16
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/OaQjDocumentService.java

@@ -1,16 +0,0 @@
-package com.usky.oa.service;
-
-import com.usky.oa.domain.OaQjDocument;
-import com.usky.common.mybatis.core.CrudService;
-
-/**
- * <p>
- * 请假单据表 服务类
- * </p>
- *
- * @author fu
- * @since 2024-12-10
- */
-public interface OaQjDocumentService extends CrudService<OaQjDocument> {
-
-}

+ 46 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/OaQjdDocumentService.java

@@ -0,0 +1,46 @@
+package com.usky.oa.service;
+
+import com.usky.oa.domain.OaQjdDocument;
+import com.usky.common.mybatis.core.CrudService;
+
+/**
+ * <p>
+ * 请假单据表 服务类
+ * </p>
+ *
+ * @author fu
+ * @since 2024-12-10
+ */
+
+public interface OaQjdDocumentService extends CrudService<OaQjdDocument> {
+
+    /**
+     * @description: 新增请假单据
+     * @author: fyc
+     * @email yuchuan.fu@chinausky.com
+     * @date: 2024/12/26 14:15
+     * @param: [oaQjDocument]
+     * @return: void
+     **/
+    void addQjDocument(OaQjdDocument oaQjdDocument);
+
+    /**
+     * @description: 修改请假单据
+     * @author: fyc
+     * @email yuchuan.fu@chinausky.com
+     * @date: 2024/12/26 14:15
+     * @param: [oaQjDocument]
+     * @return: void
+     **/
+    void updateQjDocument(OaQjdDocument oaQjdDocument);
+
+    /**
+     * @description: 删除请假单据
+     * @author: fyc
+     * @email yuchuan.fu@chinausky.com
+     * @date: 2024/12/26 15:20
+     * @param: [id]
+     * @return: void
+     **/
+    void delQjDocument(String docNo);
+}

+ 16 - 15
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/enums/OaBuiltInDocument.java

@@ -13,21 +13,22 @@ import java.util.Map;
  */
 public enum OaBuiltInDocument {
 
-    QJ("QJ", "请假表单"),
-    JB("JB", "加班表单"),
-    LZ("LZ", "离职表单"),
-    CC("CC", "出差表单"),
-    WC("WC", "外出表单"),
-    BHSQ("BHSQ", "项目编号申请表单"),
-    MPYS("MPYS", "名片印刷表单"),
-    DJP("DJP", "订机票表单"),
-    ZCLY("ZCLY", "固定资产领用表单"),
-    ZZJY("ZZJY", "印章资质借用表单"),
-    HTJY("HTJY", "合同借用表单"),
-    XMCG("XMCG", "项目采购表单"),
-    ZCCG("ZCCG", "固定资产采购表单"),
-    XZCG("XZCG", "行政(特殊)用品采购表单"),
-    YYSQ("YYSQ", "用印申请表单");
+    QJD("QJD", "请假单"),
+    JBD("JBD", "加班单");
+    // LZD("LZ", "离职单"),
+    // CCD("CC", "出差单"),
+    // WCD("WC", "外出单"),
+    // BHSQ("BHSQ", "项目编号申请单"),
+    // MPD("MPYS", "名片印刷单"),
+    // JPD("DJP", "机票单"),
+    // GDZC("ZCLY", "固定资产领用单"),
+    // ZZJY("ZZJY", "印章资质借用单"),
+    // HTJY("HTJY", "合同借用单"),
+    // //XMCG("XMCG", "项目采购表单");
+    // // 项目采购;固定资产采购;行政(特殊)用品采购
+    // CGD("CGSQ", "采购单"),
+    // //XZCG("XZCG", "行政(特殊)用品采购表单"),
+    // YYD("YYSQ", "用印申请单");
 
     private final String sign;
     private final String name;

+ 56 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaApprovalServiceImpl.java

@@ -1,11 +1,22 @@
 package com.usky.oa.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.usky.common.security.utils.SecurityUtils;
 import com.usky.oa.domain.OaApproval;
+import com.usky.oa.domain.OaDocument;
 import com.usky.oa.mapper.OaApprovalMapper;
 import com.usky.oa.service.OaApprovalService;
 import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.oa.service.vo.OaApprovalCountVO;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Collections;
+import java.util.List;
+
 /**
  * <p>
  * 审批表 服务实现类
@@ -17,4 +28,49 @@ import org.springframework.stereotype.Service;
 @Service
 public class OaApprovalServiceImpl extends AbstractCrudService<OaApprovalMapper, OaApproval> implements OaApprovalService {
 
+    @Autowired
+    private OaApprovalMapper oaApprovalMapper;
+
+    @Override
+    public OaApprovalCountVO approvalCount() {
+        Long userId = SecurityUtils.getUserId();
+        String username = SecurityUtils.getUsername();
+        Integer tenantId = SecurityUtils.getTenantId();
+
+        OaApprovalCountVO oaApprovalCountVO = new OaApprovalCountVO();
+        oaApprovalCountVO.setPendingSum(getPendingSum().size());
+
+        LambdaQueryWrapper<OaApproval> queryWrapper1 = Wrappers.lambdaQuery();
+        queryWrapper1.eq(OaApproval::getTenantId, tenantId)
+                .eq(OaApproval::getApprovalUid, userId)
+                .and(wrapper -> wrapper
+                        .eq(OaApproval::getStatus, 1)
+                        .or()
+                        .eq(OaApproval::getStatus, 2));
+        Integer count1 = oaApprovalMapper.selectCount(queryWrapper1);
+        oaApprovalCountVO.setAlreadySum(count1);
+
+        LambdaQueryWrapper<OaApproval> queryWrapper2 = Wrappers.lambdaQuery();
+        queryWrapper2.eq(OaApproval::getTenantId, tenantId).eq(OaApproval::getCreateBy, username);
+        Integer count2 = oaApprovalMapper.selectCount(queryWrapper2);
+        oaApprovalCountVO.setMyInitiated(count2);
+
+        LambdaQueryWrapper<OaApproval> queryWrapper3 = Wrappers.lambdaQuery();
+        queryWrapper3.eq(OaApproval::getTenantId, tenantId)
+                .eq(OaApproval::getApprovalUid, userId);
+        Integer count3 = oaApprovalMapper.selectCount(queryWrapper3);
+        oaApprovalCountVO.setMyReceived(count3);
+
+        return oaApprovalCountVO;
+    }
+
+    private List<OaApproval> getPendingSum(){
+        LambdaQueryWrapper<OaApproval> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(OaApproval::getTenantId, SecurityUtils.getTenantId())
+                .eq(OaApproval::getApprovalUid, SecurityUtils.getUserId())
+                .eq(OaApproval::getStatus, 0);
+        List<OaApproval> oaApprovals = oaApprovalMapper.selectList(queryWrapper);
+        return oaApprovals == null ? Collections.emptyList() : oaApprovals;
+    }
+
 }

+ 96 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaDocumentServiceImpl.java

@@ -0,0 +1,96 @@
+package com.usky.oa.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.common.security.utils.SecurityUtils;
+import com.usky.oa.domain.OaDocument;
+import com.usky.oa.domain.OaJbdDocument;
+import com.usky.oa.domain.OaQjdDocument;
+import com.usky.oa.mapper.OaDocumentMapper;
+import com.usky.oa.mapper.OaJbdDocumentMapper;
+import com.usky.oa.mapper.OaQjdDocumentMapper;
+import com.usky.oa.service.OaDocumentService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.oa.service.vo.OaApprovalCountVO;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * <p>
+ * 单据总表 服务实现类
+ * </p>
+ *
+ * @author fu
+ * @since 2024-12-26
+ */
+@Service
+public class OaDocumentServiceImpl extends AbstractCrudService<OaDocumentMapper, OaDocument> implements OaDocumentService {
+
+    @Autowired
+    private OaDocumentMapper oaDocumentMapper;
+
+    @Autowired
+    private OaQjdDocumentMapper oaQjdDocumentMapper;
+
+    @Autowired
+    private OaJbdDocumentMapper oaJbdDocumentMapper;
+
+    // 我的申请
+    @Override
+    public CommonPage<OaDocument> myApplication(String docNo, String type, Integer status, String startTime, String endTime, Integer pageNum, Integer pageSize) {
+        Long userId = SecurityUtils.getUserId();
+        Integer tenantId = SecurityUtils.getTenantId();
+
+        LambdaQueryWrapper<OaDocument> wrapper = Wrappers.lambdaQuery();
+        wrapper.like(StringUtils.isNotBlank(docNo), OaDocument::getDocNo, docNo)
+                .eq(StringUtils.isNotBlank(type), OaDocument::getType, type)
+                .eq(status != null, OaDocument::getStatus, status)
+                .between(StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime), OaDocument::getCreateTime, startTime, endTime);
+        List<OaDocument> oaDocuments = oaDocumentMapper.selectList(wrapper);
+        if (oaDocuments.isEmpty()) {
+            return null;
+        } else {
+            wrapper.eq(OaDocument::getTenantId, tenantId).eq(OaDocument::getProposer, userId).orderByDesc(OaDocument::getId);
+            ;
+        }
+        return ToCommonPage(page(new Page<>(pageNum, pageSize), wrapper));
+    }
+
+    @Override
+    public Object documentDetails(String docNo, String type) {
+
+        Object documentDetails = null;
+        switch (type) {
+            case "QJD":
+                documentDetails = oaQjdDocumentMapper.selectOne(Wrappers.lambdaQuery(OaQjdDocument.class).eq(OaQjdDocument::getDocNo, docNo));
+                break;
+            case "JBD":
+                documentDetails = oaJbdDocumentMapper.selectOne(Wrappers.lambdaQuery(OaJbdDocument.class).eq(OaJbdDocument::getDocNo, docNo));
+                break;
+        }
+
+        return documentDetails;
+    }
+
+    @Override
+    public void delDocument(String type, String docNo) {
+
+        switch (type) {
+            case "QJD":
+                oaQjdDocumentMapper.delete(Wrappers.lambdaQuery(OaQjdDocument.class).eq(OaQjdDocument::getDocNo, docNo));
+                break;
+            case "JBD":
+                oaJbdDocumentMapper.delete(Wrappers.lambdaQuery(OaJbdDocument.class).eq(OaJbdDocument::getDocNo, docNo));
+                break;
+        }
+        oaDocumentMapper.delete(Wrappers.lambdaQuery(OaDocument.class).eq(OaDocument::getDocNo, docNo));
+    }
+
+}

+ 71 - 15
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaFormDefinitionServiceImpl.java

@@ -8,23 +8,21 @@ import com.ruoyi.common.datascope.context.DataScopeContextHolder;
 import com.usky.common.core.bean.CommonPage;
 import com.usky.common.core.exception.BusinessException;
 import com.usky.common.security.utils.SecurityUtils;
+import com.usky.oa.domain.OaDocument;
 import com.usky.oa.domain.OaFormDefinition;
+import com.usky.oa.mapper.OaDocumentMapper;
 import com.usky.oa.mapper.OaFormDefinitionMapper;
+import com.usky.oa.service.OaDocumentService;
 import com.usky.oa.service.OaFormDefinitionService;
 import com.usky.common.mybatis.core.AbstractCrudService;
-import com.usky.oa.service.enums.OaBuiltInDocument;
+import com.usky.oa.service.vo.OaFormNameResponseVO;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
-import org.bouncycastle.util.Arrays;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.nio.charset.StandardCharsets;
-
 import java.time.LocalDateTime;
-import java.util.List;
-import java.util.Objects;
-import java.util.Queue;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -35,13 +33,15 @@ import java.util.stream.Collectors;
  * @author fu
  * @since 2024-12-10
  */
-@Slf4j
 @Service
 public class OaFormDefinitionServiceImpl extends AbstractCrudService<OaFormDefinitionMapper, OaFormDefinition> implements OaFormDefinitionService {
 
     @Autowired
     private OaFormDefinitionMapper oaFormDefinitionMapper;
 
+    @Autowired
+    private OaDocumentMapper oaDocumentMapper;
+
     /**
      * 新增/更新 表单
      * 此方法负责验证表单定义的合法性,包括表单名称和标识的唯一性、长度限制,并最终保存合法的表单定义
@@ -87,15 +87,16 @@ public class OaFormDefinitionServiceImpl extends AbstractCrudService<OaFormDefin
             oaFormDefinition.setTenantId(tenantId);
             oaFormDefinition.setCreateTime(now);
             oaFormDefinition.setFormVersion(1);
-            oaFormDefinition.setFormStatus(0);
+            oaFormDefinition.setFormStatus(2);
             oaFormDefinitionMapper.insert(oaFormDefinition);
         } else {
             oaFormDefinition.setUpdateBy(username);
             oaFormDefinition.setUpdateTime(now);
 
+            OaFormDefinition oaFormDefinition1 = oaFormDefinitionMapper.selectById(oaFormDefinition.getId());
             // 判断表单版本号是否需要更新
             if (versionUpdateValid(oaFormDefinition)) {
-                oaFormDefinition.setFormVersion(oaFormDefinition.getFormVersion() + 1);
+                oaFormDefinition.setFormVersion(oaFormDefinition1.getFormVersion() + 1);
             }
 
             oaFormDefinitionMapper.updateById(oaFormDefinition);
@@ -113,15 +114,20 @@ public class OaFormDefinitionServiceImpl extends AbstractCrudService<OaFormDefin
             if (oaFormDefinition == null) {
                 throw new BusinessException("表单不存在!");
             }
+            if (!validDelete(formId).isEmpty()) {
+                throw new BusinessException("当前表单下已生成单据,不可删除!");
+            }
             oaFormDefinitionMapper.deleteById(oaFormDefinition);
         } else {
             throw new BusinessException("表单ID不能为空或者小于0");
         }
     }
 
-    //判断表单下是否存在已生成单据
-    private void validDelete(Integer formId) {
-
+    // 判断表单下是否存在已生成单据
+    private List<OaDocument> validDelete(Integer formId) {
+        LambdaQueryWrapper<OaDocument> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(OaDocument::getFormId, formId);
+        return oaDocumentMapper.selectList(queryWrapper);
     }
 
 
@@ -158,6 +164,56 @@ public class OaFormDefinitionServiceImpl extends AbstractCrudService<OaFormDefin
         oaFormDefinitionMapper.updateById(oaFormDefinition);
     }
 
+    // 我的申请-根据权限查询表单
+    @Override
+    public List<OaFormDefinition> selectByScope(String formSign) {
+        Long userId = SecurityUtils.getUserId();
+        Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId();
+        Integer tenantId = SecurityUtils.getTenantId();
+
+        List<OaFormDefinition> oaFormDefinitions = new ArrayList<>();
+
+        LambdaQueryWrapper<OaFormDefinition> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(OaFormDefinition::getTenantId, tenantId);
+
+        if (StringUtils.isNotBlank(formSign)) {
+            queryWrapper.eq(OaFormDefinition::getFormSign, formSign);
+            OaFormDefinition oaFormDefinition = oaFormDefinitionMapper.selectOne(queryWrapper);
+            if (oaFormDefinition != null) {
+                oaFormDefinitions.add(oaFormDefinition);
+            }
+            return oaFormDefinitions;
+        }
+
+        queryWrapper.eq(OaFormDefinition::getFormStatus, 1)
+                .and(qw -> qw
+                        .eq(OaFormDefinition::getFormScope, 1)
+                        .or()
+                        .apply("FIND_IN_SET('" + deptId + "', dept_ids) > 0")
+                        .or()
+                        .apply("FIND_IN_SET('" + userId + "', user_ids) > 0"));
+        oaFormDefinitions = oaFormDefinitionMapper.selectList(queryWrapper);
+        return oaFormDefinitions;
+    }
+
+    @Override
+    public List<OaFormNameResponseVO> getFormName() {
+        LambdaQueryWrapper<OaFormDefinition> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(OaFormDefinition::getTenantId, SecurityUtils.getTenantId())
+                .select(OaFormDefinition::getId, OaFormDefinition::getFormName);
+        List<OaFormDefinition> oaFormDefinitions = oaFormDefinitionMapper.selectList(queryWrapper);
+
+        List<OaFormNameResponseVO> formNameList = new ArrayList<>();
+        for (OaFormDefinition oaFormDefinition : oaFormDefinitions) {
+            OaFormNameResponseVO oaFormNameResponseVO = new OaFormNameResponseVO();
+            oaFormNameResponseVO.setFormId(oaFormDefinition.getId());
+            oaFormNameResponseVO.setFormName(oaFormDefinition.getFormName());
+            formNameList.add(oaFormNameResponseVO);
+        }
+        return formNameList;
+    }
+
+
     // 表单版本更新验证
     private Boolean versionUpdateValid(OaFormDefinition oaFormDefinition) {
         boolean update = false;
@@ -199,8 +255,8 @@ public class OaFormDefinitionServiceImpl extends AbstractCrudService<OaFormDefin
         // 判断表单标识是否为空或者超长
         if (StringUtils.isBlank(formSign)) {
             throw new BusinessException("表单标识不能为空");
-        } else if (formSign.length() > 4) {
-            throw new BusinessException("表单标识长度不能超过4个字符");
+        } else if (formSign.length() < 3 || formSign.length() > 4) {
+            throw new BusinessException("表单标识长度不能少于3个字符或超过4个字符");
         } else if (!formSign.matches("^[A-Z]+$")) {
             throw new BusinessException("表单标识只能包含大写字母!");
         }

+ 145 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaJbdDocumentServiceImpl.java

@@ -0,0 +1,145 @@
+package com.usky.oa.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.usky.common.core.exception.BusinessException;
+import com.usky.common.security.utils.SecurityUtils;
+import com.usky.oa.domain.OaDocument;
+import com.usky.oa.domain.OaJbdDocument;
+import com.usky.oa.mapper.OaDocumentMapper;
+import com.usky.oa.mapper.OaJbdDocumentMapper;
+import com.usky.oa.service.OaJbdDocumentService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.oa.service.enums.OaBuiltInDocument;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * <p>
+ * 加班单据表 服务实现类
+ * </p>
+ *
+ * @author fu
+ * @since 2025-01-02
+ */
+@Service
+public class OaJbdDocumentServiceImpl extends AbstractCrudService<OaJbdDocumentMapper, OaJbdDocument> implements OaJbdDocumentService {
+
+    @Autowired
+    private OaJbdDocumentMapper oaJbdDocumentMapper;
+    @Autowired
+    private OaDocumentMapper oaDocumentMapper;
+
+    @Override
+    public void add(OaJbdDocument oaJbdDocument) {
+        Long userId = SecurityUtils.getUserId();
+        String username = SecurityUtils.getUsername();
+        Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId();
+        Integer tenantId = SecurityUtils.getTenantId();
+
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
+        LocalDateTime now = LocalDateTime.now();
+        String formattedDate = now.format(formatter);
+        String sign = OaBuiltInDocument.JBD.getSign();
+        String docNo = sign + "-" + formattedDate;
+
+        validateOaJbDocument(oaJbdDocument);
+
+        oaJbdDocument.setDocNo(docNo);
+        oaJbdDocument.setStatus(0);
+        oaJbdDocument.setAccountingMethod(0);
+        oaJbdDocument.setProposer(userId);
+        oaJbdDocument.setCreateBy(username);
+        oaJbdDocument.setCreateTime(now);
+        oaJbdDocument.setDeptId(deptId);
+        oaJbdDocument.setTenantId(tenantId);
+        oaJbdDocumentMapper.insert(oaJbdDocument);
+
+        OaDocument oaDocument = new OaDocument();
+        oaDocument.setFormId(oaJbdDocument.getFormId());
+        oaDocument.setType(sign);
+        oaDocument.setDocNo(docNo);
+        oaDocument.setProposer(userId);
+        oaDocument.setStatus(oaJbdDocument.getStatus());
+        oaDocument.setCreateBy(username);
+        oaDocument.setCreateTime(oaJbdDocument.getCreateTime());
+        oaDocument.setDeptId(deptId);
+        oaDocument.setTenantId(tenantId);
+        oaDocumentMapper.insert(oaDocument);
+    }
+
+    @Override
+    public void update(OaJbdDocument oaJbdDocument) {
+        if (StringUtils.isBlank(oaJbdDocument.getDocNo())) {
+            throw new BusinessException("更新单据编号传参异常!");
+        }
+        validateOaJbDocument(oaJbdDocument);
+        oaJbdDocument.setUpdateBy(SecurityUtils.getUsername());
+        oaJbdDocument.setUpdateTime(LocalDateTime.now());
+        oaJbdDocumentMapper.updateById(oaJbdDocument);
+
+        oaDocumentMapper.update(null, Wrappers.lambdaUpdate(OaDocument.class)
+                .set(OaDocument::getStatus, oaJbdDocument.getStatus())
+                .set(OaDocument::getUpdateBy, oaJbdDocument.getCreateBy())
+                .set(OaDocument::getUpdateTime, oaJbdDocument.getUpdateTime())
+        );
+    }
+
+    /**
+     * @description: 验证加班单据参数
+     * @author: fyc
+     * @email yuchuan.fu@chinausky.com
+     * @date: 2025/1/2 18:29
+     * @param: [oaJbdDocument]
+     * @return: void
+     **/
+    private void validateOaJbDocument(OaJbdDocument oaJbdDocument) {
+        if (oaJbdDocument.getFormId() == null || oaJbdDocument.getFormId() <= 0) {
+            throw new BusinessException("表单ID必须大于0!");
+        }
+        if (oaJbdDocument.getStartTime() == null || oaJbdDocument.getEndTime() == null || oaJbdDocument.getStartTime().isAfter(oaJbdDocument.getEndTime())) {
+            throw new BusinessException("加班开始时间或结束时间输入异常!");
+        }
+        if (oaJbdDocument.getDuration() == null || oaJbdDocument.getDuration() <= 0) {
+            throw new BusinessException("加班时长必须大于0!");
+        }
+        if (StringUtils.isBlank(oaJbdDocument.getReason())) {
+            throw new BusinessException("加班原因不能为空!");
+        } else if (oaJbdDocument.getReason().length() > 255) {
+            throw new BusinessException("加班原因超出字数限制,请重试!");
+        }
+        if (oaJbdDocument.getImage() == null) {
+            throw new BusinessException("打卡记录及日报图片不能为空!");
+        } else if (oaJbdDocument.getImage().length() > 500) {
+            throw new BusinessException("上传图片数量超出限制,请重试!");
+        }
+    }
+
+    @Override
+    public void delByDocNo(String docNo) {
+
+        if (StringUtils.isBlank(docNo)) {
+            throw new BusinessException("加班单据编号不能为空!");
+        }
+
+        Integer tenantId = SecurityUtils.getTenantId();
+        Long userId = SecurityUtils.getUserId();
+
+        LambdaQueryWrapper<OaJbdDocument> jbdDeleteWrapper = new LambdaQueryWrapper<>();
+        jbdDeleteWrapper.eq(OaJbdDocument::getTenantId, tenantId)
+                .eq(OaJbdDocument::getProposer, userId)
+                .eq(OaJbdDocument::getDocNo, docNo);
+        oaJbdDocumentMapper.delete(jbdDeleteWrapper);
+
+        LambdaQueryWrapper<OaDocument> deleteWrapper = new LambdaQueryWrapper<>();
+        deleteWrapper.eq(OaDocument::getTenantId, tenantId)
+                .eq(OaDocument::getProposer, userId)
+                .eq(OaDocument::getDocNo, docNo);
+        oaDocumentMapper.delete(deleteWrapper);
+    }
+
+}

+ 0 - 20
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaQjDocumentServiceImpl.java

@@ -1,20 +0,0 @@
-package com.usky.oa.service.impl;
-
-import com.usky.oa.domain.OaQjDocument;
-import com.usky.oa.mapper.OaQjDocumentMapper;
-import com.usky.oa.service.OaQjDocumentService;
-import com.usky.common.mybatis.core.AbstractCrudService;
-import org.springframework.stereotype.Service;
-
-/**
- * <p>
- * 请假单据表 服务实现类
- * </p>
- *
- * @author fu
- * @since 2024-12-10
- */
-@Service
-public class OaQjDocumentServiceImpl extends AbstractCrudService<OaQjDocumentMapper, OaQjDocument> implements OaQjDocumentService {
-
-}

+ 161 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaQjdDocumentServiceImpl.java

@@ -0,0 +1,161 @@
+package com.usky.oa.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.usky.common.core.exception.BusinessException;
+import com.usky.common.security.utils.SecurityUtils;
+import com.usky.oa.domain.OaDocument;
+import com.usky.oa.domain.OaQjdDocument;
+import com.usky.oa.mapper.OaDocumentMapper;
+import com.usky.oa.mapper.OaQjdDocumentMapper;
+import com.usky.oa.service.OaQjdDocumentService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.oa.service.enums.OaBuiltInDocument;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * <p>
+ * 请假单据表 服务实现类
+ * </p>
+ *
+ * @author fu
+ * @since 2024-12-10
+ */
+@Service
+public class OaQjdDocumentServiceImpl extends AbstractCrudService<OaQjdDocumentMapper, OaQjdDocument> implements OaQjdDocumentService {
+
+    @Autowired
+    private OaQjdDocumentMapper oaQjdDocumentMapper;
+
+    @Autowired
+    private OaDocumentMapper oaDocumentMapper;
+
+    @Override
+    public void addQjDocument(OaQjdDocument oaQjdDocument) {
+
+        // 校验表单数据
+        validateOaQjDocument(oaQjdDocument);
+
+        Long userId = SecurityUtils.getUserId();
+        String username = SecurityUtils.getUsername();
+        Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId();
+        Integer tenantId = SecurityUtils.getTenantId();
+
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
+        LocalDateTime now = LocalDateTime.now();
+        String formattedDate = now.format(formatter);
+        String sign = OaBuiltInDocument.QJD.getSign();
+        String docNo = sign + "-" + formattedDate;
+
+        // 插入请假表数据
+        oaQjdDocument.setDocNo(docNo);
+        oaQjdDocument.setProposer(userId);
+        oaQjdDocument.setStatus(0);
+        oaQjdDocument.setCreateBy(username);
+        oaQjdDocument.setCreateTime(now);
+        oaQjdDocument.setDeptId(deptId);
+        oaQjdDocument.setTenantId(tenantId);
+        oaQjdDocumentMapper.insert(oaQjdDocument);
+
+        // 插入单据表数据
+        OaDocument oaDocument = new OaDocument();
+        oaDocument.setFormId(oaQjdDocument.getFormId());
+        oaDocument.setType(sign);
+        oaDocument.setDocNo(docNo);
+        oaDocument.setProposer(userId);
+        oaDocument.setStatus(oaQjdDocument.getStatus());
+        oaDocument.setCreateBy(username);
+        oaDocument.setCreateTime(oaQjdDocument.getCreateTime());
+        oaDocument.setDeptId(deptId);
+        oaDocument.setTenantId(tenantId);
+        oaDocumentMapper.insert(oaDocument);
+    }
+
+    @Override
+    public void updateQjDocument(OaQjdDocument oaQjdDocument) {
+
+        if (StringUtils.isBlank(oaQjdDocument.getDocNo())){
+            throw new BusinessException("请假单据ID为空或异常");
+        }
+
+        validateOaQjDocument(oaQjdDocument);
+        String username = SecurityUtils.getUsername();
+        LocalDateTime now = LocalDateTime.now();
+        oaQjdDocument.setUpdateBy(username);
+        oaQjdDocument.setUpdateTime(now);
+        oaQjdDocumentMapper.updateById(oaQjdDocument);
+
+        oaDocumentMapper.update(null, Wrappers.lambdaUpdate(OaDocument.class)
+                .set(OaDocument::getStatus, oaQjdDocument.getStatus())
+                .set(OaDocument::getUpdateBy, username)
+                .set(OaDocument::getUpdateTime, oaQjdDocument.getUpdateTime())
+        );
+    }
+
+    /**
+     * @description: 校验请假单据表数据
+     * @author: fyc
+     * @email yuchuan.fu@chinausky.com
+     * @date: 2024/12/27 10:04
+     * @param: [oaQjDocument]
+     * @return: void
+     **/
+    public static void validateOaQjDocument(OaQjdDocument oaQjdDocument) throws BusinessException {
+        if (oaQjdDocument.getFormId() == null || oaQjdDocument.getFormId() <= 0) {
+            throw new BusinessException("表单ID不能为空或小于等于0");
+        }
+
+        if (StringUtils.isBlank(oaQjdDocument.getType())) {
+            throw new BusinessException("请假类型不能为空");
+        }
+
+        if (oaQjdDocument.getType().length() > 4) {
+            throw new BusinessException("请假类型长度不能超过4个字符");
+        }
+
+        if (oaQjdDocument.getStartTime() == null || oaQjdDocument.getEndTime() == null) {
+            throw new BusinessException("请假开始时间或结束时间不能为空");
+        }
+
+        if (oaQjdDocument.getStartTime().isAfter(oaQjdDocument.getEndTime())) {
+            throw new BusinessException("请假开始时间不能大于结束时间");
+        }
+
+        if (oaQjdDocument.getDuration() == null || oaQjdDocument.getDuration() <= 0) {
+            throw new BusinessException("请假时长不能为空或小于等于0");
+        }
+
+        if (StringUtils.isBlank(oaQjdDocument.getReason())) {
+            throw new BusinessException("请假原因不能为空");
+        }
+
+        if (oaQjdDocument.getReason().length() > 255) {
+            throw new BusinessException("请假原因超出字数限制,请重试");
+        }
+
+        if (oaQjdDocument.getImage() != null && oaQjdDocument.getImage().length() > 500) {
+            throw new BusinessException("上传图片数量超出限制,请重试");
+        }
+    }
+
+    @Override
+    public void delQjDocument(String docNo) {
+
+        if (StringUtils.isBlank(docNo)){
+            throw new BusinessException("请假单据编号不能为空!");
+        }
+
+        LambdaQueryWrapper<OaQjdDocument> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(OaQjdDocument::getDocNo, docNo);
+        oaQjdDocumentMapper.delete(queryWrapper);
+
+        LambdaQueryWrapper<OaDocument> deleteWrapper = Wrappers.lambdaQuery();
+        deleteWrapper.eq(OaDocument::getDocNo, docNo);
+        oaDocumentMapper.delete(deleteWrapper);
+    }
+}

+ 54 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/vo/OaApprovalCountVO.java

@@ -0,0 +1,54 @@
+package com.usky.oa.service.vo;
+
+import lombok.Data;
+
+/**
+ *
+ * @author fyc
+ * @email yuchuan.fu@chinausky.com
+ * @date 2024/12/30
+ */
+@Data
+public class OaApprovalCountVO {
+
+    /**
+     * @description: 待处理
+     * @author: fyc
+     * @email yuchuan.fu@chinausky.com
+     * @date: 2025/1/2 9:54
+     * @param:
+     * @return:
+     **/
+    private Integer pendingSum;
+
+    /**
+     * @description: 已处理
+     * @author: fyc
+     * @email yuchuan.fu@chinausky.com
+     * @date: 2025/1/2 9:54
+     * @param:
+     * @return:
+     **/
+    private Integer alreadySum;
+
+    /**
+     * @description: 已发起
+     * @author: fyc
+     * @email yuchuan.fu@chinausky.com
+     * @date: 2025/1/2 9:54
+     * @param:
+     * @return:
+     **/
+    private Integer myInitiated;
+
+    /**
+     * @description: 我收到的
+     * @author: fyc
+     * @email yuchuan.fu@chinausky.com
+     * @date: 2025/1/2 9:54
+     * @param:
+     * @return:
+     **/
+    private Integer myReceived;
+
+}

+ 19 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/vo/OaFormNameResponseVO.java

@@ -0,0 +1,19 @@
+package com.usky.oa.service.vo;
+
+import lombok.Data;
+
+/**
+ *
+ * @author fyc
+ * @email yuchuan.fu@chinausky.com
+ * @date 2025/1/3
+ */
+@Data
+public class OaFormNameResponseVO {
+
+    /** 表单id */
+    private Integer formId;
+    /** 表单名 */
+    private String formName;
+
+}

+ 21 - 0
service-oa/service-oa-biz/src/main/resources/mapper/oa/OaDocumentMapper.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.usky.oa.mapper.OaDocumentMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.oa.domain.OaDocument">
+        <id column="id" property="id" />
+        <result column="form_id" property="formId" />
+        <result column="type" property="type" />
+        <result column="doc_no" property="docNo" />
+        <result column="proposer" property="proposer" />
+        <result column="status" property="status" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="dept_id" property="deptId" />
+        <result column="tenant_id" property="tenantId" />
+    </resultMap>
+
+</mapper>

+ 26 - 0
service-oa/service-oa-biz/src/main/resources/mapper/oa/OaJbdDocumentMapper.xml

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.usky.oa.mapper.OaJbdDocumentMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.oa.domain.OaJbdDocument">
+        <id column="id" property="id" />
+        <result column="form_id" property="formId" />
+        <result column="doc_no" property="docNo" />
+        <result column="proposer" property="proposer" />
+        <result column="status" property="status" />
+        <result column="start_time" property="startTime" />
+        <result column="end_time" property="endTime" />
+        <result column="duration" property="duration" />
+        <result column="accounting_method" property="accountingMethod" />
+        <result column="reason" property="reason" />
+        <result column="image" property="image" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="dept_id" property="deptId" />
+        <result column="tenant_id" property="tenantId" />
+    </resultMap>
+
+</mapper>

+ 2 - 2
service-oa/service-oa-biz/src/main/resources/mapper/oa/OaQjDocumentMapper.xml → service-oa/service-oa-biz/src/main/resources/mapper/oa/OaQjdDocumentMapper.xml

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.usky.oa.mapper.OaQjDocumentMapper">
+<mapper namespace="com.usky.oa.mapper.OaQjdDocumentMapper">
 
     <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.usky.oa.domain.OaQjDocument">
+    <resultMap id="BaseResultMap" type="com.usky.oa.domain.OaQjdDocument">
         <id column="id" property="id" />
         <result column="type" property="type" />
         <result column="node_id" property="nodeId" />