Pārlūkot izejas kodu

add. 工时增加

caozixuan 7 mēneši atpakaļ
vecāks
revīzija
ca8b3bae82
24 mainītis faili ar 514 papildinājumiem un 48 dzēšanām
  1. 53 0
      sop-api/src/main/java/com/qmth/sop/server/api/TBDingAddController.java
  2. 78 0
      sop-business/src/main/java/com/qmth/sop/business/bean/params/DingAddParam.java
  3. 34 0
      sop-business/src/main/java/com/qmth/sop/business/bean/result/CanChooseSopResult.java
  4. 33 0
      sop-business/src/main/java/com/qmth/sop/business/entity/TBDingStatisticByCrm.java
  5. 33 0
      sop-business/src/main/java/com/qmth/sop/business/entity/TBDingStatisticByCustom.java
  6. 33 0
      sop-business/src/main/java/com/qmth/sop/business/entity/TBDingStatisticByPerson.java
  7. 33 0
      sop-business/src/main/java/com/qmth/sop/business/entity/TBDingStatisticBySop.java
  8. 33 0
      sop-business/src/main/java/com/qmth/sop/business/entity/TBDingStatisticBySupplier.java
  9. 17 0
      sop-business/src/main/java/com/qmth/sop/business/service/TBDingAddService.java
  10. 2 1
      sop-business/src/main/java/com/qmth/sop/business/service/TBDingStatisticByCrmService.java
  11. 2 1
      sop-business/src/main/java/com/qmth/sop/business/service/TBDingStatisticByCustomService.java
  12. 5 1
      sop-business/src/main/java/com/qmth/sop/business/service/TBDingStatisticByPersonService.java
  13. 2 1
      sop-business/src/main/java/com/qmth/sop/business/service/TBDingStatisticBySopService.java
  14. 2 1
      sop-business/src/main/java/com/qmth/sop/business/service/TBDingStatisticBySupplierService.java
  15. 1 10
      sop-business/src/main/java/com/qmth/sop/business/service/TBDingStatisticService.java
  16. 86 1
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingAddServiceImpl.java
  17. 2 5
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingStatisticByCrmServiceImpl.java
  18. 2 1
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingStatisticByCustomServiceImpl.java
  19. 13 1
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingStatisticByPersonServiceImpl.java
  20. 2 1
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingStatisticBySopServiceImpl.java
  21. 2 1
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingStatisticBySupplierServiceImpl.java
  22. 9 22
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingStatisticServiceImpl.java
  23. 35 1
      sop-business/src/main/resources/db/log/caozixuan_update_log.sql
  24. 2 0
      sop-common/src/main/java/com/qmth/sop/common/contant/SystemConstant.java

+ 53 - 0
sop-api/src/main/java/com/qmth/sop/server/api/TBDingAddController.java

@@ -0,0 +1,53 @@
+package com.qmth.sop.server.api;
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.sop.business.bean.params.DingAddParam;
+import com.qmth.sop.business.bean.result.CanChooseSopResult;
+import com.qmth.sop.business.entity.SysUser;
+import com.qmth.sop.business.service.TBDingAddService;
+import com.qmth.sop.common.annotation.OperationLog;
+import com.qmth.sop.common.contant.SystemConstant;
+import com.qmth.sop.common.enums.LogTypeEnum;
+import com.qmth.sop.common.util.Result;
+import com.qmth.sop.common.util.ResultUtil;
+import com.qmth.sop.common.util.ServletUtil;
+import io.swagger.annotations.*;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+/**
+ * @Description: 工时增加Controller
+ * @Author: CaoZixuan
+ * @Date: 2024-11-05
+ */
+@Api(tags = "工时增加Controller")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_DING_ADD)
+public class TBDingAddController {
+
+    @Resource
+    private TBDingAddService tbDingAddService;
+
+    @ApiOperation(value = "增加工时-查询可选sop")
+    @RequestMapping(value = "/find_sop_list", method = RequestMethod.POST)
+    @ApiResponses({ @ApiResponse(code = 200, message = "返回信息", response = CanChooseSopResult.class) })
+    public Result findSopList(@ApiParam(value = "服务单元id", required = true) @RequestParam Long serviceId) {
+        return ResultUtil.ok(tbDingAddService.findCanChooseSopResultList(serviceId));
+    }
+
+    @ApiOperation(value = "增加工时-提交")
+    @RequestMapping(value = "/submit", method = RequestMethod.POST)
+    @ApiResponses({ @ApiResponse(code = 200, message = "更新成功", response = Result.class) })
+    @OperationLog(logType = LogTypeEnum.ADD)
+    public Result submit(@Valid @RequestBody DingAddParam dingAddParam, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        tbDingAddService.dingAddSubmit(dingAddParam, requestUser.getId());
+        return ResultUtil.ok();
+    }
+}

