Browse Source

0.3版本问题修复

fuyuchuan 2 months ago
parent
commit
be4888a114

+ 14 - 0
service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/web/OaApprovalController.java

@@ -61,6 +61,20 @@ public class OaApprovalController {
         return oaApprovalService.pageList(queryType, docNo, formSign, approvalStatus, startTime, endTime, pageNum, pageSize);
     }
 
+    /**
+     * @description: 审批
+     * @author: fyc
+     * @email yuchuan.fu@chinausky.com
+     * @date: 2025/1/17 17:32
+     * @param: [oaApproval]
+     * @return: void
+     **/
+    @PutMapping("/approve")
+    public void add(@RequestParam(value = "id") Integer id,
+                    @RequestParam(value = "approvalStatus") Integer approvalStatus,
+                    @RequestParam(value = "opinion", required = false, defaultValue = "无") String opinion) {
+        oaApprovalService.approve(id, approvalStatus, opinion);
+    }
 
 }
 

+ 3 - 2
service-oa/service-oa-biz/src/main/java/com/usky/oa/controller/web/OaDocumentController.java

@@ -72,6 +72,7 @@ public class OaDocumentController {
         return oaDocumentService.documentDetails(docNo);
     }
 
+    // 更新单据
     @Log(title = "更新单据", businessType = BusinessType.UPDATE)
     @PostMapping("/update")
     public void approvalCount(@RequestBody JSONObject jsonDocument) {
@@ -82,8 +83,8 @@ public class OaDocumentController {
     @Log(title = "提交单据", businessType = BusinessType.UPDATE)
     @PutMapping("/submit")
     public void submit(@RequestParam(value = "docNo") String docNo,
-                       @RequestParam(value = "docStatus") Integer status){
-        oaDocumentService.submit(docNo, status);
+                       @RequestParam(value = "docStatus") Integer docStatus){
+        oaDocumentService.submit(docNo, docStatus);
     }
 
 }

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

@@ -20,7 +20,7 @@ import lombok.EqualsAndHashCode;
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
-public class OaQjdDocument extends JSONObject implements Serializable {
+public class OaQjdDocument implements Serializable {
 
     private static final long serialVersionUID = 1L;
 

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

@@ -39,4 +39,10 @@ public interface OaApprovalService extends CrudService<OaApproval> {
      */
     CommonPage<OaApproval> pageList(Integer queryType, String docNo, String formSign, Integer approvalStatus, String startTime, String endTime, Integer pageNum, Integer pageSize);
 
+    /**
+     * 审批
+     * @param id 审批ID
+     * @param approvalStatus 审批状态(1:审批中,2:审批通过,3:审批不通过)
+     */
+    void approve(Integer id, Integer approvalStatus, String opinion);
 }

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

@@ -76,5 +76,5 @@ public interface OaDocumentService extends CrudService<OaDocument> {
      * @param: [docNo]
      * @return: void
      **/
-    void submit(String docNo, Integer status);
+    void submit(String docNo, Integer docStatus);
 }

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

@@ -11,7 +11,6 @@ import com.usky.common.mybatis.core.CrudService;
  * @author fu
  * @since 2024-12-10
  */
-
 public interface OaQjdDocumentService extends CrudService<OaQjdDocument> {
 
     /**

+ 43 - 2
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaApprovalServiceImpl.java

@@ -6,6 +6,7 @@ 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.core.exception.BusinessException;
 import com.usky.common.security.utils.SecurityUtils;
 import com.usky.oa.domain.OaApproval;
 import com.usky.oa.domain.OaDocument;
@@ -18,8 +19,13 @@ 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;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * <p>
@@ -65,9 +71,16 @@ public class OaApprovalServiceImpl extends AbstractCrudService<OaApprovalMapper,
         Integer tenantId = SecurityUtils.getTenantId();
         IPage<OaApproval> page = new Page<>(pageNum, pageSize);
 
+        LocalDateTime now = LocalDateTime.now();
+        // 一年前时间
+        LocalDateTime oneYearAgo = now.minusYears(1);
+
+        List<Integer> processed = Stream.of(2, 3).collect(Collectors.toList());
+
         LambdaQueryWrapper<OaApproval> queryWrapper = Wrappers.lambdaQuery();
         queryWrapper.eq(OaApproval::getTenantId, tenantId)
-                .eq(OaApproval::getApprovalUid, userId);
+                .eq(OaApproval::getApprovalUid, userId)
+                .between(OaApproval::getCreateTime, oneYearAgo, now);
 
         switch (queryType) {
             case 1:
@@ -80,6 +93,7 @@ public class OaApprovalServiceImpl extends AbstractCrudService<OaApprovalMapper,
                 queryWrapper.like(StringUtils.isNotBlank(docNo), OaApproval::getDocNo, docNo)
                         .like(StringUtils.isNotBlank(formSign), OaApproval::getDocNo, formSign)
                         .eq(approvalStatus != null && approvalStatus > 1 && approvalStatus < 4, OaApproval::getApprovalStatus, approvalStatus)
+                        .in(OaApproval::getApprovalStatus, processed)
                         .between(StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime), OaApproval::getSubmitDate, startTime, endTime);
                 break;
             case 3:
@@ -95,6 +109,32 @@ public class OaApprovalServiceImpl extends AbstractCrudService<OaApprovalMapper,
         return ToCommonPage(oaApprovalMapper.selectPage(page, queryWrapper));
     }
 
+    // 审批
+    @Override
+    public void approve(Integer id, Integer approvalStatus, String opinion) {
+        LambdaQueryWrapper<OaApproval> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(OaApproval::getId, id);
+        OaApproval oaApproval = oaApprovalMapper.selectOne(queryWrapper);
+
+        if (!oaApproval.getApprovalUid().equals(SecurityUtils.getUserId())) {
+            throw new BusinessException("审批权限不足,暂时无法更改!");
+        }
+
+        if (oaApproval.getApprovalStatus() != 1) {
+            throw new BusinessException("审批状态异常,暂时无法更改!");
+        }
+        if (approvalStatus < 2 || approvalStatus > 3) {
+            throw new BusinessException("审批类型错误,请重试!");
+        }
+
+        oaApproval.setApprovalStatus(approvalStatus);
+        oaApproval.setOpinion(opinion);
+        oaApproval.setApprovalDate(LocalDateTime.now());
+        oaApproval.setUpdateBy(SecurityUtils.getUsername());
+        oaApproval.setUpdateTime(LocalDateTime.now());
+        oaApprovalMapper.updateById(oaApproval);
+    }
+
     // 待处理
     private List<OaApproval> getPendingSum(Integer tenantId, Long userId) {
         LambdaQueryWrapper<OaApproval> queryWrapper = Wrappers.lambdaQuery();
@@ -148,7 +188,8 @@ public class OaApprovalServiceImpl extends AbstractCrudService<OaApprovalMapper,
     private List<OaApproval> getMyReceived(Integer tenantId, Long userId) {
         LambdaQueryWrapper<OaApproval> queryWrapper = Wrappers.lambdaQuery();
         queryWrapper.eq(OaApproval::getTenantId, tenantId)
-                .eq(OaApproval::getApprovalUid, userId);
+                .eq(OaApproval::getApprovalUid, userId)
+                .eq(OaApproval::getType, 1);
         List<OaApproval> oaApprovals = oaApprovalMapper.selectList(queryWrapper);
         return oaApprovals == null ? Collections.emptyList() : oaApprovals;
     }

+ 81 - 15
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaDocumentServiceImpl.java

@@ -8,14 +8,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 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.domain.OaJbdDocument;
-import com.usky.oa.domain.OaQjdDocument;
-import com.usky.oa.mapper.OaDocumentMapper;
-import com.usky.oa.mapper.OaFormDefinitionMapper;
-import com.usky.oa.mapper.OaJbdDocumentMapper;
-import com.usky.oa.mapper.OaQjdDocumentMapper;
+import com.usky.oa.domain.*;
+import com.usky.oa.mapper.*;
 import com.usky.oa.service.OaDocumentService;
 import com.usky.common.mybatis.core.AbstractCrudService;
 import com.usky.oa.service.OaJbdDocumentService;
@@ -23,6 +17,7 @@ import com.usky.oa.service.OaQjdDocumentService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -61,6 +56,9 @@ public class OaDocumentServiceImpl extends AbstractCrudService<OaDocumentMapper,
     @Autowired
     private OaFormDefinitionMapper oaFormDefinitionMapper;
 
+    @Autowired
+    private OaApprovalMapper oaApprovalMapper;
+
     private static final String TABLE_HEAD = "oa_";
     private static final String TABLE_SUFFIX = "_document";
 
@@ -118,6 +116,8 @@ public class OaDocumentServiceImpl extends AbstractCrudService<OaDocumentMapper,
     @Override
     public void addDoc(JSONObject oaDocument) {
 
+        LocalDateTime now = LocalDateTime.now();
+
         LambdaQueryWrapper<OaFormDefinition> queryWrapper = Wrappers.lambdaQuery();
         queryWrapper.select(OaFormDefinition::getFieldInfo).eq(OaFormDefinition::getId, oaDocument.get("formId"));
         OaFormDefinition oaFormDefinition = oaFormDefinitionMapper.selectOne(queryWrapper);
@@ -128,9 +128,38 @@ public class OaDocumentServiceImpl extends AbstractCrudService<OaDocumentMapper,
                 oaQjdDocumentService.addQjDocument(JSON.parseObject(oaDocument.toJSONString(), OaQjdDocument.class));
                 break;
             case "JBD":
-                oaJbdDocumentService.add(oaDocument.toJavaObject(OaJbdDocument.class));
+                oaJbdDocumentService.add(JSON.parseObject(oaDocument.toJSONString(), OaJbdDocument.class));
                 break;
         }
+
+        // 如果直接提交则生成两条单据记录
+        String docStatus = oaDocument.get("docStatus").toString();
+        if (docStatus.equals("1")) {
+            // 生成两条审批记录数据
+            OaApproval oaApproval = new OaApproval();
+            oaApproval.setDocNo(oaDocument.get("docNo").toString());
+            oaApproval.setType(0);
+            oaApproval.setApprovalStatus(1);
+            oaApproval.setApprovalUid(226L);
+            oaApproval.setCreateBy(oaDocument.get("username").toString());
+            oaApproval.setCreateTime(now);
+            oaApproval.setSubmitDate(now);
+            oaApproval.setDeptId(SecurityUtils.getLoginUser().getSysUser().getDeptId());
+            oaApproval.setTenantId(SecurityUtils.getTenantId());
+            oaApprovalMapper.insert(oaApproval);
+
+            OaApproval oaApproval1 = new OaApproval();
+            oaApproval1.setDocNo(oaDocument.get("docNo").toString());
+            oaApproval1.setType(1);
+            oaApproval1.setApprovalStatus(1);
+            oaApproval1.setApprovalUid(155L);
+            oaApproval1.setCreateBy(oaDocument.get("username").toString());
+            oaApproval1.setCreateTime(now);
+            oaApproval1.setSubmitDate(now);
+            oaApproval1.setDeptId(SecurityUtils.getLoginUser().getSysUser().getDeptId());
+            oaApproval1.setTenantId(SecurityUtils.getTenantId());
+            oaApprovalMapper.insert(oaApproval1);
+        }
     }
 
     // 更新单据
@@ -169,37 +198,74 @@ public class OaDocumentServiceImpl extends AbstractCrudService<OaDocumentMapper,
     }
 
     // 提交单据
+    @Transactional
     @Override
-    public void submit(String docNo, Integer status) {
-        if (status != 1) {
+    public void submit(String docNo, Integer docStatus) {
+        if (docStatus != 1) {
             throw new RuntimeException("单据提交异常,请联系管理员!");
+        } else {
+            LambdaQueryWrapper<OaDocument> queryWrapper = Wrappers.lambdaQuery();
+            queryWrapper.eq(OaDocument::getDocNo, docNo);
+            OaDocument oaDocument = oaDocumentMapper.selectOne(queryWrapper);
+            if (oaDocument.getDocStatus() == 1) {
+                throw new RuntimeException("单据已提交,请勿重复提交!");
+            }
         }
-        String formSign = getFormSign(docNo);
 
+        Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId();
+        Integer tenantId = SecurityUtils.getTenantId();
         String username = SecurityUtils.getUsername();
         LocalDateTime now = LocalDateTime.now();
 
+        String formSign = getFormSign(docNo);
+
         switch (formSign) {
             case "QJD":
                 oaQjdDocumentMapper.update(null, Wrappers.lambdaUpdate(OaQjdDocument.class)
-                        .set(OaQjdDocument::getDocStatus, status)
+                        .set(OaQjdDocument::getDocStatus, docStatus)
                         .set(OaQjdDocument::getUpdateBy, username)
                         .set(OaQjdDocument::getUpdateTime, now)
                         .eq(OaQjdDocument::getDocNo, docNo));
                 break;
             case "JBD":
                 oaJbdDocumentMapper.update(null, Wrappers.lambdaUpdate(OaJbdDocument.class)
-                        .set(OaJbdDocument::getDocStatus, status)
+                        .set(OaJbdDocument::getDocStatus, docStatus)
                         .set(OaJbdDocument::getUpdateBy, username)
                         .set(OaJbdDocument::getUpdateTime, now)
                         .eq(OaJbdDocument::getDocNo, docNo));
                 break;
         }
         oaDocumentMapper.update(null, Wrappers.lambdaUpdate(OaDocument.class)
-                .set(OaDocument::getDocStatus, status)
+                .set(OaDocument::getDocStatus, docStatus)
                 .set(OaDocument::getUpdateBy, username)
                 .set(OaDocument::getUpdateTime, now)
                 .eq(OaDocument::getDocNo, docNo));
+
+        // 生成两条审批记录数据
+        OaApproval oaApproval = new OaApproval();
+        oaApproval.setDocNo(docNo);
+        oaApproval.setType(0);
+        oaApproval.setApprovalStatus(1);
+        oaApproval.setApprovalUid(226L);
+        oaApproval.setCreateBy(username);
+        oaApproval.setCreateTime(now);
+        oaApproval.setSubmitDate(now);
+        oaApproval.setDeptId(deptId);
+        oaApproval.setTenantId(tenantId);
+        oaApprovalMapper.insert(oaApproval);
+
+        OaApproval oaApproval1 = new OaApproval();
+        oaApproval1.setDocNo(docNo);
+        oaApproval1.setType(1);
+        oaApproval1.setApprovalStatus(1);
+        oaApproval1.setApprovalUid(157L);
+        oaApproval1.setCreateBy(username);
+        oaApproval1.setCreateTime(now);
+        oaApproval1.setSubmitDate(now);
+        oaApproval1.setDeptId(deptId);
+        oaApproval1.setTenantId(tenantId);
+        oaApprovalMapper.insert(oaApproval1);
+
     }
 
     // 获取单据类型

+ 36 - 1
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaJbdDocumentServiceImpl.java

@@ -4,8 +4,10 @@ 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.OaApproval;
 import com.usky.oa.domain.OaDocument;
 import com.usky.oa.domain.OaJbdDocument;
+import com.usky.oa.mapper.OaApprovalMapper;
 import com.usky.oa.mapper.OaDocumentMapper;
 import com.usky.oa.mapper.OaJbdDocumentMapper;
 import com.usky.oa.service.OaJbdDocumentService;
@@ -32,9 +34,13 @@ public class OaJbdDocumentServiceImpl extends AbstractCrudService<OaJbdDocumentM
 
     @Autowired
     private OaJbdDocumentMapper oaJbdDocumentMapper;
+
     @Autowired
     private OaDocumentMapper oaDocumentMapper;
 
+    @Autowired
+    private OaApprovalMapper oaApprovalMapper;
+
     @Override
     public void add(OaJbdDocument oaJbdDocument) {
         Long userId = SecurityUtils.getUserId();
@@ -70,6 +76,35 @@ public class OaJbdDocumentServiceImpl extends AbstractCrudService<OaJbdDocumentM
         oaDocument.setDeptId(deptId);
         oaDocument.setTenantId(tenantId);
         oaDocumentMapper.insert(oaDocument);
+
+// 如果直接提交则生成两条单据记录
+        Integer docStatus = oaJbdDocument.getDocStatus();
+        if (docStatus.equals(1)) {
+            // 生成两条审批记录数据
+            OaApproval oaApproval = new OaApproval();
+            oaApproval.setDocNo(oaJbdDocument.getDocNo());
+            oaApproval.setType(0);
+            oaApproval.setApprovalStatus(1);
+            oaApproval.setApprovalUid(226L);
+            oaApproval.setCreateBy(oaJbdDocument.getCreateBy());
+            oaApproval.setCreateTime(now);
+            oaApproval.setSubmitDate(now);
+            oaApproval.setDeptId(oaJbdDocument.getDeptId());
+            oaApproval.setTenantId(oaJbdDocument.getTenantId());
+            oaApprovalMapper.insert(oaApproval);
+
+            OaApproval oaApproval1 = new OaApproval();
+            oaApproval.setDocNo(oaJbdDocument.getDocNo());
+            oaApproval1.setType(1);
+            oaApproval1.setApprovalStatus(1);
+            oaApproval1.setApprovalUid(155L);
+            oaApproval1.setCreateBy(oaJbdDocument.getCreateBy());
+            oaApproval1.setCreateTime(now);
+            oaApproval1.setSubmitDate(now);
+            oaApproval1.setDeptId(oaJbdDocument.getDeptId());
+            oaApproval1.setTenantId(oaJbdDocument.getTenantId());
+            oaApprovalMapper.insert(oaApproval1);
+        }
     }
 
     @Override
@@ -107,7 +142,7 @@ public class OaJbdDocumentServiceImpl extends AbstractCrudService<OaJbdDocumentM
         LocalDateTime endTime = oaJbdDocument.getEndTime();
         Integer duration = oaJbdDocument.getDuration();
 
-        if (startTime == null ||endTime == null || startTime.isAfter(endTime)) {
+        if (startTime == null || endTime == null || startTime.isAfter(endTime)) {
             throw new BusinessException("加班开始时间或结束时间输入异常!请确保开始时间不晚于结束时间");
         }
 

+ 38 - 37
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaQjdDocumentServiceImpl.java

@@ -18,6 +18,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -116,43 +117,43 @@ public class OaQjdDocumentServiceImpl extends AbstractCrudService<OaQjdDocumentM
      * @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("上传图片数量超出限制,请重试");
-        // }
+    public void validateOaQjDocument(OaQjdDocument oaQjdDocument) {
+
+        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