Просмотр исходного кода

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

wangliang 1 год назад
Родитель
Сommit
d5c5484a41
31 измененных файлов с 815 добавлено и 70 удалено
  1. 65 0
      sop-business/src/main/java/com/qmth/sop/business/bean/dto/AreaDto.java
  2. 72 0
      sop-business/src/main/java/com/qmth/sop/business/bean/params/ServiceRegionParam.java
  3. 92 0
      sop-business/src/main/java/com/qmth/sop/business/bean/result/ServiceRegionResult.java
  4. 100 0
      sop-business/src/main/java/com/qmth/sop/business/entity/SysDingDate.java
  5. 12 0
      sop-business/src/main/java/com/qmth/sop/business/entity/TBDing.java
  6. 2 2
      sop-business/src/main/java/com/qmth/sop/business/entity/TBServiceRegionDetail.java
  7. 23 0
      sop-business/src/main/java/com/qmth/sop/business/mapper/SysDingDateMapper.java
  8. 2 2
      sop-business/src/main/java/com/qmth/sop/business/mapper/TBServiceRegionDetailMapper.java
  9. 21 2
      sop-business/src/main/java/com/qmth/sop/business/mapper/TBServiceRegionMapper.java
  10. 27 0
      sop-business/src/main/java/com/qmth/sop/business/service/SysDingDateService.java
  11. 10 0
      sop-business/src/main/java/com/qmth/sop/business/service/SysUserRoleService.java
  12. 0 16
      sop-business/src/main/java/com/qmth/sop/business/service/TBServiceRegionDeatilService.java
  13. 25 0
      sop-business/src/main/java/com/qmth/sop/business/service/TBServiceRegionDetailService.java
  14. 24 1
      sop-business/src/main/java/com/qmth/sop/business/service/TBServiceRegionService.java
  15. 38 0
      sop-business/src/main/java/com/qmth/sop/business/service/impl/SysDingDateServiceImpl.java
  16. 19 0
      sop-business/src/main/java/com/qmth/sop/business/service/impl/SysUserRoleServiceImpl.java
  17. 0 20
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBServiceRegionDeatilServiceImpl.java
  18. 45 0
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBServiceRegionDetailServiceImpl.java
  19. 83 2
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBServiceRegionServiceImpl.java
  20. 3 11
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBServiceServiceImpl.java
  21. 1 1
      sop-business/src/main/java/com/qmth/sop/business/templete/execute/AsyncSysMessageExportService.java
  22. 5 2
      sop-business/src/main/resources/db/log/caozixuan_update_log.sql
  23. 23 1
      sop-business/src/main/resources/db/log/shudonghui_update_log.sql
  24. 6 0
      sop-business/src/main/resources/mapper/SysDingDateMapper.xml
  25. 1 1
      sop-business/src/main/resources/mapper/TBServiceRegionDeatilMapper.xml
  26. 36 0
      sop-business/src/main/resources/mapper/TBServiceRegionMapper.xml
  27. 27 0
      sop-common/src/main/java/com/qmth/sop/common/enums/DingDateTypeEnum.java
  28. 3 1
      sop-common/src/main/java/com/qmth/sop/common/enums/TaskTypeEnum.java
  29. 1 1
      sop-server/src/main/java/com/qmth/sop/server/api/SysMessageController.java
  30. 47 5
      sop-server/src/main/java/com/qmth/sop/server/api/TBServiceController.java
  31. 2 2
      sop-server/src/main/java/com/qmth/sop/server/api/TBServiceRegionDetailController.java

+ 65 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/dto/AreaDto.java

