Эх сурвалжийг харах

Merge remote-tracking branch 'origin/dev_1.1.0' into dev_1.1.0

wangliang 1 жил өмнө
parent
commit
45b4046501

+ 0 - 3
sop-business/src/main/java/com/qmth/sop/business/bean/result/SysDingGroupRoleResult.java

@@ -1,12 +1,9 @@
 package com.qmth.sop.business.bean.result;
 
-import com.qmth.sop.business.entity.SysDingGroup;
 import com.qmth.sop.business.entity.SysDingObj;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
 
 /**
  * <p>

+ 0 - 1
sop-business/src/main/java/com/qmth/sop/business/entity/SysDingObj.java

@@ -32,7 +32,6 @@ public class SysDingObj implements Serializable {
     @NotNull(message = "考勤组id不能为空")
     private Long dingGroupId;
 
-    // TODO: 2024/5/15 考勤组针对sop角色考核打卡-czx
     @ApiModelProperty(value = "角色id")
     @JsonSerialize(using = ToStringSerializer.class)
     private Long roleId;

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

@@ -80,13 +80,13 @@ public interface TBDingService extends IService<TBDing> {
     DateFormDto buildSignDateFormBySop(String sopNo);
 
     /**
-     * 查询考勤组规则
+     * 查询考勤组规则(只查询工程师的考勤规则)
      *
-     * @param userId        用户id
-     * @param serviceUnitId 服务单元id
+     * @param userId 用户id
+     * @param sopNo  sopNo
      * @return 规则
      */
-    DingElementResult findDingRule(Long userId, Long serviceUnitId);
+    DingElementResult findDingRule(Long userId, String sopNo);
 
     /**
      * 查询剩余补卡天数

+ 44 - 80
sop-business/src/main/java/com/qmth/sop/business/service/impl/SysDingGroupServiceImpl.java

@@ -7,16 +7,20 @@ import com.qmth.sop.business.bean.result.SysDingGroupResult;
 import com.qmth.sop.business.bean.result.SysDingGroupRoleResult;
 import com.qmth.sop.business.entity.*;
 import com.qmth.sop.business.mapper.SysDingGroupMapper;
-import com.qmth.sop.business.service.*;
+import com.qmth.sop.business.service.SysDingGroupService;
+import com.qmth.sop.business.service.SysDingObjService;
+import com.qmth.sop.business.service.SysSupplierService;
+import com.qmth.sop.business.service.TBServiceService;
 import com.qmth.sop.common.base.BaseEntity;
 import com.qmth.sop.common.enums.DingObjTypeEnum;
 import com.qmth.sop.common.enums.ExceptionResultEnum;
 import com.qmth.sop.common.enums.ServiceStatusEnum;
+import com.qmth.sop.common.enums.SopRoleTypeEnum;
 import com.qmth.sop.common.util.ServletUtil;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import java.util.List;
@@ -38,33 +42,22 @@ public class SysDingGroupServiceImpl extends ServiceImpl<SysDingGroupMapper, Sys
 
     @Resource
     SysDingObjService sysDingObjService;
+
     @Resource
     TBServiceService tbServiceService;
+
     @Resource
     SysSupplierService sysSupplierService;
-    @Resource
-    SysRoleService sysRoleService;
-
-    /**
-     * 查询列表
-     *
-     * @param iPage
-     * @return
-     */
+
     @Override