+ 78 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/params/DingAddParam.java

@@ -0,0 +1,78 @@
+package com.qmth.sop.business.bean.params;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+import org.hibernate.validator.constraints.Range;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+/**
+ * @Description: 工时增加参数
+ * @Author: CaoZixuan
+ * @Date: 2024-11-05
+ */
+public class DingAddParam {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty("被添加人")
+    @NotNull(message = "缺少被添加人")
+    @Range(min = 1L, message = "缺少被添加人")
+    private Long userId;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty("服务单元id")
+    @NotNull(message = "缺少服务单元id")
+    @Range(min = 1L, message = "缺少服务单元id")
+    private Long serviceId;
+
+    @ApiModelProperty("sop编号")
+    private String sopNo;
+
+    @ApiModelProperty(value = "追加人天(天)")
+    private BigDecimal addDays;
+
+    @ApiModelProperty(value = "追加小时(小时)")
+    private BigDecimal addHours;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public Long getServiceId() {
+        return serviceId;
+    }
+
+    public void setServiceId(Long serviceId) {
+        this.serviceId = serviceId;
+    }
+
+    public String getSopNo() {
+        return sopNo;
+    }
+
+    public void setSopNo(String sopNo) {
+        this.sopNo = sopNo;
+    }
+
+    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;
+    }
+}

+ 34 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/result/CanChooseSopResult.java

@@ -0,0 +1,34 @@
+package com.qmth.sop.business.bean.result;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+
+/**
+ * @Description: 可以选择的sop集合
+ * @Author: CaoZixuan
+ * @Date: 2024-11-05
+ */
+public class CanChooseSopResult {
+    @ApiModelProperty("sopNo集合")
+    private List<String> sopNoList;
+
+    @ApiModelProperty("是否需要选择(区协不用选择sopNo)")
+    private Boolean needChoose;
+
+    public List<String> getSopNoList() {
+        return sopNoList;
+    }
+
+    public void setSopNoList(List<String> sopNoList) {
+        this.sopNoList = sopNoList;
+    }
+
+    public Boolean getNeedChoose() {
+        return needChoose;
+    }
+
+    public void setNeedChoose(Boolean needChoose) {
+        this.needChoose = needChoose;
+    }
+}

+ 33 - 0
sop-business/src/main/java/com/qmth/sop/business/entity/TBDingStatisticByCrm.java

