caozixuan 7 месяцев назад
Родитель
Сommit
d4605d49de
15 измененных файлов с 352 добавлено и 14 удалено
  1. 38 0
      sop-business/src/main/java/com/qmth/sop/business/bean/dto/DingStatisticByCrmDto.java
  2. 38 0
      sop-business/src/main/java/com/qmth/sop/business/bean/dto/DingStatisticByCustomDto.java
  3. 39 0
      sop-business/src/main/java/com/qmth/sop/business/bean/dto/DingStatisticByPersonDto.java
  4. 38 0
      sop-business/src/main/java/com/qmth/sop/business/bean/dto/DingStatisticBySopDto.java
  5. 38 0
      sop-business/src/main/java/com/qmth/sop/business/bean/dto/DingStatisticBySupplierDto.java
  6. 26 1
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingStatisticByCrmServiceImpl.java
  7. 36 9
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingStatisticByCustomServiceImpl.java
  8. 7 2
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingStatisticByPersonServiceImpl.java
  9. 18 1
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingStatisticBySopServiceImpl.java
  10. 44 1
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingStatisticBySupplierServiceImpl.java
  11. 6 0
      sop-business/src/main/resources/mapper/TBDingStatisticByCrmMapper.xml
  12. 6 0
      sop-business/src/main/resources/mapper/TBDingStatisticByCustomMapper.xml
  13. 6 0
      sop-business/src/main/resources/mapper/TBDingStatisticByPersonMapper.xml
  14. 6 0
      sop-business/src/main/resources/mapper/TBDingStatisticBySopMapper.xml
  15. 6 0
      sop-business/src/main/resources/mapper/TBDingStatisticBySupplierMapper.xml

+ 38 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/dto/DingStatisticByCrmDto.java

@@ -6,6 +6,8 @@ import com.alibaba.excel.annotation.write.style.HeadFontStyle;
 import com.alibaba.excel.annotation.write.style.HeadStyle;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.math.BigDecimal;
