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

Merge remote-tracking branch 'origin/dev_v1.0.0' into dev_v1.0.0

wangliang 1 жил өмнө
parent
commit
eed31b337a
20 өөрчлөгдсөн 380 нэмэгдсэн , 191 устгасан
  1. 6 6
      sop-api/src/main/java/com/qmth/sop/server/api/TBDingController.java
  2. 11 0
      sop-business/src/main/java/com/qmth/sop/business/bean/dto/DateFormDto.java
  3. 5 5
      sop-business/src/main/java/com/qmth/sop/business/bean/result/DingStatisticResult.java
  4. 36 0
      sop-business/src/main/java/com/qmth/sop/business/bean/result/DingSubmitResult.java
  5. 2 2
      sop-business/src/main/java/com/qmth/sop/business/bean/result/TBDingAttendanceCountResult.java
  6. 6 5
      sop-business/src/main/java/com/qmth/sop/business/bean/result/TBDingSubmitQueryResult.java
  7. 2 2
      sop-business/src/main/java/com/qmth/sop/business/mapper/TBDingMapper.java
  8. 7 2
      sop-business/src/main/java/com/qmth/sop/business/mapper/TBDingSubmitMapper.java
  9. 2 2
      sop-business/src/main/java/com/qmth/sop/business/service/TBDingService.java
  10. 2 1
      sop-business/src/main/java/com/qmth/sop/business/service/TBDingSubmitService.java
  11. 28 24
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingServiceImpl.java
  12. 22 7
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingSubmitServiceImpl.java
  13. 5 5
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBUserArchivesAllocationServiceImpl.java
  14. 2 2
      sop-business/src/main/java/com/qmth/sop/business/templete/execute/AsyncDingCountExportService.java
  15. 11 8
      sop-business/src/main/java/com/qmth/sop/business/templete/service/impl/TaskLogicServiceImpl.java
  16. 173 114
      sop-business/src/main/resources/mapper/TBDingMapper.xml
  17. 50 2
      sop-business/src/main/resources/mapper/TBDingSubmitMapper.xml
  18. 1 0
      sop-common/src/main/java/com/qmth/sop/common/enums/DingStatusEnum.java
  19. 5 0
      sop-common/src/main/java/com/qmth/sop/common/enums/DingSubmitStatusEnum.java
  20. 4 4
      sop-common/src/main/java/com/qmth/sop/common/util/DateDisposeUtils.java

+ 6 - 6
sop-api/src/main/java/com/qmth/sop/server/api/TBDingController.java

@@ -2,6 +2,7 @@ package com.qmth.sop.server.api;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.sop.business.activiti.service.ActivitiService;
 import com.qmth.sop.business.annotation.OperationLog;
@@ -30,6 +31,7 @@ import javax.validation.constraints.Min;
 import java.io.IOException;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -65,14 +67,13 @@ public class TBDingController {
     @Resource
     TBSopInfoService tbSopInfoService;
 
-
     @ApiOperation(value = "工时统计统计查询接口")
     @RequestMapping(value = "/query", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "工时统计统计查询结果", response = TBDingCountQueryResult.class)})
+    @ApiResponses({@ApiResponse(code = 200, message = "工时统计统计查询结果", response = TBDingSubmitQueryResult.class)})
     public Result query(
             @ApiParam(value = "服务单元", required = false) @RequestParam(required = false) Long serviceId,
-            @ApiParam(value = "提交状态", required = false) @RequestParam(required = false) String status,
-            @ApiParam(value = "提交人", required = false) @RequestParam(required = false) Long createId,
+            @ApiParam(value = "提交状态", required = false) @RequestParam(required = false) DingSubmitStatusEnum status,
+            @ApiParam(value = "提交人", required = false) @RequestParam(required = false) Long submitUserId,
             @ApiParam(value = "姓名(模糊查询)", required = false) @RequestParam(required = false) String userName,
             @ApiParam(value = "供应商", required = false) @RequestParam(required = false) Long supplierId,
             @ApiParam(value = "客户名称(模糊查询)", required = false) @RequestParam(required = false) String custom,
@@ -80,12 +81,11 @@ public class TBDingController {
             @ApiParam(value = "违规工时", required = false) @RequestParam(required = false) Long days,
             @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
             @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
-        IPage<TBDingCountQueryResult> resultIPage = tBDingService.query(new Page<>(pageNumber, pageSize), serviceId, status, createId, userName, supplierId, custom, sopNo, days);
+        IPage<TBDingSubmitQueryResult> resultIPage = tBDingService.query(new Page<>(pageNumber, pageSize), serviceId, Objects.nonNull(status)?status.name():"", submitUserId, userName, supplierId, custom, sopNo, days);
 
         return ResultUtil.ok(resultIPage);
     }
 
-
     @ApiOperation(value = "工时统计统计接口")
     @RequestMapping(value = "/count", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "工时统计统计结果", response = TBDingCountResult.class)})

+ 11 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/dto/DateFormDto.java

