Browse Source

Merge branch 'fu-dev' of uskycloud/usky-modules into server-165

fuyuchuan 3 months ago
parent
commit
c1453b45ed

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

@@ -1,6 +1,8 @@
 package com.usky.oa.controller.web;
 
 
+import com.usky.common.core.bean.CommonPage;
+import com.usky.oa.domain.OaApproval;
 import com.usky.oa.domain.OaDocument;
 import com.usky.oa.service.OaApprovalService;
 import com.usky.oa.service.vo.OaApprovalCountVO;
@@ -39,6 +41,25 @@ public class OaApprovalController {
         return oaApprovalService.approvalCount();
     }
 
+    /**
+     * @description: 我的待办-分页列表
+     * @author: fyc
+     * @email yuchuan.fu@chinausky.com
+     * @date: 2024/12/30 16:19
+     * @param: [queryType, docNo, type, approvalStatus, startTime, endTime, pageNum, pageSize]
+     * @return: com.usky.common.core.bean.CommonPage<com.usky.oa.domain.OaApproval>
+     **/
+    @GetMapping("/pageList")
+    public CommonPage<OaApproval> pageList(@RequestParam(value = "queryType") Integer queryType,
+                                           @RequestParam(value = "docNo", required = false) String docNo,
+                                           @RequestParam(value = "formSign", required = false) String formSign,
+                                           @RequestParam(value = "approvalStatus", required = false) Integer approvalStatus,
+                                           @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 oaApprovalService.pageList(queryType, docNo, formSign, approvalStatus, startTime, endTime, pageNum, pageSize);
+    }
 
 }
 

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

