Bläddra i källkod

1、后台给每个销售单独设定一个发送延时时间
2、销售可以通过移动端、管理后台自动设置自己的插件发送延时时间
3、后台增加延时管理模块
4、员工管理增加批量绑定延时时间并且进行数据返还
5、删除员工时删除延时时间数据

yfh 1 dag sedan
förälder
incheckning
6a9679acd1

+ 28 - 9
fs-company/src/main/java/com/fs/company/controller/company/CompanyUserController.java

@@ -1,5 +1,7 @@
 package com.fs.company.controller.company;
 
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.json.JSONUtil;
 import com.fs.common.annotation.Log;
 import com.fs.common.constant.UserConstants;
 import com.fs.common.core.controller.BaseController;
@@ -11,23 +13,20 @@ import com.fs.common.utils.PatternUtils;
 import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.poi.ExcelUtil;
-import com.fs.company.domain.Company;
-import com.fs.company.domain.CompanyPost;
-import com.fs.company.domain.CompanyRole;
-import com.fs.company.domain.CompanyUser;
+import com.fs.company.domain.*;
+import com.fs.company.mapper.CompanyUserDelayTimeMapper;
 import com.fs.company.param.CompanyUserAreaParam;
 import com.fs.company.param.CompanyUserQwParam;
-import com.fs.company.service.ICompanyPostService;
-import com.fs.company.service.ICompanyRoleService;
-import com.fs.company.service.ICompanyService;
-import com.fs.company.service.ICompanyUserService;
+import com.fs.company.service.*;
 import com.fs.company.vo.CompanyUserQwListVO;
 import com.fs.company.vo.CompanyUserVO;
+import com.fs.course.config.CourseConfig;
 import com.fs.framework.security.LoginUser;
 import com.fs.framework.security.SecurityUtils;
 import com.fs.framework.service.TokenService;
 import com.fs.qw.vo.CompanyUserQwVO;
 import com.fs.qw.vo.QwUserVO;
+import com.fs.system.service.ISysConfigService;
 import com.fs.voice.utils.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -63,7 +62,10 @@ public class CompanyUserController extends BaseController
     private ICompanyUserService companyUserService;
     @Autowired
     private ICompanyService companyService;
-
+    @Autowired
+    private ICompanyUserDelayTimeService companyUserDelayTimeService;
+    @Autowired
+    private ISysConfigService configService;
     /**
      * 获取用户列表
      */
@@ -101,6 +103,16 @@ public class CompanyUserController extends BaseController
         user.setCompanyId(loginUser.getCompany().getCompanyId());
         startPage();
         List<CompanyUserQwListVO> list = companyUserService.selectCompanyUserQwListVO(user);
+        for (CompanyUserQwListVO companyUserQwListVO : list) {
+             CompanyUserDelayTime companyUserDelayTime = companyUserDelayTimeService.selectCompanyUserDelayTimeByCompanyUser(companyUserQwListVO.getCompanyId(),companyUserQwListVO.getUserId());
+            if (ObjectUtil.isEmpty(companyUserDelayTime)){
+                String json = configService.selectConfigByKey("course.config");
+                CourseConfig config = JSONUtil.toBean(json, CourseConfig.class);
+                companyUserQwListVO.setSendDelayTime(config.getSendDelayTime());
+            }else {
+                companyUserQwListVO.setSendDelayTime(companyUserDelayTime.getSendDelayTime());
+            }
+        }
         return getDataTable(list);
     }
     @Log(title = "用户管理", businessType = BusinessType.EXPORT)
@@ -221,6 +233,13 @@ public class CompanyUserController extends BaseController
     @DeleteMapping("/{userIds}")
     public AjaxResult remove(@PathVariable Long[] userIds)
     {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        for (Long userId : userIds) {
+            CompanyUserDelayTime companyUserDelayTime = companyUserDelayTimeService.selectCompanyUserDelayTimeByCompanyUser(loginUser.getUser().getCompanyId(),userId);
+            if (ObjectUtil.isNotEmpty(companyUserDelayTime)){
+                companyUserDelayTimeService.deleteCompanyUserDelayTimeById(companyUserDelayTime.getId());
+            }
+        }
         return toAjax(companyUserService.deleteCompanyUserByIds(userIds));
     }
 