@@ -52,6 +52,15 @@ public class TBDingStatisticByCrm extends BaseEntity {
     @ApiModelProperty(value = "阅卷周期(天)")
     private Integer markPaperPeriod;
 
+    @ApiModelProperty(value = "增加人天(天)")
+    private BigDecimal addDays;
+
+    @ApiModelProperty(value = "增加小时(小时)")
+    private BigDecimal addHours;
+
+    @ApiModelProperty(value = "累计人天(天)")
+    private BigDecimal workDays;
+
     @ApiModelProperty(value = "累计工时(小时)")
     private BigDecimal workHours;
 
@@ -138,6 +147,30 @@ public class TBDingStatisticByCrm extends BaseEntity {
         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 BigDecimal getWorkHours() {
         return workHours;
     }

+ 33 - 0
sop-business/src/main/java/com/qmth/sop/business/entity/TBDingStatisticByCustom.java

@@ -53,6 +53,15 @@ public class TBDingStatisticByCustom extends BaseEntity {
     @ApiModelProperty(value = "阅卷周期(天)")
     private Integer markPaperPeriod;
 
+    @ApiModelProperty(value = "增加人天(天)")
+    private BigDecimal addDays;
+
+    @ApiModelProperty(value = "增加小时(小时)")
+    private BigDecimal addHours;
+
+    @ApiModelProperty(value = "累计人天(天)")
+    private BigDecimal workDays;
+
     @ApiModelProperty(value = "累计工时(小时)")
     private BigDecimal workHours;
 
@@ -139,6 +148,30 @@ public class TBDingStatisticByCustom extends BaseEntity {
         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 BigDecimal getWorkHours() {
         return workHours;
     }

+ 33 - 0
sop-business/src/main/java/com/qmth/sop/business/entity/TBDingStatisticByPerson.java

@@ -46,6 +46,15 @@ public class TBDingStatisticByPerson extends BaseEntity {
     @ApiModelProperty(value = "法定节假日(天)")
     private Integer legalHolidays;
 
+    @ApiModelProperty(value = "增加人天(天)")
+    private BigDecimal addDays;
+
+    @ApiModelProperty(value = "增加小时(小时)")
+    private BigDecimal addHours;
+
+    @ApiModelProperty(value = "累计人天(天)")
+    private BigDecimal workDays;
+
     @ApiModelProperty(value = "累计工时(小时)")
     private BigDecimal workHours;
 
@@ -116,6 +125,30 @@ public class TBDingStatisticByPerson extends BaseEntity {
         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 BigDecimal getWorkHours() {
         return workHours;
     }

+ 33 - 0
sop-business/src/main/java/com/qmth/sop/business/entity/TBDingStatisticBySop.java

@@ -52,6 +52,15 @@ public class TBDingStatisticBySop extends BaseEntity {
     @ApiModelProperty(value = "阅卷周期(天)")
     private Integer markPaperPeriod;
 
+    @ApiModelProperty(value = "增加人天(天)")
+    private BigDecimal addDays;
+
+    @ApiModelProperty(value = "增加小时(小时)")
+    private BigDecimal addHours;
+
+    @ApiModelProperty(value = "累计人天(天)")
+    private BigDecimal workDays;
+
     @ApiModelProperty(value = "累计工时(小时)")
     private BigDecimal workHours;
 
@@ -138,6 +147,30 @@ public class TBDingStatisticBySop extends BaseEntity {
         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 BigDecimal getWorkHours() {
         return workHours;
     }

+ 33 - 0
sop-business/src/main/java/com/qmth/sop/business/entity/TBDingStatisticBySupplier.java

@@ -47,6 +47,15 @@ public class TBDingStatisticBySupplier extends BaseEntity {
     @ApiModelProperty(value = "法定节假日(天)")
     private Integer legalHolidays;
 
+    @ApiModelProperty(value = "增加人天(天)")
+    private BigDecimal addDays;
+
+    @ApiModelProperty(value = "增加小时(小时)")
+    private BigDecimal addHours;
+
+    @ApiModelProperty(value = "累计人天(天)")
+    private BigDecimal workDays;
+
     @ApiModelProperty(value = "累计工时(小时)")
     private BigDecimal workHours;
 
@@ -117,6 +126,30 @@ public class TBDingStatisticBySupplier extends BaseEntity {
         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 BigDecimal getWorkHours() {
         return workHours;
     }

+ 17 - 0
sop-business/src/main/java/com/qmth/sop/business/service/TBDingAddService.java

@@ -1,5 +1,7 @@
 package com.qmth.sop.business.service;
 
+import com.qmth.sop.business.bean.params.DingAddParam;
+import com.qmth.sop.business.bean.result.CanChooseSopResult;
 import com.qmth.sop.business.entity.TBDingAdd;
 import com.baomidou.mybatisplus.extension.service.IService;
 
@@ -13,4 +15,19 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface TBDingAddService extends IService<TBDingAdd> {
 
+    /**
+     * 查询可选的sop列表
+     *
+     * @param serviceId 服务单元id
+     * @return 可选sop列表
+     */
+    CanChooseSopResult findCanChooseSopResultList(Long serviceId);
+
+    /**
+     * 工时增加提交
+     *
+     * @param dingAddParam  工时增加参数
+     * @param requestUserId 请求用户id
+     */
+    void dingAddSubmit(DingAddParam dingAddParam, Long requestUserId);
 }

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

@@ -2,6 +2,7 @@ package com.qmth.sop.business.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.qmth.sop.business.bean.dto.DingStatisticByCrmDto;
+import com.qmth.sop.business.entity.TBDingAdd;
 import com.qmth.sop.business.entity.TBDingStatistic;
 import com.qmth.sop.business.entity.TBDingStatisticByCrm;
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -23,7 +24,7 @@ public interface TBDingStatisticByCrmService extends IService<TBDingStatisticByC
      *
      * @param datasource 数据源
      */
-    void buildStatisticByCrm(List<TBDingStatistic> datasource);
+    void buildStatisticByCrm(List<TBDingStatistic> datasource, List<TBDingAdd> dingAddDatasource);
 
     /**
      * 按派单统计(不统计区协数据)

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

@@ -3,6 +3,7 @@ package com.qmth.sop.business.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.sop.business.bean.dto.DingStatisticByCustomDto;
+import com.qmth.sop.business.entity.TBDingAdd;
 import com.qmth.sop.business.entity.TBDingStatistic;
 import com.qmth.sop.business.entity.TBDingStatisticByCustom;
 
@@ -23,7 +24,7 @@ public interface TBDingStatisticByCustomService extends IService<TBDingStatistic
      *
      * @param datasource 数据源
      */
-    void buildStatisticByCustom(List<TBDingStatistic> datasource);
+    void buildStatisticByCustom(List<TBDingStatistic> datasource, List<TBDingAdd> dingAddDatasource);
 
     /**
      * 按客户统计(不统计区协数据)

+ 5 - 1
sop-business/src/main/java/com/qmth/sop/business/service/TBDingStatisticByPersonService.java

@@ -3,6 +3,7 @@ package com.qmth.sop.business.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.sop.business.bean.dto.DingStatisticByPersonDto;
+import com.qmth.sop.business.entity.TBDingAdd;
 import com.qmth.sop.business.entity.TBDingStatistic;
 import com.qmth.sop.business.entity.TBDingStatisticByPerson;
 
@@ -20,8 +21,11 @@ public interface TBDingStatisticByPersonService extends IService<TBDingStatistic
 
     /**
      * 按人员统计(统计区协数据)
+     *
+     * @param datasource    考勤统计数据
+     * @param dingAddDatasource 工时增加数据
      */
-    void buildStatisticByPerson(List<TBDingStatistic> datasource);
+    void buildStatisticByPerson(List<TBDingStatistic> datasource, List<TBDingAdd> dingAddDatasource);
 
     /**
      * 按人员统计(统计区协数据)

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

@@ -2,6 +2,7 @@ package com.qmth.sop.business.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.qmth.sop.business.bean.dto.DingStatisticBySopDto;
+import com.qmth.sop.business.entity.TBDingAdd;
 import com.qmth.sop.business.entity.TBDingStatistic;
 import com.qmth.sop.business.entity.TBDingStatisticBySop;
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -23,7 +24,7 @@ public interface TBDingStatisticBySopService extends IService<TBDingStatisticByS
      *
      * @param datasource 数据源
      */
-    void buildStatisticBySop(List<TBDingStatistic> datasource);
+    void buildStatisticBySop(List<TBDingStatistic> datasource, List<TBDingAdd> dingAddDatasource);
 
     /**
      * 按Sop统计(不统计区协数据)

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

@@ -3,6 +3,7 @@ package com.qmth.sop.business.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 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;
 
@@ -23,7 +24,7 @@ public interface TBDingStatisticBySupplierService extends IService<TBDingStatist
      *
      * @param datasource 数据源
      */
-    void buildStatisticBySupplier(List<TBDingStatistic> datasource);
+    void buildStatisticBySupplier(List<TBDingStatistic> datasource, List<TBDingAdd> dingAddDatasource);
 
     /**
      * 按供应商统计(统计区协数据)

+ 1 - 10
sop-business/src/main/java/com/qmth/sop/business/service/TBDingStatisticService.java

@@ -1,7 +1,7 @@
 package com.qmth.sop.business.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.qmth.sop.business.bean.dto.*;
+import com.qmth.sop.business.bean.dto.SopPeriodDto;
 import com.qmth.sop.business.entity.TBCrmDetail;
 import com.qmth.sop.business.entity.TBDing;
 import com.qmth.sop.business.entity.TBDingStatistic;
@@ -30,15 +30,6 @@ public interface TBDingStatisticService extends IService<TBDingStatistic> {
      */
     TBDingStatistic findBySopNoAndUserArchivesId(Long serviceId, String sopNo, Long userArchivesId);
 
-    /**
-     * 构建考勤统计 (sop计划时间变更 -> 更新打卡统计时间)
-     *
-     * @param sopNo          sopNo
-     * @param userArchivesId 用户档案id
-     */
-    @Deprecated
-    void buildDingStatistic(String sopNo, Long userArchivesId);
-
     /**
      * 构建考勤统计 (sop计划时间变更 -> 更新打卡统计时间)
      *

+ 86 - 1
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingAddServiceImpl.java

@@ -1,10 +1,30 @@
 package com.qmth.sop.business.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.sop.business.bean.params.DingAddParam;
+import com.qmth.sop.business.bean.result.CanChooseSopResult;
+import com.qmth.sop.business.entity.SysUser;
+import com.qmth.sop.business.entity.TBCrmDetail;
 import com.qmth.sop.business.entity.TBDingAdd;
+import com.qmth.sop.business.entity.TBUserArchivesAllocation;
 import com.qmth.sop.business.mapper.TBDingAddMapper;
+import com.qmth.sop.business.service.TBCrmDetailService;
 import com.qmth.sop.business.service.TBDingAddService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.sop.business.service.TBUserArchivesAllocationService;
+import com.qmth.sop.business.service.TBUserArchivesService;
+import com.qmth.sop.common.enums.ExceptionResultEnum;
+import com.qmth.sop.common.enums.SopRoleTypeEnum;
+import com.qmth.sop.common.util.ServletUtil;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -17,4 +37,69 @@ import org.springframework.stereotype.Service;
 @Service
 public class TBDingAddServiceImpl extends ServiceImpl<TBDingAddMapper, TBDingAdd> implements TBDingAddService {
 
+    @Resource
+    private TBUserArchivesService tbUserArchivesService;
+
+    @Resource
+    private TBUserArchivesAllocationService tbUserArchivesAllocationService;
+
+    @Resource
+    private TBCrmDetailService tbCrmDetailService;
+
+    @Override
+    public CanChooseSopResult findCanChooseSopResultList(Long serviceId) {
+        CanChooseSopResult result = new CanChooseSopResult();
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        boolean containsRegionCoordinator = tbUserArchivesService.containsRegionCoordinator(requestUser.getId());
+        if (containsRegionCoordinator) {
+            result.setNeedChoose(false);
+        } else {
+            result.setNeedChoose(true);
+            List<Long> crmDetailIdList = tbUserArchivesAllocationService.list(
+                            new QueryWrapper<TBUserArchivesAllocation>().lambda().select(TBUserArchivesAllocation::getCrmDetailId)
+                                    .eq(TBUserArchivesAllocation::getServiceId, serviceId)
+                                    .eq(TBUserArchivesAllocation::getUserId, requestUser.getId()).ne(TBUserArchivesAllocation::getSopRoleType, SopRoleTypeEnum.REGION_COORDINATOR)).stream()
+                    .map(TBUserArchivesAllocation::getCrmDetailId).distinct().collect(Collectors.toList());
+
+            if (CollectionUtils.isNotEmpty(crmDetailIdList)) {
+                List<String> sopNoList = tbCrmDetailService.listByIds(crmDetailIdList).stream().map(TBCrmDetail::getSopNo).distinct().collect(Collectors.toList());
+                if (CollectionUtils.isNotEmpty(sopNoList)) {
+                    result.setSopNoList(sopNoList);
+                }
+            }
+        }
+        return result;
+    }
+
+    @Transactional
+    @Override
+    public void dingAddSubmit(DingAddParam dingAddParam, Long requestUserId) {
+        Long userId = dingAddParam.getUserId();
+        Long serviceId = dingAddParam.getServiceId();
+        String sopNo = dingAddParam.getSopNo();
+        BigDecimal addDays = dingAddParam.getAddDays();
+        BigDecimal addHours = dingAddParam.getAddHours();
+        if ((Objects.isNull(addDays) && Objects.isNull(addHours)) || (Objects.nonNull(addDays) && Objects.nonNull(
+                addHours))) {
+            throw ExceptionResultEnum.ERROR.exception("追加天数和追加小时数必填且只能选填一个");
+        }
+
+        boolean isCoordinator = tbUserArchivesService.containsRegionCoordinator(userId);
+        if (!isCoordinator && Objects.isNull(sopNo)) {
+            throw ExceptionResultEnum.ERROR.exception("非区域协调员必须选择SOP");
+        }
+
+        TBDingAdd dingAdd = new TBDingAdd();
+        dingAdd.setServiceId(serviceId);
+        dingAdd.setUserId(userId);
+        if (Objects.nonNull(sopNo)) {
+            dingAdd.setSopNo(sopNo);
+        }
+        dingAdd.setAddDays(addDays);
+        dingAdd.setAddHours(addHours);
+        dingAdd.insertInfo(requestUserId);
+
+        this.remove(new QueryWrapper<TBDingAdd>().lambda().eq(TBDingAdd::getServiceId, serviceId).eq(TBDingAdd::getUserId, userId));
+        this.save(dingAdd);
+    }
 }

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

@@ -6,10 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.sop.business.bean.dto.DingStatisticByCrmDto;
 import com.qmth.sop.business.bean.dto.SopPeriodDto;
-import com.qmth.sop.business.entity.TBCrm;
-import com.qmth.sop.business.entity.TBCrmDetail;
-import com.qmth.sop.business.entity.TBDingStatistic;
-import com.qmth.sop.business.entity.TBDingStatisticByCrm;
+import com.qmth.sop.business.entity.*;
 import com.qmth.sop.business.mapper.TBDingStatisticByCrmMapper;
 import com.qmth.sop.business.service.TBCrmDetailService;
 import com.qmth.sop.business.service.TBCrmService;
@@ -47,7 +44,7 @@ public class TBDingStatisticByCrmServiceImpl extends ServiceImpl<TBDingStatistic
 
     @Transactional
     @Override
-    public void buildStatisticByCrm(List<TBDingStatistic> datasource) {
+    public void buildStatisticByCrm(List<TBDingStatistic> datasource, List<TBDingAdd> datasourceAdd) {
         List<TBDingStatisticByCrm> result = new ArrayList<>();
 
         datasource = datasource.stream()

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

@@ -7,6 +7,7 @@ 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.mapper.TBDingStatisticByCustomMapper;
@@ -46,7 +47,7 @@ public class TBDingStatisticByCustomServiceImpl extends ServiceImpl<TBDingStatis
 
     @Transactional
     @Override
-    public void buildStatisticByCustom(List<TBDingStatistic> datasource) {
+    public void buildStatisticByCustom(List<TBDingStatistic> datasource, List<TBDingAdd> datasourceAdd) {
         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());

+ 13 - 1
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingStatisticByPersonServiceImpl.java

@@ -4,10 +4,12 @@ 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.DingStatisticByPersonDto;
+import com.qmth.sop.business.entity.TBDingAdd;
 import com.qmth.sop.business.entity.TBDingStatistic;
 import com.qmth.sop.business.entity.TBDingStatisticByPerson;
 import com.qmth.sop.business.mapper.TBDingStatisticByPersonMapper;
 import com.qmth.sop.business.service.TBDingStatisticByPersonService;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -29,7 +31,7 @@ public class TBDingStatisticByPersonServiceImpl extends ServiceImpl<TBDingStatis
 
     @Transactional
     @Override
-    public void buildStatisticByPerson(List<TBDingStatistic> datasource) {
+    public void buildStatisticByPerson(List<TBDingStatistic> datasource, List<TBDingAdd> dingAddDatasource) {
         List<TBDingStatisticByPerson> result = new ArrayList<>();
         List<Long> serviceIdList = datasource.stream().map(TBDingStatistic::getServiceId).distinct().collect(Collectors.toList());
         for (Long serviceId : serviceIdList) {
@@ -67,6 +69,16 @@ public class TBDingStatisticByPersonServiceImpl extends ServiceImpl<TBDingStatis
                 tbDingStatisticByPerson.setLegalHolidays(legalHolidays);
                 tbDingStatisticByPerson.setWorkHours(workHours);
                 tbDingStatisticByPerson.setViolationDays(violationDays);
+
+                // 处理工时增加
+                List<TBDingAdd> dingAddList = dingAddDatasource.stream().filter(e -> serviceId.equals(e.getServiceId()) && userId.equals(e.getUserId())).limit(1)
+                        .collect(Collectors.toList());
+                if (CollectionUtils.isNotEmpty(dingAddList)) {
+                    TBDingAdd dingAdd = dingAddList.get(0);
+                    tbDingStatisticByPerson.setAddDays(dingAdd.getAddDays());
+                    tbDingStatisticByPerson.setAddHours(dingAdd.getAddHours());
+                }
+
                 result.add(tbDingStatisticByPerson);
             }
         }

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

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.sop.business.bean.dto.DingStatisticBySopDto;
 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.TBDingStatisticBySop;
 import com.qmth.sop.business.mapper.TBDingStatisticBySopMapper;
@@ -42,7 +43,7 @@ public class TBDingStatisticBySopServiceImpl extends ServiceImpl<TBDingStatistic
 
     @Transactional
     @Override
-    public void buildStatisticBySop(List<TBDingStatistic> datasource) {
+    public void buildStatisticBySop(List<TBDingStatistic> datasource, List<TBDingAdd> datasourceAdd) {
         List<TBDingStatisticBySop> result = new ArrayList<>();
         datasource = datasource.stream().filter(e -> SystemConstant.strNotNull(e.getSopNo())).collect(Collectors.toList());
         List<String> sopNoList = datasource.stream().map(TBDingStatistic::getSopNo).distinct().collect(Collectors.toList());

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

@@ -4,6 +4,7 @@ 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.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.mapper.TBDingStatisticBySupplierMapper;
@@ -34,7 +35,7 @@ public class TBDingStatisticBySupplierServiceImpl extends ServiceImpl<TBDingStat
 
     @Transactional
     @Override
-    public void buildStatisticBySupplier(List<TBDingStatistic> datasource) {
+    public void buildStatisticBySupplier(List<TBDingStatistic> datasource, List<TBDingAdd> datasourceAdd) {
         List<TBDingStatisticBySupplier> result = new ArrayList<>();
         List<Long> serviceIdList = datasource.stream().map(TBDingStatistic::getServiceId).distinct().collect(Collectors.toList());
         for (Long serviceId : serviceIdList) {

+ 9 - 22
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingStatisticServiceImpl.java

@@ -84,6 +84,9 @@ public class TBDingStatisticServiceImpl extends ServiceImpl<TBDingStatisticMappe
     @Resource
     private TBDingStatisticBySupplierService tbdingStatisticBySupplierService;
 
+    @Resource
+    private TBDingAddService tbDingAddService;
+
     @Override
     public TBDingStatistic findBySopNoAndUserArchivesId(Long serviceId, String sopNo, Long userArchivesId) {
         QueryWrapper<TBDingStatistic> queryWrapper = new QueryWrapper<>();
@@ -96,23 +99,6 @@ public class TBDingStatisticServiceImpl extends ServiceImpl<TBDingStatisticMappe
         return this.getOne(queryWrapper);
     }
 
-    @Override
-    public void buildDingStatistic(String sopNo, Long userArchivesId) {
-        Long currentEarliestTime = DateDisposeUtils.getEarliestTime(System.currentTimeMillis());
-        List<TBDing> datasource = tbDingService.list(new QueryWrapper<TBDing>().lambda().eq(TBDing::getSopNo, sopNo).eq(TBDing::getUserArchivesId, userArchivesId)).stream().filter(e -> {
-            if (Objects.nonNull(e.getSignInTime()) && Objects.nonNull(e.getSignOutTime())) {
-                return e.getSignInTime() < currentEarliestTime && e.getSignOutTime() < currentEarliestTime;
-            } else if (Objects.isNull(e.getSignInTime())) {
-                return e.getSignOutTime() < currentEarliestTime;
-            } else if (Objects.isNull(e.getSignOutTime())) {
-                return e.getSignInTime() < currentEarliestTime;
-            } else {
-                return true;
-            }
-        }).collect(Collectors.toList());
-        this.buildDingStatisticBySop(sopNo, datasource, -1L);
-    }
-
     @Transactional
     @Override
     public void buildDingStatistic(String sopNo) {
@@ -428,11 +414,12 @@ public class TBDingStatisticServiceImpl extends ServiceImpl<TBDingStatisticMappe
     @Override
     public void buildStatisticData() {
         List<TBDingStatistic> datasource = this.list();
-        tbdingStatisticByPersonService.buildStatisticByPerson(datasource);
-        tbdingStatisticBySopService.buildStatisticBySop(datasource);
-        tbdingStatisticByCrmService.buildStatisticByCrm(datasource);
-        tbdingStatisticByCustomService.buildStatisticByCustom(datasource);
-        tbdingStatisticBySupplierService.buildStatisticBySupplier(datasource);
+        List<TBDingAdd> dingAddDatasource = tbDingAddService.list();
+        tbdingStatisticByPersonService.buildStatisticByPerson(datasource, dingAddDatasource);
+        tbdingStatisticBySopService.buildStatisticBySop(datasource, dingAddDatasource);
+        tbdingStatisticByCrmService.buildStatisticByCrm(datasource, dingAddDatasource);
+        tbdingStatisticByCustomService.buildStatisticByCustom(datasource, dingAddDatasource);
+        tbdingStatisticBySupplierService.buildStatisticBySupplier(datasource, dingAddDatasource);
     }
 
     @Override

+ 35 - 1
sop-business/src/main/resources/db/log/caozixuan_update_log.sql

@@ -19,4 +19,38 @@ CREATE TABLE `t_b_ding_add` (
 )  ENGINE=INNODB DEFAULT CHARSET=UTF8MB4 COMMENT='工时追加表';
 
 ALTER TABLE t_b_ding_apply
-    ADD COLUMN apply_custom_id BIGINT NULL COMMENT '区协补卡选择的客户id' AFTER reason;
+    ADD COLUMN apply_custom_id BIGINT NULL COMMENT '区协补卡选择的客户id' AFTER reason;
+
+-- 2024-11-05
+ALTER TABLE t_b_ding_add
+    ADD UNIQUE INDEX ding_add_unique (service_id ASC, user_id ASC);
+
+ALTER TABLE t_b_ding_statistic_by_crm
+    ADD COLUMN add_days DECIMAL(8,2) NULL COMMENT '增加人天(天1)' AFTER mark_paper_period,
+    ADD COLUMN add_hours DECIMAL(8,2) NULL COMMENT '增加小时(小时)' AFTER add_days,
+    ADD COLUMN work_days DECIMAL(8,2) NULL COMMENT '累计人天(天)' AFTER add_hours,
+    CHANGE COLUMN work_hours work_hours DECIMAL(8,2) NULL COMMENT '累计工时(小时)' ;
+
+ALTER TABLE t_b_ding_statistic_by_custom
+    ADD COLUMN add_days DECIMAL(8,2) NULL COMMENT '增加人天(天1)' AFTER mark_paper_period,
+    ADD COLUMN add_hours DECIMAL(8,2) NULL COMMENT '增加小时(小时)' AFTER add_days,
+    ADD COLUMN work_days DECIMAL(8,2) NULL COMMENT '累计人天(天)' AFTER add_hours,
+    CHANGE COLUMN work_hours work_hours DECIMAL(8,2) NULL COMMENT '累计工时(小时)' ;
+
+ALTER TABLE t_b_ding_statistic_by_person
+    ADD COLUMN add_days DECIMAL(8,2) NULL COMMENT '增加人天(天1)' AFTER legal_holidays,
+    ADD COLUMN add_hours DECIMAL(8,2) NULL COMMENT '增加小时(小时)' AFTER add_days,
+    ADD COLUMN work_days DECIMAL(8,2) NULL COMMENT '累计人天(天)' AFTER add_hours,
+    CHANGE COLUMN work_hours work_hours DECIMAL(8,2) NULL COMMENT '累计工时(小时)' ;
+
+ALTER TABLE t_b_ding_statistic_by_sop
+    ADD COLUMN add_days DECIMAL(8,2) NULL COMMENT '增加人天(天1)' AFTER legal_holidays,
+    ADD COLUMN add_hours DECIMAL(8,2) NULL COMMENT '增加小时(小时)' AFTER add_days,
+    ADD COLUMN work_days DECIMAL(8,2) NULL COMMENT '累计人天(天)' AFTER add_hours,
+    CHANGE COLUMN work_hours work_hours DECIMAL(8,2) NULL COMMENT '累计工时(小时)' ;
+
+ALTER TABLE t_b_ding_statistic_by_supplier
+    ADD COLUMN add_days DECIMAL(8,2) NULL COMMENT '增加人天(天1)' AFTER legal_holidays,
+    ADD COLUMN add_hours DECIMAL(8,2) NULL COMMENT '增加小时(小时)' AFTER add_days,
+    ADD COLUMN work_days DECIMAL(8,2) NULL COMMENT '累计人天(天)' AFTER add_hours,
+    CHANGE COLUMN work_hours work_hours DECIMAL(8,2) NULL COMMENT '累计工时(小时)' ;

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

@@ -415,6 +415,8 @@ public class SystemConstant {
 
     public static final String PREFIX_URL_DING_STATISTIC = "/admin/tb/ding/statistic";
 
+    public static final String PREFIX_URL_DING_ADD = "/admin/tb/ding/add";
+
     public static final String PREFIX_URL_QUALITY_PROBLEM_APPLY = "/admin/tb/quality/problem/apply";
 
     public static final String PREFIX_URL_CRM = "/admin/tb/crm";