@@ -65,8 +65,8 @@ public class OaDocumentController {
 
     @Log(title = "更新单据", businessType = BusinessType.UPDATE)
     @GetMapping("/update")
-    public OaDocument approvalCount(@RequestBody OaDocument oaDocument) {
-        return oaDocumentService.updateDoc(oaDocument);
+    public void approvalCount(@RequestBody Object oaDocument) {
+        oaDocumentService.updateDoc(oaDocument);
     }
 
     // 提交单据

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

@@ -1,5 +1,6 @@
 package com.usky.oa.service;
 
+import com.usky.common.core.bean.CommonPage;
 import com.usky.oa.domain.OaApproval;
 import com.usky.common.mybatis.core.CrudService;
 import com.usky.oa.domain.OaDocument;
@@ -24,4 +25,18 @@ public interface OaApprovalService extends CrudService<OaApproval> {
      */
     OaApprovalCountVO approvalCount();
 
+    /**
+     * 审批列表
+     * @param queryType 查询类型(1:待处理,2:已处理,3:我收到)
+     * @param docNo 单据编号
+     * @param formSign 单据类型(请假申请-QJD...按标识查询)
+     * @param approvalStatus 审批状态(1:审批中,2:审批通过,3:审批不通过)
+     * @param startTime 开始时间
+     * @param endTime 结束时间
+     * @param pageNum 页码
+     * @param pageSize 页大小
+     * @return CommonPage<OaApproval>
+     */
+    CommonPage<OaApproval> pageList(Integer queryType, String docNo, String formSign, Integer approvalStatus, String startTime, String endTime, Integer pageNum, Integer pageSize);
+
 }

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

@@ -65,7 +65,7 @@ public interface OaDocumentService extends CrudService<OaDocument> {
      * @param: [oaDocument]
      * @return: com.usky.oa.domain.OaDocument
      **/
-    OaDocument updateDoc(OaDocument oaDocument);
+    void updateDoc(Object oaDocument);
 
     /**
      * @description: 提交单据

+ 72 - 7
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaApprovalServiceImpl.java

@@ -2,11 +2,15 @@ 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.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.OaApproval;
 import com.usky.oa.domain.OaDocument;
 import com.usky.oa.mapper.OaApprovalMapper;
+import com.usky.oa.mapper.OaDocumentMapper;
 import com.usky.oa.service.OaApprovalService;
 import com.usky.common.mybatis.core.AbstractCrudService;
 import com.usky.oa.service.vo.OaApprovalCountVO;
@@ -31,6 +35,10 @@ public class OaApprovalServiceImpl extends AbstractCrudService<OaApprovalMapper,
     @Autowired
     private OaApprovalMapper oaApprovalMapper;
 
+    @Autowired
+    private OaDocumentMapper oaDocumentMapper;
+
+    // 我的申请-待处理、已处理、我发起、我收到-统计
     @Override
     public OaApprovalCountVO approvalCount() {
         Long userId = SecurityUtils.getUserId();
@@ -50,7 +58,44 @@ public class OaApprovalServiceImpl extends AbstractCrudService<OaApprovalMapper,
         return oaApprovalCountVO;
     }
 
-    private List<OaApproval> getPendingSum(Integer tenantId, Long userId){
+    // 我的代办-待处理、已处理、我收到-分页
+    @Override
+    public CommonPage<OaApproval> pageList(Integer queryType, String docNo, String formSign, Integer approvalStatus, String startTime, String endTime, Integer pageNum, Integer pageSize) {
+        Long userId = SecurityUtils.getUserId();
+        Integer tenantId = SecurityUtils.getTenantId();
+        IPage<OaApproval> page = new Page<>(pageNum, pageSize);
+
+        LambdaQueryWrapper<OaApproval> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(OaApproval::getTenantId, tenantId)
+                .eq(OaApproval::getApprovalUid, userId);
+
+        switch (queryType) {
+            case 1:
+                queryWrapper.eq(OaApproval::getApprovalStatus, 1)
+                        .like(StringUtils.isNotBlank(docNo), OaApproval::getDocNo, docNo)
+                        .like(StringUtils.isNotBlank(formSign), OaApproval::getDocNo, formSign)
+                        .between(StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime), OaApproval::getSubmitDate, startTime, endTime);
+                break;
+            case 2:
+                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)
+                        .between(StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime), OaApproval::getSubmitDate, startTime, endTime);
+                break;
+            case 3:
+                queryWrapper.like(StringUtils.isNotBlank(docNo), OaApproval::getDocNo, docNo)
+                        .like(StringUtils.isNotBlank(formSign), OaApproval::getDocNo, formSign)
+                        .eq(approvalStatus != null && approvalStatus > 0 && approvalStatus < 4, OaApproval::getApprovalStatus, approvalStatus)
+                        .between(StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime), OaApproval::getSubmitDate, startTime, endTime);
+                break;
+            default:
+                throw new RuntimeException("查询类型参数错误");
+        }
+        return ToCommonPage(oaApprovalMapper.selectPage(page, queryWrapper));
+    }
+
+    // 待处理
+    private List<OaApproval> getPendingSum(Integer tenantId, Long userId) {
         LambdaQueryWrapper<OaApproval> queryWrapper = Wrappers.lambdaQuery();
         queryWrapper.eq(OaApproval::getTenantId, tenantId)
                 .eq(OaApproval::getApprovalUid, userId)
@@ -59,7 +104,8 @@ public class OaApprovalServiceImpl extends AbstractCrudService<OaApprovalMapper,
         return oaApprovals == null ? Collections.emptyList() : oaApprovals;
     }
 
-    private List<OaApproval> getAlreadySum(Integer tenantId, Long userId){
+    // 已处理
+    private List<OaApproval> getAlreadySum(Integer tenantId, Long userId) {
         LambdaQueryWrapper<OaApproval> queryWrapper = Wrappers.lambdaQuery();
         queryWrapper.eq(OaApproval::getTenantId, tenantId)
                 .eq(OaApproval::getApprovalUid, userId)
@@ -71,20 +117,39 @@ public class OaApprovalServiceImpl extends AbstractCrudService<OaApprovalMapper,
         return oaApprovals == null ? Collections.emptyList() : oaApprovals;
     }
 
-    private List<OaApproval> getMyInitiated(Integer tenantId, String username){
+    // 我发起
+    /*private List<OaApproval> getMyInitiated(Integer tenantId, String username) {
+        List<String> docNoList = oaDocumentMapper.selectList(new QueryWrapper<OaDocument>().lambda()
+                .select(OaDocument::getDocNo)
+                .eq(OaDocument::getTenantId, tenantId)
+                .eq(OaDocument::getCreateBy, username)
+                // 已发起只计算 审批中、审通过、审批不通过
+                .in(OaDocument::getDocStatus, 1, 2, 3)).stream().map(OaDocument::getDocNo).collect(Collectors.toList());
+
         LambdaQueryWrapper<OaApproval> queryWrapper = Wrappers.lambdaQuery();
-        queryWrapper.eq(OaApproval::getTenantId, tenantId)
-                .eq(OaApproval::getCreateBy, username);
+        queryWrapper.in(OaApproval::getDocNo, docNoList);
         List<OaApproval> oaApprovals = oaApprovalMapper.selectList(queryWrapper);
         return oaApprovals == null ? Collections.emptyList() : oaApprovals;
+    }*/
+
+    // 我发起
+    private List<OaDocument> getMyInitiated(Integer tenantId, String username) {
+        List<OaDocument> oaDocuments = oaDocumentMapper.selectList(new QueryWrapper<OaDocument>().lambda()
+                .select(OaDocument::getDocNo)
+                .eq(OaDocument::getTenantId, tenantId)
+                .eq(OaDocument::getCreateBy, username)
+                // 已发起只计算 审批中、审通过、审批不通过
+                .in(OaDocument::getDocStatus, 1, 2, 3));
+        return oaDocuments == null ? Collections.emptyList() : oaDocuments;
     }
 
-    private List<OaApproval> getMyReceived(Integer tenantId, Long userId){
+    // 我收到
+    private List<OaApproval> getMyReceived(Integer tenantId, Long userId) {
         LambdaQueryWrapper<OaApproval> queryWrapper = Wrappers.lambdaQuery();
         queryWrapper.eq(OaApproval::getTenantId, tenantId)
                 .eq(OaApproval::getApprovalUid, userId);
         List<OaApproval> oaApprovals = oaApprovalMapper.selectList(queryWrapper);
-        return oaApprovals== null ? Collections.emptyList() : oaApprovals;
+        return oaApprovals == null ? Collections.emptyList() : oaApprovals;
     }
 
 }

+ 24 - 3
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaDocumentServiceImpl.java

@@ -1,5 +1,7 @@
 package com.usky.oa.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -17,6 +19,7 @@ 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.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 
 import java.util.Collections;
@@ -42,6 +45,9 @@ public class OaDocumentServiceImpl extends AbstractCrudService<OaDocumentMapper,
     @Autowired
     private OaJbdDocumentMapper oaJbdDocumentMapper;
 
+    @Autowired
+    private JdbcTemplate jdbcTemplate;
+
     // 我的申请
     @Override
     public CommonPage<OaDocument> myApplication(String docNo, String type, Integer status, String startTime, String endTime, Integer pageNum, Integer pageSize) {
@@ -96,8 +102,23 @@ public class OaDocumentServiceImpl extends AbstractCrudService<OaDocumentMapper,
     }
 
     @Override
-    public OaDocument updateDoc(OaDocument oaDocument) {
-        return null;
+    public void updateDoc(Object oaDocument) {
+        JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(oaDocument));
+        String docNo = jsonObject.get("docNo").toString();
+        String type = getFormSign(docNo);
+        String tableName = "oa_" + type + "_document";
+
+        StringBuilder setClause = new StringBuilder();
+        // 假设JSON对象中的键值对即为需要更新的字段和值
+        jsonObject.forEach((key, value) -> {
+            if (!"docNo".equals(key)) {
+                setClause.append(key).append(" = '").append(value.toString()).append("', ");
+            }
+        });
+        setClause.setLength(setClause.length() - 2); // 移除最后的逗号和空格
+
+        String sql = "UPDATE " + tableName + " SET " + setClause.toString() + " WHERE docNo = '" + docNo + "'";
+        jdbcTemplate.update(sql);
     }
 
     @Override
@@ -122,7 +143,7 @@ public class OaDocumentServiceImpl extends AbstractCrudService<OaDocumentMapper,
         } else if (docNo.split("-").length != 2 ||
                 docNo.split("-")[0].length() > 4 ||
                 docNo.split("-")[0].length() < 3 ||
-                docNo.split("-")[1].length() != 14) {
+                docNo.split("-")[1].length() != 12) {
             throw new RuntimeException("单据号格式错误!");
         }
         return docNo.split("-")[0];

+ 7 - 6
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaFormDefinitionServiceImpl.java

@@ -98,7 +98,7 @@ public class OaFormDefinitionServiceImpl extends AbstractCrudService<OaFormDefin
             if (versionUpdateValid(oaFormDefinition)) {
                 oaFormDefinition.setFormVersion(oaFormDefinition1.getFormVersion() + 1);
             }
-            if (!Objects.equals(oaFormDefinition.getFormSign(), oaFormDefinition1.getFormSign())){
+            if (!Objects.equals(oaFormDefinition.getFormSign(), oaFormDefinition1.getFormSign())) {
                 throw new BusinessException("表单标识不可修改!");
             }
 
@@ -117,8 +117,8 @@ public class OaFormDefinitionServiceImpl extends AbstractCrudService<OaFormDefin
             if (oaFormDefinition == null) {
                 throw new BusinessException("表单不存在!");
             }
-            if (!validDelete(formId).isEmpty()) {
-                throw new BusinessException("当前表单下已生成单据,不可删除!");
+            if (validDelete(formId) != null) {
+                throw new BusinessException("当前表单下存在单据,不可删除!");
             }
             oaFormDefinitionMapper.deleteById(oaFormDefinition);
         } else {
@@ -127,10 +127,10 @@ public class OaFormDefinitionServiceImpl extends AbstractCrudService<OaFormDefin
     }
 
     // 判断表单下是否存在已生成单据
-    private List<OaDocument> validDelete(Integer formId) {
+    private OaDocument validDelete(Integer formId) {
         LambdaQueryWrapper<OaDocument> queryWrapper = Wrappers.lambdaQuery();
         queryWrapper.eq(OaDocument::getFormId, formId);
-        return oaDocumentMapper.selectList(queryWrapper);
+        return oaDocumentMapper.selectOne(queryWrapper);
     }
 
 
@@ -199,6 +199,7 @@ public class OaFormDefinitionServiceImpl extends AbstractCrudService<OaFormDefin
         return oaFormDefinitions;
     }
 
+    // 表单管理-根据权限查询表单
     @Override
     public List<OaFormNameResponseVO> getFormName(String formSign, String formName, Integer formId) {
         Long userId = SecurityUtils.getUserId();
@@ -265,7 +266,7 @@ public class OaFormDefinitionServiceImpl extends AbstractCrudService<OaFormDefin
     // 表单管理-表单属性(表单名称、标识、说明)验证
     private void validateFormProperties(String formName, String formSign, String formExplain) {
         // 判断表单名称是否为空或者超长
-        if (StringUtils.isBlank(formName) || formName.length() > 50) {
+        if (StringUtils.isBlank(formName) || formName.length() > 10) {
             throw new BusinessException("表单名称不能为空或空字符串");
         }
 

+ 22 - 3
service-oa/service-oa-biz/src/main/java/com/usky/oa/service/impl/OaJbdDocumentServiceImpl.java

@@ -17,6 +17,7 @@ import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
 
 /**
  * <p>
@@ -41,7 +42,7 @@ public class OaJbdDocumentServiceImpl extends AbstractCrudService<OaJbdDocumentM
         Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId();
         Integer tenantId = SecurityUtils.getTenantId();
 
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyMMddHHmmss");
         LocalDateTime now = LocalDateTime.now();
         String formattedDate = now.format(formatter);
         String sign = OaBuiltInDocument.JBD.getSign();
@@ -97,20 +98,38 @@ public class OaJbdDocumentServiceImpl extends AbstractCrudService<OaJbdDocumentM
      * @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("加班开始时间或结束时间输入异常!");
+
+        LocalDateTime startTime = oaJbdDocument.getStartTime();
+        LocalDateTime endTime = oaJbdDocument.getEndTime();
+        Integer duration = oaJbdDocument.getDuration();
+
+        if (startTime == null ||endTime == null || startTime.isAfter(endTime)) {
+            throw new BusinessException("加班开始时间或结束时间输入异常!请确保开始时间不晚于结束时间");
         }
+
         if (oaJbdDocument.getDuration() == null || oaJbdDocument.getDuration() <= 0) {
             throw new BusinessException("加班时长必须大于0!");
         }
+
+        long hours = ChronoUnit.HOURS.between(startTime, endTime);
+        long days = ChronoUnit.DAYS.between(startTime, endTime);
+        if (days > 0) {
+            hours -= days * 16;
+        }
+        if (hours != duration) {
+            throw new BusinessException("加班时长与实际时长不一致,请重试!");
+        }
+
         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) {

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

@@ -46,7 +46,7 @@ public class OaQjdDocumentServiceImpl extends AbstractCrudService<OaQjdDocumentM
         Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId();
         Integer tenantId = SecurityUtils.getTenantId();
 
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyMMddHHmmss");
         LocalDateTime now = LocalDateTime.now();
         String formattedDate = now.format(formatter);
         String sign = OaBuiltInDocument.QJD.getSign();