Ver Fonte

add:工时管理

caozixuan há 1 ano atrás
pai
commit
edd2f66439

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

@@ -1,5 +1,7 @@
 package com.qmth.sop.business.bean.result;
 
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModelProperty;
 
 /**
@@ -9,6 +11,7 @@ import io.swagger.annotations.ApiModelProperty;
  */
 public class DingFormResult {
     @ApiModelProperty("签到表id")
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long dingId;
 
     @ApiModelProperty("签到日期")

+ 42 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/result/TBDingAttendanceResult.java

@@ -1,9 +1,12 @@
 package com.qmth.sop.business.bean.result;
 
+import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.write.style.ColumnWidth;
 import com.alibaba.excel.annotation.write.style.HeadFontStyle;
 import com.alibaba.excel.annotation.write.style.HeadStyle;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.sop.common.enums.DingResultEnum;
 import com.qmth.sop.common.enums.InOutTypeEnum;
 import io.swagger.annotations.ApiModel;
@@ -71,6 +74,21 @@ public class TBDingAttendanceResult implements Serializable {
     @ExcelProperty(value = "考勤结果")
     private DingResultEnum status;
 
+    @ApiModelProperty(value = "业务线负责人id(数据权限用)")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ExcelIgnore
+    private Long serviceUnitLeaderId;
+
+    @ApiModelProperty(value = "大区经理id(数据权限用)")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ExcelIgnore
+    private Long regionManagerId;
+
+    @ApiModelProperty(value = "区域协调人id(数据权限用)")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ExcelIgnore
+    private Long coordinatorId;
+
     public String getService() {
         return service;
     }
@@ -174,4 +192,28 @@ public class TBDingAttendanceResult implements Serializable {
     public void setStatus(DingResultEnum status) {
         this.status = status;
     }
+
+    public Long getServiceUnitLeaderId() {
+        return serviceUnitLeaderId;
+    }
+
+    public void setServiceUnitLeaderId(Long serviceUnitLeaderId) {
+        this.serviceUnitLeaderId = serviceUnitLeaderId;
+    }
+
+    public Long getRegionManagerId() {
+        return regionManagerId;
+    }
+
+    public void setRegionManagerId(Long regionManagerId) {
+        this.regionManagerId = regionManagerId;
+    }
+
+    public Long getCoordinatorId() {
+        return coordinatorId;
+    }
+
+    public void setCoordinatorId(Long coordinatorId) {
+        this.coordinatorId = coordinatorId;
+    }
 }

+ 3 - 2
sop-business/src/main/java/com/qmth/sop/business/mapper/TBDingMapper.java

@@ -2,6 +2,7 @@ package com.qmth.sop.business.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.qmth.sop.business.bean.dto.DataPermissionDto;
 import com.qmth.sop.business.bean.dto.SopCrmInfo;
 import com.qmth.sop.business.bean.result.*;
 import com.qmth.sop.business.entity.TBDing;
@@ -35,9 +36,9 @@ public interface TBDingMapper extends BaseMapper<TBDing> {
 
     TBDingCountResult count(@Param("serviceId") Long serviceId, @Param("createId") Long createId, @Param("userName") String userName, @Param("supplierId") Long supplierId, @Param("custom") String custom, @Param("sopNo") String sopNo);
 
-    IPage<TBDingAttendanceResult> attendanceQuery(IPage<Map> iPage, @Param("serviceId") Long serviceId, @Param("userName") String userName, @Param("startTime") Long startTime, @Param("endTime") Long endTime, @Param("supplierId") Long supplierId, @Param("custom") String custom, @Param("sopNo") String sopNo, @Param("type") String type, @Param("status") String status);
+    IPage<TBDingAttendanceResult> attendanceQuery(IPage<Map> iPage, @Param("serviceId") Long serviceId, @Param("userName") String userName, @Param("startTime") Long startTime, @Param("endTime") Long endTime, @Param("supplierId") Long supplierId, @Param("custom") String custom, @Param("sopNo") String sopNo, @Param("type") String type, @Param("status") String status, @Param("dpr")DataPermissionDto dpr);
 
-    TBDingAttendanceCountResult attendanceCount(@Param("serviceId") Long serviceId, @Param("userName") String userName, @Param("startTime") Long startTime, @Param("endTime") Long endTime, @Param("supplierId") Long supplierId, @Param("custom") String custom, @Param("sopNo") String sopNo);
+    TBDingAttendanceCountResult attendanceCount(@Param("serviceId") Long serviceId, @Param("userName") String userName, @Param("startTime") Long startTime, @Param("endTime") Long endTime, @Param("supplierId") Long supplierId, @Param("custom") String custom, @Param("sopNo") String sopNo, @Param("dpr")DataPermissionDto dpr);
 
     List<TBDingAttendanceResult> attendanceQuery(@Param("serviceId") Long serviceId, @Param("userName") String userName, @Param("startTime") Long startTime, @Param("endTime") Long endTime, @Param("supplierId") Long supplierId, @Param("custom") String custom, @Param("sopNo") String sopNo, @Param("type") String type, @Param("status") String status);
 

+ 13 - 6
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingServiceImpl.java

@@ -3,14 +3,12 @@ package com.qmth.sop.business.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 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.SopCrmInfo;
 import com.qmth.sop.business.bean.params.DingSaveParam;
 import com.qmth.sop.business.bean.result.*;
-import com.qmth.sop.business.entity.TBDing;
-import com.qmth.sop.business.entity.TBDingHistory;
-import com.qmth.sop.business.entity.TBUserArchives;
-import com.qmth.sop.business.entity.TFFlowApprove;
+import com.qmth.sop.business.entity.*;
 import com.qmth.sop.business.mapper.TBDingMapper;
 import com.qmth.sop.business.service.*;
 import com.qmth.sop.business.sync.FaceApiUtils;
@@ -19,6 +17,7 @@ import com.qmth.sop.common.enums.*;
 import com.qmth.sop.common.util.DateDisposeUtils;
 import com.qmth.sop.common.util.FileStoreUtil;
 import com.qmth.sop.common.util.FileUtil;
+import com.qmth.sop.common.util.ServletUtil;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.time.DateFormatUtils;
 import org.springframework.beans.BeanUtils;
@@ -64,6 +63,8 @@ public class TBDingServiceImpl extends ServiceImpl<TBDingMapper, TBDing> impleme
     private SysConfigService sysConfigService;
     @Resource
     private TBDingHistoryService tbDingHistoryService;
+    @Resource
+    private SysUserService sysUserService;
 
     @Override
     public DingElementResult findDingElements(String sopNo, Long userId) {
@@ -404,12 +405,18 @@ public class TBDingServiceImpl extends ServiceImpl<TBDingMapper, TBDing> impleme
 
     @Override
     public IPage<TBDingAttendanceResult> attendanceQuery(IPage<Map> iPage, Long serviceId, String userName, Long startTime, Long endTime, Long supplierId, String custom, String sopNo, InOutTypeEnum type, DingResultEnum status) {
-        return this.baseMapper.attendanceQuery(iPage, serviceId, userName, startTime, endTime, supplierId, custom, sopNo, Objects.nonNull(type) ? type.name() : null, Objects.nonNull(status) ? status.name() : null);
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        Long userId = requestUser.getId();
+        DataPermissionDto dpr = sysUserService.buildUserDataPermission(userId);
+        return this.baseMapper.attendanceQuery(iPage, serviceId, userName, startTime, endTime, supplierId, custom, sopNo, Objects.nonNull(type) ? type.name() : null, Objects.nonNull(status) ? status.name() : null, dpr);
     }
 
     @Override
     public TBDingAttendanceCountResult attendanceCount(Long serviceId, String userName, Long startTime, Long endTime, Long supplierId, String custom, String sopNo) {
-        return this.baseMapper.attendanceCount(serviceId, userName, startTime, endTime, supplierId, custom, sopNo);
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        Long userId = requestUser.getId();
+        DataPermissionDto dpr = sysUserService.buildUserDataPermission(userId);
+        return this.baseMapper.attendanceCount(serviceId, userName, startTime, endTime, supplierId, custom, sopNo, dpr);
     }
 
     @Override

+ 52 - 5
sop-business/src/main/resources/mapper/TBDingMapper.xml

@@ -213,14 +213,17 @@
         d.type,
         d.sign_time,
         CASE WHEN d.sign_time IS NOT NULL THEN 'NORMAL' ELSE 'ABNORMAL' END STATUS,
-        c.address,
+        d.address,
         d.service_id,
         s.id supplier_id ,
-        d.user_id
+        d.user_id,
+        bs.service_lead_id AS serviceUnitLeaderId,
+        crm.lead_id AS regionManagerId,
+        crm.region_coordinator_id AS coordinatorId
         FROM
         (
-        SELECT d.*,d.sign_in_time sign_time,'IN' AS type FROM t_b_ding d UNION ALL
-        SELECT d.*,d.sign_out_time sign_time,'OUT' AS type FROM t_b_ding d
+        SELECT d.*,d.sign_in_address address, d.sign_in_time sign_time,'IN' AS type FROM t_b_ding d UNION ALL
+        SELECT d.*,d.sign_out_address address, d.sign_out_time sign_time,'OUT' AS type FROM t_b_ding d
         ) d
         LEFT JOIN t_b_user_archives ua ON ua.id = d.user_archives_id
         LEFT JOIN t_b_user_archives_supplier us ON us.user_archives_id = ua.id
@@ -263,6 +266,27 @@
             <if test="status != null and status != ''">
                 and a.status = #{status}
             </if>
+            <if test="dpr != null and !dpr.hasAdmin and !dpr.hasPmo">
+                <choose>
+                    <when test="dpr.hasBusiness">
+                        AND a.serviceUnitLeaderId = #{dpr.requestUserId}
+                    </when>
+                    <otherwise>
+                        <choose>
+                            <when test="dpr.hasRegionManager">
+                                AND a.regionManagerId = #{dpr.requestUserId}
+                            </when>
+                            <otherwise>
+                                <choose>
+                                    <when test="dpr.hasRegionCoordinator">
+                                        AND a.coordinatorId = #{dpr.requestUserId}
+                                    </when>
+                                </choose>
+                            </otherwise>
+                        </choose>
+                    </otherwise>
+                </choose>
+            </if>
         </where>
         order by a.sign_date
     </select>
@@ -282,6 +306,8 @@
         AND sop.sop_no = d.sop_no
         LEFT JOIN sys_custom c ON c.id = sop.custom_id
         LEFT JOIN t_f_flow_approve f ON f.flow_id = d.flow_id
+        LEFT JOIN t_b_service tbs ON d.service_id = tbs.id AND tbs.enable
+        LEFT JOIN t_b_crm tbc ON d.crm_no = tbc.crm_no
 
         <where>
 
@@ -303,7 +329,7 @@
                 ]]>
             </if>
             <if test="supplierId != null and supplierId != ''">
-                and ud.supplier_id = #{supplierId}
+                and us.supplier_id = #{supplierId}
             </if>
             <if test="custom != null and custom != ''">
                 and c.name like concat('%', #{custom} , '%')
@@ -311,6 +337,27 @@
             <if test="sopNo != null and sopNo != ''">
                 and d.sop_no like concat('%', #{sopNo} , '%')
             </if>
+            <if test="dpr != null and !dpr.hasAdmin and !dpr.hasPmo">
+                <choose>
+                    <when test="dpr.hasBusiness">
+                        AND tbs.service_lead_id = #{dpr.requestUserId}
+                    </when>
+                    <otherwise>
+                        <choose>
+                            <when test="dpr.hasRegionManager">
+                                AND tbc.lead_id = #{dpr.requestUserId}
+                            </when>
+                            <otherwise>
+                                <choose>
+                                    <when test="dpr.hasRegionCoordinator">
+                                        AND tbc.region_coordinator_id = #{dpr.requestUserId}
+                                    </when>
+                                </choose>
+                            </otherwise>
+                        </choose>
+                    </otherwise>
+                </choose>
+            </if>
         </where>
 
     </select>