+
 /**
  * @Description: 工时统计-按派单统计
  * @Author: CaoZixuan
@@ -51,6 +53,18 @@ public class DingStatisticByCrmDto {
     @ApiModelProperty(value = "阅卷周期(天)")
     private Integer markPaperPeriod;
 
+    @ExcelProperty(value = "增加人天(天)")
+    @ApiModelProperty(value = "增加人天(天)")
+    private BigDecimal addDays;
+
+    @ExcelProperty(value = "增加小时(小时)")
+    @ApiModelProperty(value = "增加小时(小时)")
+    private BigDecimal addHours;
+
+    @ExcelProperty(value = "累计人天(天)")
+    @ApiModelProperty(value = "累计人天(天)")
+    private BigDecimal workDays;
+
     @ExcelProperty(value = "累计工时(小时)")
     @ApiModelProperty(value = "累计工时(小时)")
     private Double workHours;
@@ -131,6 +145,30 @@ public class DingStatisticByCrmDto {
         this.markPaperPeriod = markPaperPeriod;
     }
 
+    public BigDecimal getAddDays() {
+        return addDays;
+    }
+
+    public void setAddDays(BigDecimal addDays) {
+        this.addDays = addDays;
+    }
+
+    public BigDecimal getAddHours() {
+        return addHours;
+    }
+
+    public void setAddHours(BigDecimal addHours) {
+        this.addHours = addHours;
+    }
+
+    public BigDecimal getWorkDays() {
+        return workDays;
+    }
+
+    public void setWorkDays(BigDecimal workDays) {
+        this.workDays = workDays;
+    }
+
     public Double getWorkHours() {
         return workHours;
     }

+ 38 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/dto/DingStatisticByCustomDto.java

@@ -6,6 +6,8 @@ import com.alibaba.excel.annotation.write.style.HeadFontStyle;
 import com.alibaba.excel.annotation.write.style.HeadStyle;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.math.BigDecimal;
+
 /**
  * @Description: 工时统计-按客户统计
  * @Author: CaoZixuan
@@ -48,6 +50,18 @@ public class DingStatisticByCustomDto {
     @ApiModelProperty(value = "阅卷周期(天)")
     private Integer markPaperPeriod;
 
+    @ExcelProperty(value = "增加人天(天)")
+    @ApiModelProperty(value = "增加人天(天)")
+    private BigDecimal addDays;
+
+    @ExcelProperty(value = "增加小时(小时)")
+    @ApiModelProperty(value = "增加小时(小时)")
+    private BigDecimal addHours;
+
+    @ExcelProperty(value = "累计人天(天)")
+    @ApiModelProperty(value = "累计人天(天)")
+    private BigDecimal workDays;
+
     @ExcelProperty(value = "累计工时(小时)")
     @ApiModelProperty(value = "累计工时(小时)")
     private Double workHours;
@@ -120,6 +134,30 @@ public class DingStatisticByCustomDto {
         this.markPaperPeriod = markPaperPeriod;
     }
 
+    public BigDecimal getAddDays() {
+        return addDays;
+    }
+
+    public void setAddDays(BigDecimal addDays) {
+        this.addDays = addDays;
+    }
+
+    public BigDecimal getAddHours() {
+        return addHours;
+    }
+
+    public void setAddHours(BigDecimal addHours) {
+        this.addHours = addHours;
+    }
+
+    public BigDecimal getWorkDays() {
+        return workDays;
+    }
+
+    public void setWorkDays(BigDecimal workDays) {
+        this.workDays = workDays;
+    }
+
     public Double getWorkHours() {
         return workHours;
     }

+ 39 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/dto/DingStatisticByPersonDto.java

@@ -6,6 +6,8 @@ import com.alibaba.excel.annotation.write.style.HeadFontStyle;
 import com.alibaba.excel.annotation.write.style.HeadStyle;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.math.BigDecimal;
+
 /**
  * @Description: 工时统计-按人员统计
  * @Author: CaoZixuan
@@ -15,6 +17,7 @@ import io.swagger.annotations.ApiModelProperty;
 @HeadStyle(fillForegroundColor = 11)
 @HeadFontStyle(color = 1)
 public class DingStatisticByPersonDto {
+
     @ExcelProperty(value = "服务单元")
     @ApiModelProperty(value = "服务单元")
     private String serviceName;
@@ -43,6 +46,18 @@ public class DingStatisticByPersonDto {
     @ApiModelProperty(value = "法定节假日(天)")
     private Integer legalHolidays;
 
+    @ExcelProperty(value = "增加人天(天)")
+    @ApiModelProperty(value = "增加人天(天)")
+    private BigDecimal addDays;
+
+    @ExcelProperty(value = "增加小时(小时)")
+    @ApiModelProperty(value = "增加小时(小时)")
+    private BigDecimal addHours;
+
+    @ExcelProperty(value = "累计人天(天)")
+    @ApiModelProperty(value = "累计人天(天)")
+    private BigDecimal workDays;
+
     @ExcelProperty(value = "累计工时(小时)")
     @ApiModelProperty(value = "累计工时(小时)")
     private Double workHours;
@@ -107,6 +122,30 @@ public class DingStatisticByPersonDto {
         this.legalHolidays = legalHolidays;
     }
 
+    public BigDecimal getAddDays() {
+        return addDays;
+    }
+
+    public void setAddDays(BigDecimal addDays) {
+        this.addDays = addDays;
+    }
+
+    public BigDecimal getAddHours() {
+        return addHours;
+    }
+
+    public void setAddHours(BigDecimal addHours) {
+        this.addHours = addHours;
+    }
+
+    public BigDecimal getWorkDays() {
+        return workDays;
+    }
+
+    public void setWorkDays(BigDecimal workDays) {
+        this.workDays = workDays;
+    }
+
     public Double getWorkHours() {
         return workHours;
     }

+ 38 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/dto/DingStatisticBySopDto.java

@@ -6,6 +6,8 @@ import com.alibaba.excel.annotation.write.style.HeadFontStyle;
 import com.alibaba.excel.annotation.write.style.HeadStyle;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.math.BigDecimal;
+
 /**
  * @Description: 工时统计-按sop统计
  * @Author: CaoZixuan
@@ -52,6 +54,18 @@ public class DingStatisticBySopDto {
     @ApiModelProperty(value = "阅卷周期(天)")
     private Integer markPaperPeriod;
 
+    @ExcelProperty(value = "增加人天(天)")
+    @ApiModelProperty(value = "增加人天(天)")
+    private BigDecimal addDays;
+
+    @ExcelProperty(value = "增加小时(小时)")
+    @ApiModelProperty(value = "增加小时(小时)")
+    private BigDecimal addHours;
+
+    @ExcelProperty(value = "累计人天(天)")
+    @ApiModelProperty(value = "累计人天(天)")
+    private BigDecimal workDays;
+
     @ExcelProperty(value = "累计工时(小时)")
     @ApiModelProperty(value = "累计工时(小时)")
     private Double workHours;
@@ -132,6 +146,30 @@ public class DingStatisticBySopDto {
         this.markPaperPeriod = markPaperPeriod;
     }
 
+    public BigDecimal getAddDays() {
+        return addDays;
+    }
+
+    public void setAddDays(BigDecimal addDays) {
+        this.addDays = addDays;
+    }
+
+    public BigDecimal getAddHours() {
+        return addHours;
+    }
+
+    public void setAddHours(BigDecimal addHours) {
+        this.addHours = addHours;
+    }
+
+    public BigDecimal getWorkDays() {
+        return workDays;
+    }
+
+    public void setWorkDays(BigDecimal workDays) {
+        this.workDays = workDays;
+    }
+
     public Double getWorkHours() {
         return workHours;
     }

+ 38 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/dto/DingStatisticBySupplierDto.java

@@ -6,6 +6,8 @@ import com.alibaba.excel.annotation.write.style.HeadFontStyle;
 import com.alibaba.excel.annotation.write.style.HeadStyle;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.math.BigDecimal;
+
 /**
  * @Description: 工时统计-按供应商统计
  * @Author: CaoZixuan
@@ -40,6 +42,18 @@ public class DingStatisticBySupplierDto {
     @ApiModelProperty(value = "法定节假日(天)")
     private Integer legalHolidays;
 
+    @ExcelProperty(value = "增加人天(天)")
+    @ApiModelProperty(value = "增加人天(天)")
+    private BigDecimal addDays;
+
+    @ExcelProperty(value = "增加小时(小时)")
+    @ApiModelProperty(value = "增加小时(小时)")
+    private BigDecimal addHours;
+
+    @ExcelProperty(value = "累计人天(天)")
+    @ApiModelProperty(value = "累计人天(天)")
+    private BigDecimal workDays;
+
     @ExcelProperty(value = "累计工时(小时)")
     @ApiModelProperty(value = "累计工时(小时)")
     private Double workHours;
@@ -96,6 +110,30 @@ public class DingStatisticBySupplierDto {
         this.legalHolidays = legalHolidays;
     }
 
+    public BigDecimal getAddDays() {
+        return addDays;
+    }
+
+    public void setAddDays(BigDecimal addDays) {
+        this.addDays = addDays;
+    }
+
+    public BigDecimal getAddHours() {
+        return addHours;
+    }
+
+    public void setAddHours(BigDecimal addHours) {
+        this.addHours = addHours;
+    }
+
+    public BigDecimal getWorkDays() {
+        return workDays;
+    }
+
+    public void setWorkDays(BigDecimal workDays) {
+        this.workDays = workDays;
+    }
+
     public Double getWorkHours() {
         return workHours;
     }

+ 26 - 1
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingStatisticByCrmServiceImpl.java

@@ -13,6 +13,7 @@ import com.qmth.sop.business.service.TBCrmService;
 import com.qmth.sop.business.service.TBDingStatisticByCrmService;
 import com.qmth.sop.business.service.TBDingStatisticService;
 import com.qmth.sop.common.contant.SystemConstant;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -20,6 +21,7 @@ import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -44,7 +46,7 @@ public class TBDingStatisticByCrmServiceImpl extends ServiceImpl<TBDingStatistic
 
     @Transactional
     @Override
-    public void buildStatisticByCrm(List<TBDingStatistic> datasource, List<TBDingAdd> datasourceAdd) {
+    public void buildStatisticByCrm(List<TBDingStatistic> datasource, List<TBDingAdd> dingAddDatasource) {
         List<TBDingStatisticByCrm> result = new ArrayList<>();
 
         datasource = datasource.stream()
@@ -58,10 +60,14 @@ public class TBDingStatisticByCrmServiceImpl extends ServiceImpl<TBDingStatistic
                     new QueryWrapper<TBCrmDetail>().lambda().eq(TBCrmDetail::getCrmNo, crmNo));
             int scanPeriod = 0;
             int markPaperPeriod = 0;
+            List<String> sopNoList = new ArrayList<>();
             for (TBCrmDetail tbCrmDetail : tbCrmDetailList) {
                 SopPeriodDto sopPeriodDto = tbDingStatisticService.findSopPeriod(tbCrmDetail);
                 scanPeriod = scanPeriod + sopPeriodDto.getScanPeriod();
                 markPaperPeriod = markPaperPeriod + sopPeriodDto.getMarkPaperPeriod();
+                if (Objects.nonNull(tbCrmDetail.getSopNo())) {
+                    sopNoList.add(tbCrmDetail.getSopNo());
+                }
             }
 
             List<TBDingStatistic> tbDingStatisticList = datasource.stream().filter(e -> crmNo.equals(e.getCrmNo())).collect(Collectors.toList());
@@ -72,6 +78,8 @@ public class TBDingStatisticByCrmServiceImpl extends ServiceImpl<TBDingStatistic
             int weekends = 0;
             int legalHolidays = 0;
             BigDecimal workHours = new BigDecimal(0);
+            BigDecimal addDays = new BigDecimal(0);
+            BigDecimal addHours = new BigDecimal(0);
             int violationDays = 0;
 
             for (TBDingStatistic tbDingStatistic : tbDingStatisticList) {
@@ -93,10 +101,27 @@ public class TBDingStatisticByCrmServiceImpl extends ServiceImpl<TBDingStatistic
             tbDingStatisticByCrm.setWeekdays(weekdays);
             tbDingStatisticByCrm.setWeekends(weekends);
             tbDingStatisticByCrm.setLegalHolidays(legalHolidays);
+            tbDingStatisticByCrm.setWorkDays(BigDecimal.valueOf(actualDays));
             tbDingStatisticByCrm.setWorkHours(workHours);
             tbDingStatisticByCrm.setViolationDays(violationDays);
             tbDingStatisticByCrm.setScanPeriod(scanPeriod);
             tbDingStatisticByCrm.setMarkPaperPeriod(markPaperPeriod);
+            tbDingStatisticByCrm.setAddDays(addDays);
+            tbDingStatisticByCrm.setAddHours(addHours);
+
+            // 处理工时追加数据
+            List<TBDingAdd> dingAddList = dingAddDatasource.stream().filter(e -> sopNoList.contains(e.getSopNo())).collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(dingAddList)) {
+                for (TBDingAdd tbDingAdd : dingAddList) {
+                    addDays = addDays.add(tbDingAdd.getAddDays());
+                    addHours = addHours.add(tbDingAdd.getAddHours());
+                }
+                tbDingStatisticByCrm.setAddDays(addDays);
+                tbDingStatisticByCrm.setAddHours(addHours);
+                tbDingStatisticByCrm.setWorkDays(tbDingStatisticByCrm.getWorkDays().add(addDays));
+                tbDingStatisticByCrm.setWorkHours(workHours.add(addHours));
+            }
+
             result.add(tbDingStatisticByCrm);
         }
         this.baseMapper.truncateTable();

+ 36 - 9
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingStatisticByCustomServiceImpl.java

@@ -6,16 +6,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.sop.business.bean.dto.DingStatisticByCustomDto;
 import com.qmth.sop.business.bean.dto.SopPeriodDto;
-import com.qmth.sop.business.entity.TBCrmDetail;
-import com.qmth.sop.business.entity.TBDingAdd;
-import com.qmth.sop.business.entity.TBDingStatistic;
-import com.qmth.sop.business.entity.TBDingStatisticByCustom;
+import com.qmth.sop.business.entity.*;
 import com.qmth.sop.business.mapper.TBDingStatisticByCustomMapper;
-import com.qmth.sop.business.service.SysCustomService;
-import com.qmth.sop.business.service.TBCrmDetailService;
-import com.qmth.sop.business.service.TBDingStatisticByCustomService;
-import com.qmth.sop.business.service.TBDingStatisticService;
+import com.qmth.sop.business.service.*;
 import com.qmth.sop.common.contant.SystemConstant;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -45,9 +40,12 @@ public class TBDingStatisticByCustomServiceImpl extends ServiceImpl<TBDingStatis
     @Resource
     SysCustomService sysCustomService;
 
+    @Resource
+    TBCrmService tbCrmService;
+
     @Transactional
     @Override
-    public void buildStatisticByCustom(List<TBDingStatistic> datasource, List<TBDingAdd> datasourceAdd) {
+    public void buildStatisticByCustom(List<TBDingStatistic> datasource, List<TBDingAdd> dingAddDatasource) {
         List<TBDingStatisticByCustom> result = new ArrayList<>();
         datasource = datasource.stream().filter(e -> SystemConstant.strNotNull(e.getSopNo())).collect(Collectors.toList());
         List<Long> serviceIdList = datasource.stream().map(TBDingStatistic::getServiceId).distinct().collect(Collectors.toList());
@@ -73,6 +71,8 @@ public class TBDingStatisticByCustomServiceImpl extends ServiceImpl<TBDingStatis
                 int weekends = 0;
                 int legalHolidays = 0;
                 BigDecimal workHours = new BigDecimal(0);
+                BigDecimal addDays = new BigDecimal(0);
+                BigDecimal addHours = new BigDecimal(0);
                 int violationDays = 0;
 
                 for (TBDingStatistic tbDingStatistic : tbDingStatisticList) {
@@ -94,9 +94,25 @@ public class TBDingStatisticByCustomServiceImpl extends ServiceImpl<TBDingStatis
                 tbDingStatisticByCustom.setWeekends(weekends);
                 tbDingStatisticByCustom.setLegalHolidays(legalHolidays);
                 tbDingStatisticByCustom.setWorkHours(workHours);
+                tbDingStatisticByCustom.setWorkDays(BigDecimal.valueOf(actualDays));
                 tbDingStatisticByCustom.setViolationDays(violationDays);
                 tbDingStatisticByCustom.setScanPeriod(scanPeriod);
                 tbDingStatisticByCustom.setMarkPaperPeriod(markPaperPeriod);
+
+                // 处理追加工时
+                List<String> sopNoList = this.findSopNoListByServiceIdAndCustomId(serviceId, customId);
+                if (CollectionUtils.isNotEmpty(sopNoList)) {
+                    List<TBDingAdd> dingAddList = dingAddDatasource.stream().filter(e -> sopNoList.contains(e.getSopNo())).collect(Collectors.toList());
+                    if (CollectionUtils.isNotEmpty(dingAddList)) {
+                        for (TBDingAdd tbDingAdd : dingAddList) {
+                            addDays = addDays.add(tbDingAdd.getAddDays());
+                            addHours = addHours.add(tbDingAdd.getAddHours());
+                        }
+                        tbDingStatisticByCustom.setAddDays(addDays);
+                        tbDingStatisticByCustom.setAddHours(addHours);
+                        tbDingStatisticByCustom.setWorkDays(tbDingStatisticByCustom.getWorkDays().add(addDays));
+                    }
+                }
                 result.add(tbDingStatisticByCustom);
             }
         }
@@ -114,4 +130,15 @@ public class TBDingStatisticByCustomServiceImpl extends ServiceImpl<TBDingStatis
     public List<DingStatisticByCustomDto> findStatisticByCustomList(Long serviceId) {
         return this.baseMapper.findStatisticByCustomList(serviceId);
     }
+
+    private List<String> findSopNoListByServiceIdAndCustomId(Long serviceId, Long customId) {
+        List<String> result = new ArrayList<>();
+        List<String> crmNoList = tbCrmService.list(
+                new QueryWrapper<TBCrm>().lambda().eq(TBCrm::getServiceId, serviceId).eq(TBCrm::getCustomId, customId)).stream().map(TBCrm::getCrmNo).distinct().collect(Collectors.toList());
+        if (CollectionUtils.isNotEmpty(crmNoList)) {
+            result = tbCrmDetailService.list(
+                    new QueryWrapper<TBCrmDetail>().lambda().in(TBCrmDetail::getCrmNo, crmNoList)).stream().map(TBCrmDetail::getSopNo).distinct().collect(Collectors.toList());
+        }
+        return result;
+    }
 }

+ 7 - 2
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingStatisticByPersonServiceImpl.java

@@ -46,6 +46,7 @@ public class TBDingStatisticByPersonServiceImpl extends ServiceImpl<TBDingStatis
                 int weekends = 0;
                 int legalHolidays = 0;
                 BigDecimal workHours = new BigDecimal(0);
+                BigDecimal workDays;
                 int violationDays = 0;
 
                 for (TBDingStatistic tbDingStatistic : tbDingStatisticList) {
@@ -57,6 +58,7 @@ public class TBDingStatisticByPersonServiceImpl extends ServiceImpl<TBDingStatis
                     workHours = workHours.add(tbDingStatistic.getWorkHours());
                     violationDays = violationDays + tbDingStatistic.getViolationDays();
                 }
+                workDays = BigDecimal.valueOf(actualDays);
                 TBDingStatisticByPerson tbDingStatisticByPerson = new TBDingStatisticByPerson();
                 tbDingStatisticByPerson.setServiceId(serviceId);
                 tbDingStatisticByPerson.setServiceName(serviceName);
@@ -67,7 +69,7 @@ public class TBDingStatisticByPersonServiceImpl extends ServiceImpl<TBDingStatis
                 tbDingStatisticByPerson.setWeekdays(weekdays);
                 tbDingStatisticByPerson.setWeekends(weekends);
                 tbDingStatisticByPerson.setLegalHolidays(legalHolidays);
-                tbDingStatisticByPerson.setWorkHours(workHours);
+
                 tbDingStatisticByPerson.setViolationDays(violationDays);
 
                 // 处理工时增加
@@ -77,8 +79,11 @@ public class TBDingStatisticByPersonServiceImpl extends ServiceImpl<TBDingStatis
                     TBDingAdd dingAdd = dingAddList.get(0);
                     tbDingStatisticByPerson.setAddDays(dingAdd.getAddDays());
                     tbDingStatisticByPerson.setAddHours(dingAdd.getAddHours());
+                    workDays = workDays.add(dingAdd.getAddDays());
+                    workHours = workHours.add(dingAdd.getAddHours());
                 }
-
+                tbDingStatisticByPerson.setWorkDays(workDays);
+                tbDingStatisticByPerson.setWorkHours(workHours);
                 result.add(tbDingStatisticByPerson);
             }
         }

+ 18 - 1
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingStatisticBySopServiceImpl.java

@@ -1,6 +1,5 @@
 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.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -15,6 +14,7 @@ import com.qmth.sop.business.service.TBCrmDetailService;
 import com.qmth.sop.business.service.TBDingStatisticBySopService;
 import com.qmth.sop.business.service.TBDingStatisticService;
 import com.qmth.sop.common.contant.SystemConstant;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -60,6 +60,8 @@ public class TBDingStatisticBySopServiceImpl extends ServiceImpl<TBDingStatistic
             int weekends = 0;
             int legalHolidays = 0;
             BigDecimal workHours = new BigDecimal(0);
+            BigDecimal addDays = new BigDecimal(0);
+            BigDecimal addHours = new BigDecimal(0);
             int violationDays = 0;
 
             for (TBDingStatistic tbDingStatistic : tbDingStatisticList) {
@@ -81,10 +83,25 @@ public class TBDingStatisticBySopServiceImpl extends ServiceImpl<TBDingStatistic
             tbDingStatisticBySop.setWeekdays(weekdays);
             tbDingStatisticBySop.setWeekends(weekends);
             tbDingStatisticBySop.setLegalHolidays(legalHolidays);
+            tbDingStatisticBySop.setWorkDays(BigDecimal.valueOf(actualDays));
             tbDingStatisticBySop.setWorkHours(workHours);
             tbDingStatisticBySop.setViolationDays(violationDays);
             tbDingStatisticBySop.setScanPeriod(sopPeriodDto.getScanPeriod());
             tbDingStatisticBySop.setMarkPaperPeriod(sopPeriodDto.getMarkPaperPeriod());
+
+            // 处理追加工时
+            List<TBDingAdd> dingAddList = datasourceAdd.stream().filter(e -> sopNo.equals(e.getSopNo())).collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(dingAddList)) {
+                for (TBDingAdd tbDingAdd : dingAddList) {
+                    addDays = addDays.add(tbDingAdd.getAddDays());
+                    addHours = addHours.add(tbDingAdd.getAddHours());
+                }
+                tbDingStatisticBySop.setAddDays(addDays);
+                tbDingStatisticBySop.setAddHours(addHours);
+                tbDingStatisticBySop.setWorkDays(tbDingStatisticBySop.getWorkDays().add(addDays));
+                tbDingStatisticBySop.setWorkHours(workHours.add(addHours));
+            }
+
             result.add(tbDingStatisticBySop);
         }
         this.baseMapper.truncateTable();

+ 44 - 1
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingStatisticBySupplierServiceImpl.java

@@ -1,5 +1,6 @@
 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.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -7,9 +8,13 @@ import com.qmth.sop.business.bean.dto.DingStatisticBySupplierDto;
 import com.qmth.sop.business.entity.TBDingAdd;
 import com.qmth.sop.business.entity.TBDingStatistic;
 import com.qmth.sop.business.entity.TBDingStatisticBySupplier;
+import com.qmth.sop.business.entity.TBUserArchivesSupplier;
 import com.qmth.sop.business.mapper.TBDingStatisticBySupplierMapper;
 import com.qmth.sop.business.service.SysSupplierService;
+import com.qmth.sop.business.service.SysUserService;
 import com.qmth.sop.business.service.TBDingStatisticBySupplierService;
+import com.qmth.sop.business.service.TBUserArchivesSupplierService;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -18,6 +23,7 @@ import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * <p>
@@ -33,9 +39,15 @@ public class TBDingStatisticBySupplierServiceImpl extends ServiceImpl<TBDingStat
     @Resource
     SysSupplierService sysSupplierService;
 
+    @Resource
+    TBUserArchivesSupplierService tbUserArchivesSupplierService;
+
+    @Resource
+    SysUserService sysUserService;
+
     @Transactional
     @Override
-    public void buildStatisticBySupplier(List<TBDingStatistic> datasource, List<TBDingAdd> datasourceAdd) {
+    public void buildStatisticBySupplier(List<TBDingStatistic> datasource, List<TBDingAdd> dingAddDatasource) {
         List<TBDingStatisticBySupplier> result = new ArrayList<>();
         List<Long> serviceIdList = datasource.stream().map(TBDingStatistic::getServiceId).distinct().collect(Collectors.toList());
         for (Long serviceId : serviceIdList) {
@@ -51,6 +63,8 @@ public class TBDingStatisticBySupplierServiceImpl extends ServiceImpl<TBDingStat
                 int weekends = 0;
                 int legalHolidays = 0;
                 BigDecimal workHours = new BigDecimal(0);
+                BigDecimal addDays = new BigDecimal(0);
+                BigDecimal addHours = new BigDecimal(0);
                 int violationDays = 0;
 
                 for (TBDingStatistic tbDingStatistic : tbDingStatisticList) {
@@ -71,8 +85,24 @@ public class TBDingStatisticBySupplierServiceImpl extends ServiceImpl<TBDingStat
                 tbDingStatisticBySupplier.setWeekdays(weekdays);
                 tbDingStatisticBySupplier.setWeekends(weekends);
                 tbDingStatisticBySupplier.setLegalHolidays(legalHolidays);
+                tbDingStatisticBySupplier.setWorkDays(BigDecimal.valueOf(actualDays));
                 tbDingStatisticBySupplier.setWorkHours(workHours);
                 tbDingStatisticBySupplier.setViolationDays(violationDays);
+
+                // 处理工时追加
+                List<Long> userIdList = this.findUserIdListBySupplierId(supplierId);
+                List<TBDingAdd> dingAddList = dingAddDatasource.stream().filter(e -> serviceId.equals(e.getServiceId()) && userIdList.contains(e.getUserId()))
+                        .collect(Collectors.toList());
+                if (CollectionUtils.isNotEmpty(dingAddList)) {
+                    for (TBDingAdd tbDingAdd : dingAddList) {
+                        addDays = addDays.add(tbDingAdd.getAddDays());
+                        addHours = addHours.add(tbDingAdd.getAddHours());
+                    }
+                    tbDingStatisticBySupplier.setAddDays(addDays);
+                    tbDingStatisticBySupplier.setAddHours(addHours);
+                    tbDingStatisticBySupplier.setWorkDays(tbDingStatisticBySupplier.getWorkDays().add(addDays));
+                    tbDingStatisticBySupplier.setWorkHours(workHours.add(addHours));
+                }
                 result.add(tbDingStatisticBySupplier);
             }
         }
@@ -90,4 +120,17 @@ public class TBDingStatisticBySupplierServiceImpl extends ServiceImpl<TBDingStat
     public List<DingStatisticBySupplierDto> findStatisticBySupplierList(Long serviceId) {
         return this.baseMapper.findStatisticBySupplierList(serviceId);
     }
+
+    /**
+     * 根据供应商查询该供应商所有的用户id
+     *
+     * @param supplierId 供应商id
+     * @return 用户id集合
+     */
+    private List<Long> findUserIdListBySupplierId(Long supplierId) {
+        List<Long> tbUserArchivesIdList = tbUserArchivesSupplierService.list(
+                        new QueryWrapper<TBUserArchivesSupplier>().lambda().eq(TBUserArchivesSupplier::getSupplierId, supplierId)).stream()
+                .map(TBUserArchivesSupplier::getUserArchivesId).distinct().collect(Collectors.toList());
+        return tbUserArchivesIdList.stream().flatMap(e -> Stream.of(sysUserService.findByArchivesId(e).getId())).collect(Collectors.toList());
+    }
 }

