浏览代码

fix:bugfix

caozixuan 1 年之前
父节点
当前提交
c33bf57883

+ 8 - 0
sop-business/src/main/java/com/qmth/sop/business/service/TBDingService.java

@@ -7,6 +7,7 @@ import com.qmth.sop.business.bean.params.DingSaveParam;
 import com.qmth.sop.business.bean.result.*;
 import com.qmth.sop.business.entity.SysUser;
 import com.qmth.sop.business.entity.TBDing;
+import com.qmth.sop.business.entity.TFFlowApprove;
 import com.qmth.sop.common.enums.DingResultEnum;
 import com.qmth.sop.common.enums.InOutTypeEnum;
 
@@ -119,4 +120,11 @@ public interface TBDingService extends IService<TBDing> {
      * @param sopNo sop编号
      */
     void resetDingExceptionBySopNo(String sopNo);
+
+    /**
+     * 根据sopNo查询状态
+     * @param sopNo sopNo
+     * @return 审批
+     */
+    TFFlowApprove findFlowApproveBySopNo(String sopNo);
 }

+ 3 - 3
sop-business/src/main/java/com/qmth/sop/business/service/impl/SysUserRoleServiceImpl.java

@@ -150,9 +150,9 @@ public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUs
         SysUser sysUser = sysUserService.getById(userId);
         Optional.ofNullable(sysUser).orElseThrow(() -> ExceptionResultEnum.USER_NO_EXISTS.exception());
 
-        if (sysUser.getSource() == UserSourceEnum.SYSTEM) {
-            throw ExceptionResultEnum.ERROR.exception("非档案用户不能发起异常补卡申请");
-        }
+//        if (sysUser.getSource() == UserSourceEnum.SYSTEM) {
+//            throw ExceptionResultEnum.ERROR.exception("非档案用户不能发起异常补卡申请");
+//        }
         TBUserArchives tbUserArchives = tbUserArchivesService.getOne(new QueryWrapper<TBUserArchives>().lambda()
                 .eq(TBUserArchives::getMobileNumber, sysUser.getMobileNumber()));
         Optional.ofNullable(tbUserArchives).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("档案用户不存在"));

+ 32 - 25
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingServiceImpl.java

@@ -567,32 +567,27 @@ public class TBDingServiceImpl extends ServiceImpl<TBDingMapper, TBDing> impleme
         DateFormDto result = new DateFormDto();
         List<String> dateList = new ArrayList<>();
         if (sopNo != null && sopNo.length() > 0) {
-            List<TFFlowApprove> tfFlowApproves = this.baseMapper.findDateAndStatusBySopNo(sopNo);
-            if (CollectionUtils.isNotEmpty(tfFlowApproves)) {
-                if (tfFlowApproves.size() > 1) {
-                    throw ExceptionResultEnum.ERROR.exception(String.format("sop编号为[%s]的有多条流程审核记录", sopNo));
-                }
-                TFFlowApprove tfFlowApprove = tfFlowApproves.get(0);
-                FlowStatusEnum flowStatusEnum = tfFlowApprove.getStatus();
-                Long updateTime = tfFlowApprove.getUpdateTime();
-                Long currentTime = System.currentTimeMillis();
-
-                TBCrmDetail tbCrmDetail = tbCrmDetailService.findBySopNo(sopNo);
-                if (Objects.isNull(tbCrmDetail)) {
-                    throw ExceptionResultEnum.ERROR.exception("未找到派单详情");
-                }
-                Long createTime = tbCrmDetail.getPublishTime();
-
-                if (FlowStatusEnum.FINISH.equals(flowStatusEnum)) {
-                    dateList = DateDisposeUtils.getDaysBetween(createTime, updateTime, SystemConstant.DEFAULT_DATE_YMD_S_PATTERN);
-                    result.setSopIsEnd(true);
-                } else {
-                    dateList = DateDisposeUtils.getDaysBetween(createTime, currentTime, SystemConstant.DEFAULT_DATE_YMD_S_PATTERN);
-                    result.setSopIsEnd(false);
-                }
-                dateList.sort(Collections.reverseOrder());
-                result.setDateFormList(dateList);
+            TFFlowApprove tfFlowApprove = this.findFlowApproveBySopNo(sopNo);
+            FlowStatusEnum flowStatusEnum = tfFlowApprove.getStatus();
+            Long updateTime = tfFlowApprove.getUpdateTime();
+            Long currentTime = System.currentTimeMillis();
+
+            TBCrmDetail tbCrmDetail = tbCrmDetailService.findBySopNo(sopNo);
+            if (Objects.isNull(tbCrmDetail)) {
+                throw ExceptionResultEnum.ERROR.exception("未找到派单详情");
+            }
+            Long createTime = tbCrmDetail.getPublishTime();
+
+            if (FlowStatusEnum.FINISH.equals(flowStatusEnum)) {
+                dateList = DateDisposeUtils.getDaysBetween(createTime, updateTime, SystemConstant.DEFAULT_DATE_YMD_S_PATTERN);
+                result.setSopIsEnd(true);
+            } else {
+                dateList = DateDisposeUtils.getDaysBetween(createTime, currentTime, SystemConstant.DEFAULT_DATE_YMD_S_PATTERN);
+                result.setSopIsEnd(false);
             }
+            dateList.sort(Collections.reverseOrder());
+            result.setDateFormList(dateList);
+
         }
         if (CollectionUtils.isNotEmpty(dateList)) {
             result.setEndDate(dateList.get(0));
@@ -749,4 +744,16 @@ public class TBDingServiceImpl extends ServiceImpl<TBDingMapper, TBDing> impleme
         // 重新统计该sop的考勤数据
         tbDingStatisticService.buildDingStatistic(sopNo);
     }
+
+    @Override
+    public TFFlowApprove findFlowApproveBySopNo(String sopNo) {
+        List<TFFlowApprove> tfFlowApproves = this.baseMapper.findDateAndStatusBySopNo(sopNo);
+        if (CollectionUtils.isEmpty(tfFlowApproves)) {
+            throw ExceptionResultEnum.ERROR.exception(String.format("sop编号为[%s]的流程审核记录不存在", sopNo));
+        }
+        if (tfFlowApproves.size() > 1) {
+            throw ExceptionResultEnum.ERROR.exception(String.format("sop编号为[%s]的有多条流程审核记录", sopNo));
+        }
+        return tfFlowApproves.get(0);
+    }
 }