@@ -0,0 +1,65 @@
+package com.qmth.sop.business.bean.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 区域dto
+ * @Author: CaoZixuan
+ * @Date: 2023-08-09
+ */
+public class AreaDto {
+    @ApiModelProperty(value = "国家")
+    private String country;
+
+    @ApiModelProperty(value = "省份")
+    private String province;
+
+    @ApiModelProperty(value = "城市")
+    private String city;
+
+    @ApiModelProperty(value = "县区")
+    private String area;
+
+    @ApiModelProperty(value = "地址")
+    private String address;
+
+    public String getCountry() {
+        return country;
+    }
+
+    public void setCountry(String country) {
+        this.country = country;
+    }
+
+    public String getProvince() {
+        return province;
+    }
+
+    public void setProvince(String province) {
+        this.province = province;
+    }
+
+    public String getCity() {
+        return city;
+    }
+
+    public void setCity(String city) {
+        this.city = city;
+    }
+
+    public String getArea() {
+        return area;
+    }
+
+    public void setArea(String area) {
+        this.area = area;
+    }
+
+    public String getAddress() {
+        return address;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+}

+ 72 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/params/ServiceRegionParam.java

@@ -0,0 +1,72 @@
+package com.qmth.sop.business.bean.params;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.sop.business.annotation.EditKey;
+import com.qmth.sop.business.bean.dto.AreaDto;
+import io.swagger.annotations.ApiModelProperty;
+import org.hibernate.validator.constraints.Range;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * @Description: 服务区域规划参数
+ * @Author: CaoZixuan
+ * @Date: 2023-08-09
+ */
+public class ServiceRegionParam {
+    @EditKey
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty("服务区域规划id")
+    private Long serviceRegionId;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty("服务单元id")
+    @NotNull(message = "请提供服务单元")
+    @Range(min = 1L, message = "请提供服务单元")
+    private Long serviceUnitId;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty("大区经理id")
+    @NotNull(message = "请提供大区经理")
+    @Range(min = 1L, message = "请提供大区经理")
+    private Long leadId;
+
+    @ApiModelProperty("地区集合")
+    @NotEmpty(message = "请提供区域划分")
+    private List<AreaDto> areaDtoList;
+
+    public Long getServiceRegionId() {
+        return serviceRegionId;
+    }
+
+    public void setServiceRegionId(Long serviceRegionId) {
+        this.serviceRegionId = serviceRegionId;
+    }
+
+    public Long getServiceUnitId() {
+        return serviceUnitId;
+    }
+
+    public void setServiceUnitId(Long serviceUnitId) {
+        this.serviceUnitId = serviceUnitId;
+    }
+
+    public Long getLeadId() {
+        return leadId;
+    }
+
+    public void setLeadId(Long leadId) {
+        this.leadId = leadId;
+    }
+
+    public List<AreaDto> getAreaDtoList() {
+        return areaDtoList;
+    }
+
+    public void setAreaDtoList(List<AreaDto> areaDtoList) {
+        this.areaDtoList = areaDtoList;
+    }
+}

+ 92 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/result/ServiceRegionResult.java

@@ -0,0 +1,92 @@
+package com.qmth.sop.business.bean.result;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 服务区域规划查询结果
+ * @Author: CaoZixuan
+ * @Date: 2023-08-09
+ */
+public class ServiceRegionResult {
+    @ApiModelProperty(value = "服务区域规划id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long serviceRegionId;
+
+    @ApiModelProperty(value = "服务单元id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long serviceUnitId;
+
+    @ApiModelProperty(value = "服务单元名称")
+    private String serviceUnitName;
+
+    @ApiModelProperty(value = "大区经理")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long leadId;
+
+    @ApiModelProperty(value = "大区经理名称")
+    private String leadName;
+
+    @ApiModelProperty(value = "区域规划信息")
+    private String regionInfo;
+
+    @ApiModelProperty(value = "派单共计")
+    private Integer orderCount;
+
+    public Long getServiceRegionId() {
+        return serviceRegionId;
+    }
+
+    public void setServiceRegionId(Long serviceRegionId) {
+        this.serviceRegionId = serviceRegionId;
+    }
+
+    public Long getServiceUnitId() {
+        return serviceUnitId;
+    }
+
+    public void setServiceUnitId(Long serviceUnitId) {
+        this.serviceUnitId = serviceUnitId;
+    }
+
+    public String getServiceUnitName() {
+        return serviceUnitName;
+    }
+
+    public void setServiceUnitName(String serviceUnitName) {
+        this.serviceUnitName = serviceUnitName;
+    }
+
+    public Long getLeadId() {
+        return leadId;
+    }
+
+    public void setLeadId(Long leadId) {
+        this.leadId = leadId;
+    }
+
+    public String getLeadName() {
+        return leadName;
+    }
+
+    public void setLeadName(String leadName) {
+        this.leadName = leadName;
+    }
+
+    public String getRegionInfo() {
+        return regionInfo;
+    }
+
+    public void setRegionInfo(String regionInfo) {
+        this.regionInfo = regionInfo;
+    }
+
+    public Integer getOrderCount() {
+        return orderCount;
+    }
+
+    public void setOrderCount(Integer orderCount) {
+        this.orderCount = orderCount;
+    }
+}

+ 100 - 0
sop-business/src/main/java/com/qmth/sop/business/entity/SysDingDate.java

@@ -0,0 +1,100 @@
+package com.qmth.sop.business.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.sop.common.enums.DingDateTypeEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * 考勤特殊日期 模型.
+ * 
+ * @author: shudonghui
+ * @date: 2023-08-10 13:52:06
+ * @version: 1.0
+ * @email: shudonghui@qmth.com.cn
+ * @Company: www.qmth.com.cn
+ */
+@ApiModel(value = "sys_ding_date对象", description = "考勤特殊日期")
+public class SysDingDate implements Serializable {
+
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "主键")
+	@TableId(value = "id")
+	private Long id;
+
+	private static final long serialVersionUID = 1L;
+  	@ApiModelProperty(value = "年")
+	@JsonSerialize(using = ToStringSerializer.class)
+  	private Long year;
+  	@ApiModelProperty(value = "月")
+	@JsonSerialize(using = ToStringSerializer.class)
+  	private Long month;
+  	@ApiModelProperty(value = "日")
+	@JsonSerialize(using = ToStringSerializer.class)
+  	private Long day;
+	@ApiModelProperty(value = "日期类型:WEEKDAY(工作日),WEEKEND(周末),LEGAL_HOLIDAYS(法定节假日)")
+	private DingDateTypeEnum type;
+
+	/**
+	 * 年
+	 */	
+  	public void setYear(Long year) {
+		this.year = year;
+  	}
+ 	/**
+	 * 年
+	 */	 	
+  	public Long getYear() {
+		return year;
+  	}
+	/**
+	 * 月
+	 */	
+  	public void setMonth(Long month) {
+		this.month = month;
+  	}
+ 	/**
+	 * 月
+	 */	 	
+  	public Long getMonth() {
+		return month;
+  	}
+	/**
+	 * 日
+	 */	
+  	public void setDay(Long day) {
+		this.day = day;
+  	}
+ 	/**
+	 * 日
+	 */	 	
+  	public Long getDay() {
+		return day;
+  	}
+	/**
+	 * 日期类型:WEEKDAY("工作日"),WEEKEND("周末"),LEGAL_HOLIDAYS("法定节假日");
+
+	 */	
+  	public void setType(DingDateTypeEnum type) {
+		this.type = type;
+  	}
+ 	/**
+	 * 日期类型:WEEKDAY("工作日"),WEEKEND("周末"),LEGAL_HOLIDAYS("法定节假日");
+
+	 */	 	
+  	public DingDateTypeEnum getType() {
+		return type;
+  	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+}

+ 12 - 0
sop-business/src/main/java/com/qmth/sop/business/entity/TBDing.java

@@ -3,6 +3,7 @@ package com.qmth.sop.business.entity;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.sop.common.base.BaseEntity;
+import com.qmth.sop.common.enums.DingDateTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -46,6 +47,9 @@ public class TBDing extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "签到日期")
     private String signDate;
 
+    @ApiModelProperty(value = "日期类型:WEEKDAY(工作日),WEEKEND(周末),LEGAL_HOLIDAYS(法定节假日)")
+    private DingDateTypeEnum dateType;
+
     @ApiModelProperty(value = "签到时间")
     private Long signInTime;
 
@@ -189,4 +193,12 @@ public class TBDing extends BaseEntity implements Serializable {
     public void setFaceOutError(Boolean faceOutError) {
         this.faceOutError = faceOutError;
     }
+
+    public DingDateTypeEnum getDateType() {
+        return dateType;
+    }
+
+    public void setDateType(DingDateTypeEnum dateType) {
+        this.dateType = dateType;
+    }
 }

+ 2 - 2
sop-business/src/main/java/com/qmth/sop/business/entity/TBServiceRegionDeatil.java → sop-business/src/main/java/com/qmth/sop/business/entity/TBServiceRegionDetail.java

@@ -15,8 +15,8 @@ import java.io.Serializable;
  * @author wangliang
  * @since 2023-08-01
  */
-@ApiModel(value="TBServiceRegionDeatil对象", description="服务区域规划明细表")
-public class TBServiceRegionDeatil implements Serializable {
+@ApiModel(value="TBServiceRegionDetail对象", description="服务区域规划明细表")
+public class TBServiceRegionDetail implements Serializable {
 
     private static final long serialVersionUID = 1L;
 

+ 23 - 0
sop-business/src/main/java/com/qmth/sop/business/mapper/SysDingDateMapper.java

@@ -0,0 +1,23 @@
+package com.qmth.sop.business.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.qmth.sop.business.entity.SysDingDate;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Param;
+import java.util.Map;
+
+/**
+ * 考勤特殊日期 Mapper 接口.
+ * 
+ * @author: shudonghui
+ * @date: 2023-08-10 13:52:06
+ * @version: 1.0
+ * @email: shudonghui@qmth.com.cn
+ * @Company: www.qmth.com.cn
+ */
+public interface SysDingDateMapper extends BaseMapper<SysDingDate> {
+
+
+
+}

+ 2 - 2
sop-business/src/main/java/com/qmth/sop/business/mapper/TBServiceRegionDeatilMapper.java → sop-business/src/main/java/com/qmth/sop/business/mapper/TBServiceRegionDetailMapper.java

@@ -1,6 +1,6 @@
 package com.qmth.sop.business.mapper;
 
-import com.qmth.sop.business.entity.TBServiceRegionDeatil;
+import com.qmth.sop.business.entity.TBServiceRegionDetail;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 /**
@@ -11,6 +11,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @author wangliang
  * @since 2023-08-01
  */
-public interface TBServiceRegionDeatilMapper extends BaseMapper<TBServiceRegionDeatil> {
+public interface TBServiceRegionDetailMapper extends BaseMapper<TBServiceRegionDetail> {
 
 }

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

@@ -1,7 +1,13 @@
 package com.qmth.sop.business.mapper;
 
-import com.qmth.sop.business.entity.TBServiceRegion;
 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.result.ServiceRegionResult;
+import com.qmth.sop.business.bean.result.SysLogResult;
+import com.qmth.sop.business.entity.TBServiceRegion;
+import com.qmth.sop.common.enums.ServiceStatusEnum;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -12,5 +18,18 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @since 2023-08-01
  */
 public interface TBServiceRegionMapper extends BaseMapper<TBServiceRegion> {
-
+    /**
+     * 服务区域规划分页查询
+     *
+     * @param iPage         分页参数
+     * @param serviceUnitId 服务单元id
+     * @param leadId        大区经理id
+     * @param city          区域城市
+     * @return 分页查询结果
+     */
+    IPage<ServiceRegionResult> findServiceRegionPage(@Param("iPage") Page<SysLogResult> iPage,
+                                                     @Param("serviceUnitId") Long serviceUnitId,
+                                                     @Param("leadId") Long leadId,
+                                                     @Param("city") String city,
+                                                     @Param("serviceStatus") ServiceStatusEnum serviceStatus);
 }

+ 27 - 0
sop-business/src/main/java/com/qmth/sop/business/service/SysDingDateService.java

@@ -0,0 +1,27 @@
+package com.qmth.sop.business.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.sop.business.entity.SysDingDate;
+import com.qmth.sop.common.enums.DingDateTypeEnum;
+
+import java.time.LocalDate;
+
+/**
+ * 考勤特殊日期 服务类
+ *
+ * @author: shudonghui
+ * @date: 2023-08-10 13:52:06
+ * @version: 1.0
+ * @email: shudonghui@qmth.com.cn
+ * @Company: www.qmth.com.cn
+ */
+public interface SysDingDateService extends IService<SysDingDate>{
+
+
+    /**
+     * 是否为工作日,周末,法定节假日
+     */
+    DingDateTypeEnum getDingDateType(LocalDate date);
+
+
+}

+ 10 - 0
sop-business/src/main/java/com/qmth/sop/business/service/SysUserRoleService.java

@@ -5,6 +5,7 @@ import com.qmth.sop.business.bean.result.MenuResult;
 import com.qmth.sop.business.entity.SysRole;
 import com.qmth.sop.business.entity.SysUser;
 import com.qmth.sop.business.entity.SysUserRole;
+import com.qmth.sop.common.enums.RoleTypeEnum;
 
 import java.util.List;
 
@@ -33,6 +34,15 @@ public interface SysUserRoleService extends IService<SysUserRole> {
      */
     List<SysRole> listRoleByUserId(Long userId);
 
+    /**
+     * 用户是否包含某些类型的角色
+     *
+     * @param userId    用户
+     * @param roleTypes 角色类型枚举
+     * @return true:是 false:否
+     */
+    boolean userContainsRoles(Long userId, RoleTypeEnum... roleTypes);
+
     /**
      * 新增用户权限
      *

+ 0 - 16
sop-business/src/main/java/com/qmth/sop/business/service/TBServiceRegionDeatilService.java

@@ -1,16 +0,0 @@
-package com.qmth.sop.business.service;
-
-import com.qmth.sop.business.entity.TBServiceRegionDeatil;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-/**
- * <p>
- * 服务区域规划明细表 服务类
- * </p>
- *
- * @author wangliang
- * @since 2023-08-01
- */
-public interface TBServiceRegionDeatilService extends IService<TBServiceRegionDeatil> {
-
-}

+ 25 - 0
sop-business/src/main/java/com/qmth/sop/business/service/TBServiceRegionDetailService.java

@@ -0,0 +1,25 @@
+package com.qmth.sop.business.service;
+
+import com.qmth.sop.business.bean.dto.AreaDto;
+import com.qmth.sop.business.entity.TBServiceRegionDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 服务区域规划明细表 服务类
+ * </p>
+ *
+ * @author wangliang
+ * @since 2023-08-01
+ */
+public interface TBServiceRegionDetailService extends IService<TBServiceRegionDetail> {
+    /**
+     * 绑定服务单元的区域规划详情
+     *
+     * @param serviceRegionId 服务单元规划
+     * @param areaDtoList     区域信息
+     */
+    void bindServiceRegionAreas(Long serviceRegionId, List<AreaDto> areaDtoList);
+}

+ 24 - 1
sop-business/src/main/java/com/qmth/sop/business/service/TBServiceRegionService.java

@@ -1,7 +1,11 @@
 package com.qmth.sop.business.service;
 
-import com.qmth.sop.business.entity.TBServiceRegion;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.sop.business.bean.params.ServiceRegionParam;
+import com.qmth.sop.business.bean.result.ServiceRegionResult;
+import com.qmth.sop.business.bean.result.ServiceUnitResult;
+import com.qmth.sop.business.entity.TBServiceRegion;
 
 /**
  * <p>
@@ -13,4 +17,23 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface TBServiceRegionService extends IService<TBServiceRegion> {
 
+    /**
+     * 根据条件分页查询服务区域规划结果
+     *
+     * @param serviceUnitId 服务单元id
+     * @param leadId        领导人id
+     * @param city          城市
+     * @param pageNumber    分页页数
+     * @param pageSize      分页容量
+     * @return 分页查询结果
+     */
+    IPage<ServiceRegionResult> findServiceRegionPage(Long serviceUnitId, Long leadId, String city, Integer pageNumber, Integer pageSize);
+
+    /**
+     * 服务区域规划编辑
+     *
+     * @param serviceRegionParam 服务区域规划参数
+     * @return 服务区域规划id
+     */
+    Long editServiceRegion(ServiceRegionParam serviceRegionParam);
 }

+ 38 - 0
sop-business/src/main/java/com/qmth/sop/business/service/impl/SysDingDateServiceImpl.java

@@ -0,0 +1,38 @@
+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.entity.SysDingDate;
+import com.qmth.sop.business.mapper.SysDingDateMapper;
+import com.qmth.sop.business.service.SysDingDateService;
+import com.qmth.sop.common.enums.DingDateTypeEnum;
+import org.springframework.stereotype.Service;
+
+import java.time.DayOfWeek;
+import java.time.LocalDate;
+
+/**
+ * 考勤特殊日期 服务实现.
+ *
+ * @author: shudonghui
+ * @date: 2023-08-10 13:52:06
+ * @version: 1.0
+ * @email: shudonghui@qmth.com.cn
+ * @Company: www.qmth.com.cn
+ */
+@Service
+public class SysDingDateServiceImpl extends ServiceImpl<SysDingDateMapper, SysDingDate> implements SysDingDateService {
+
+
+    @Override
+    public DingDateTypeEnum getDingDateType(LocalDate date) {
+        SysDingDate sysDingDate = this.getOne(new QueryWrapper<SysDingDate>().lambda().eq(SysDingDate::getYear, date.getYear()).eq(SysDingDate::getMonth, date.getMonthValue()).eq(SysDingDate::getDay, date.getDayOfMonth()));
+        if (sysDingDate != null) {
+            return sysDingDate.getType();
+        } else if (date.getDayOfWeek() != DayOfWeek.SATURDAY && date.getDayOfWeek() != DayOfWeek.SUNDAY) {
+            return DingDateTypeEnum.WEEKDAY;
+        } else {
+            return DingDateTypeEnum.WEEKEND;
+        }
+    }
+}

+ 19 - 0
sop-business/src/main/java/com/qmth/sop/business/service/impl/SysUserRoleServiceImpl.java

@@ -8,13 +8,18 @@ import com.qmth.sop.business.entity.SysUser;
 import com.qmth.sop.business.entity.SysUserRole;
 import com.qmth.sop.business.mapper.SysUserRoleMapper;
 import com.qmth.sop.business.service.SysUserRoleService;
+import com.qmth.sop.common.enums.ExceptionResultEnum;
+import com.qmth.sop.common.enums.RoleTypeEnum;
 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.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -46,6 +51,20 @@ public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUs
         return this.baseMapper.listRoleByUserId(userId);
     }
 
+    @Override
+    public boolean userContainsRoles(Long userId, RoleTypeEnum... roleTypes) {
+        boolean result = false;
+        List<SysRole> sysRoleList = this.listRoleByUserId(userId);
+        if (CollectionUtils.isNotEmpty(sysRoleList)) {
+            List<RoleTypeEnum> targetRoleTypeList = Arrays.stream(roleTypes).collect(Collectors.toList());
+            List<RoleTypeEnum> userRoleTypeList = sysRoleList.stream().map(SysRole::getType).collect(Collectors.toList());
+            if (userRoleTypeList.containsAll(targetRoleTypeList)) {
+                result = true;
+            }
+        }
+        return result;
+    }
+
     /**
      * 新增用户权限
      *

+ 0 - 20
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBServiceRegionDeatilServiceImpl.java

@@ -1,20 +0,0 @@
-package com.qmth.sop.business.service.impl;
-
-import com.qmth.sop.business.entity.TBServiceRegionDeatil;
-import com.qmth.sop.business.mapper.TBServiceRegionDeatilMapper;
-import com.qmth.sop.business.service.TBServiceRegionDeatilService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
-
-/**
- * <p>
- * 服务区域规划明细表 服务实现类
- * </p>
- *
- * @author wangliang
- * @since 2023-08-01
- */
-@Service
-public class TBServiceRegionDeatilServiceImpl extends ServiceImpl<TBServiceRegionDeatilMapper, TBServiceRegionDeatil> implements TBServiceRegionDeatilService {
-
-}

+ 45 - 0
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBServiceRegionDetailServiceImpl.java

@@ -0,0 +1,45 @@
+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.dto.AreaDto;
+import com.qmth.sop.business.entity.TBServiceRegionDetail;
+import com.qmth.sop.business.mapper.TBServiceRegionDetailMapper;
+import com.qmth.sop.business.service.TBServiceRegionDetailService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * <p>
+ * 服务区域规划明细表 服务实现类
+ * </p>
+ *
+ * @author wangliang
+ * @since 2023-08-01
+ */
+@Service
+public class TBServiceRegionDetailServiceImpl extends ServiceImpl<TBServiceRegionDetailMapper, TBServiceRegionDetail> implements TBServiceRegionDetailService {
+
+    @Transactional
+    @Override
+    public void bindServiceRegionAreas(Long serviceRegionId, List<AreaDto> areaDtoList) {
+        // 删除之前绑定的区域
+        this.remove(new QueryWrapper<TBServiceRegionDetail>().lambda().eq(TBServiceRegionDetail::getServiceRegionId, serviceRegionId));
+        // 添加新绑定区域
+        List<TBServiceRegionDetail> tbServiceRegionDetailList = areaDtoList.stream().flatMap(e -> {
+            TBServiceRegionDetail detail = new TBServiceRegionDetail();
+            detail.setServiceRegionId(serviceRegionId);
+            detail.setCountry(e.getCountry());
+            detail.setProvince(e.getProvince());
+            detail.setCity(e.getCity());
+            detail.setArea(e.getArea());
+            detail.setAddress(e.getAddress());
+            return Stream.of(detail);
+        }).collect(Collectors.toList());
+        this.saveBatch(tbServiceRegionDetailList);
+    }
+}

+ 83 - 2
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBServiceRegionServiceImpl.java

@@ -1,10 +1,27 @@
 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.AreaDto;
+import com.qmth.sop.business.bean.params.ServiceRegionParam;
+import com.qmth.sop.business.bean.result.ServiceRegionResult;
+import com.qmth.sop.business.entity.SysUser;
+import com.qmth.sop.business.entity.TBService;
 import com.qmth.sop.business.entity.TBServiceRegion;
 import com.qmth.sop.business.mapper.TBServiceRegionMapper;
-import com.qmth.sop.business.service.TBServiceRegionService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.sop.business.service.*;
+import com.qmth.sop.common.contant.SystemConstant;
+import com.qmth.sop.common.enums.ExceptionResultEnum;
+import com.qmth.sop.common.enums.RoleTypeEnum;
+import com.qmth.sop.common.enums.ServiceStatusEnum;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -16,5 +33,69 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class TBServiceRegionServiceImpl extends ServiceImpl<TBServiceRegionMapper, TBServiceRegion> implements TBServiceRegionService {
+    @Resource
+    private TBServiceService tbServiceService;
+    @Resource
+    private SysUserService sysUserService;
+    @Resource
+    private TBServiceRegionDetailService tbServiceRegionDetailService;
+    @Resource
+    private SysUserRoleService sysUserRoleService;
+    @Resource
+    private TBCrmService tbCrmService;
+
+    @Override
+    public IPage<ServiceRegionResult> findServiceRegionPage(Long serviceUnitId, Long leadId, String city, Integer pageNumber, Integer pageSize) {
+        if (city != null && city.length() > 0) {
+            city = SystemConstant.translateSpecificSign(city);
+        }
+        IPage<ServiceRegionResult> page = this.baseMapper.findServiceRegionPage(new Page<>(pageNumber, pageSize), serviceUnitId, leadId, city, ServiceStatusEnum.CANCEL);
+        List<ServiceRegionResult> records = page.getRecords();
+        // 涉及的服务单元id集合
+        List<Long> serviceUnitIdList = records.stream().map(ServiceRegionResult::getServiceUnitId).distinct().collect(Collectors.toList());
+        // TODO: 2023/8/10 和派单关联
+        return page;
+    }
+
+    @Transactional
+    @Override
+    public Long editServiceRegion(ServiceRegionParam serviceRegionParam) {
+        Long serviceRegionId = serviceRegionParam.getServiceRegionId();
+        Long serviceUnitId = serviceRegionParam.getServiceUnitId();
+        Long leadId = serviceRegionParam.getLeadId();
+        List<AreaDto> areaDtoList = serviceRegionParam.getAreaDtoList();
+
+        TBService tbServiceUnit = tbServiceService.getById(serviceUnitId);
+        if (Objects.isNull(tbServiceUnit)) {
+            throw ExceptionResultEnum.ERROR.exception("服务单元不存在");
+        }
+
+        SysUser leader = sysUserService.getById(leadId);
+        if (Objects.isNull(leader)) {
+            throw ExceptionResultEnum.ERROR.exception("大区经理不存在");
+        }
+        if (!sysUserRoleService.userContainsRoles(leadId, RoleTypeEnum.REGION_MANAGER)) {
+            throw ExceptionResultEnum.ERROR.exception("所选用户没有大区经理角色");
+        }
+
+
+        TBServiceRegion tbServiceRegion = new TBServiceRegion();
+        tbServiceRegion.setServiceId(serviceUnitId);
+        tbServiceRegion.setLeadId(leadId);
+
+        // 更新区域规划信息
+        if (Objects.isNull(serviceRegionId)) {
+            // 新增
+            tbServiceRegion.setEnable(true);
+            this.save(tbServiceRegion);
+        } else {
+            // 编辑
+            this.updateById(tbServiceRegion);
+        }
+        serviceRegionId = tbServiceRegion.getId();
 
+        // 更新详细信息
+        tbServiceRegionDetailService.bindServiceRegionAreas(serviceRegionId, areaDtoList);
+        return serviceRegionId;
+    }
 }

+ 3 - 11
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBServiceServiceImpl.java

@@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.sop.business.bean.params.ServiceUnitParam;
 import com.qmth.sop.business.bean.result.ReductionResult;
 import com.qmth.sop.business.bean.result.ServiceUnitResult;
-import com.qmth.sop.business.entity.SysRole;
 import com.qmth.sop.business.entity.SysUser;
 import com.qmth.sop.business.entity.TBService;
 import com.qmth.sop.business.mapper.TBServiceMapper;
@@ -18,14 +17,12 @@ import com.qmth.sop.common.enums.ExceptionResultEnum;
 import com.qmth.sop.common.enums.ProductTypeEnum;
 import com.qmth.sop.common.enums.RoleTypeEnum;
 import com.qmth.sop.common.enums.ServiceStatusEnum;
-import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.util.List;
 import java.util.Objects;
-import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -57,17 +54,12 @@ public class TBServiceServiceImpl extends ServiceImpl<TBServiceMapper, TBService
         Integer regionProjectCount = serviceUnitParam.getRegionProjectCount();
         ReductionResult reduction = this.reduction(regionPeopleCount, regionProjectCount);
 
-
         if (endTime < startTime) {
             throw ExceptionResultEnum.ERROR.exception("服务截止时间不能小于服务开始时间");
         }
-        List<SysRole> sysRoleList = sysUserRoleService.listRoleByUserId(leaderId);
-        if (CollectionUtils.isNotEmpty(sysRoleList)) {
-            if (!sysRoleList.stream().map(SysRole::getType).collect(Collectors.toList()).contains(RoleTypeEnum.BUSSINESS)) {
-                throw ExceptionResultEnum.ERROR.exception("不包含'业务线负责人'角色的用户不能充当服务单元的负责人");
-            }
-        } else {
-            throw ExceptionResultEnum.ERROR.exception("不包含'业务线负责人'角色的用户不能充当服务单元负责人");
+
+        if (!sysUserRoleService.userContainsRoles(leaderId, RoleTypeEnum.BUSSINESS)) {
+            throw ExceptionResultEnum.ERROR.exception("不包含'业务线负责人'角色的用户不能充当服务单元的负责人");
         }
 
         TBService tbService = new TBService();

+ 1 - 1
sop-business/src/main/java/com/qmth/sop/business/templete/execute/AsyncSysMessageExportService.java

@@ -58,7 +58,7 @@ public class AsyncSysMessageExportService extends AsyncExportTaskTemplete {
             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));
 
-            tbTask.setImportFileName(TaskTypeEnum.MESSAGE_IMPORT.getTitle());
+            tbTask.setImportFileName(TaskTypeEnum.MESSAGE_EXPORT.getTitle());
             tbTask.setResultFilePath(basicAttachment.getPath());
             tbTask.setResult(TaskResultEnum.SUCCESS);
         } catch (Exception e) {

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

@@ -1,4 +1,4 @@
--- 2023.8.7 日志管理表字段更改
+-- 2023/08/07 日志管理表字段更改
 ALTER TABLE `sys_log` ADD COLUMN `user_id` bigint(0) NOT NULL COMMENT '用户id' AFTER `id`;
 
 ALTER TABLE `sys_log` ADD COLUMN `user_name` varchar(100) NULL DEFAULT NULL COMMENT '用户名称' AFTER `user_id`;
@@ -9,4 +9,7 @@ ALTER TABLE `sys_log` ADD COLUMN `args` mediumtext NULL COMMENT '请求的参数
 
 ALTER TABLE `sys_log` ADD COLUMN `run_time` bigint(0) NULL DEFAULT NULL COMMENT '请求的响应时间' AFTER `create_time`;
 
-ALTER TABLE `sys_log` ADD COLUMN `run_status` varchar(64) NULL DEFAULT NULL COMMENT '请求的结果' AFTER `run_time`;
+ALTER TABLE `sys_log` ADD COLUMN `run_status` varchar(64) NULL DEFAULT NULL COMMENT '请求的结果' AFTER `run_time`;
+
+-- 2023/08/10 更改表名
+ALTER TABLE t_b_service_region_deatil RENAME TO t_b_service_region_detail;

+ 23 - 1
sop-business/src/main/resources/db/log/shudonghui_update_log.sql

@@ -145,4 +145,26 @@ CREATE TABLE `sys_custom_role` (
                                    `quota` bigint NOT NULL COMMENT '配额',
                                    PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='客户角色配置表';
--------------------------------
+-------------------------------
+---2023.8.10 考勤统计
+CREATE TABLE `sys_ding_date` (
+                                 `id` bigint NOT NULL COMMENT '主键',
+                                 `year` bigint NOT NULL COMMENT '年',
+                                 `month` bigint NOT NULL COMMENT '月',
+                                 `day` bigint NOT NULL COMMENT '日',
+                                 `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '日期类型:WEEKDAY("工作日"),WEEKEND("周末"),LEGAL_HOLIDAYS("法定节假日")',
+                                 PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4 COMMENT='考勤特殊日期';
+INSERT INTO `sys_ding_date` (`id`, `year`, `month`, `day`, `type`) VALUES (1, 2023, 9, 29, 'LEGAL_HOLIDAYS');
+INSERT INTO `sys_ding_date` (`id`, `year`, `month`, `day`, `type`) VALUES (2, 2023, 9, 30, 'LEGAL_HOLIDAYS');
+INSERT INTO `sys_ding_date` (`id`, `year`, `month`, `day`, `type`) VALUES (3, 2023, 10, 1, 'LEGAL_HOLIDAYS');
+INSERT INTO `sys_ding_date` (`id`, `year`, `month`, `day`, `type`) VALUES (4, 2023, 10, 2, 'LEGAL_HOLIDAYS');
+INSERT INTO `sys_ding_date` (`id`, `year`, `month`, `day`, `type`) VALUES (5, 2023, 10, 3, 'LEGAL_HOLIDAYS');
+INSERT INTO `sys_ding_date` (`id`, `year`, `month`, `day`, `type`) VALUES (6, 2023, 10, 4, 'LEGAL_HOLIDAYS');
+INSERT INTO `sys_ding_date` (`id`, `year`, `month`, `day`, `type`) VALUES (7, 2023, 10, 5, 'LEGAL_HOLIDAYS');
+INSERT INTO `sys_ding_date` (`id`, `year`, `month`, `day`, `type`) VALUES (8, 2023, 10, 6, 'LEGAL_HOLIDAYS');
+INSERT INTO `sys_ding_date` (`id`, `year`, `month`, `day`, `type`) VALUES (9, 2023, 10, 7, 'WEEKDAY');
+INSERT INTO `sys_ding_date` (`id`, `year`, `month`, `day`, `type`) VALUES (10, 2023, 10, 8, 'WEEKDAY');
+ALTER TABLE `t_b_ding`
+    ADD COLUMN `date_type` varchar(20) NULL COMMENT '日期类型:WEEKDAY("工作日"),WEEKEND("周末"),LEGAL_HOLIDAYS("法定节假日")' AFTER `sign_date`;
+-------------------------------

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

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!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.SysDingDateMapper">
+
+
+</mapper>

+ 1 - 1
sop-business/src/main/resources/mapper/TBServiceRegionDeatilMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!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.TBServiceRegionDeatilMapper">
+<mapper namespace="com.qmth.sop.business.mapper.TBServiceRegionDetailMapper">
 
 </mapper>

+ 36 - 0
sop-business/src/main/resources/mapper/TBServiceRegionMapper.xml

@@ -2,4 +2,40 @@
 <!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.TBServiceRegionMapper">
 
+    <select id="findServiceRegionPage" resultType="com.qmth.sop.business.bean.result.ServiceRegionResult">
+        SELECT
+            tbsr.id AS serviceRegionId,
+            tbs.id AS serviceUnitId,
+            tbs.name AS serviceUnitName,
+            leader.id AS leadId,
+            leader.real_name AS leadName
+        FROM
+            t_b_service_region tbsr
+                LEFT JOIN
+            t_b_service tbs ON tbsr.service_id = tbs.id
+                LEFT JOIN
+            sys_user leader ON tbsr.lead_id = leader.id
+        <where>
+            AND tbs.enable
+            <if test="serviceUnitId != null">
+                AND tbsr.service_id = #{serviceUnitId}
+            </if>
+            <if test="leadId != null">
+                AND tbsr.lead_id = #{leadId}
+            </if>
+            <if test="city != null and city != ''">
+                AND EXISTS( SELECT
+                    1
+                FROM
+                    t_b_service_region_detail tbsrd
+                WHERE
+                    tbsr.id = tbsrd.service_region_id
+                    AND tbsrd.city LIKE CONCAT('%',#{city},'%'))
+            </if>
+            <if test="serviceStatus != null">
+                AND tbs.status = #{serviceStatus}
+            </if>
+        </where>
+        ORDER BY tbsr.create_time DESC
+    </select>
 </mapper>

+ 27 - 0
sop-common/src/main/java/com/qmth/sop/common/enums/DingDateTypeEnum.java

@@ -0,0 +1,27 @@
+package com.qmth.sop.common.enums;
+
+/**
+ * @Description: 考勤日期类型enum
+ * @Param:
+ * @return:
+ * @Author: dhshu
+ * @Date: 2023/8/10
+ */
+public enum DingDateTypeEnum {
+
+    WEEKDAY("工作日"),
+
+    WEEKEND("周末"),
+
+    LEGAL_HOLIDAYS("法定节假日");
+
+    private String title;
+
+    private DingDateTypeEnum(String title) {
+        this.title = title;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+}

+ 3 - 1
sop-common/src/main/java/com/qmth/sop/common/enums/TaskTypeEnum.java

@@ -17,7 +17,9 @@ public enum TaskTypeEnum {
 
     CUSTOM_IMPORT("客户导入"),
 
-    MESSAGE_IMPORT("回执明细导出");
+    MESSAGE_EXPORT("回执明细导出"),
+
+    DING_COUNT_EXPORT("考勤打卡统计导出");
 
     private String title;
 

+ 1 - 1
sop-server/src/main/java/com/qmth/sop/server/api/SysMessageController.java

@@ -75,7 +75,7 @@ public class SysMessageController {
                          @ApiParam(value = "区域城市", required = false) @RequestParam(required = false) String city,
                          @ApiParam(value = "供应商", required = false) @RequestParam(required = false) Long supplierId,
                          @ApiParam(value = "回执状态", required = false) @RequestParam(required = false) Boolean status) throws Exception {
-        Map<String, Object> map = tbTaskService.saveTask(TaskTypeEnum.MESSAGE_IMPORT);
+        Map<String, Object> map = tbTaskService.saveTask(TaskTypeEnum.MESSAGE_EXPORT);
         map.put("noticeId", noticeId);
         map.put("city", Objects.nonNull(city) ?city: null);
         map.put("supplierId", Objects.nonNull(supplierId) ?supplierId: null);

+ 47 - 5
sop-server/src/main/java/com/qmth/sop/server/api/TBServiceController.java

@@ -2,21 +2,22 @@ package com.qmth.sop.server.api;
 
 
 import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.sop.business.bean.params.ServiceUnitParam;
 import com.qmth.sop.business.bean.result.SysLogResult;
+import com.qmth.sop.business.entity.SysUser;
 import com.qmth.sop.business.service.TBServiceService;
 import com.qmth.sop.common.contant.SystemConstant;
 import com.qmth.sop.common.enums.ProductTypeEnum;
 import com.qmth.sop.common.enums.ServiceStatusEnum;
 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.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.validation.Valid;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 
@@ -50,5 +51,46 @@ public class TBServiceController {
         return ResultUtil.ok(tbServiceService.page(type, SystemConstant.convertIdToLong(serviceLeadId), status, createStartTime, createEndTime, serviceUnitName, pageNumber, pageSize));
     }
 
+    @ApiOperation(value = "服务单元管理-编辑")
+    @RequestMapping(value = "/edit", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "更新成功", response = Result.class)})
+    public Result editServiceUnit(@Valid @RequestBody ServiceUnitParam serviceUnitParam, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        return ResultUtil.ok(tbServiceService.edit(serviceUnitParam, requestUser));
+    }
 
+    @ApiOperation(value = "服务单元管理-作废")
+    @RequestMapping(value = "/cancel", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "作废成功", response = Result.class)})
+    public Result cancelServiceUnit(@ApiParam(value = "服务单元id", required = true) @RequestParam String id) {
+        tbServiceService.cancelServiceUnit(SystemConstant.convertIdToLong(id));
+        return ResultUtil.ok();
+    }
+
+    @ApiOperation(value = "服务单元管理-发布")
+    @RequestMapping(value = "/publish", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "发布成功", response = Result.class)})
+    public Result publishServiceUnit(@ApiParam(value = "服务单元id", required = true) @RequestParam String id) {
+        tbServiceService.publishServiceUnit(SystemConstant.convertIdToLong(id));
+        return ResultUtil.ok();
+    }
+
+    @ApiOperation(value = "服务单元管理-关闭")
+    @RequestMapping(value = "/cloze", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "作废成功", response = Result.class)})
+    public Result clozeServiceUnit(@ApiParam(value = "服务单元id", required = true) @RequestParam String id) {
+        tbServiceService.clozeServiceUnit(SystemConstant.convertIdToLong(id));
+        return ResultUtil.ok();
+    }
+
+    @ApiOperation(value = "服务单元管理-重启")
+    @RequestMapping(value = "/restart", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "重启成功", response = Result.class)})
+    public Result restartServiceUnit(@ApiParam(value = "服务单元id", required = true) @RequestParam String id) {
+        tbServiceService.restartServiceUnit(SystemConstant.convertIdToLong(id));
+        return ResultUtil.ok();
+    }
 }

+ 2 - 2
sop-server/src/main/java/com/qmth/sop/server/api/TBServiceRegionDeatilController.java → sop-server/src/main/java/com/qmth/sop/server/api/TBServiceRegionDetailController.java

@@ -14,7 +14,7 @@ import org.springframework.web.bind.annotation.RestController;
  * @since 2023-08-01
  */
 @RestController
-@RequestMapping("/t-bservice-region-deatil")
-public class TBServiceRegionDeatilController {
+@RequestMapping("/t-bservice-region-detail")
+public class TBServiceRegionDetailController {
 
 }