+ 6 - 0
sop-business/src/main/resources/mapper/TBDingStatisticByCrmMapper.xml

@@ -16,6 +16,9 @@
             legal_holidays AS legalHolidays,
             scan_period AS scanPeriod,
             mark_paper_period AS markPaperPeriod,
+            add_days AS addDays,
+            add_hours AS addHours,
+            work_days AS workDays,
             work_hours AS workHours,
             violation_days AS violationDays
         FROM
@@ -37,6 +40,9 @@
             legal_holidays AS legalHolidays,
             scan_period AS scanPeriod,
             mark_paper_period AS markPaperPeriod,
+            add_days AS addDays,
+            add_hours AS addHours,
+            work_days AS workDays,
             work_hours AS workHours,
             violation_days AS violationDays
         FROM

+ 6 - 0
sop-business/src/main/resources/mapper/TBDingStatisticByCustomMapper.xml

@@ -16,6 +16,9 @@
             legal_holidays AS legalHolidays,
             scan_period AS scanPeriod,
             mark_paper_period AS markPaperPeriod,
+            add_days AS addDays,
+            add_hours AS addHours,
+            work_days AS workDays,
             work_hours AS workHours,
             violation_days AS violationDays
         FROM
@@ -37,6 +40,9 @@
             legal_holidays AS legalHolidays,
             scan_period AS scanPeriod,
             mark_paper_period AS markPaperPeriod,