+ 14 - 0
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingStatisticServiceImpl.java

@@ -11,6 +11,7 @@ import com.qmth.sop.business.mapper.TBDingStatisticMapper;
 import com.qmth.sop.business.service.*;
 import com.qmth.sop.common.contant.SystemConstant;
 import com.qmth.sop.common.enums.DingDateTypeEnum;
+import com.qmth.sop.common.enums.DingSubmitStatusEnum;
 import com.qmth.sop.common.enums.ExceptionResultEnum;
 import com.qmth.sop.common.enums.SopRoleTypeEnum;
 import com.qmth.sop.common.util.DateDisposeUtils;
@@ -55,6 +56,9 @@ public class TBDingStatisticServiceImpl extends ServiceImpl<TBDingStatisticMappe
     @Resource
     private TBDingApplyService tbDingApplyService;
 
+    @Resource
+    private TBDingSubmitService tbDingSubmitService;
+
     @Override
     public TBDingStatistic findBySopNoAndUserArchivesId(String sopNo, Long userArchivesId) {
         return this.getOne(new QueryWrapper<TBDingStatistic>().lambda().eq(TBDingStatistic::getSopNo, sopNo).eq(TBDingStatistic::getUserArchivesId, userArchivesId).last(SystemConstant.LIMIT1));
@@ -210,6 +214,16 @@ public class TBDingStatisticServiceImpl extends ServiceImpl<TBDingStatisticMappe
                 tbDingStatistic = new TBDingStatistic();
                 tbDingStatistic.insertInfo(requestUserId);
             } else {
+                TBDingSubmit tbDingSubmit = tbDingSubmitService.getOne(
+                        new QueryWrapper<TBDingSubmit>().lambda().eq(TBDingSubmit::getSopNo, sopNo).eq(TBDingSubmit::getUserArchivesId, userArchivesId).last(SystemConstant.LIMIT1));
+                if (Objects.nonNull(tbDingSubmit)) {
+                    DingSubmitStatusEnum submitStatus = tbDingSubmit.getSubmitStatus();
+                    if (!DingSubmitStatusEnum.WILL_SUBMIT.equals(submitStatus)
+                            && !DingSubmitStatusEnum.AGREE_WITHDRAW.equals(submitStatus)) {
+                        // 已提交的考勤不再计算了
+                        continue;
+                    }
+                }
                 tbDingStatistic.updateInfo(requestUserId);
             }
             tbDingStatistic.setServiceId(serviceUnitId);

+ 25 - 4
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingSubmitServiceImpl.java

@@ -11,6 +11,7 @@ import com.qmth.sop.business.bean.result.DingSubmitResult;
 import com.qmth.sop.business.bean.result.DingSubmitSubTotalResult;
 import com.qmth.sop.business.entity.SysUser;
 import com.qmth.sop.business.entity.TBDingSubmit;