@@ -13,6 +13,9 @@ public class DateFormDto {
     @ApiModelProperty("sop已经结束?")
     private Boolean sopIsEnd;
 
+    @ApiModelProperty("日期表单结束日期")
+    private String endDate;
+
     @ApiModelProperty("日期表单")
     private List<String> dateFormList;
 
@@ -24,6 +27,14 @@ public class DateFormDto {
         this.sopIsEnd = sopIsEnd;
     }
 
+    public String getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(String endDate) {
+        this.endDate = endDate;
+    }
+
     public List<String> getDateFormList() {
         return dateFormList;
     }

+ 5 - 5
sop-business/src/main/java/com/qmth/sop/business/bean/result/DingStatisticResult.java

@@ -20,7 +20,7 @@ public class DingStatisticResult {
     private Integer exceptionCount;
 
     @ApiModelProperty(value = "剩余补卡次数")
-    private Integer remainCont;
+    private Integer remainCount;
 
     @ApiModelProperty(value = "打卡表单")
     private List<DingFormResult> dingFormList;
@@ -49,12 +49,12 @@ public class DingStatisticResult {
         this.exceptionCount = exceptionCount;
     }
 
-    public Integer getRemainCont() {
-        return remainCont;
+    public Integer getRemainCount() {
+        return remainCount;
     }
 
-    public void setRemainCont(Integer remainCont) {
-        this.remainCont = remainCont;
+    public void setRemainCount(Integer remainCount) {
+        this.remainCount = remainCount;
     }
 
     public List<DingFormResult> getDingFormList() {

+ 36 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/result/DingSubmitResult.java

@@ -107,6 +107,18 @@ public class DingSubmitResult {
     @ApiModelProperty(value = "提交时间")
     private Long submitTime;
 
+    @ApiModelProperty(value = "业务线负责人id(数据权限用)")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long serviceUnitLeaderId;
+
+    @ApiModelProperty(value = "大区经理id(数据权限用)")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long regionManagerId;
+
+    @ApiModelProperty(value = "区域协调人id(数据权限用)")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long coordinatorId;
+
     public Long getServiceUnitId() {
         return serviceUnitId;
     }
@@ -346,4 +358,28 @@ public class DingSubmitResult {
     public void setSubmitTime(Long submitTime) {
         this.submitTime = submitTime;
     }
+
+    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;
+    }
 }

+ 2 - 2
sop-business/src/main/java/com/qmth/sop/business/bean/result/TBDingAttendanceCountResult.java

@@ -24,9 +24,9 @@ public class TBDingAttendanceCountResult implements Serializable {
     Long total;
     @ApiModelProperty(value = "异常考勤")
     Long abnormal;
-    @ApiModelProperty(value = "累计人天")
+    @ApiModelProperty(value = "累计人天")
     Long allDays;
-    @ApiModelProperty(value = "累计工时")
+    @ApiModelProperty(value = "累计工时")
     Long allHours;
 
     public Long getTotal() {

+ 6 - 5
sop-business/src/main/java/com/qmth/sop/business/bean/result/TBDingCountQueryResult.java → sop-business/src/main/java/com/qmth/sop/business/bean/result/TBDingSubmitQueryResult.java

@@ -4,6 +4,7 @@ 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.qmth.sop.common.enums.DingSubmitStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -17,11 +18,11 @@ import java.io.Serializable;
  * @author dhshu
  * @since 2023-08-01
  */
-@ApiModel(value = "TBDingCountQueryResult对象", description = "考勤打卡统计查询")
+@ApiModel(value = "TBDingSubmitQueryResult对象", description = "考勤打卡统计查询")
 @ColumnWidth(value = 30)
 @HeadStyle(fillForegroundColor = 11)
 @HeadFontStyle(color = 1)
-public class TBDingCountQueryResult implements Serializable {
+public class TBDingSubmitQueryResult implements Serializable {
 
 
     @ApiModelProperty(value = "服务单元")
@@ -83,7 +84,7 @@ public class TBDingCountQueryResult implements Serializable {
     private String submissionTime;
     @ApiModelProperty(value = "状态,START:已开始,AUDITING:审核中,REJECT:已驳回,END:已终止,FINISH:已结束")
     @ExcelProperty(value = "提交状态")
-    private String status;
+    private DingSubmitStatusEnum status;
 
     public String getService() {
         return service;
@@ -237,11 +238,11 @@ public class TBDingCountQueryResult implements Serializable {
         this.submissionTime = submissionTime;
     }
 
-    public String getStatus() {
+    public DingSubmitStatusEnum getStatus() {
         return status;
     }
 
-    public void setStatus(String status) {
+    public void setStatus(DingSubmitStatusEnum status) {
         this.status = status;
     }
 }

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

@@ -29,9 +29,9 @@ public interface TBDingMapper extends BaseMapper<TBDing> {
      * @return
      */
 
-    IPage<TBDingCountQueryResult> query(IPage<Map> iPage, @Param("serviceId") Long serviceId, @Param("status") String status, @Param("createId") Long createId, @Param("userName") String userName, @Param("supplierId") Long supplierId, @Param("custom") String custom, @Param("sopNo") String sopNo, @Param("days") Long days);
+    IPage<TBDingSubmitQueryResult> query(IPage<Map> iPage, @Param("serviceId") Long serviceId, @Param("status") String status, @Param("createId") Long createId, @Param("userName") String userName, @Param("supplierId") Long supplierId, @Param("custom") String custom, @Param("sopNo") String sopNo, @Param("days") Long days);
 
-    List<TBDingCountQueryResult> query(@Param("serviceId") Long serviceId, @Param("status") String status, @Param("createId") Long createId, @Param("userName") String userName, @Param("supplierId") Long supplierId, @Param("custom") String custom, @Param("sopNo") String sopNo, @Param("days") Long days);
+    List<TBDingSubmitQueryResult> query(@Param("serviceId") Long serviceId, @Param("status") String status, @Param("createId") Long createId, @Param("userName") String userName, @Param("supplierId") Long supplierId, @Param("custom") String custom, @Param("sopNo") String sopNo, @Param("days") Long days);
 
     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);
 

+ 7 - 2
sop-business/src/main/java/com/qmth/sop/business/mapper/TBDingSubmitMapper.java

@@ -3,6 +3,7 @@ package com.qmth.sop.business.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qmth.sop.business.bean.dto.DataPermissionDto;
 import com.qmth.sop.business.bean.result.DingSubmitResult;
 import com.qmth.sop.business.entity.TBDingSubmit;
 import com.qmth.sop.common.enums.DingSubmitStatusEnum;
@@ -32,6 +33,7 @@ public interface TBDingSubmitMapper extends BaseMapper<TBDingSubmit> {
      * @param dingExceptionLimit   需处理异常考勤限制
      * @param remainLimit          补卡限制
      * @param exceptionLimit       异常限制
+     * @param dpr                  数据权限
      * @return 考勤提交分页查询结果
      */
     IPage<DingSubmitResult> findDingSubmitPage(@Param("iPage") Page<DingSubmitResult> iPage,
@@ -45,7 +47,8 @@ public interface TBDingSubmitMapper extends BaseMapper<TBDingSubmit> {
                                                @Param("violationHoursLimit") Integer violationHoursLimit,
                                                @Param("dingExceptionLimit") Integer dingExceptionLimit,
                                                @Param("remainLimit") Integer remainLimit,
-                                               @Param("exceptionLimit") Integer exceptionLimit);
+                                               @Param("exceptionLimit") Integer exceptionLimit,
+                                               @Param("dpr") DataPermissionDto dpr);
 
     /**
      * 考勤提交列表查询
@@ -62,6 +65,7 @@ public interface TBDingSubmitMapper extends BaseMapper<TBDingSubmit> {
      * @param dingExceptionLimit   需处理异常考勤限制
      * @param remainLimit          补卡限制
      * @param exceptionLimit       异常限制
+     * @param dpr                  数据权限
      * @return 考勤提交分页查询结果
      */
     List<DingSubmitResult> findDingSubmitList(@Param("serviceUnitId") Long serviceUnitId,
@@ -75,5 +79,6 @@ public interface TBDingSubmitMapper extends BaseMapper<TBDingSubmit> {
                                               @Param("violationHoursLimit") Integer violationHoursLimit,
                                               @Param("dingExceptionLimit") Integer dingExceptionLimit,
                                               @Param("remainLimit") Integer remainLimit,
-                                              @Param("exceptionLimit") Integer exceptionLimit);
+                                              @Param("exceptionLimit") Integer exceptionLimit,
+                                              @Param("dpr") DataPermissionDto dpr);
 }

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

@@ -58,9 +58,9 @@ public interface TBDingService extends IService<TBDing> {
      * @param iPage
      * @return
      */
-    IPage<TBDingCountQueryResult> query(IPage<Map> iPage, Long serviceId, String status, Long createId, String userName, Long supplierId, String custom, String sopNo, Long days);
+    IPage<TBDingSubmitQueryResult> query(IPage<Map> iPage, Long serviceId, String status, Long createId, String userName, Long supplierId, String custom, String sopNo, Long days);
 
-    List<TBDingCountQueryResult> query(Long serviceId, String status, Long createId, String userName, Long supplierId, String custom, String sopNo, Long days);
+    List<TBDingSubmitQueryResult> query(Long serviceId, String status, Long createId, String userName, Long supplierId, String custom, String sopNo, Long days);
 
     TBDingCountResult count(Long serviceId, Long createId, String userName, Long supplierId, String custom, String sopNo);
 

+ 2 - 1
sop-business/src/main/java/com/qmth/sop/business/service/TBDingSubmitService.java

@@ -95,10 +95,11 @@ public interface TBDingSubmitService extends IService<TBDingSubmit> {
      * @param dingExceptionLimit   需处理异常考勤限制
      * @param remainLimit          补卡限制
      * @param exceptionLimit       异常限制
+     * @param requestUserId        请求的用户id
      * @return 考勤提交小计结果
      */
     List<DingSubmitExportDto> findDingSubmitExportList(Long serviceUnitId, String dingSubmitStatusDesc, Long submitUserId,
                                                        String archivesName, Long supplierId, String customName, String sopNo,
                                                        Integer violationHoursLimit, Integer dingExceptionLimit,
-                                                       Integer remainLimit, Integer exceptionLimit);
+                                                       Integer remainLimit, Integer exceptionLimit, Long requestUserId);
 }

+ 28 - 24
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingServiceImpl.java

@@ -107,11 +107,11 @@ public class TBDingServiceImpl extends ServiceImpl<TBDingMapper, TBDing> impleme
         DateFormDto dateFormDto = this.buildSignDateFormBySop(sopNo);
         List<String> dateFormList = dateFormDto.getDateFormList();
 
+
         int workCount = 0;
         int exceptionCount = 0;
         List<DingFormResult> formList = new ArrayList<>();
         if (CollectionUtils.isNotEmpty(dateFormList)) {
-            Boolean sopIsEnd = dateFormDto.getSopIsEnd();
 
             List<TBDing> tbDingList = this.list(new QueryWrapper<TBDing>().lambda()
                     .eq(TBDing::getSopNo, sopNo)
@@ -130,11 +130,7 @@ public class TBDingServiceImpl extends ServiceImpl<TBDingMapper, TBDing> impleme
 
                 DingInfoResult signInInfo = new DingInfoResult();
                 if (signInTime == null || signInTime == 0) {
-                    if (sopIsEnd) {
-                        signInInfo.setStatus(DingStatusEnum.RE_SIGN);
-                    } else {
-                        signInInfo.setStatus(DingStatusEnum.NO_SIGN);
-                    }
+                    signInInfo.setStatus(DingStatusEnum.NO_SIGN);
                 } else {
                     if (sopNo.equals(dingSopNo)) {
                         signInInfo.setStatus(DingStatusEnum.SIGN);
@@ -149,17 +145,13 @@ public class TBDingServiceImpl extends ServiceImpl<TBDingMapper, TBDing> impleme
                 }
 
                 Long signOutTime = tbDing.getSignOutTime();
-                String signOutAddress = tbDing.getSignInAddress();
-                String axisOutX = tbDing.getAxisInX();
-                String axisOutY = tbDing.getAxisInY();
+                String signOutAddress = tbDing.getSignOutAddress();
+                String axisOutX = tbDing.getAxisOutX();
+                String axisOutY = tbDing.getAxisOutY();
 
                 DingInfoResult signOutInfo = new DingInfoResult();
                 if (signOutTime == null || signOutTime == 0) {
-                    if (sopIsEnd) {
-                        signOutInfo.setStatus(DingStatusEnum.RE_SIGN);
-                    } else {
-                        signOutInfo.setStatus(DingStatusEnum.NO_SIGN);
-                    }
+                    signOutInfo.setStatus(DingStatusEnum.NO_SIGN);
                 } else {
                     if (sopNo.equals(dingSopNo)) {
                         signOutInfo.setStatus(DingStatusEnum.SIGN);
@@ -180,6 +172,7 @@ public class TBDingServiceImpl extends ServiceImpl<TBDingMapper, TBDing> impleme
                 formDingList.add(formResult);
             }
 
+            String endDate = dateFormDto.getEndDate();
 
             for (String date : dateFormList) {
                 List<DingFormResult> dingFormResultList = formDingList.stream()
@@ -190,11 +183,19 @@ public class TBDingServiceImpl extends ServiceImpl<TBDingMapper, TBDing> impleme
                 dingFormResult.setSignDate(date);
                 if (CollectionUtils.isNotEmpty(dingFormResultList)) {
                     // 有这一天的打卡记录
-
                     dingFormResult = dingFormResultList.get(0);
                     // 考勤异常天数增加
-                    if (dingFormResult.getSignInInfo().getStatus().equals(DingStatusEnum.RE_SIGN) || dingFormResult.getSignOutInfo().getStatus().equals(DingStatusEnum.RE_SIGN)) {
-                        exceptionCount++;
+                    if (dingFormResult.getSignInInfo().getStatus().equals(DingStatusEnum.NO_SIGN)) {
+                        if (!endDate.equals(date)) {
+                            exceptionCount++;
+                            dingFormResult.getSignInInfo().setStatus(DingStatusEnum.RE_SIGN);
+                        }
+                    }
+                    if (dingFormResult.getSignOutInfo().getStatus().equals(DingStatusEnum.NO_SIGN)) {
+                        if (!endDate.equals(date)) {
+                            exceptionCount++;
+                            dingFormResult.getSignOutInfo().setStatus(DingStatusEnum.RE_SIGN);
+                        }
                     }
                     // 出勤天数增加
                     if ((dingFormResult.getSignInInfo().getStatus().equals(DingStatusEnum.SIGN) && dingFormResult.getSignOutInfo().getStatus().equals(DingStatusEnum.SIGN)) ||
@@ -204,12 +205,12 @@ public class TBDingServiceImpl extends ServiceImpl<TBDingMapper, TBDing> impleme
                 } else {
                     // 完全没有这天的打卡记录
                     DingInfoResult in = new DingInfoResult();
-                    in.setStatus(DingStatusEnum.NO_SIGN);
+                    in.setStatus(DingStatusEnum.RE_SIGN);
                     DingInfoResult out = new DingInfoResult();
-                    out.setStatus(DingStatusEnum.NO_SIGN);
+                    out.setStatus(DingStatusEnum.RE_SIGN);
                     dingFormResult.setSignInInfo(in);
                     dingFormResult.setSignOutInfo(out);
-                    exceptionCount++;
+                    exceptionCount = exceptionCount + 2;
                 }
                 formList.add(dingFormResult);
             }
@@ -224,7 +225,7 @@ public class TBDingServiceImpl extends ServiceImpl<TBDingMapper, TBDing> impleme
         dingStatisticResult.setDingFormList(formList);
         dingStatisticResult.setWorkDays(workCount);
         dingStatisticResult.setExceptionCount(exceptionCount);
-        dingStatisticResult.setRemainCont(reissueCardCount - applyCount);
+        dingStatisticResult.setRemainCount(reissueCardCount - applyCount);
         return dingStatisticResult;
     }
 
@@ -387,12 +388,12 @@ public class TBDingServiceImpl extends ServiceImpl<TBDingMapper, TBDing> impleme
      */
 
     @Override
-    public IPage<TBDingCountQueryResult> query(IPage<Map> iPage, Long serviceId, String status, Long createId, String userName, Long supplierId, String custom, String sopNo, Long days) {
+    public IPage<TBDingSubmitQueryResult> query(IPage<Map> iPage, Long serviceId, String status, Long createId, String userName, Long supplierId, String custom, String sopNo, Long days) {
         return this.baseMapper.query(iPage, serviceId, status, createId, userName, supplierId, custom, sopNo, days);
     }
 
     @Override
-    public List<TBDingCountQueryResult> query(Long serviceId, String status, Long createId, String userName, Long supplierId, String custom, String sopNo, Long days) {
+    public List<TBDingSubmitQueryResult> query(Long serviceId, String status, Long createId, String userName, Long supplierId, String custom, String sopNo, Long days) {
         return this.baseMapper.query(serviceId, status, createId, userName, supplierId, custom, sopNo, days);
     }
 
@@ -419,7 +420,7 @@ public class TBDingServiceImpl extends ServiceImpl<TBDingMapper, TBDing> impleme
     @Override
     public DateFormDto buildSignDateFormBySop(String sopNo) {
         DateFormDto result = new DateFormDto();
-        List<String> dateList;
+        List<String> dateList = new ArrayList<>();
         if (sopNo != null && sopNo.length() > 0) {
             List<TFFlowApprove> tfFlowApproves = this.baseMapper.findDateAndStatusBySopNo(sopNo);
             if (CollectionUtils.isNotEmpty(tfFlowApproves)) {
@@ -442,6 +443,9 @@ public class TBDingServiceImpl extends ServiceImpl<TBDingMapper, TBDing> impleme
                 result.setDateFormList(dateList);
             }
         }
+        if (CollectionUtils.isNotEmpty(dateList)) {
+            result.setEndDate(dateList.get(dateList.size() - 1));
+        }
         return result;
     }
 }

+ 22 - 7
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingSubmitServiceImpl.java

@@ -3,6 +3,7 @@ package com.qmth.sop.business.service.impl;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.sop.business.bean.dto.DataPermissionDto;
 import com.qmth.sop.business.bean.dto.DingSubmitExportDto;
 import com.qmth.sop.business.bean.params.DingSubmitParam;
 import com.qmth.sop.business.bean.result.DingSubmitResult;
@@ -10,6 +11,7 @@ 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.mapper.TBDingSubmitMapper;
+import com.qmth.sop.business.service.SysUserService;
 import com.qmth.sop.business.service.TBDingSubmitService;
 import com.qmth.sop.common.contant.SystemConstant;
 import com.qmth.sop.common.enums.DingSubmitStatusEnum;
@@ -19,6 +21,7 @@ import com.qmth.sop.common.util.ServletUtil;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -32,6 +35,9 @@ import java.util.stream.Stream;
  */
 @Service
 public class TBDingSubmitServiceImpl extends ServiceImpl<TBDingSubmitMapper, TBDingSubmit> implements TBDingSubmitService {
+    @Resource
+    private SysUserService sysUserService;
+
     @Override
     public IPage<DingSubmitResult> findDingSubmitPage(Long serviceUnitId, String dingSubmitStatusDesc, Long submitUserId,
                                                       String archivesName, Long supplierId, String customName, String sopNo,
@@ -46,8 +52,11 @@ public class TBDingSubmitServiceImpl extends ServiceImpl<TBDingSubmitMapper, TBD
         }
         archivesName = SystemConstant.translateSpecificSign(archivesName);
         customName = SystemConstant.translateSpecificSign(customName);
+
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        DataPermissionDto dpr = sysUserService.buildUserDataPermission(requestUser.getId());
         return this.baseMapper.findDingSubmitPage(new Page<>(pageNumber, pageSize), serviceUnitId, dingSubmitStatusEnumList,
-                submitUserId, archivesName, supplierId, customName, sopNo, violationHoursLimit, dingExceptionLimit, remainLimit, exceptionLimit);
+                submitUserId, archivesName, supplierId, customName, sopNo, violationHoursLimit, dingExceptionLimit, remainLimit, exceptionLimit, dpr);
     }
 
     @Override
@@ -63,8 +72,12 @@ public class TBDingSubmitServiceImpl extends ServiceImpl<TBDingSubmitMapper, TBD
         }
         archivesName = SystemConstant.translateSpecificSign(archivesName);
         customName = SystemConstant.translateSpecificSign(customName);
+
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        DataPermissionDto dpr = sysUserService.buildUserDataPermission(requestUser.getId());
+
         List<DingSubmitResult> dingSubmitResultList = this.baseMapper.findDingSubmitList(serviceUnitId, dingSubmitStatusEnumList,
-                submitUserId, null, archivesName, supplierId, customName, sopNo, violationHoursLimit, dingExceptionLimit, remainLimit, exceptionLimit);
+                submitUserId, null, archivesName, supplierId, customName, sopNo, violationHoursLimit, dingExceptionLimit, remainLimit, exceptionLimit, dpr);
 
         Integer dingCount = dingSubmitResultList.size();
         Integer willSubmitCount = Math.toIntExact(dingSubmitResultList.stream().filter(e -> e.getSubmitStatus().getSubmitDesc().equals("待提交")).count());
@@ -96,7 +109,7 @@ public class TBDingSubmitServiceImpl extends ServiceImpl<TBDingSubmitMapper, TBD
             Long userArchivesId = dingSubmitParam.getUserArchivesId();
             List<DingSubmitResult> dingSubmitResultList = this.baseMapper.findDingSubmitList(serviceUnitId, null,
                     null, userArchivesId, null, null, null, sopNo,
-                    null, null, null, null);
+                    null, null, null, null, null);
 
             if (dingSubmitResultList.size() != 1) {
                 throw ExceptionResultEnum.ERROR.exception(String.format("未找到服务单元id为[%s],sop流水号为[%s],用户档案号为[%s]的考勤信息", serviceUnitId, sopNo, userArchivesId));
@@ -155,7 +168,7 @@ public class TBDingSubmitServiceImpl extends ServiceImpl<TBDingSubmitMapper, TBD
         Long userArchivesId = dingSubmitParam.getUserArchivesId();
         List<DingSubmitResult> dingSubmitResultList = this.baseMapper.findDingSubmitList(serviceUnitId, null,
                 null, userArchivesId, null, null, null, sopNo,
-                null, null, null, null);
+                null, null, null, null, null);
 
         if (dingSubmitResultList.size() != 1) {
             throw ExceptionResultEnum.ERROR.exception(String.format("未找到服务单元id为[%s],sop流水号为[%s],用户档案号为[%s]的考勤信息", serviceUnitId, sopNo, userArchivesId));
@@ -205,7 +218,7 @@ public class TBDingSubmitServiceImpl extends ServiceImpl<TBDingSubmitMapper, TBD
         Long userArchivesId = dingSubmitParam.getUserArchivesId();
         List<DingSubmitResult> dingSubmitResultList = this.baseMapper.findDingSubmitList(serviceUnitId, null,
                 null, userArchivesId, null, null, null, sopNo,
-                null, null, null, null);
+                null, null, null, null, null);
 
         if (dingSubmitResultList.size() != 1) {
             throw ExceptionResultEnum.ERROR.exception(String.format("未找到服务单元id为[%s],sop流水号为[%s],用户档案号为[%s]的考勤信息", serviceUnitId, sopNo, userArchivesId));
@@ -246,7 +259,7 @@ public class TBDingSubmitServiceImpl extends ServiceImpl<TBDingSubmitMapper, TBD
     }
 
     @Override
-    public List<DingSubmitExportDto> findDingSubmitExportList(Long serviceUnitId, String dingSubmitStatusDesc, Long submitUserId, String archivesName, Long supplierId, String customName, String sopNo, Integer violationHoursLimit, Integer dingExceptionLimit, Integer remainLimit, Integer exceptionLimit) {
+    public List<DingSubmitExportDto> findDingSubmitExportList(Long serviceUnitId, String dingSubmitStatusDesc, Long submitUserId, String archivesName, Long supplierId, String customName, String sopNo, Integer violationHoursLimit, Integer dingExceptionLimit, Integer remainLimit, Integer exceptionLimit, Long requestUserId) {
         List<DingSubmitStatusEnum> dingSubmitStatusEnumList = new ArrayList<>();
         if (dingSubmitStatusDesc != null && dingSubmitStatusDesc.length() > 0) {
             dingSubmitStatusEnumList = Arrays.stream(DingSubmitStatusEnum.values())
@@ -255,9 +268,11 @@ public class TBDingSubmitServiceImpl extends ServiceImpl<TBDingSubmitMapper, TBD
         }
         archivesName = SystemConstant.translateSpecificSign(archivesName);
         customName = SystemConstant.translateSpecificSign(customName);
+
+        DataPermissionDto dpr = sysUserService.buildUserDataPermission(requestUserId);
         List<DingSubmitResult> dingSubmitResultList = this.baseMapper.findDingSubmitList(serviceUnitId, dingSubmitStatusEnumList,
                 submitUserId, null, archivesName, supplierId, customName, sopNo, violationHoursLimit, dingExceptionLimit,
-                remainLimit, exceptionLimit);
+                remainLimit, exceptionLimit, dpr);
 
         return dingSubmitResultList.stream().flatMap(e -> {
             DingSubmitExportDto dto = new DingSubmitExportDto();

+ 5 - 5
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBUserArchivesAllocationServiceImpl.java

@@ -184,11 +184,11 @@ public class TBUserArchivesAllocationServiceImpl extends ServiceImpl<TBUserArchi
         }
 
         // 更新区域负责人
-        if (regionUserId != null && regionUserId > 0) {
-            tbCrm.setRegionCoordinatorId(regionUserId);
-            tbCrmService.updateById(tbCrm);
-        }
-
+        UpdateWrapper<TBCrm> coordinatorUpdateWrapper = new UpdateWrapper<>();
+        coordinatorUpdateWrapper.lambda()
+                .set(TBCrm::getRegionCoordinatorId,regionUserId)
+                .eq(TBCrm::getId,tbCrm.getId());
+        tbCrmService.update(coordinatorUpdateWrapper);
 
         // 新增前删除派单关系
         if (CollectionUtils.isNotEmpty(dbList)) {

+ 2 - 2
sop-business/src/main/java/com/qmth/sop/business/templete/execute/AsyncDingCountExportService.java

@@ -2,7 +2,7 @@ package com.qmth.sop.business.templete.execute;
 
 import cn.hutool.core.date.DateUtil;
 import com.qmth.boot.api.exception.ApiException;
-import com.qmth.sop.business.bean.result.TBDingCountQueryResult;
+import com.qmth.sop.business.bean.result.TBDingSubmitQueryResult;
 import com.qmth.sop.business.entity.BasicAttachment;
 import com.qmth.sop.business.entity.TBTask;
 import com.qmth.sop.business.service.TBTaskService;
@@ -54,7 +54,7 @@ public class AsyncDingCountExportService extends AsyncExportTaskTemplete {
         tbTaskService.updateById(tbTask);
         try {
             Map<String, Object> result = taskLogicService.executeExportDingCountLogic(map);
-            List<TBDingCountQueryResult> archivesImportDtoList = (List<TBDingCountQueryResult>) result.get(SystemConstant.EXCEL_DATA);
+            List<TBDingSubmitQueryResult> archivesImportDtoList = (List<TBDingSubmitQueryResult>) result.get(SystemConstant.EXCEL_DATA);
             BasicAttachment basicAttachment = (BasicAttachment) result.get(SystemConstant.EXCEL_ATTACHMENT);
             stringJoinerSummary.add(MessageFormat.format("{0}{1}{2}{3}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), FINISH_TITLE, !CollectionUtils.isEmpty(archivesImportDtoList) ? archivesImportDtoList.size() : 0, FINISH_SIZE));
 

+ 11 - 8
sop-business/src/main/java/com/qmth/sop/business/templete/service/impl/TaskLogicServiceImpl.java

@@ -8,7 +8,7 @@ import com.qmth.sop.business.bean.query.DingSubmitQuery;
 import com.qmth.sop.business.bean.query.UserArchivesQuery;
 import com.qmth.sop.business.bean.result.SysMessageResult;
 import com.qmth.sop.business.bean.result.TBDingAttendanceResult;
-import com.qmth.sop.business.bean.result.TBDingCountQueryResult;
+import com.qmth.sop.business.bean.result.TBDingSubmitQueryResult;
 import com.qmth.sop.business.entity.*;
 import com.qmth.sop.business.service.*;
 import com.qmth.sop.business.templete.service.TaskLogicService;
@@ -315,11 +315,11 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         try {
             fileTemp = SystemConstant.getFileTempVar(SystemConstant.XLSX_PREFIX);
 
-            List<TBDingCountQueryResult> tbDingCountQueryResults = tbDingService.query((Long) map.get("serviceId"), (String) map.get("status"), (Long) map.get("createId"), (String) map.get("userName"), (Long) map.get("supplierId"), (String) map.get("String"), (String) map.get("sopNo"), (Long) map.get("days"));
-            tbDingCountQueryResults.forEach(e -> {
-                e.setStatus(FlowStatusEnum.convertToEnum(e.getStatus()).getTitle());
-            });
-            EasyExcel.write(fileTemp, TBDingCountQueryResult.class).sheet("考勤打卡统计导出").doWrite(tbDingCountQueryResults);
+            List<TBDingSubmitQueryResult> tbDingCountQueryResults = tbDingService.query((Long) map.get("serviceId"), (String) map.get("status"), (Long) map.get("createId"), (String) map.get("userName"), (Long) map.get("supplierId"), (String) map.get("String"), (String) map.get("sopNo"), (Long) map.get("days"));
+//            tbDingCountQueryResults.forEach(e -> {
+//                e.setStatus(FlowStatusEnum.convertToEnum(e.getStatus()).getTitle());
+//            });
+            EasyExcel.write(fileTemp, TBDingSubmitQueryResult.class).sheet("考勤打卡统计导出").doWrite(tbDingCountQueryResults);
 
             BasicAttachment basicAttachment = basicAttachmentService.saveAttachment(fileTemp, UploadFileEnum.FILE);
             map.computeIfAbsent(SystemConstant.EXCEL_DATA, v -> tbDingCountQueryResults);
@@ -342,7 +342,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
 //            tbDingAttendanceResults.forEach(e -> {
 //                //e.setStatus(FlowStatusEnum.convertToEnum(e.getStatus()).getTitle());
 //            });
-            EasyExcel.write(fileTemp, TBDingCountQueryResult.class).sheet("考勤明细导出").doWrite(tbDingAttendanceResults);
+            EasyExcel.write(fileTemp, TBDingAttendanceResult.class).sheet("考勤明细导出").doWrite(tbDingAttendanceResults);
 
             BasicAttachment basicAttachment = basicAttachmentService.saveAttachment(fileTemp, UploadFileEnum.FILE);
             map.computeIfAbsent(SystemConstant.EXCEL_DATA, v -> tbDingAttendanceResults);
@@ -434,8 +434,11 @@ public class TaskLogicServiceImpl implements TaskLogicService {
             Integer dingExceptionLimit = query.getDingExceptionLimit();
             Integer remainLimit = query.getRemainLimit();
             Integer exceptionLimit = query.getExceptionLimit();
+
+            SysUser requestUser = (SysUser) map.get(SystemConstant.USER);
+
             List<DingSubmitExportDto> dingSubmitExportDtoList = tbDingSubmitService.findDingSubmitExportList(serviceUnitId, dingSubmitStatusDesc,
-                    submitUserId, archivesName, supplierId, customName, sopNo, violationHoursLimit, dingExceptionLimit, remainLimit, exceptionLimit);
+                    submitUserId, archivesName, supplierId, customName, sopNo, violationHoursLimit, dingExceptionLimit, remainLimit, exceptionLimit, requestUser.getId());
             //数据读取逻辑end
             EasyExcel.write(fileTemp, DingSubmitExportDto.class).sheet("考勤提交导出").doWrite(dingSubmitExportDtoList);
 

+ 173 - 114
sop-business/src/main/resources/mapper/TBDingMapper.xml

@@ -2,127 +2,190 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.qmth.sop.business.mapper.TBDingMapper">
 
-    <select id="query" resultType="com.qmth.sop.business.bean.result.TBDingCountQueryResult">
-        SELECT * from (
-        SELECT
-        bs.NAME service,
-        d.sop_no,
-        c.NAME custom,
-        ua.province,
-        ua.city,
-        crm.exam_start_time,
-        crm.exam_end_time,
-        u.real_name user_name,
-        ua.`code` user_no,
-        r.`name` role_name,
-        s.NAME supplier,
-        count( d.id ) attendance,
-        SUM( CASE WHEN d.date_type = 'WEEKDAY' THEN 1 ELSE 0 END ) weekdays,
-        SUM( CASE WHEN d.date_type = 'WEEKEND' THEN 1 ELSE 0 END ) weekends,
-        SUM( CASE WHEN d.date_type = 'LEGAL_HOLIDAYS' THEN 1 ELSE 0 END ) holidays,
-        SUM( CASE WHEN d.sign_out_time is not null and d.sign_in_time is not null   THEN TIMESTAMPDIFF(HOUR, DATE_FORMAT(FROM_UNIXTIME(d.sign_out_time), '%Y-%m-%d %H:%i:%s'), DATE_FORMAT(FROM_UNIXTIME(d.sign_in_time), '%Y-%m-%d %H:%i:%s')) ELSE 0 END ) work_hours,
-        DATEDIFF(DATE_FORMAT(FROM_UNIXTIME(crm.exam_start_time), '%Y-%m-%d'), DATE_FORMAT(FROM_UNIXTIME(crm.exam_end_time), '%Y-%m-%d'))-count( d.id )+1 violation_days,
-        f.`status`,
-        sub.real_name submitter,
-        f.create_time submission_time ,
-        d.service_id,
-        f.create_id,
-        s.id supplier_id
+        <select id="query" resultType="com.qmth.sop.business.bean.result.TBDingSubmitQueryResult">
 
-        FROM
-        t_b_ding d
-        LEFT JOIN sys_user u ON u.id = d.user_id
-        LEFT JOIN t_b_user_archives ua ON u.mobile_number = ua.mobile_number
-        LEFT JOIN t_b_user_archives_supplier us ON us.user_archives_id = ua.id
-        LEFT JOIN t_b_service bs ON bs.id = d.service_id
-        LEFT JOIN t_b_sop_info sop ON sop.crm_no = d.crm_no
-        AND sop.sop_no = d.sop_no
-        LEFT JOIN t_b_engineer_allocation ea ON ea.crm_no = d.crm_no
-        AND ea.sop_no = d.sop_no
-        LEFT JOIN sys_role r ON ea.role_id = r.id
-        LEFT JOIN t_b_crm crm ON crm.crm_no = d.crm_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 sys_user sub ON sub.id = f.create_id
-        LEFT JOIN sys_supplier s ON s.id = us.supplier_id
-        GROUP BY
-        bs.NAME,
-        d.sop_no,
-        c.NAME,
-        ua.province,
-        ua.city,
-        crm.exam_start_time,
-        crm.exam_end_time,
-        u.real_name,
-        ua.`code`,
-        r.`name`,
-        s.NAME,
-        f.`status`,
-        f.create_id,
-        f.create_time,
-        d.service_id,
-        s.id  ) a
+            SELECT
+            bs.NAME service,
+            d.sop_no,
+            c.NAME custom,
+            ua.province,
+            ua.city,
+            d.approach_time exam_start_time,
+            d.departure_time exam_end_time,
+            ua.name user_name,
+            ua.`code` user_no,
+            r.`name` role_name,
+            s.NAME supplier,
+            d.actual_days attendance,
+            d.weekdays weekdays,
+            d.weekends weekends,
+            d.legal_holidays holidays,
+            d.work_hours work_hours,
+            d.violation_days violation_days,
+            d.submit_status `status`,
+            sub.real_name submitter,
+            d.submit_time submission_time
 
-        <where>
-            <if test="serviceId != null and serviceId != ''">
-                and a.service_id = #{serviceId}
-            </if>
-            <if test="status != null and status != ''">
-                and a.status = #{status}
-            </if>
-            <if test="createId != null and createId != ''">
-                and a.create_id = #{create_id}
-            </if>
-            <if test="userName != null and userName != ''">
-                and a.real_name like concat('%', #{userName} , '%')
-            </if>
-            <if test="supplierId != null and supplierId != ''">
-                and a.supplier_id = #{supplierId}
-            </if>
-            <if test="custom != null and custom != ''">
-                and a.name like concat('%', #{custom} , '%')
-            </if>
-            <if test="sopNo != null and sopNo != ''">
-                and a.sop_no like concat('%', #{sopNo} , '%')
-            </if>
-            <if test="days != null and days != '' ">
-                <![CDATA[
-               and a.days > #{days}
-               ]]>
-            </if>
-        </where>
+            FROM
+            t_b_ding_submit d
+            LEFT JOIN t_b_user_archives ua ON d.user_archives_id = ua.id
+            LEFT JOIN t_b_user_archives_supplier us ON us.user_archives_id = ua.id
+            LEFT JOIN t_b_service bs ON bs.id = d.service_id
+            LEFT JOIN sys_role r ON r.type = d.role_type
+            LEFT JOIN t_b_crm crm ON crm.crm_no = d.crm_no
+            LEFT JOIN sys_custom c ON c.id = crm.custom_id
+            LEFT JOIN sys_user sub ON sub.id = d.submit_user_id
+            LEFT JOIN sys_supplier s ON s.id = us.supplier_id
 
-    </select>
+            <where>
+                <if test="serviceId != null and serviceId != ''">
+                    and d.service_id = #{serviceId}
+                </if>
+                <if test="status != null and status != ''">
+                    and d.submit_status = #{status}
+                </if>
+                <if test="createId != null and createId != ''">
+                    and d.submit_user_id = #{create_id}
+                </if>
+                <if test="userName != null and userName != ''">
+                    and ua.name like concat('%', #{userName} , '%')
+                </if>
+                <if test="supplierId != null and supplierId != ''">
+                    and us.supplier_id = #{supplierId}
+                </if>
+                <if test="custom != null and custom != ''">
+                    and c.NAME like concat('%', #{custom} , '%')
+                </if>
+                <if test="sopNo != null and sopNo != ''">
+                    and d.sop_no like concat('%', #{sopNo} , '%')
+                </if>
+                <if test="days != null and days != '' ">
+                    <![CDATA[
+                   and d.violation_days > #{days}
+                   ]]>
+                </if>
+            </where>
+
+        </select>
+
+<!--    <select id="query" resultType="com.qmth.sop.business.bean.result.TBDingCountQueryResult">-->
+<!--        SELECT * from (-->
+<!--        SELECT-->
+<!--        bs.NAME service,-->
+<!--        d.sop_no,-->
+<!--        c.NAME custom,-->
+<!--        ua.province,-->
+<!--        ua.city,-->
+<!--        crm.exam_start_time,-->
+<!--        crm.exam_end_time,-->
+<!--        u.real_name user_name,-->
+<!--        ua.`code` user_no,-->
+<!--        r.`name` role_name,-->
+<!--        s.NAME supplier,-->
+<!--        count( d.id ) attendance,-->
+<!--        SUM( CASE WHEN d.date_type = 'WEEKDAY' THEN 1 ELSE 0 END ) weekdays,-->
+<!--        SUM( CASE WHEN d.date_type = 'WEEKEND' THEN 1 ELSE 0 END ) weekends,-->
+<!--        SUM( CASE WHEN d.date_type = 'LEGAL_HOLIDAYS' THEN 1 ELSE 0 END ) holidays,-->
+<!--        SUM( CASE WHEN d.sign_out_time is not null and d.sign_in_time is not null   THEN TIMESTAMPDIFF(HOUR, DATE_FORMAT(FROM_UNIXTIME(d.sign_out_time), '%Y-%m-%d %H:%i:%s'), DATE_FORMAT(FROM_UNIXTIME(d.sign_in_time), '%Y-%m-%d %H:%i:%s')) ELSE 0 END ) work_hours,-->
+<!--        DATEDIFF(DATE_FORMAT(FROM_UNIXTIME(crm.exam_start_time), '%Y-%m-%d'), DATE_FORMAT(FROM_UNIXTIME(crm.exam_end_time), '%Y-%m-%d'))-count( d.id )+1 violation_days,-->
+<!--        f.`status`,-->
+<!--        sub.real_name submitter,-->
+<!--        f.create_time submission_time ,-->
+<!--        d.service_id,-->
+<!--        f.create_id,-->
+<!--        s.id supplier_id-->
+
+<!--        FROM-->
+<!--        t_b_ding d-->
+<!--        LEFT JOIN sys_user u ON u.id = d.user_id-->
+<!--        LEFT JOIN t_b_user_archives ua ON u.mobile_number = ua.mobile_number-->
+<!--        LEFT JOIN t_b_user_archives_supplier us ON us.user_archives_id = ua.id-->
+<!--        LEFT JOIN t_b_service bs ON bs.id = d.service_id-->
+<!--        LEFT JOIN t_b_sop_info sop ON sop.crm_no = d.crm_no-->
+<!--        AND sop.sop_no = d.sop_no-->
+<!--        LEFT JOIN t_b_engineer_allocation ea ON ea.crm_no = d.crm_no-->
+<!--        AND ea.sop_no = d.sop_no-->
+<!--        LEFT JOIN sys_role r ON ea.role_id = r.id-->
+<!--        LEFT JOIN t_b_crm crm ON crm.crm_no = d.crm_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 sys_user sub ON sub.id = f.create_id-->
+<!--        LEFT JOIN sys_supplier s ON s.id = us.supplier_id-->
+<!--        GROUP BY-->
+<!--        bs.NAME,-->
+<!--        d.sop_no,-->
+<!--        c.NAME,-->
+<!--        ua.province,-->
+<!--        ua.city,-->
+<!--        crm.exam_start_time,-->
+<!--        crm.exam_end_time,-->
+<!--        u.real_name,-->
+<!--        ua.`code`,-->
+<!--        r.`name`,-->
+<!--        s.NAME,-->
+<!--        f.`status`,-->
+<!--        f.create_id,-->
+<!--        f.create_time,-->
+<!--        d.service_id,-->
+<!--        s.id  ) a-->
+
+<!--        <where>-->
+<!--            <if test="serviceId != null and serviceId != ''">-->
+<!--                and a.service_id = #{serviceId}-->
+<!--            </if>-->
+<!--            <if test="status != null and status != ''">-->
+<!--                and a.status = #{status}-->
+<!--            </if>-->
+<!--            <if test="createId != null and createId != ''">-->
+<!--                and a.create_id = #{create_id}-->
+<!--            </if>-->
+<!--            <if test="userName != null and userName != ''">-->
+<!--                and a.real_name like concat('%', #{userName} , '%')-->
+<!--            </if>-->
+<!--            <if test="supplierId != null and supplierId != ''">-->
+<!--                and a.supplier_id = #{supplierId}-->
+<!--            </if>-->
+<!--            <if test="custom != null and custom != ''">-->
+<!--                and a.name like concat('%', #{custom} , '%')-->
+<!--            </if>-->
+<!--            <if test="sopNo != null and sopNo != ''">-->
+<!--                and a.sop_no like concat('%', #{sopNo} , '%')-->
+<!--            </if>-->
+<!--            <if test="days != null and days != '' ">-->
+<!--                <![CDATA[-->
+<!--               and a.days > #{days}-->
+<!--               ]]>-->
+<!--            </if>-->
+<!--        </where>-->
+
+<!--    </select>-->
 
 
     <select id="count" resultType="com.qmth.sop.business.bean.result.TBDingCountResult">
         SELECT
-        count( d.id ) total,
-        SUM( CASE WHEN f.`status`='FINISH' THEN 1 ELSE 0 END ) submitted,
-        SUM( CASE WHEN f.`status`!='FINISH' THEN 1 ELSE 0 END ) un_submitted,
-        SUM( CASE WHEN f.`status`='FINISH' THEN 1 ELSE 0 END ) all_days,
-        SUM( CASE WHEN f.`status`='FINISH'  THEN TIMESTAMPDIFF(HOUR, DATE_FORMAT(FROM_UNIXTIME(d.sign_out_time), '%Y-%m-%d %H:%i:%s'), DATE_FORMAT(FROM_UNIXTIME(d.sign_in_time), '%Y-%m-%d %H:%i:%s')) ELSE 0 END ) all_hours
+        sum( d.id ) total,
+        SUM( CASE WHEN d.submit_status='AGREE_DING' THEN 1 ELSE 0 END ) submitted,
+        SUM( CASE WHEN d.submit_status!='AGREE_DING' THEN 1 ELSE 0 END ) un_submitted,
+        SUM( CASE WHEN d.submit_status='AGREE_DING' THEN d.actual_days ELSE 0 END ) all_days,
+        SUM( CASE WHEN d.submit_status='AGREE_DING'  THEN d.work_hours ELSE 0 END ) all_hours
         FROM
-        t_b_ding d
-        LEFT JOIN sys_user u ON u.id = d.user_id
-        LEFT JOIN t_b_user_archives ua ON u.mobile_number = ua.mobile_number
+        t_b_ding_submit d
+        LEFT JOIN t_b_user_archives ua ON d.user_archives_id = ua.id
         LEFT JOIN t_b_user_archives_supplier us ON us.user_archives_id = ua.id
-        LEFT JOIN t_b_sop_info sop ON sop.crm_no = d.crm_no
-        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_crm crm ON crm.crm_no = d.crm_no
+        LEFT JOIN sys_custom c ON c.id = crm.custom_id
         <where>
             <if test="serviceId != null and serviceId != ''">
                 and d.service_id = #{serviceId}
             </if>
             <if test="createId != null and createId != ''">
-                and f.create_id = #{create_id}
+                and d.submit_user_id = #{create_id}
             </if>
             <if test="userName != null and userName != ''">
-                and u.real_name like concat('%', #{userName} , '%')
+                and ua.name like concat('%', #{userName} , '%')
             </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} , '%')
@@ -136,18 +199,19 @@
     <select id="attendanceQuery" resultType="com.qmth.sop.business.bean.result.TBDingAttendanceResult">
         SELECT * from (
         SELECT
+        d.ding_sop_no sop_no,
         bs.NAME service,
         c.NAME custom,
         ua.province,
         ua.city,
-        u.real_name user_name,
+        ua.name user_name,
         ua.`code` user_no,
         r.`name` role_name,
         s.NAME supplier,
         d.sign_date,
         d.type,
         d.sign_time,
-        CASE WHEN d.sign_time IS NOT NULL THEN 'NORMAL' ELSE 'abnormal' END STATUS,
+        CASE WHEN d.sign_time IS NOT NULL THEN 'NORMAL' ELSE 'ABNORMAL' END STATUS,
         c.address,
         d.service_id,
         s.id supplier_id ,
@@ -157,17 +221,12 @@
         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
         ) d
-        LEFT JOIN sys_user u ON u.id = d.user_id
-        LEFT JOIN t_b_user_archives ua ON u.mobile_number = ua.mobile_number
+        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
         LEFT JOIN t_b_service bs ON bs.id = d.service_id
-        LEFT JOIN t_b_sop_info sop ON sop.crm_no = d.crm_no
-        AND sop.sop_no = d.sop_no
-        LEFT JOIN t_b_engineer_allocation ea ON ea.crm_no = d.crm_no
-        AND ea.sop_no = d.sop_no
-        LEFT JOIN sys_role r ON ea.role_id = r.id
+        LEFT JOIN sys_role r ON r.type = d.role_type
         LEFT JOIN t_b_crm crm ON crm.crm_no = d.crm_no
-        LEFT JOIN sys_custom c ON c.id = sop.custom_id
+        LEFT JOIN sys_custom c ON c.id = crm.custom_id
         LEFT JOIN sys_supplier s ON s.id = us.supplier_id
 
         ) a
@@ -204,7 +263,7 @@
                 and a.status = #{status}
             </if>
         </where>
-
+        order by d.sign_date
     </select>
 
     <select id="attendanceCount" resultType="com.qmth.sop.business.bean.result.TBDingAttendanceCountResult">

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

@@ -36,7 +36,10 @@
                  IFNULL(tbds.submit_status, 'WILL_SUBMIT') AS submitStatus,
                  tbds.submit_user_id AS submitUserId,
                  su.real_name AS submitUserName,
-                 tbds.submit_time AS submitTime
+                 tbds.submit_time AS submitTime,
+                 tbs.service_lead_id AS serviceUnitLeaderId,
+                 tbc.lead_id AS regionManagerId,
+                 tbc.region_coordinator_id AS coordinatorId
              FROM
                  (SELECT
                       service_id,
@@ -119,6 +122,27 @@
             <if test="exceptionLimit != null">
                 AND main.exceptionCount > #{exceptionLimit}
             </if>
+            <if test="dpr != null and !dpr.hasAdmin and !dpr.hasPmo">
+                <choose>
+                    <when test="dpr.hasBusiness">
+                        AND main.serviceUnitLeaderId = #{dpr.requestUserId}
+                    </when>
+                    <otherwise>
+                        <choose>
+                            <when test="dpr.hasRegionManager">
+                                AND main.regionManagerId = #{dpr.requestUserId}
+                            </when>
+                            <otherwise>
+                                <choose>
+                                    <when test="dpr.hasRegionCoordinator">
+                                        AND main.coordinatorId = #{dpr.requestUserId}
+                                    </when>
+                                </choose>
+                            </otherwise>
+                        </choose>
+                    </otherwise>
+                </choose>
+            </if>
         </where>
     </select>
 
@@ -156,7 +180,10 @@
                  IFNULL(tbds.submit_status, 'WILL_SUBMIT') AS submitStatus,
                  tbds.submit_user_id AS submitUserId,
                  su.real_name AS submitUserName,
-                 tbds.submit_time AS submitTime
+                 tbds.submit_time AS submitTime,
+                tbs.service_lead_id AS serviceUnitLeaderId,
+                tbc.lead_id AS regionManagerId,
+                tbc.region_coordinator_id AS coordinatorId
              FROM
                  (SELECT
                       service_id,
@@ -242,6 +269,27 @@
             <if test="exceptionLimit != null">
                 AND main.exceptionCount > #{exceptionLimit}
             </if>
+            <if test="dpr != null and !dpr.hasAdmin and !dpr.hasPmo">
+                <choose>
+                    <when test="dpr.hasBusiness">
+                        AND main.serviceUnitLeaderId = #{dpr.requestUserId}
+                    </when>
+                    <otherwise>
+                        <choose>
+                            <when test="dpr.hasRegionManager">
+                                AND main.regionManagerId = #{dpr.requestUserId}
+                            </when>
+                            <otherwise>
+                                <choose>
+                                    <when test="dpr.hasRegionCoordinator">
+                                        AND main.coordinatorId = #{dpr.requestUserId}
+                                    </when>
+                                </choose>
+                            </otherwise>
+                        </choose>
+                    </otherwise>
+                </choose>
+            </if>
         </where>
     </select>
 </mapper>

+ 1 - 0
sop-common/src/main/java/com/qmth/sop/common/enums/DingStatusEnum.java

@@ -9,6 +9,7 @@ public enum DingStatusEnum {
     SIGN("已打卡", "正常打卡,显示时间和打卡地点"),
     NO_SIGN("未打卡", "未打卡,显示未打卡"),
     RE_SIGN("补卡", "补卡,显示补卡"),
+    RE_SIGN_ING("补卡中","显示补卡中"),
     OTHER("在其他sop打卡", "显示'--'");
 
     DingStatusEnum(String title, String desc) {

+ 5 - 0
sop-common/src/main/java/com/qmth/sop/common/enums/DingSubmitStatusEnum.java

@@ -34,4 +34,9 @@ public enum DingSubmitStatusEnum {
     public String getAuditDesc() {
         return auditDesc;
     }
+
+    @Override
+    public String toString() {
+        return submitDesc;
+    }
 }

+ 4 - 4
sop-common/src/main/java/com/qmth/sop/common/util/DateDisposeUtils.java

@@ -189,8 +189,8 @@ public class DateDisposeUtils extends DateUtils {
 
             Calendar tempEnd = Calendar.getInstance();
             tempEnd.setTime(end);
-            tempEnd.add(Calendar.DATE, +1);// 日期加1(包含结束)
-            while (tempStart.before(tempEnd)) {
+//            tempEnd.add(Calendar.DATE, +1);// 日期加1(包含结束)
+            while (tempStart.before(tempEnd) || tempStart.equals(tempEnd)) {
                 days.add(dateFormat.format(tempStart.getTime()));
                 tempStart.add(Calendar.DAY_OF_YEAR, 1);
             }
@@ -223,8 +223,8 @@ public class DateDisposeUtils extends DateUtils {
 
         Calendar tempEnd = Calendar.getInstance();
         tempEnd.setTime(end);
-        tempEnd.add(Calendar.DATE, +1);// 日期加1(包含结束)
-        while (tempStart.before(tempEnd)) {
+//        tempEnd.add(Calendar.DATE, +1);// 日期加1(包含结束)
+        while (tempStart.before(tempEnd) || tempStart.equals(tempEnd)) {
             days.add(dateFormat.format(tempStart.getTime()));
             tempStart.add(Calendar.DAY_OF_YEAR, 1);
         }