+            add_days AS addDays,
+            add_hours AS addHours,
+            work_days AS workDays,
             work_hours AS workHours,
             violation_days AS violationDays
         FROM

+ 6 - 0
sop-business/src/main/resources/mapper/TBDingStatisticByPersonMapper.xml

@@ -15,6 +15,9 @@
             weekdays,
             weekends,
             legal_holidays AS legalHolidays,
+            add_days AS addDays,
+            add_hours AS addHours,
+            work_days AS workDays,
             work_hours AS workHours,
             violation_days AS violationDays
         FROM
@@ -35,6 +38,9 @@
             weekdays,
             weekends,
             legal_holidays as legalHolidays,
+            add_days AS addDays,
+            add_hours AS addHours,
+            work_days AS workDays,
             work_hours as workHours,
             violation_days as violationDays
         FROM

+ 6 - 0
sop-business/src/main/resources/mapper/TBDingStatisticBySopMapper.xml

@@ -16,6 +16,9 @@
             legal_holidays AS legalHolidays,
             scan_period AS scanPeriod,
             mark_paper_period AS markPaperPeriod,
+            add_days AS addDays,
+            add_hours AS addHours,
+            work_days AS workDays,
             work_hours AS workHours,
             violation_days AS violationDays
         FROM
@@ -37,6 +40,9 @@
             legal_holidays AS legalHolidays,
             scan_period AS scanPeriod,
             mark_paper_period AS markPaperPeriod,
+            add_days AS addDays,
+            add_hours AS addHours,
+            work_days AS workDays,
             work_hours AS workHours,
             violation_days AS violationDays
         FROM

+ 6 - 0
sop-business/src/main/resources/mapper/TBDingStatisticBySupplierMapper.xml

@@ -14,6 +14,9 @@
             weekdays,
             weekends,
             legal_holidays AS legalHolidays,
+            add_days AS addDays,
+            add_hours AS addHours,
+            work_days AS workDays,
             work_hours AS workHours,
             violation_days AS violationDays
         FROM
@@ -33,6 +36,9 @@
             weekdays,
             weekends,
             legal_holidays AS legalHolidays,
+            add_days AS addDays,
+            add_hours AS addHours,
+            work_days AS workDays,
             work_hours AS workHours,
             violation_days AS violationDays
         FROM