+import com.qmth.sop.business.entity.TFFlowApprove;
 import com.qmth.sop.business.mapper.TBDingSubmitMapper;
 import com.qmth.sop.business.service.SysUserService;
 import com.qmth.sop.business.service.TBDingSubmitService;
@@ -23,10 +24,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -286,6 +284,29 @@ public class TBDingSubmitServiceImpl extends ServiceImpl<TBDingSubmitMapper, TBD
                         String.format("服务单元为[%s],sop流水号为[%s],用户档案为[%s]的考勤待处理异常数为[%s],不能提交", serviceUnitName, sopNo,
                                 userArchivesName, exceptionCount));
             }
+
+            // 条件3 - SOP结束后的第二天才能提交考勤
+            TFFlowApprove tfFlowApproves = tbDingService.findFlowApproveBySopNo(sopNo);
+            FlowStatusEnum flowStatus = tfFlowApproves.getStatus();
+            if (!FlowStatusEnum.FINISH.equals(flowStatus)) {
+                throw ExceptionResultEnum.ERROR.exception(
+                        String.format("服务单元为[%s],sop流水号为[%s],用户档案为[%s]的sop状态为[%s],sop结束后次日才能提交考勤", serviceUnitName, sopNo,
+                                userArchivesName, flowStatus.getTitle()));
+            }
+            Long endTime = tfFlowApproves.getUpdateTime();
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTimeInMillis(endTime);
+            calendar.set(Calendar.HOUR_OF_DAY, 0);
+            calendar.set(Calendar.MINUTE, 0);
+            calendar.set(Calendar.SECOND, 0);
+            calendar.add(Calendar.DATE, 1);
+            long nextDayEarliestTime = calendar.getTimeInMillis();
+            if (System.currentTimeMillis() < nextDayEarliestTime) {
+                throw ExceptionResultEnum.ERROR.exception(
+                        String.format("服务单元为[%s],sop流水号为[%s],用户档案为[%s]的考勤还未到提交时间,sop结束后次日才能提交考勤", serviceUnitName,
+                                sopNo, userArchivesName));
+            }
+
             Long submitId = dingSubmitResult.getSubmitId();
             if (SystemConstant.longNotNull(submitId)) {
                 tbDingSubmit.setId(submitId);

+ 16 - 2
sop-business/src/main/resources/mapper/TBDingSubmitMapper.xml

@@ -33,7 +33,7 @@
             sta.work_hours AS workHours,
             sta.ding_exception_count AS dingExceptionCount,
             sta.remain_count AS remainCount,
-            sta.exception_count AS exceptionCount,
+            IFNULL(ec.cnt,0) AS exceptionCount,
             IFNULL(tbds.submit_status, 'WILL_SUBMIT') AS submitStatus,
             tbds.id AS submitId,
             tbds.submit_user_id AS submitUserId,
@@ -50,6 +50,13 @@
                 AND sta.user_archives_id = tbds.user_archives_id
                 LEFT JOIN
             sys_user su ON tbds.submit_user_id = su.id
+                LEFT JOIN (
+                    SELECT COUNT(*) AS cnt, sop_no, create_id
+                FROM
+            t_b_ding_apply
+                WHERE approve IS NULL
+                GROUP BY sop_no , create_id) ec ON ec.sop_no = sta.sop_no
+                AND ec.create_id = sta.user_id
         <where>
             AND tbs.status = 'PUBLISH'
             <if test="serviceUnitId != null">
@@ -134,7 +141,7 @@
             sta.work_hours AS workHours,
             sta.ding_exception_count AS dingExceptionCount,
             sta.remain_count AS remainCount,
-            sta.exception_count AS exceptionCount,
+            IFNULL(ec.cnt,0) AS exceptionCount,
             IFNULL(tbds.submit_status, 'WILL_SUBMIT') AS submitStatus,
             tbds.id AS submitId,
             tbds.submit_user_id AS submitUserId,
@@ -151,6 +158,13 @@
                 AND sta.user_archives_id = tbds.user_archives_id
                 LEFT JOIN
             sys_user su ON tbds.submit_user_id = su.id
+                LEFT JOIN (
+                    SELECT COUNT(*) AS cnt, sop_no, create_id
+                FROM
+                t_b_ding_apply
+                WHERE approve IS NULL
+                GROUP BY sop_no , create_id) ec ON ec.sop_no = sta.sop_no
+                AND ec.create_id = sta.user_id
         <where>
             AND tbs.status = 'PUBLISH'
             <if test="serviceUnitId != null">