-    public IPage<SysDingGroupResult> query(IPage<Map> iPage, Long serviceId, ServiceStatusEnum status, Long[] supplierIds, Long[] dingRoleIds, Long[] approveRoleIds, Boolean faceOpen, Long createStartTime, Long createEndTime) {
-        IPage<SysDingGroupResult> dingGroupResultIPage = this.baseMapper.query(iPage, serviceId, status, supplierIds, dingRoleIds, approveRoleIds, faceOpen, createStartTime, createEndTime);
-        dingGroupResultIPage.getRecords().forEach(e -> {
-            e.setDingObjs(sysDingObjService.getList(e.getId()));
-        });
+    public IPage<SysDingGroupResult> query(IPage<Map> iPage, Long serviceId, ServiceStatusEnum status, Long[] supplierIds, Long[] dingRoleIds, Long[] approveRoleIds, Boolean faceOpen, Long createStartTime,
+            Long createEndTime) {
+        IPage<SysDingGroupResult> dingGroupResultIPage = this.baseMapper.query(iPage, serviceId, status, supplierIds,
+                dingRoleIds, approveRoleIds, faceOpen, createStartTime, createEndTime);
+        dingGroupResultIPage.getRecords().forEach(e -> e.setDingObjs(sysDingObjService.getList(e.getId())));
         return dingGroupResultIPage;
     }
 
-    /**
-     * 新增考勤组表
-     *
-     * @param sysDingGroup
-     */
     @Override
     @Transactional
     public void add(SysDingGroupResult sysDingGroup) {
@@ -73,32 +66,24 @@ public class SysDingGroupServiceImpl extends ServiceImpl<SysDingGroupMapper, Sys
         // 新增校验
         Long serviceUnitId = sysDingGroup.getServiceId();
         List<Long> supplierIdList = sysDingGroup.getSupplierIdList();
-        if (!CollectionUtils.isEmpty(supplierIdList)) {
+        if (CollectionUtils.isNotEmpty(supplierIdList)) {
             List<SysDingGroupRoleResult> sysDingGroupRoleResultList = sysDingGroup.getDingObjs();
-            List<Long> roleIdList = sysDingGroupRoleResultList.stream()
-                    .filter(e -> DingObjTypeEnum.DING.equals(e.getType()))
-                    .map(SysDingObj::getRoleId).distinct()
+            List<SopRoleTypeEnum> sopRoleTypeList = sysDingGroupRoleResultList.stream()
+                    .filter(e -> DingObjTypeEnum.DING.equals(e.getType())).map(SysDingObj::getSopRoleType).distinct()
                     .collect(Collectors.toList());
 
             for (Long supplierId : supplierIdList) {
-                List<Long> sysDingGroupIdList = this.list(new QueryWrapper<SysDingGroup>().lambda()
-                                .eq(SysDingGroup::getServiceId, serviceUnitId)
-                                .eq(SysDingGroup::getSupplierId, supplierId))
-                        .stream()
-                        .map(BaseEntity::getId)
+                List<Long> sysDingGroupIdList = this.list(
+                                new QueryWrapper<SysDingGroup>().lambda().eq(SysDingGroup::getServiceId, serviceUnitId).eq(SysDingGroup::getSupplierId, supplierId)).stream().map(BaseEntity::getId)
                         .collect(Collectors.toList());
 
-                if (!CollectionUtils.isEmpty(sysDingGroupIdList)) {
-                    List<Long> dbRoleIdList = sysDingObjService.list(new QueryWrapper<SysDingObj>()
-                                    .lambda()
-                                    .eq(SysDingObj::getType, DingObjTypeEnum.DING)
-                                    .in(SysDingObj::getDingGroupId, sysDingGroupIdList))
-                            .stream()
-                            .map(SysDingObj::getRoleId).distinct().collect(Collectors.toList());
-
+                if (CollectionUtils.isEmpty(sysDingGroupIdList)) {
+                    List<SopRoleTypeEnum> dbSopRoleTypeList = sysDingObjService.list(
+                                    new QueryWrapper<SysDingObj>().lambda().eq(SysDingObj::getType, DingObjTypeEnum.DING).in(SysDingObj::getDingGroupId, sysDingGroupIdList)).stream()
+                            .map(SysDingObj::getSopRoleType).distinct().collect(Collectors.toList());
 
-                    List<Long> alreadyRoleIdList = roleIdList.stream().filter(dbRoleIdList::contains).collect(Collectors.toList());
-                    if (!CollectionUtils.isEmpty(alreadyRoleIdList)) {
+                    List<SopRoleTypeEnum> alreadySopRoleTypeList = sopRoleTypeList.stream().filter(dbSopRoleTypeList::contains).collect(Collectors.toList());
+                    if (CollectionUtils.isNotEmpty(alreadySopRoleTypeList)) {
                         // 已存在的角色id集合
                         SysSupplier sysSupplier = sysSupplierService.getById(supplierId);
                         if (Objects.isNull(sysSupplier)) {
@@ -111,12 +96,10 @@ public class SysDingGroupServiceImpl extends ServiceImpl<SysDingGroupMapper, Sys
                         String supplierName = sysSupplier.getName();
                         String serviceUnitName = tbServiceUnit.getName();
 
-                        String roleNames = sysRoleService.listByIds(alreadyRoleIdList)
-                                .stream()
-                                .map(SysRole::getName)
-                                .collect(Collectors.joining(","));
+                        String roleNames = alreadySopRoleTypeList.stream().map(SopRoleTypeEnum::getTitle).collect(Collectors.joining(","));
 
-                        String error = String.format("新增失败,服务单元[%s],供应商[%s],适用考勤对象为[%s] 的考勤组设置已经存在", serviceUnitName, supplierName, roleNames);
+                        String error = String.format("新增失败,服务单元[%s],供应商[%s],适用考勤对象为[%s] 的考勤组设置已经存在", serviceUnitName,
+                                supplierName, roleNames);
                         throw ExceptionResultEnum.ERROR.exception(error);
                     }
                 }
@@ -138,11 +121,6 @@ public class SysDingGroupServiceImpl extends ServiceImpl<SysDingGroupMapper, Sys
         }
     }
 
-    /**
-     * 修改考勤组表
-     *
-     * @param sysDingGroup
-     */
     @Override
     @Transactional
     public void update(SysDingGroupResult sysDingGroup) {
@@ -151,28 +129,20 @@ public class SysDingGroupServiceImpl extends ServiceImpl<SysDingGroupMapper, Sys
         Long serviceUnitId = sysDingGroup.getServiceId();
 
         // 编辑校验
-        List<Long> sysDingGroupIdList = this.list(new QueryWrapper<SysDingGroup>().lambda()
-                        .eq(SysDingGroup::getServiceId, serviceUnitId)
-                        .eq(SysDingGroup::getSupplierId, supplierId)
-                        .ne(SysDingGroup::getId, sysDingGroup.getId()))
-                .stream()
-                .map(BaseEntity::getId)
-                .collect(Collectors.toList());
-        List<Long> roleIdList = sysDingGroup.getDingObjs().stream()
-                .filter(e -> DingObjTypeEnum.DING.equals(e.getType()))
-                .map(SysDingObj::getRoleId).distinct()
+        List<Long> sysDingGroupIdList = this.list(
+                        new QueryWrapper<SysDingGroup>().lambda().eq(SysDingGroup::getServiceId, serviceUnitId).eq(SysDingGroup::getSupplierId, supplierId).ne(SysDingGroup::getId, sysDingGroup.getId()))
+                .stream().map(BaseEntity::getId).collect(Collectors.toList());
+        List<SopRoleTypeEnum> sopRoleTypeList = sysDingGroup.getDingObjs().stream()
+                .filter(e -> DingObjTypeEnum.DING.equals(e.getType())).map(SysDingObj::getSopRoleType).distinct()
                 .collect(Collectors.toList());
 
-        if (!CollectionUtils.isEmpty(sysDingGroupIdList)) {
-            List<Long> dbRoleIdList = sysDingObjService.list(new QueryWrapper<SysDingObj>()
-                            .lambda()
-                            .eq(SysDingObj::getType, DingObjTypeEnum.DING)
-                            .in(SysDingObj::getDingGroupId, sysDingGroupIdList))
-                    .stream()
-                    .map(SysDingObj::getRoleId).distinct().collect(Collectors.toList());
+        if (CollectionUtils.isNotEmpty(sysDingGroupIdList)) {
+            List<SopRoleTypeEnum> dbSopRoleTypeList = sysDingObjService.list(
+                            new QueryWrapper<SysDingObj>().lambda().eq(SysDingObj::getType, DingObjTypeEnum.DING).in(SysDingObj::getDingGroupId, sysDingGroupIdList)).stream()
+                    .map(SysDingObj::getSopRoleType).distinct().collect(Collectors.toList());
 
-            List<Long> alreadyRoleIdList = roleIdList.stream().filter(dbRoleIdList::contains).collect(Collectors.toList());
-            if (!CollectionUtils.isEmpty(alreadyRoleIdList)) {
+            List<SopRoleTypeEnum> alreadySopRoleTypeList = sopRoleTypeList.stream().filter(dbSopRoleTypeList::contains).collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(alreadySopRoleTypeList)) {
                 // 已存在的角色id集合
                 SysSupplier sysSupplier = sysSupplierService.getById(supplierId);
                 if (Objects.isNull(sysSupplier)) {
@@ -185,12 +155,10 @@ public class SysDingGroupServiceImpl extends ServiceImpl<SysDingGroupMapper, Sys
                 String supplierName = sysSupplier.getName();
                 String serviceUnitName = tbServiceUnit.getName();
 
-                String roleNames = sysRoleService.listByIds(alreadyRoleIdList)
-                        .stream()
-                        .map(SysRole::getName)
-                        .collect(Collectors.joining(","));
+                String roleNames = alreadySopRoleTypeList.stream().map(SopRoleTypeEnum::getTitle).collect(Collectors.joining(","));
 
-                String error = String.format("编辑失败,服务单元[%s],供应商[%s],适用考勤对象为[%s] 的考勤组设置已经存在", serviceUnitName, supplierName, roleNames);
+                String error = String.format("编辑失败,服务单元[%s],供应商[%s],适用考勤对象为[%s] 的考勤组设置已经存在", serviceUnitName,
+                        supplierName, roleNames);
                 throw ExceptionResultEnum.ERROR.exception(error);
             }
         }
@@ -198,18 +166,14 @@ public class SysDingGroupServiceImpl extends ServiceImpl<SysDingGroupMapper, Sys
         sysDingGroup.setUpdateId(sysUser.getId());
         sysDingGroup.setUpdateTime(System.currentTimeMillis());
         this.saveOrUpdate(sysDingGroup);
-        sysDingObjService.remove(new QueryWrapper<SysDingObj>().lambda().eq(SysDingObj::getDingGroupId, sysDingGroup.getId()));
+        sysDingObjService.remove(
+                new QueryWrapper<SysDingObj>().lambda().eq(SysDingObj::getDingGroupId, sysDingGroup.getId()));
         sysDingGroup.getDingObjs().forEach(e -> {
             e.setDingGroupId(sysDingGroup.getId());
             sysDingObjService.save(e);
         });
     }
 
-    /**
-     * 删除考勤组表
-     *
-     * @param id
-     */
     @Override
     @Transactional
     public void delete(Long id) {

+ 29 - 18
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingServiceImpl.java

@@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.sop.business.bean.dto.DataPermissionDto;
 import com.qmth.sop.business.bean.dto.DateFormDto;
-import com.qmth.sop.business.bean.dto.RoleDto;
 import com.qmth.sop.business.bean.dto.SopCrmInfo;
 import com.qmth.sop.business.bean.params.DingSaveParam;
 import com.qmth.sop.business.bean.result.*;
@@ -102,7 +101,7 @@ public class TBDingServiceImpl extends ServiceImpl<TBDingMapper, TBDing> impleme
 
         Long serviceUnitId = sopCrmInfo.getServiceUnitId();
 
-        DingElementResult dingElementResult = this.findDingRule(userId, serviceUnitId);
+        DingElementResult dingElementResult = this.findDingRule(userId, sopNo);
         if (Objects.nonNull(dingElementResult)) {
             Long userArchivesId = dingElementResult.getUserArchivesId();
             String currentDayStr = DateFormatUtils.format(System.currentTimeMillis(), SystemConstant.DEFAULT_DATE_DAY_PATTERN);
@@ -300,8 +299,7 @@ public class TBDingServiceImpl extends ServiceImpl<TBDingMapper, TBDing> impleme
             throw ExceptionResultEnum.ERROR.exception(String.format("未找到sop单号为[%s]的派单信息", sopNo));
         }
 
-        Long serviceUnitId = sopCrmInfo.getServiceUnitId();
-        DingElementResult dingElementResult = this.findDingRule(userId, serviceUnitId);
+        DingElementResult dingElementResult = this.findDingRule(userId, sopNo);
         if (Objects.isNull(dingElementResult)) {
             throw ExceptionResultEnum.ERROR.exception("未能获取考勤相关规则");
         }
@@ -362,6 +360,22 @@ public class TBDingServiceImpl extends ServiceImpl<TBDingMapper, TBDing> impleme
             throw ExceptionResultEnum.ERROR.exception("打卡失败,时间异常");
         }
 
+        List<TBDing> todayDingList = this.list(
+                new QueryWrapper<TBDing>().lambda().eq(TBDing::getUserId, userId).eq(TBDing::getSignYear, signYear).eq(TBDing::getSignDate, signDate));
+        // 该用户在其他sop的当天打卡记录
+        List<TBDing> otherSopDingList = todayDingList.stream().filter(e -> !e.getSopNo().equals(sopNo)).collect(
+                Collectors.toList());
+        if (CollectionUtils.isNotEmpty(otherSopDingList)) {
+            List<TBDing> unFinishDingList = otherSopDingList.stream()
+                    .filter(e -> !SystemConstant.longNotNull(e.getSignInTime()) || !SystemConstant.longNotNull(e.getSignOutTime())).collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(unFinishDingList)) {
+                String unFinishDingError = String.format("请先完成sopNo为[%s]的打卡",
+                        unFinishDingList.stream().map(TBDing::getSopNo).collect(Collectors.joining(",")));
+                throw ExceptionResultEnum.ERROR.exception(unFinishDingError);
+            }
+        }
+
+
         // 新增打卡历史记录
         TBDingHistory history = new TBDingHistory();
         history.setSopNo(sopNo);
@@ -382,9 +396,8 @@ public class TBDingServiceImpl extends ServiceImpl<TBDingMapper, TBDing> impleme
             throw ExceptionResultEnum.ERROR.exception("人脸识别不通过!");
         }
 
-        List<TBDing> tbDingList = this.list(
-                new QueryWrapper<TBDing>().lambda().eq(TBDing::getSopNo, sopNo).eq(TBDing::getUserId, userId).eq(TBDing::getSignYear, signYear).eq(TBDing::getSignDate, signDate));
 
+        List<TBDing> tbDingList = todayDingList.stream().filter(e -> e.getSopNo().equals(sopNo)).collect(Collectors.toList());
         if (CollectionUtils.isEmpty(tbDingList)) {
             // 没有这天的打卡记录 - 新增打卡记录
             TBDing tbDing = new TBDing();
@@ -583,16 +596,19 @@ public class TBDingServiceImpl extends ServiceImpl<TBDingMapper, TBDing> impleme
     }
 
     @Override
-    public DingElementResult findDingRule(Long userId, Long serviceUnitId) {
-        List<Long> roleIdList = sysRoleService.listRolesByUserId(userId).stream().map(RoleDto::getId).distinct().collect(Collectors.toList());
-        if (CollectionUtils.isEmpty(roleIdList)) {
-            throw ExceptionResultEnum.ERROR.exception("用户缺少角色");
-        }
+    public DingElementResult findDingRule(Long userId, String sopNo) {
+        SopCrmInfo sopCrmInfo = tbCrmService.findSopCrmInfoBySop(sopNo);
+        Long serviceUnitId = sopCrmInfo.getServiceUnitId();
+
         List<DingElementResult> dingElementResultList = this.baseMapper.findDingResultByUserId(userId, serviceUnitId);
         List<Long> dingGroupIds = dingElementResultList.stream().map(DingElementResult::getDingGroupId).distinct().collect(Collectors.toList());
+
         if (CollectionUtils.isNotEmpty(dingGroupIds)) {
             List<SysDingObj> sysDingObjList = sysDingObjService.list(
-                    new QueryWrapper<SysDingObj>().lambda().in(SysDingObj::getDingGroupId, dingGroupIds).in(SysDingObj::getRoleId, roleIdList).eq(SysDingObj::getType, DingObjTypeEnum.DING));
+                    new QueryWrapper<SysDingObj>().lambda()
+                            .in(SysDingObj::getDingGroupId, dingGroupIds)
+                            .eq(SysDingObj::getSopRoleType, SopRoleTypeEnum.ENGINEER)
+                            .eq(SysDingObj::getType, DingObjTypeEnum.DING));
 
             if (CollectionUtils.isNotEmpty(sysDingObjList) && sysDingObjList.size() == 1) {
                 dingElementResultList = dingElementResultList.stream()
@@ -608,12 +624,7 @@ public class TBDingServiceImpl extends ServiceImpl<TBDingMapper, TBDing> impleme
 
     @Override
     public int findRemainCount(Long userId, String sopNo) {
-        SopCrmInfo sopCrmInfo = tbCrmService.findSopCrmInfoBySop(sopNo);
-        if (Objects.isNull(sopCrmInfo)) {
-            return 0;
-        }
-        Long serviceUnitId = sopCrmInfo.getServiceUnitId();
-        DingElementResult dingElementResult = this.findDingRule(userId, serviceUnitId);
+        DingElementResult dingElementResult = this.findDingRule(userId, sopNo);
         int reissueCardCount = dingElementResult != null ? dingElementResult.getReissueCardCount() : 0;
         int applyCount = this.baseMapper.findDingExceptionApplyCount(userId, sopNo);
         return reissueCardCount != 0 ? reissueCardCount - applyCount : 0;

+ 5 - 0
sop-business/src/main/resources/db/log/caozixuan_update_log.sql

@@ -149,3 +149,8 @@ CREATE TABLE t_b_ding_statistic (
     UNIQUE KEY t_b_ding_statistic_un (sop_no,user_archives_id)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考勤提交统计表';
 
+ALTER TABLE sys_ding_obj
+    CHANGE COLUMN role_id role_id BIGINT NULL COMMENT '角色id' ,
+    CHANGE COLUMN sop_role_type sop_role_type VARCHAR(45) NULL COMMENT 'sop角色' ;
+
+

+ 14 - 0
sop-common/src/main/java/com/qmth/sop/common/contant/SystemConstant.java

@@ -594,4 +594,18 @@ public class SystemConstant {
         list.forEach(ele -> finalMap.put(ele.getKey(), ele.getValue()));
         return finalMap;
     }
+
+    public static boolean strNotNull(String str) {
+        return str != null && str.length() > 0 && !str.equals("null");
+    }
+
+    /**
+     * Long 类型的参数不为空
+     *
+     * @param x 参数
+     * @return true:不为空、false:为空
+     */
+    public static boolean longNotNull(Long x) {
+        return x != null && x > 0;
+    }
 }