+ 211 - 0
fs-company/src/main/java/com/fs/company/controller/company/CompanyUserDelayTimeController.java

@@ -0,0 +1,211 @@
+package com.fs.company.controller.company;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.fs.common.core.domain.R;
+import com.fs.common.exception.ServiceException;
+import com.fs.common.utils.ServletUtils;
+import com.fs.common.utils.StringUtils;
+import com.fs.company.domain.CompanyUser;
+import com.fs.company.param.CompanyUserDelayTimeParam;
+import com.fs.company.service.ICompanyUserService;
+import com.fs.framework.security.LoginUser;
+import com.fs.framework.service.TokenService;
+import com.fs.voice.utils.StringUtil;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.enums.BusinessType;
+import com.fs.company.domain.CompanyUserDelayTime;
+import com.fs.company.service.ICompanyUserDelayTimeService;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.common.core.page.TableDataInfo;
+
+/**
+ * 员工发送延时时间关联Controller
+ *
+ * @author fs
+ * @date 2025-06-18
+ */
+@RestController
+@RequestMapping("/company/sendDelayTime")
+public class CompanyUserDelayTimeController extends BaseController
+{
+    @Autowired
+    private ICompanyUserDelayTimeService companyUserDelayTimeService;
+    @Autowired
+    private TokenService tokenService;
+    @Autowired
+    private ICompanyUserService companyUserService;
+
+    /**
+     * 查询员工发送延时时间关联列表
+     */
+    @PreAuthorize("@ss.hasPermi('company:sendDelayTime:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(CompanyUserDelayTime companyUserDelayTime)
+    {
+        startPage();
+        List<CompanyUserDelayTime> list = companyUserDelayTimeService.selectCompanyUserDelayTimeList(companyUserDelayTime);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出员工发送延时时间关联列表
+     */
+    @PreAuthorize("@ss.hasPermi('company:sendDelayTime:export')")
+    @Log(title = "员工发送延时时间关联", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(CompanyUserDelayTime companyUserDelayTime)
+    {
+        List<CompanyUserDelayTime> list = companyUserDelayTimeService.selectCompanyUserDelayTimeList(companyUserDelayTime);
+        ExcelUtil<CompanyUserDelayTime> util = new ExcelUtil<CompanyUserDelayTime>(CompanyUserDelayTime.class);
+        return util.exportExcel(list, "员工发送延时时间关联数据");
+    }
+
+    /**
+     * 获取员工发送延时时间关联详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('company:sendDelayTime:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(companyUserDelayTimeService.selectCompanyUserDelayTimeById(id));
+    }
+
+    /**
+     * 批量绑定发送延时时间关联
+     */
+    @PreAuthorize("@ss.hasPermi('company:sendDelayTime:batchadd')")
+    @Log(title = "员工发送延时时间关联", businessType = BusinessType.INSERT)
+    @PostMapping("/batchAdd")
+    public R batchAdd(@RequestBody CompanyUserDelayTimeParam companyUserDelayTimeParam) {
+        // 参数校验
+        if (companyUserDelayTimeParam == null || StringUtils.isEmpty(companyUserDelayTimeParam.getId())) {
+            return R.error("参数不能为空");
+        }
+
+        // 获取当前登录用户信息
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        if (loginUser == null || loginUser.getCompany() == null) {
+            return R.error("用户未登录或公司信息不存在");
+        }
+
+        // 处理用户ID集合
+        Set<String> companyUserIds = Arrays.stream(companyUserDelayTimeParam.getId().split(","))
+                .filter(StringUtils::isNotBlank)
+                .collect(Collectors.toSet());
+
+        if (companyUserIds.isEmpty()) {
+            return R.error("用户ID不能为空");
+        }
+
+        // 批量处理延迟时间设置
+        try {
+            companyUserIds.forEach(userId -> {
+                CompanyUser companyUser = companyUserService.selectCompanyUserById(Long.valueOf(userId));
+                if (companyUser == null) {
+                    throw new RuntimeException("用户ID不存在: " + userId);
+                }
+
+                CompanyUserDelayTime delayTime = new CompanyUserDelayTime();
+                delayTime.setCompanyId(loginUser.getCompany().getCompanyId());
+                delayTime.setCompanyUserId(Long.valueOf(userId));
+                delayTime.setNickName(companyUser.getNickName());
+                delayTime.setRemark(companyUserDelayTimeParam.getRemark());
+                delayTime.setCreateBy(loginUser.getUser().getNickName());
+                delayTime.setSendDelayTime(Long.valueOf(companyUserDelayTimeParam.getSendDelayTime()));
+
+                CompanyUserDelayTime companyUserDelayTime = companyUserDelayTimeService.selectCompanyUserDelayTimeByCompanyUser(loginUser.getCompany().getCompanyId(),Long.valueOf(userId));
+                if (ObjectUtil.isEmpty(companyUserDelayTime)){
+                    companyUserDelayTimeService.insertCompanyUserDelayTime(delayTime);
+                }else {
+                    delayTime.setId(companyUserDelayTime.getId());
+                    companyUserDelayTimeService.updateCompanyUserDelayTime(delayTime);
+                }
+            });
+            return R.ok();
+        } catch (RuntimeException e) {
+            e.fillInStackTrace();
+            return R.error(e.getMessage());
+        } catch (Exception e) {
+            e.fillInStackTrace();
+            return R.error("批量设置延迟时间失败");
+        }
+    }
+
+
+    /**
+     * 新增员工发送延时时间关联
+     */
+    @PreAuthorize("@ss.hasPermi('company:sendDelayTime:add')")
+    @Log(title = "员工发送延时时间关联", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult add(@RequestBody CompanyUserDelayTime companyUserDelayTime) {
+        // 获取当前登录用户信息
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        Long companyId = loginUser.getCompany().getCompanyId();
+
+        // 设置基本信息
+        companyUserDelayTime.setCompanyId(companyId);
+        companyUserDelayTime.setCreateBy(loginUser.getUser().getNickName());
+
+        // 验证并设置用户信息
+        Long companyUserId = companyUserDelayTime.getCompanyUserId();
+        CompanyUser companyUser = companyUserService.selectCompanyUserById(companyUserId);
+        if (companyUser == null) {
+            throw new ServiceException("员工信息不存在");
+        }
+        companyUserDelayTime.setNickName(companyUser.getNickName());
+
+        // 检查是否已存在延时时间记录
+        CompanyUserDelayTime existingDelayTime = companyUserDelayTimeService
+                .selectCompanyUserDelayTimeByCompanyUser(companyId, companyUser.getUserId());
+        if (existingDelayTime != null) {
+            throw new ServiceException("该员工已经绑定过延时时间信息");
+        }
+
+        // 插入新记录
+        int result = companyUserDelayTimeService.insertCompanyUserDelayTime(companyUserDelayTime);
+        return toAjax(result);
+    }
+
+    /**
+     * 修改员工发送延时时间关联
+     */
+    @PreAuthorize("@ss.hasPermi('company:sendDelayTime:edit')")
+    @Log(title = "员工发送延时时间关联", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody CompanyUserDelayTime companyUserDelayTime)
+    {
+        CompanyUser companyUser = companyUserService.selectCompanyUserById(companyUserDelayTime.getCompanyUserId());
+        companyUserDelayTime.setNickName(companyUser.getNickName());
+        return toAjax(companyUserDelayTimeService.updateCompanyUserDelayTime(companyUserDelayTime));
+    }
+
+    /**
+     * 删除员工发送延时时间关联
+     */
+    @PreAuthorize("@ss.hasPermi('company:sendDelayTime:remove')")
+    @Log(title = "员工发送延时时间关联", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(companyUserDelayTimeService.deleteCompanyUserDelayTimeByIds(ids));
+    }
+}

+ 40 - 0
fs-service/src/main/java/com/fs/company/domain/CompanyUserDelayTime.java

@@ -0,0 +1,40 @@
+package com.fs.company.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+import com.fs.common.core.domain.BaseEntity;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 员工发送延时时间关联对象 company_user_delay_time
+ *
+ * @author fs
+ * @date 2025-06-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class CompanyUserDelayTime extends BaseEntity{
+
+    /** id主键 */
+    private Long id;
+
+    /** 公司id */
+    private Long companyId;
+
+    /** 员工id */
+    private Long companyUserId;
+
+    /** 发送延时时间(单位:秒) */
+    @Excel(name = "发送延时时间(单位:秒)")
+    private Long sendDelayTime;
+
+    /** 员工用户昵称 */
+    @Excel(name = "员工用户昵称")
+    private String nickName;
+
+    /** 删除标志(0代表存在 1代表删除) */
+    private String delFlag;
+
+
+}

+ 72 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyUserDelayTimeMapper.java

@@ -0,0 +1,72 @@
+package com.fs.company.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.company.domain.CompanyUserDelayTime;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 员工发送延时时间关联Mapper接口
+ *
+ * @author fs
+ * @date 2025-06-18
+ */
+public interface CompanyUserDelayTimeMapper extends BaseMapper<CompanyUserDelayTime>{
+    /**
+     * 查询员工发送延时时间关联
+     *
+     * @param id 员工发送延时时间关联主键
+     * @return 员工发送延时时间关联
+     */
+    CompanyUserDelayTime selectCompanyUserDelayTimeById(Long id);
+
+    /**
+     * 查询员工发送延时时间关联列表
+     *
+     * @param companyUserDelayTime 员工发送延时时间关联
+     * @return 员工发送延时时间关联集合
+     */
+    List<CompanyUserDelayTime> selectCompanyUserDelayTimeList(CompanyUserDelayTime companyUserDelayTime);
+
+    /**
+     * 新增员工发送延时时间关联
+     *
+     * @param companyUserDelayTime 员工发送延时时间关联
+     * @return 结果
+     */
+    int insertCompanyUserDelayTime(CompanyUserDelayTime companyUserDelayTime);
+
+    /**
+     * 修改员工发送延时时间关联
+     *
+     * @param companyUserDelayTime 员工发送延时时间关联
+     * @return 结果
+     */
+    int updateCompanyUserDelayTime(CompanyUserDelayTime companyUserDelayTime);
+
+    /**
+     * 删除员工发送延时时间关联
+     *
+     * @param id 员工发送延时时间关联主键
+     * @return 结果
+     */
+    int deleteCompanyUserDelayTimeById(Long id);
+
+    /**
+     * 批量删除员工发送延时时间关联
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    int deleteCompanyUserDelayTimeByIds(Long[] ids);
+
+
+    /**
+     * 通过销售用户id和企业id进行查询数据
+     *
+     * @param companyUserId
+     * @param companyId
+     * @return
+     */
+    CompanyUserDelayTime selectUserDelayTimeByCompanyUserId(@Param("companyUserId") Long companyUserId, @Param("companyId") Long companyId);
+}

+ 10 - 0
fs-service/src/main/java/com/fs/company/param/CompanyUserDelayTimeParam.java

@@ -0,0 +1,10 @@
+package com.fs.company.param;
+
+import lombok.Data;
+
+@Data
+public class CompanyUserDelayTimeParam {
+    public String sendDelayTime;
+    public String id;
+    public String remark;
+}

+ 63 - 0
fs-service/src/main/java/com/fs/company/service/ICompanyUserDelayTimeService.java

@@ -0,0 +1,63 @@
+package com.fs.company.service;
+
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.company.domain.CompanyUserDelayTime;
+
+/**
+ * 员工发送延时时间关联Service接口
+ *
+ * @author fs
+ * @date 2025-06-18
+ */
+public interface ICompanyUserDelayTimeService extends IService<CompanyUserDelayTime>{
+    /**
+     * 查询员工发送延时时间关联
+     *
+     * @param id 员工发送延时时间关联主键
+     * @return 员工发送延时时间关联
+     */
+    CompanyUserDelayTime selectCompanyUserDelayTimeById(Long id);
+
+    /**
+     * 查询员工发送延时时间关联列表
+     *
+     * @param companyUserDelayTime 员工发送延时时间关联
+     * @return 员工发送延时时间关联集合
+     */
+    List<CompanyUserDelayTime> selectCompanyUserDelayTimeList(CompanyUserDelayTime companyUserDelayTime);
+
+    /**
+     * 新增员工发送延时时间关联
+     *
+     * @param companyUserDelayTime 员工发送延时时间关联
+     * @return 结果
+     */
+    int insertCompanyUserDelayTime(CompanyUserDelayTime companyUserDelayTime);
+
+    /**
+     * 修改员工发送延时时间关联
+     *
+     * @param companyUserDelayTime 员工发送延时时间关联
+     * @return 结果
+     */
+    int updateCompanyUserDelayTime(CompanyUserDelayTime companyUserDelayTime);
+
+    /**
+     * 批量删除员工发送延时时间关联
+     *
+     * @param ids 需要删除的员工发送延时时间关联主键集合
+     * @return 结果
+     */
+    int deleteCompanyUserDelayTimeByIds(Long[] ids);
+
+    /**
+     * 删除员工发送延时时间关联信息
+     *
+     * @param id 员工发送延时时间关联主键
+     * @return 结果
+     */
+    int deleteCompanyUserDelayTimeById(Long id);
+
+    CompanyUserDelayTime selectCompanyUserDelayTimeByCompanyUser(Long companyId, Long userId);
+}

+ 106 - 0
fs-service/src/main/java/com/fs/company/service/impl/CompanyUserDelayTimeServiceImpl.java

@@ -0,0 +1,106 @@
+package com.fs.company.service.impl;
+
+import java.util.List;
+import com.fs.common.utils.DateUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.fs.company.mapper.CompanyUserDelayTimeMapper;
+import com.fs.company.domain.CompanyUserDelayTime;
+import com.fs.company.service.ICompanyUserDelayTimeService;
+
+/**
+ * 员工发送延时时间关联Service业务层处理
+ *
+ * @author fs
+ * @date 2025-06-18
+ */
+@Service
+public class CompanyUserDelayTimeServiceImpl extends ServiceImpl<CompanyUserDelayTimeMapper, CompanyUserDelayTime> implements ICompanyUserDelayTimeService {
+
+    /**
+     * 查询员工发送延时时间关联
+     *
+     * @param id 员工发送延时时间关联主键
+     * @return 员工发送延时时间关联
+     */
+    @Override
+    public CompanyUserDelayTime selectCompanyUserDelayTimeById(Long id)
+    {
+        return baseMapper.selectCompanyUserDelayTimeById(id);
+    }
+
+    /**
+     * 查询员工发送延时时间关联列表
+     *
+     * @param companyUserDelayTime 员工发送延时时间关联
+     * @return 员工发送延时时间关联
+     */
+    @Override
+    public List<CompanyUserDelayTime> selectCompanyUserDelayTimeList(CompanyUserDelayTime companyUserDelayTime)
+    {
+        return baseMapper.selectCompanyUserDelayTimeList(companyUserDelayTime);
+    }
+
+    /**
+     * 新增员工发送延时时间关联
+     *
+     * @param companyUserDelayTime 员工发送延时时间关联
+     * @return 结果
+     */
+    @Override
+    public int insertCompanyUserDelayTime(CompanyUserDelayTime companyUserDelayTime)
+    {
+        companyUserDelayTime.setCreateTime(DateUtils.getNowDate());
+        return baseMapper.insertCompanyUserDelayTime(companyUserDelayTime);
+    }
+
+    /**
+     * 修改员工发送延时时间关联
+     *
+     * @param companyUserDelayTime 员工发送延时时间关联
+     * @return 结果
+     */
+    @Override
+    public int updateCompanyUserDelayTime(CompanyUserDelayTime companyUserDelayTime)
+    {
+        companyUserDelayTime.setUpdateTime(DateUtils.getNowDate());
+        return baseMapper.updateCompanyUserDelayTime(companyUserDelayTime);
+    }
+
+    /**
+     * 批量删除员工发送延时时间关联
+     *
+     * @param ids 需要删除的员工发送延时时间关联主键
+     * @return 结果
+     */
+    @Override
+    public int deleteCompanyUserDelayTimeByIds(Long[] ids)
+    {
+        return baseMapper.deleteCompanyUserDelayTimeByIds(ids);
+    }
+
+    /**
+     * 删除员工发送延时时间关联信息
+     *
+     * @param id 员工发送延时时间关联主键
+     * @return 结果
+     */
+    @Override
+    public int deleteCompanyUserDelayTimeById(Long id)
+    {
+        return baseMapper.deleteCompanyUserDelayTimeById(id);
+    }
+
+    /**
+     * 通过员工id和企业id查询数据信息
+     *
+     * @param companyId
+     * @param userId
+     * @return
+     */
+    @Override
+    public CompanyUserDelayTime selectCompanyUserDelayTimeByCompanyUser(Long companyId, Long userId) {
+        return baseMapper.selectUserDelayTimeByCompanyUserId(userId,companyId);
+    }
+}

+ 5 - 0
fs-service/src/main/java/com/fs/company/vo/CompanyUserQwListVO.java

@@ -116,4 +116,9 @@ public class CompanyUserQwListVO extends BaseEntity {
 
     private Integer qwStatus;
     private String addressId;
+
+    /**
+     * 发送延时时间
+     */
+    private Long sendDelayTime;
 }

+ 1 - 0
fs-service/src/main/java/com/fs/course/config/CourseConfig.java

@@ -32,6 +32,7 @@ public class CourseConfig implements Serializable {
     private Integer minutesNum; //多少分钟算完课
     private Integer openCommentStatus; //开启评论/弹幕
     private Integer viewCommentNum; // 查看历史评论数量
+    private Long sendDelayTime; // 查看发送延时时间
 
 
     @Data

+ 4 - 0
fs-service/src/main/java/com/fs/sop/params/SendSopParamDetailsC.java

@@ -14,5 +14,9 @@ public class SendSopParamDetailsC {
     private Long nextExternalId;//下一个外部联系人ID
     private String appKey;
     private int type;
+    /**
+     * 延时时间
+     */
+    private Long sendDelayTime;
 
 }

+ 24 - 0
fs-service/src/main/java/com/fs/sop/service/impl/QwSopLogsServiceImpl.java

@@ -2,11 +2,14 @@ package com.fs.sop.service.impl;
 
 
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.utils.StringUtils;
 import com.fs.company.domain.CompanyUser;
+import com.fs.company.domain.CompanyUserDelayTime;
+import com.fs.company.mapper.CompanyUserDelayTimeMapper;
 import com.fs.company.service.ICompanyUserService;
 import com.fs.course.config.CourseConfig;
 import com.fs.course.domain.FsCourseWatchLog;
@@ -71,6 +74,8 @@ public class QwSopLogsServiceImpl implements IQwSopLogsService
     private RedisCache redisCache;
     @Autowired
     private QwSopLogsMapper qwSopLogsMapper;
+    @Autowired
+    private CompanyUserDelayTimeMapper companyUserDelayTimeMapper;
 
     @Autowired
     private ISysConfigService configService;
@@ -737,6 +742,7 @@ public class QwSopLogsServiceImpl implements IQwSopLogsService
 
         // 封装消息体
         SendSopParamDetailsC sopParamDetailsC = new SendSopParamDetailsC();
+        sendDelayTime(sopParamDetailsC,param);
         // 使用线程安全的集合
         List<QwSopLogsDoSendListTVO> sendJsApiList = Collections.synchronizedList(new ArrayList<>());
         try {
@@ -940,6 +946,24 @@ public class QwSopLogsServiceImpl implements IQwSopLogsService
         return sopParamDetailsC;
     }
 
+    /**
+     * 查询是否存在自定义延时时间并赋值
+     *
+     * @param sopParamDetailsC
+     * @param param
+     */
+    private void sendDelayTime(SendSopParamDetailsC sopParamDetailsC, GetQwSopLogsByJsApiParam param) {
+        QwUser qwUser  = qwUserMapper.selectQwUserByQwUserId(param.getQwUserId());
+        CompanyUserDelayTime companyUserDelayTime = companyUserDelayTimeMapper.selectUserDelayTimeByCompanyUserId(qwUser.getCompanyUserId(),qwUser.getCompanyId());
+        if (ObjectUtil.isEmpty(companyUserDelayTime)){
+            String json = configService.selectConfigByKey("course.config");
+            CourseConfig config = JSONUtil.toBean(json, CourseConfig.class);
+            sopParamDetailsC.setSendDelayTime(config.getSendDelayTime());
+        }else {
+            sopParamDetailsC.setSendDelayTime(companyUserDelayTime.getSendDelayTime());
+        }
+    }
+
     // 逻辑封装方法
     private boolean isCourseTypeValid(int courseType, Integer logType) {
         switch (courseType) {

+ 103 - 0
fs-service/src/main/resources/mapper/company/CompanyUserDelayTimeMapper.xml

@@ -0,0 +1,103 @@
+<?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.fs.company.mapper.CompanyUserDelayTimeMapper">
+
+    <resultMap type="CompanyUserDelayTime" id="CompanyUserDelayTimeResult">
+        <result property="id"    column="id"    />
+        <result property="companyId"    column="company_id"    />
+        <result property="companyUserId"    column="company_user_id"    />
+        <result property="sendDelayTime"    column="send_delay_time"    />
+        <result property="nickName"    column="nick_name"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectCompanyUserDelayTimeVo">
+        select id, company_id, company_user_id, send_delay_time, nick_name, del_flag, create_by, create_time, update_by, update_time, remark from company_user_delay_time
+    </sql>
+
+    <select id="selectCompanyUserDelayTimeList" parameterType="CompanyUserDelayTime" resultMap="CompanyUserDelayTimeResult">
+        <include refid="selectCompanyUserDelayTimeVo"/>
+        <where>
+            <if test="companyId != null "> and company_id = #{companyId}</if>
+            <if test="companyUserId != null "> and company_user_id = #{companyUserId}</if>
+            <if test="sendDelayTime != null "> and send_delay_time = #{sendDelayTime}</if>
+            <if test="nickName != null  and nickName != ''"> and nick_name like concat('%', #{nickName}, '%')</if>
+        </where>
+    </select>
+
+    <select id="selectCompanyUserDelayTimeById" parameterType="Long" resultMap="CompanyUserDelayTimeResult">
+        <include refid="selectCompanyUserDelayTimeVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertCompanyUserDelayTime" parameterType="CompanyUserDelayTime">
+        insert into company_user_delay_time
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="companyId != null">company_id,</if>
+            <if test="companyUserId != null">company_user_id,</if>
+            <if test="sendDelayTime != null">send_delay_time,</if>
+            <if test="nickName != null">nick_name,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="companyId != null">#{companyId},</if>
+            <if test="companyUserId != null">#{companyUserId},</if>
+            <if test="sendDelayTime != null">#{sendDelayTime},</if>
+            <if test="nickName != null">#{nickName},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updateCompanyUserDelayTime" parameterType="CompanyUserDelayTime">
+        update company_user_delay_time
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="companyId != null">company_id = #{companyId},</if>
+            <if test="companyUserId != null">company_user_id = #{companyUserId},</if>
+            <if test="sendDelayTime != null">send_delay_time = #{sendDelayTime},</if>
+            <if test="nickName != null">nick_name = #{nickName},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteCompanyUserDelayTimeById" parameterType="Long">
+        delete from company_user_delay_time where id = #{id}
+    </delete>
+
+    <delete id="deleteCompanyUserDelayTimeByIds" parameterType="String">
+        delete from company_user_delay_time where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+    <select id="selectUserDelayTimeByCompanyUserId"  resultMap="CompanyUserDelayTimeResult">
+        <include refid="selectCompanyUserDelayTimeVo"/>
+        <where>
+            <if test="companyId != null "> and company_id = #{companyId}</if>
+            <if test="companyUserId != null "> and company_user_id = #{companyUserId}</if>
+        </where>
+    </select>
+</mapper>