Browse Source

Merge remote-tracking branch 'origin/master'

zyp 13 hours ago
parent
commit
56da6dad43
41 changed files with 697 additions and 103 deletions
  1. 0 1
      fs-company/src/main/java/com/fs/company/controller/company/CompanyMenuController.java
  2. 12 0
      fs-company/src/main/java/com/fs/company/controller/course/FsCourseRedPacketLogController.java
  3. 52 22
      fs-company/src/main/java/com/fs/company/controller/course/FsCourseWatchLogController.java
  4. 53 0
      fs-company/src/main/java/com/fs/company/controller/qw/QwExternalContactController.java
  5. 35 0
      fs-company/src/main/java/com/fs/company/controller/qw/QwExternalContactTransferLogController.java
  6. 37 4
      fs-company/src/main/java/com/fs/company/controller/qw/QwFriendWelcomeController.java
  7. 59 1
      fs-company/src/main/java/com/fs/company/controller/qw/QwGroupChatController.java
  8. 71 14
      fs-company/src/main/java/com/fs/company/controller/qw/QwSopController.java
  9. 35 4
      fs-company/src/main/java/com/fs/company/controller/qw/QwUserController.java
  10. 1 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyDeptMapper.java
  11. 8 4
      fs-service/src/main/java/com/fs/company/service/impl/CompanyMenuServiceImpl.java
  12. 12 12
      fs-service/src/main/java/com/fs/company/service/impl/CompanyServiceImpl.java
  13. 1 1
      fs-service/src/main/java/com/fs/company/vo/DeptDataVO.java
  14. 1 1
      fs-service/src/main/java/com/fs/course/mapper/FsUserCourseVideoMapper.java
  15. 17 0
      fs-service/src/main/java/com/fs/course/param/FsCourseWatchLogListParam.java
  16. 3 0
      fs-service/src/main/java/com/fs/course/service/IFsCourseRedPacketLogService.java
  17. 78 0
      fs-service/src/main/java/com/fs/course/service/impl/FsCourseRedPacketLogServiceImpl.java
  18. 3 0
      fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java
  19. 6 1
      fs-service/src/main/java/com/fs/qw/mapper/QwExternalContactMapper.java
  20. 6 0
      fs-service/src/main/java/com/fs/qw/mapper/QwExternalContactTransferLogMapper.java
  21. 6 0
      fs-service/src/main/java/com/fs/qw/mapper/QwFriendWelcomeMapper.java
  22. 6 0
      fs-service/src/main/java/com/fs/qw/mapper/QwGroupChatMapper.java
  23. 25 0
      fs-service/src/main/java/com/fs/qw/mapper/QwUserMapper.java
  24. 11 0
      fs-service/src/main/java/com/fs/qw/param/QwExternalContactParam.java
  25. 12 0
      fs-service/src/main/java/com/fs/qw/param/QwExternalContactTransferLogParam.java
  26. 11 0
      fs-service/src/main/java/com/fs/qw/param/QwFriendWelcomeParam.java
  27. 10 0
      fs-service/src/main/java/com/fs/qw/param/QwGroupChatParam.java
  28. 15 0
      fs-service/src/main/java/com/fs/qw/param/QwUserListParam.java
  29. 1 2
      fs-service/src/main/java/com/fs/qw/service/IQwGroupChatService.java
  30. 5 0
      fs-service/src/main/java/com/fs/qw/service/IQwUserService.java
  31. 21 21
      fs-service/src/main/java/com/fs/qw/service/impl/QwExternalContactServiceImpl.java
  32. 8 4
      fs-service/src/main/java/com/fs/qw/service/impl/QwGroupChatServiceImpl.java
  33. 12 0
      fs-service/src/main/java/com/fs/qw/service/impl/QwUserServiceImpl.java
  34. 1 0
      fs-service/src/main/java/com/fs/qw/vo/QwUserVO.java
  35. 24 0
      fs-service/src/main/java/com/fs/sop/domain/QwSop.java
  36. 24 0
      fs-service/src/main/java/com/fs/statis/dto/StatsWatchLogPageListDTO.java
  37. 8 4
      fs-service/src/main/java/com/fs/system/service/impl/SysMenuServiceImpl.java
  38. 1 1
      fs-service/src/main/resources/application-config-druid-bnkc.yml
  39. 1 1
      fs-service/src/main/resources/application-config-druid-whhm.yml
  40. 4 4
      fs-service/src/main/resources/mapper/company/CompanyRoleMapper.xml
  41. 1 1
      fs-service/src/main/resources/mapper/statis/FsStatisQwWatchMapper.xml

+ 0 - 1
fs-company/src/main/java/com/fs/company/controller/company/CompanyMenuController.java

@@ -78,7 +78,6 @@ public class CompanyMenuController extends BaseController
     {
         LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
         CompanyMenu companyMenu = new CompanyMenu();
-        companyMenu.setStatus("0");
         List<CompanyMenu> menus = menuService.selectMenuList(companyMenu,loginUser.getUser().getUserId(),loginUser.getUser().getUserType());
         AjaxResult ajax = AjaxResult.success();
         ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId));

+ 12 - 0
fs-company/src/main/java/com/fs/company/controller/course/FsCourseRedPacketLogController.java

@@ -194,6 +194,18 @@ public class FsCourseRedPacketLogController extends BaseController
         return toAjax(fsCourseRedPacketLogService.deleteFsCourseRedPacketLogByLogIds(logIds));
     }
 
+
+    /**
+     * 删除短链课程看课记录
+     */
+
+    @Log(title = "短链课程看课记录", businessType = BusinessType.DELETE)
+    @PutMapping("/retryCourseRedPacketLog/{logIds}")
+    public AjaxResult retryCourseRedPacketLog(@PathVariable Long[] logIds)
+    {
+        return toAjax(fsCourseRedPacketLogService.retryCourseRedPacketLog(logIds));
+    }
+
     @GetMapping("/courseList")
     public R courseList()
     {

+ 52 - 22
fs-company/src/main/java/com/fs/company/controller/course/FsCourseWatchLogController.java

@@ -7,6 +7,7 @@ import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
 import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.company.service.impl.CompanyDeptServiceImpl;
 import com.fs.course.domain.FsCourseWatchLog;
 import com.fs.course.param.FsCourseOverParam;
 import com.fs.course.param.FsCourseUserStatisticsListParam;
@@ -49,6 +50,10 @@ public class FsCourseWatchLogController extends BaseController
     private SopUserLogsMapper sopUserLogsMapper;
     @Autowired
     private IQwWatchLogService qwWatchLogService;
+
+    @Autowired
+    private CompanyDeptServiceImpl companyDeptService;
+
     /**
      * 查询短链课程看课记录列表
      */
@@ -56,14 +61,6 @@ public class FsCourseWatchLogController extends BaseController
     @GetMapping("/list")
     public TableDataInfo list(FsCourseWatchLogListParam param)
     {
-
-//        if (param.getScheduleStartTime() != null && param.getScheduleEndTime() != null){
-//            List<String> sopUserLogsVOS = sopUserLogsMapper.selectSopUserLogsByDate(param.getScheduleStartTime(), param.getScheduleEndTime());
-//            param.setSopIds(sopUserLogsVOS);
-//            if (sopUserLogsVOS==null||sopUserLogsVOS.size()==0){
-//                return getDataTable(new ArrayList<>());
-//            }
-//        }
         startPage();
         LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
         param.setCompanyId( loginUser.getCompany().getCompanyId());
@@ -71,6 +68,53 @@ public class FsCourseWatchLogController extends BaseController
         return getDataTable(list);
     }
 
+
+    /**
+     * 查询短链课程 我的部门 看课记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('course:courseWatchLog:deptList')")
+    @GetMapping("/deptList")
+    public TableDataInfo deptList(FsCourseWatchLogListParam param) {
+
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+
+
+        List<Long> combinedList = new ArrayList<>();
+        //本部门
+        Long deptId = loginUser.getUser().getDeptId();
+        if (deptId!=null){
+            combinedList.add(deptId);
+        }
+        //本部门的下级部门
+        List<Long> deptList = companyDeptService.selectCompanyDeptByParentId(deptId);
+        if (!deptList.isEmpty()){
+            combinedList.addAll(deptList);
+        }
+
+        param.setCuDeptIdList(combinedList);
+        param.setUserType(loginUser.getUser().getUserType());
+        param.setCompanyId(loginUser.getCompany().getCompanyId());
+
+        startPage();
+        List<FsCourseWatchLogListVO> list = fsCourseWatchLogService.selectFsCourseWatchLogListVO(param);
+
+        return getDataTable(list);
+    }
+    /**
+     * 查询短链课程看课记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('course:courseWatchLog:myList')")
+    @GetMapping("/myList")
+    public TableDataInfo myList(FsCourseWatchLogListParam param)
+    {
+        startPage();
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        param.setCompanyUserId( loginUser.getUser().getUserId());
+        List<FsCourseWatchLogListVO> list = fsCourseWatchLogService.selectFsCourseWatchLogListVO(param);
+        return getDataTable(list);
+    }
+
+
     @PreAuthorize("@ss.hasPermi('course:courseWatchLog:statisticsList')")
     @GetMapping("/statisticsList")
     public TableDataInfo statisticsList(FsCourseWatchLogStatisticsListParam param)
@@ -171,20 +215,6 @@ public class FsCourseWatchLogController extends BaseController
 
 
 
-    /**
-     * 查询短链课程看课记录列表
-     */
-    @PreAuthorize("@ss.hasPermi('course:courseWatchLog:myList')")
-    @GetMapping("/myList")
-    public TableDataInfo myList(FsCourseWatchLogListParam param)
-    {
-        startPage();
-        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        param.setCompanyUserId( loginUser.getUser().getUserId());
-        List<FsCourseWatchLogListVO> list = fsCourseWatchLogService.selectFsCourseWatchLogListVO(param);
-        return getDataTable(list);
-    }
-
     /**
      * 导出短链课程看课记录列表
      */

+ 53 - 0
fs-company/src/main/java/com/fs/company/controller/qw/QwExternalContactController.java

@@ -10,6 +10,7 @@ import com.fs.common.enums.BusinessType;
 import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.company.service.impl.CompanyDeptServiceImpl;
 import com.fs.course.param.FsUserCourseListUParam;
 import com.fs.course.service.IFsUserCourseStudyService;
 import com.fs.course.vo.FsUserCourseStudyListUVO;
@@ -38,6 +39,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
@@ -72,6 +74,10 @@ public class QwExternalContactController extends BaseController
 
     @Autowired
     private IQwExternalContactInfoService qwExternalContactInfoService;
+
+    @Autowired
+    private CompanyDeptServiceImpl companyDeptService;
+
     /**
      * 查询企业微信客户列表
      */
@@ -122,6 +128,53 @@ public class QwExternalContactController extends BaseController
         return qwExternalContactService.syncQwExternalContact(qwExternalContact.getCorpId());
     }
 
+    /**
+     * 我的部门客户
+     */
+    @PreAuthorize("@ss.hasPermi('qw:externalContact:myDeptExtList')")
+    @GetMapping("/myDeptExtList")
+    public TableDataInfo myDeptExtList(QwExternalContactParam qwExternalContact)
+    {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+
+        List<Long> combinedList = new ArrayList<>();
+        //本部门
+        Long deptId = loginUser.getUser().getDeptId();
+        if (deptId!=null){
+            combinedList.add(deptId);
+        }
+        //本部门的下级部门
+        List<Long> deptList = companyDeptService.selectCompanyDeptByParentId(deptId);
+        if (!deptList.isEmpty()){
+            combinedList.addAll(deptList);
+        }
+
+        qwExternalContact.setCuDeptIdList(combinedList);
+        qwExternalContact.setUserType(loginUser.getUser().getUserType());
+        qwExternalContact.setCompanyId(loginUser.getCompany().getCompanyId());
+
+        startPage();
+        List<QwExternalContactVO> list = qwExternalContactService.selectQwExternalContactListVO(qwExternalContact);
+        list.forEach(item->{
+
+            if (!Objects.equals(item.getTagIds(), "[]") && item.getTagIds()!=null) {
+                QwTagSearchParam param = new QwTagSearchParam();
+                Gson gson = new Gson();
+                List<String> tagIds = gson.fromJson(
+                        item.getTagIds(),
+                        new TypeToken<List<String>>() {
+                        }.getType()
+                );
+
+                param.setTagIds(tagIds);
+
+                item.setTagIdsName(iQwTagService.selectQwTagListByTagIds(param));
+            }
+        });
+
+        return getDataTable(list);
+    }
+
     @PreAuthorize("@ss.hasPermi('qw:externalContact:myList')")
     @GetMapping("/myList")
     public TableDataInfo myList(QwExternalContactParam qwExternalContact)

+ 35 - 0
fs-company/src/main/java/com/fs/company/controller/qw/QwExternalContactTransferLogController.java

@@ -8,6 +8,7 @@ import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
 import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.company.service.impl.CompanyDeptServiceImpl;
 import com.fs.framework.security.LoginUser;
 import com.fs.framework.service.TokenService;
 import com.fs.qw.domain.QwExternalContactTransferLog;
@@ -18,6 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -32,8 +34,13 @@ public class QwExternalContactTransferLogController extends BaseController
 {
     @Autowired
     private IQwExternalContactTransferLogService qwExternalContactTransferLogService;
+
     @Autowired
     private TokenService tokenService;
+
+    @Autowired
+    private CompanyDeptServiceImpl companyDeptService;
+
     /**
      * 查询转接记录列表
      */
@@ -50,6 +57,34 @@ public class QwExternalContactTransferLogController extends BaseController
         return getDataTable(list);
     }
 
+    /**
+     * 查询部门转接记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('qw:externalContactTransferLog:deptList')")
+    @GetMapping("/deptList")
+    public TableDataInfo deptList(QwExternalContactTransferLogParam qwExternalContactTransferLog)
+    {
+
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        List<Long> combinedList = new ArrayList<>();
+        //本部门
+        Long deptId = loginUser.getUser().getDeptId();
+        if (deptId!=null){
+            combinedList.add(deptId);
+        }
+        //本部门的下级部门
+        List<Long> deptList = companyDeptService.selectCompanyDeptByParentId(deptId);
+        if (!deptList.isEmpty()){
+            combinedList.addAll(deptList);
+        }
+        qwExternalContactTransferLog.setCuDeptIdList(combinedList);
+        qwExternalContactTransferLog.setUserType(loginUser.getUser().getUserType());
+
+        startPage();
+        List<QwExternalContactTransferLogListVO> list = qwExternalContactTransferLogService.selectQwExternalContactTransferLogListVO(qwExternalContactTransferLog);
+        return getDataTable(list);
+    }
+
     @PreAuthorize("@ss.hasPermi('qw:externalContactTransferLog:myList')")
     @GetMapping("/myList")
     public TableDataInfo myList(QwExternalContactTransferLogParam qwExternalContactTransferLog)

+ 37 - 4
fs-company/src/main/java/com/fs/company/controller/qw/QwFriendWelcomeController.java

@@ -10,6 +10,7 @@ import com.fs.common.enums.BusinessType;
 import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.company.domain.CompanyUser;
+import com.fs.company.service.impl.CompanyDeptServiceImpl;
 import com.fs.framework.security.LoginUser;
 import com.fs.framework.service.TokenService;
 import com.fs.qw.domain.QwFriendWelcome;
@@ -22,10 +23,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -46,6 +44,10 @@ public class QwFriendWelcomeController extends BaseController
 
     @Autowired
     private IQwUserService qwUserService;
+
+    @Autowired
+    private CompanyDeptServiceImpl companyDeptService;
+
     /**
      * 查询好友欢迎语列表
      */
@@ -61,6 +63,37 @@ public class QwFriendWelcomeController extends BaseController
         return getDataTable(list);
     }
 
+
+    /**
+     * 查询部门好友欢迎语列表
+     */
+    @PreAuthorize("@ss.hasPermi('qw:friendWelcome:deptList')")
+    @GetMapping("/deptList")
+    public TableDataInfo deptList(QwFriendWelcomeParam qwFriendWelcomeParam)
+    {
+
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        qwFriendWelcomeParam.setCompanyId(loginUser.getCompany().getCompanyId());
+        List<Long> combinedList = new ArrayList<>();
+        //本部门
+        Long deptId = loginUser.getUser().getDeptId();
+        if (deptId!=null){
+            combinedList.add(deptId);
+        }
+        //本部门的下级部门
+        List<Long> deptList = companyDeptService.selectCompanyDeptByParentId(deptId);
+        if (!deptList.isEmpty()){
+            combinedList.addAll(deptList);
+        }
+        qwFriendWelcomeParam.setCuDeptIdList(combinedList);
+        qwFriendWelcomeParam.setUserType(loginUser.getUser().getUserType());
+
+        startPage();
+        List<QwFriendWelcome> list = qwFriendWelcomeService.selectQwFriendWelcomeListMyVO(qwFriendWelcomeParam);
+        return getDataTable(list);
+    }
+
+
     /**
      * 查询好友欢迎语列表
      */

+ 59 - 1
fs-company/src/main/java/com/fs/company/controller/qw/QwGroupChatController.java

@@ -4,9 +4,13 @@ import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.page.TableDataInfo;
+import com.fs.common.utils.ServletUtils;
+import com.fs.company.service.impl.CompanyDeptServiceImpl;
+import com.fs.framework.security.LoginUser;
 import com.fs.framework.service.TokenService;
 import com.fs.qw.param.QwGroupChatParam;
 import com.fs.qw.service.IQwGroupChatService;
+import com.fs.qw.service.IQwUserService;
 import com.fs.qw.vo.QwGroupChatOptionsVO;
 import com.fs.qw.vo.QwGroupChatVO;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -16,6 +20,7 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -33,6 +38,14 @@ public class QwGroupChatController extends BaseController
 
     @Autowired
     private TokenService tokenService;
+
+    @Autowired
+    private CompanyDeptServiceImpl companyDeptService;
+
+
+    @Autowired
+    private IQwUserService iQwUserService;
+
     /**
      * 查询客户群详情列表
      */
@@ -45,6 +58,35 @@ public class QwGroupChatController extends BaseController
         return getDataTable(list);
     }
 
+    /**
+     * 查询我的部门客户群详情列表
+     */
+    @PreAuthorize("@ss.hasPermi('qw:groupChat:deptList')")
+    @GetMapping("/deptList")
+    public TableDataInfo deptList(QwGroupChatParam qwGroupChat)
+    {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+
+        List<Long> combinedList = new ArrayList<>();
+        //本部门
+        Long deptId = loginUser.getUser().getDeptId();
+        if (deptId!=null){
+            combinedList.add(deptId);
+        }
+        //本部门的下级部门
+        List<Long> deptList = companyDeptService.selectCompanyDeptByParentId(deptId);
+        if (!deptList.isEmpty()){
+            combinedList.addAll(deptList);
+        }
+        qwGroupChat.setCuDeptIdList(combinedList);
+        qwGroupChat.setUserType(loginUser.getUser().getUserType());
+
+
+        startPage();
+        List<QwGroupChatVO> list = qwGroupChatService.selectQwGroupChatList(qwGroupChat);
+        return getDataTable(list);
+    }
+
 
     /**
      * 我的-查询客户群详情列表
@@ -53,6 +95,9 @@ public class QwGroupChatController extends BaseController
     @GetMapping("/myList")
     public TableDataInfo myList(QwGroupChatParam qwGroupChat)
     {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        qwGroupChat.setCompanyId(loginUser.getCompany().getCompanyId());
+        qwGroupChat.setCompanyUserId(loginUser.getUser().getUserId());
         startPage();
         List<QwGroupChatVO> list = qwGroupChatService.selectQwGroupChatList(qwGroupChat);
         return getDataTable(list);
@@ -77,8 +122,21 @@ public class QwGroupChatController extends BaseController
 
 //        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
 //        Long companyId = loginUser.getCompany().getCompanyId();
+        List<String> qwUserIdList=new ArrayList<>();
+        return qwGroupChatService.cogradientGroupChat(corpId,qwUserIdList);
+    }
+
+    /**
+     *  同步 我的客户群信息
+     */
+    @GetMapping("/cogradientMyGroupChat/{corpId}")
+    public R cogradientMyGroupChat(@PathVariable("corpId") String corpId) throws Exception {
+
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+
+        List<String> qwUserIdList = iQwUserService.selectQwUserListByCompanyUserId(loginUser.getUser().getUserId(), corpId);
 
-        return qwGroupChatService.cogradientGroupChat(corpId);
+        return qwGroupChatService.cogradientGroupChat(corpId,qwUserIdList);
     }
 
     @GetMapping("/allList/{corpId}")

+ 71 - 14
fs-company/src/main/java/com/fs/company/controller/qw/QwSopController.java

@@ -9,6 +9,7 @@ import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
 import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.company.service.impl.CompanyDeptServiceImpl;
 import com.fs.course.mapper.FsUserCourseMapper;
 import com.fs.course.mapper.FsUserCourseVideoMapper;
 import com.fs.framework.security.LoginUser;
@@ -28,6 +29,7 @@ import org.springframework.web.bind.annotation.*;
 
 import java.io.IOException;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -55,6 +57,13 @@ public class QwSopController extends BaseController
     private FsUserCourseVideoMapper fsUserCourseVideoMapper;
     @Autowired
     private ICompanySopRoleService companySopRoleService;
+
+    @Autowired
+    private CompanyDeptServiceImpl companyDeptService;
+
+    @Autowired
+    private IQwUserService iQwUserService;
+
     /**
      * 查询企微sop列表
      */
@@ -70,6 +79,67 @@ public class QwSopController extends BaseController
         return getDataTable(list);
     }
 
+    /**
+     * 查询部门企微sop列表
+     */
+    @PreAuthorize("@ss.hasPermi('qw:sop:deptList')")
+    @GetMapping("/deptList")
+    public TableDataInfo deptList(QwSop qwSop)
+    {
+
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        qwSop.setCompanyId(loginUser.getCompany().getCompanyId());
+
+        List<Long> combinedList = new ArrayList<>();
+        //本部门
+        Long deptId = loginUser.getUser().getDeptId();
+        if (deptId!=null){
+            combinedList.add(deptId);
+        }
+        //本部门的下级部门
+        List<Long> deptList = companyDeptService.selectCompanyDeptByParentId(deptId);
+        if (!deptList.isEmpty()){
+            combinedList.addAll(deptList);
+        }
+        qwSop.setCuDeptIdList(combinedList);
+        qwSop.setUserType(loginUser.getUser().getUserType());
+
+        List<Long> userIds = iQwUserService.selectQwUserListByCuDeptIdList(qwSop);
+
+        qwSop.setQwUserIdList(userIds);
+
+        startPage();
+        List<QwSop> list = qwSopService.selectQwSopMyList(qwSop);
+        return getDataTable(list);
+    }
+
+
+
+    /**
+     * 查询企微sop列表-我的
+     */
+    @PreAuthorize("@ss.hasPermi('qw:sop:myList')")
+    @GetMapping("/myList")
+    public TableDataInfo myList(QwSop qwSop)
+    {
+
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        qwSop.setCompanyId( loginUser.getCompany().getCompanyId());
+        qwSop.setUserId(loginUser.getUser().getUserId());
+        List<Long> userIds = iQwUserService.selectQwUserListByCuDeptIdList(qwSop);
+        qwSop.setQwUserIdList(userIds);
+
+        List<QwSop> list=new ArrayList<>();
+
+        if (userIds.isEmpty()){
+            return  getDataTable(list);
+        }
+
+        startPage();
+        list = qwSopService.selectQwSopMyList(qwSop);
+        return getDataTable(list);
+    }
+
     /**
      * 查询aiChatsop列表
      */
@@ -97,20 +167,7 @@ public class QwSopController extends BaseController
         List<OptionsVO> optionsVOS = fsUserCourseVideoMapper.selectFsUserCourseVodeAllList(id);
         return R.ok().put("list", optionsVOS);
     }
-    /**
-     * 查询企微sop列表-我的
-     */
-    @PreAuthorize("@ss.hasPermi('qw:sop:myList')")
-    @GetMapping("/myList")
-    public TableDataInfo myList(QwSop qwSop)
-    {
-        startPage();
-        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        qwSop.setCompanyId( loginUser.getCompany().getCompanyId());
-        qwSop.setQwUserIds(String.valueOf(loginUser.getUser().getQwUserId()));
-        List<QwSop> list = qwSopService.selectQwSopMyList(qwSop);
-        return getDataTable(list);
-    }
+
     /**
      * 导出企微sop列表
      */

+ 35 - 4
fs-company/src/main/java/com/fs/company/controller/qw/QwUserController.java

@@ -18,6 +18,7 @@ import com.fs.company.domain.Company;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.mapper.CompanyUserMapper;
 import com.fs.company.service.ICompanyUserService;
+import com.fs.company.service.impl.CompanyDeptServiceImpl;
 import com.fs.fastGpt.domain.FastGptRole;
 import com.fs.fastGpt.mapper.FastGptRoleMapper;
 import com.fs.framework.manager.AsyncManager;
@@ -51,10 +52,7 @@ import org.springframework.security.core.Authentication;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -96,6 +94,9 @@ public class QwUserController extends BaseController
     @Resource
     private AuthenticationManager authenticationManager;
 
+    @Autowired
+    private CompanyDeptServiceImpl companyDeptService;
+
     /**
      * 查询企微员工列表
      */
@@ -111,6 +112,36 @@ public class QwUserController extends BaseController
         return getDataTable(list);
     }
 
+    /**
+     * 查询我的部门 企业微信员工列表
+     */
+    @PreAuthorize("@ss.hasPermi('qw:user:myDepartList')")
+    @GetMapping("/myDepartList")
+    public TableDataInfo myDepartList(QwUserListParam qwUser)
+    {
+
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        qwUser.setCompanyId(loginUser.getCompany().getCompanyId());
+        qwUser.setUserType(loginUser.getUser().getUserType());
+        List<Long> combinedList = new ArrayList<>();
+        //本部门
+        Long deptId = loginUser.getUser().getDeptId();
+        if (deptId!=null){
+            combinedList.add(deptId);
+        }
+        //本部门的下级部门
+        List<Long> deptList = companyDeptService.selectCompanyDeptByParentId(deptId);
+        if (!deptList.isEmpty()){
+            combinedList.addAll(deptList);
+        }
+        qwUser.setCuDeptIdList(combinedList);
+        qwUser.setUserType(loginUser.getUser().getUserType());
+
+        startPage();
+        List<QwUserVO> list = qwUserService.selectQwUserListStaffVO(qwUser);
+        return getDataTable(list);
+    }
+
     @PreAuthorize("@ss.hasPermi('qw:user:login')")
     @PostMapping("/loginQwIpad")
     public R loginQwIpad(@RequestBody QwLoginHookParam loginParam){

+ 1 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyDeptMapper.java

@@ -67,6 +67,7 @@ public interface CompanyDeptMapper
      */
     public int deleteCompanyDeptById(Long deptId);
 
+
     /**
      * 批量删除部门
      *

+ 8 - 4
fs-service/src/main/java/com/fs/company/service/impl/CompanyMenuServiceImpl.java

@@ -140,8 +140,11 @@ public class CompanyMenuServiceImpl implements ICompanyMenuService
             // 如果是顶级节点, 遍历该父节点的所有子节点
             if (!tempList.contains(menu.getParentId()))
             {
-                recursionFn(menus, menu);
-                returnList.add(menu);
+                // 如果正常
+                if("0".equals(menu.getStatus())){
+                    recursionFn(menus, menu);
+                    returnList.add(menu);
+                }
             }
         }
         if (returnList.isEmpty())
@@ -233,7 +236,6 @@ public class CompanyMenuServiceImpl implements ICompanyMenuService
         else
         {
             menu.getParams().put("userId", userId);
-//            menu.setStatus("0");
             menuList = companyMenuMapper.selectCompanyMenuList(menu);
         }
         return menuList;
@@ -300,7 +302,9 @@ public class CompanyMenuServiceImpl implements ICompanyMenuService
             CompanyMenu n = (CompanyMenu) it.next();
             if (n.getParentId().longValue() == t.getMenuId().longValue())
             {
-                tlist.add(n);
+                if("0".equals(n.getStatus())){
+                    tlist.add(n);
+                }
             }
         }
         return tlist;

+ 12 - 12
fs-service/src/main/java/com/fs/company/service/impl/CompanyServiceImpl.java

@@ -612,7 +612,7 @@ public class CompanyServiceImpl implements ICompanyService
         // 8. 构建公司节点
         DeptDataVO companyNode = new DeptDataVO();
         companyNode.setLabel(company.getCompanyName());
-        companyNode.setId(company.getCompanyId());
+        companyNode.setId("company_"+company.getCompanyId());
 
         // 9. 构建部门树(仅包含可见部门)
         // 先找到当前部门对象
@@ -720,7 +720,7 @@ public class CompanyServiceImpl implements ICompanyService
                             if (user.getUserId().equals(currentCompanyUserId)) {
                                 DeptDataVO userNode = new DeptDataVO();
                                 userNode.setLabel(user.getNickName() + "_" + user.getUserName());
-                                userNode.setId(user.getUserId());
+                                userNode.setId("user_"+user.getUserId());
                                 userNode.setChildren(null);
                                 userNodes.add(userNode);
                             }
@@ -728,7 +728,7 @@ public class CompanyServiceImpl implements ICompanyService
                             // 非当前部门,显示所有用户
                             DeptDataVO userNode = new DeptDataVO();
                             userNode.setLabel(user.getNickName() + "_" + user.getUserName());
-                            userNode.setId(user.getUserId());
+                            userNode.setId("user_"+user.getUserId());
                             userNode.setChildren(null);
                             userNodes.add(userNode);
                         }
@@ -744,14 +744,14 @@ public class CompanyServiceImpl implements ICompanyService
             if (!children.isEmpty()) {
                 DeptDataVO deptNode = new DeptDataVO();
                 deptNode.setLabel(dept.getDeptName());
-                deptNode.setId(dept.getDeptId());
+                deptNode.setId("dept_"+dept.getDeptId());
                 deptNode.setChildren(children);
                 result.add(deptNode);
             } else if (deptPath.contains(dept.getDeptId())) {
                 // 即使没有子部门和用户,如果是部门路径上的节点,仍然需要添加
                 DeptDataVO deptNode = new DeptDataVO();
                 deptNode.setLabel(dept.getDeptName());
-                deptNode.setId(dept.getDeptId());
+                deptNode.setId("dept_"+dept.getDeptId());
                 deptNode.setChildren(null);
                 result.add(deptNode);
             }
@@ -797,7 +797,7 @@ public class CompanyServiceImpl implements ICompanyService
                                         Map<Long, List<CompanyDept>> deptGroupByParentId) {
         DeptDataVO companyNode = new DeptDataVO();
         companyNode.setLabel(company.getCompanyName());
-        companyNode.setId(company.getCompanyId());
+        companyNode.setId("company_"+company.getCompanyId());
 
         // 获取公司下的顶级部门(parentId为null或为公司ID的部门)
         List<CompanyDept> topLevelDepts = companyDeptGroupByCompanyId.get(company.getCompanyId());
@@ -825,7 +825,7 @@ public class CompanyServiceImpl implements ICompanyService
                                         ) {
         DeptDataVO companyNode = new DeptDataVO();
         companyNode.setLabel(company.getCompanyName());
-        companyNode.setId(company.getCompanyId());
+        companyNode.setId("company_"+company.getCompanyId());
 
         // 获取公司下的顶级部门(parentId为null或为公司ID的部门)
         List<CompanyDept> topLevelDepts = companyDeptGroupByCompanyId.get(company.getCompanyId());
@@ -856,7 +856,7 @@ public class CompanyServiceImpl implements ICompanyService
         for (CompanyDept dept : depts) {
             DeptDataVO deptNode = new DeptDataVO();
             deptNode.setLabel(dept.getDeptName());
-            deptNode.setId(dept.getDeptId());
+            deptNode.setId("dept_"+dept.getDeptId());
 
             List<DeptDataVO> children = new ArrayList<>();
 
@@ -873,7 +873,7 @@ public class CompanyServiceImpl implements ICompanyService
                 for (CompanyUser user : deptUsers) {
                     DeptDataVO userNode = new DeptDataVO();
                     userNode.setLabel(user.getNickName()+"_"+user.getUserName());
-                    userNode.setId(user.getUserId());
+                    userNode.setId("user_"+user.getUserId());
                     userNode.setChildren(null);
                     children.add(userNode);
                 }
@@ -911,7 +911,7 @@ public class CompanyServiceImpl implements ICompanyService
         for (CompanyDept dept : depts) {
             DeptDataVO deptNode = new DeptDataVO();
             deptNode.setLabel(dept.getDeptName());
-            deptNode.setId(dept.getDeptId());
+            deptNode.setId("dept_"+dept.getDeptId());
 
             List<DeptDataVO> children = new ArrayList<>();
 
@@ -931,14 +931,14 @@ public class CompanyServiceImpl implements ICompanyService
                         if(ObjectUtils.equals(user.getUserId(),currentCompanyUserId)) {
                             DeptDataVO userNode = new DeptDataVO();
                             userNode.setLabel(user.getNickName()+"_"+user.getUserName());
-                            userNode.setId(user.getUserId());
+                            userNode.setId("user_"+user.getUserId());
                             userNode.setChildren(null);
                             children.add(userNode);
                         }
                     } else {
                         DeptDataVO userNode = new DeptDataVO();
                         userNode.setLabel(user.getNickName()+"_"+user.getUserName());
-                        userNode.setId(user.getUserId());
+                        userNode.setId("user_"+user.getUserId());
                         userNode.setChildren(null);
                         children.add(userNode);
                     }

+ 1 - 1
fs-service/src/main/java/com/fs/company/vo/DeptDataVO.java

@@ -14,7 +14,7 @@ public class DeptDataVO implements Serializable {
     /**
      * 节点id
      */
-    private Long id;
+    private String id;
     /**
      * 子节点
      */

+ 1 - 1
fs-service/src/main/java/com/fs/course/mapper/FsUserCourseVideoMapper.java

@@ -152,7 +152,7 @@ public interface FsUserCourseVideoMapper
     List<FsUserCourseVideo> selectVideoIsPrivate();
     @Select("select * from fs_user_course_video WHERE video_id=#{videoId}")
     FsUserCourseVideo selectFsUserCourseVideoByVideoStringId(String videoId);
-    @Select("select * from fs_user_course_video WHERE course_id=#{courseId} order by course_sort,video_id")
+    @Select("select * from fs_user_course_video WHERE course_id=#{courseId} and is_del = 0 order by course_sort,video_id")
     List<FsUserCourseVideo> selectVideoByCourseId(Long courseId);
     @Select("select v.* from fs_user_course_video v " +
             "left join fs_user_course c on c.course_id = v.course_id " +

+ 17 - 0
fs-service/src/main/java/com/fs/course/param/FsCourseWatchLogListParam.java

@@ -54,4 +54,21 @@ public class FsCourseWatchLogListParam implements Serializable {
     private String scheduleEndTime;
 
     private List<String> sopIds;
+
+
+    private Long taskId;//任务ID
+
+    private String customPageStr;
+
+    private Long lastId;
+
+    /**
+     * 销售部门
+     */
+    private List<Long> cuDeptIdList;
+
+    /**
+     * 部门类型 00 管理员 01 员工
+     */
+    private String userType;
 }

+ 3 - 0
fs-service/src/main/java/com/fs/course/service/IFsCourseRedPacketLogService.java

@@ -79,4 +79,7 @@ public interface IFsCourseRedPacketLogService
     int getCountByCompanyUserIdId(Long userId);
 
     BigDecimal getNewVipRedPackAmountByCompanyUserIdId(Long userId);
+
+    int retryCourseRedPacketLog(Long[] logIds);
+
 }

+ 78 - 0
fs-service/src/main/java/com/fs/course/service/impl/FsCourseRedPacketLogServiceImpl.java

@@ -5,15 +5,26 @@ import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 
+import com.alibaba.fastjson.JSON;
 import com.fs.common.core.domain.R;
 import com.fs.common.utils.DateUtils;
+import com.fs.company.domain.Company;
+import com.fs.company.domain.CompanyMoneyLogs;
+import com.fs.company.mapper.CompanyMapper;
+import com.fs.company.mapper.CompanyMoneyLogsMapper;
 import com.fs.course.param.FsCourseRedPacketLogParam;
 import com.fs.course.vo.FsCourseRedPacketLogListPVO;
+import com.fs.his.domain.FsUser;
+import com.fs.his.mapper.FsUserMapper;
+import com.fs.his.param.WxSendRedPacketParam;
+import com.fs.his.service.IFsStorePaymentService;
+import com.github.binarywang.wxpay.bean.transfer.TransferBillsResult;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.fs.course.mapper.FsCourseRedPacketLogMapper;
 import com.fs.course.domain.FsCourseRedPacketLog;
 import com.fs.course.service.IFsCourseRedPacketLogService;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 短链课程看课记录Service业务层处理
@@ -146,5 +157,72 @@ public class FsCourseRedPacketLogServiceImpl implements IFsCourseRedPacketLogSer
     public BigDecimal getNewVipRedPackAmountByCompanyUserIdId(Long companyUserId) {
         return fsCourseRedPacketLogMapper.getNewVipRedPackAmountByCompanyUserIdId(companyUserId);
     }
+    @Autowired
+    private IFsStorePaymentService paymentService;
+    @Autowired
+    private FsUserMapper fsUserMapper;
+    @Autowired
+    private CompanyMapper companyMapper;
+    @Autowired
+    private CompanyMoneyLogsMapper moneyLogsMapper;
+    @Override
+    @Transactional
+    public int retryCourseRedPacketLog(Long[] logIds) {
+        for (int i = 0; i < logIds.length; i++) {
+            Long id = logIds[i];
+            FsCourseRedPacketLog param = fsCourseRedPacketLogMapper.selectFsCourseRedPacketLogByLogId(id);
+
+
+            if (param!=null&&param.getStatus()==2){
+                Company company = companyMapper.selectCompanyByIdForUpdate(param.getCompanyId());
+                BigDecimal amount = param.getAmount();
+                BigDecimal money = company.getMoney();
+                BigDecimal subtract = money.subtract(amount);
+                if (subtract.compareTo(BigDecimal.ZERO)<0){
+                    return 0;
+                }
+
+
+                WxSendRedPacketParam packetParam = new WxSendRedPacketParam();
+                FsUser user = fsUserMapper.selectFsUserByUserId(param.getUserId());
+                packetParam.setOpenId(user.getMaOpenId());
+                packetParam.setOpenId(user.getCourseMaOpenId());
+                packetParam.setAmount(param.getAmount());
+                packetParam.setSource(2);
+                packetParam.setRedPacketMode(1);
+                packetParam.setCompanyId(param.getCompanyId());
+                R sendRedPacket = paymentService.sendRedPacket(packetParam);
+                if (sendRedPacket.get("code").equals(200)) {
+                    FsCourseRedPacketLog redPacketLog = new FsCourseRedPacketLog();
+                    TransferBillsResult transferBillsResult;
+                    if (sendRedPacket.get("isNew").equals(1)){
+                        transferBillsResult = (TransferBillsResult)sendRedPacket.get("data");
+                        redPacketLog.setResult(JSON.toJSONString(sendRedPacket));
+                        redPacketLog.setOutBatchNo(transferBillsResult.getOutBillNo());
+                    }else {
+                        redPacketLog.setOutBatchNo(sendRedPacket.get("orderCode").toString());
+                    }
+                    // 添加红包记录
+                    redPacketLog.setStatus(0);
+                    fsCourseRedPacketLogMapper.updateFsCourseRedPacketLog(redPacketLog);
+                    // 更新观看记录的奖励类型
+
+                    company.setMoney(subtract);
+                    companyMapper.updateCompany(company);
+
+                    CompanyMoneyLogs logs=new CompanyMoneyLogs();
+                    logs.setCompanyId(company.getCompanyId());
+                    logs.setRemark("扣除红包金额");
+                    logs.setMoney(amount.multiply(new BigDecimal(-1)));
+                    logs.setLogsType(15);
+                    logs.setBalance(company.getMoney());
+                    logs.setCreateTime(new Date());
+                    moneyLogsMapper.insertCompanyMoneyLogs(logs);
+                }
+            }
+
+        }
+        return 0;
+    }
 
 }

+ 3 - 0
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -1487,6 +1487,9 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
     @Override
     public void batchSaveVideo(BatchVideoSvae vo) {
         List<FsVideoResource> videoResourceList = fsVideoResourceMapper.selectBatchIds(vo.getIds());
+        videoResourceList = videoResourceList.stream()
+                .sorted(Comparator.comparing(FsVideoResource::getSort).thenComparing(FsVideoResource::getId))
+                .collect(Collectors.toList());
         FsUserCourseVideo param = new FsUserCourseVideo();
         param.setCourseId(vo.getCourseId());
         List<FsUserCourseVideo> videoList = selectFsUserCourseVideoList(param);

+ 6 - 1
fs-service/src/main/java/com/fs/qw/mapper/QwExternalContactMapper.java

@@ -256,7 +256,12 @@ public interface QwExternalContactMapper extends BaseMapper<QwExternalContact> {
             "            <if test=\"sTime != null \">  and DATE(ec.create_time) &gt;= DATE(#{sTime})</if>\n" +
             "            <if test=\"eTime != null \">  and DATE(ec.create_time) &lt;= DATE(#{eTime})</if>\n" +
             "            <if test=\"companyUserName != null  and companyUserName != ''\"> and cu.user_name = #{companyUserName}</if>\n" +
-
+            "            <if test=\"cuDeptIdList != null and !cuDeptIdList.isEmpty() and  userType != '00' \">" +
+            "               AND cur.dept_id IN " +
+            "                   <foreach collection='cuDeptIdList' item='item' open='(' separator=',' close=')'> " +
+            "                       #{item} " +
+            "                   </foreach> " +
+            "            </if>" +
             "<if test ='companyUser!=null'> " +
                 "and (cu.nick_name like concat('%', #{companyUser}, '%') or cu.phonenumber= #{companyUser})"+
             "</if> " +

+ 6 - 0
fs-service/src/main/java/com/fs/qw/mapper/QwExternalContactTransferLogMapper.java

@@ -100,6 +100,12 @@ public interface QwExternalContactTransferLogMapper
             "            <if test=\"customerId != null \"> and l.customer_id = #{customerId}</if>\n" +
             "            <if test=\"externalContactId != null \"> and l.external_contact_id = #{externalContactId}</if>\n" +
             "            <if test=\"status != null  and status != ''\"> and l.status = #{status}</if>\n" +
+            "            <if test=\"cuDeptIdList != null and !cuDeptIdList.isEmpty() and  userType != '00' \">" +
+            "               AND cu.dept_id IN " +
+            "                   <foreach collection='cuDeptIdList' item='item' open='(' separator=',' close=')'> " +
+            "                       #{item} " +
+            "                   </foreach> " +
+            "            </if>" +
             "        </where> " +
             "order by l.create_time desc "+
             "</script>"})

+ 6 - 0
fs-service/src/main/java/com/fs/qw/mapper/QwFriendWelcomeMapper.java

@@ -67,6 +67,12 @@ public interface QwFriendWelcomeMapper
             "            <if test=\"createTime != null \"> and qfw.create_time = #{createTime}</if>\n" +
             "            <if test=\"updateTime != null \"> and qfw.update_time = #{updateTime}</if>\n" +
             "            <if test=\"companyUserId != null \"> and qu.company_user_id = #{companyUserId}</if>\n" +
+            "            <if test=\"cuDeptIdList != null and !cuDeptIdList.isEmpty() and  userType != '00' \">" +
+            "               AND cu.dept_id IN " +
+            "                   <foreach collection='cuDeptIdList' item='item' open='(' separator=',' close=')'> " +
+            "                       #{item} " +
+            "                   </foreach> " +
+            "            </if>" +
             "        </where>" +
             "</script>")
     public List<QwFriendWelcome> selectQwFriendWelcomeListMyVO(QwFriendWelcomeParam qwFriendWelcomeParam);

+ 6 - 0
fs-service/src/main/java/com/fs/qw/mapper/QwGroupChatMapper.java

@@ -66,6 +66,12 @@ public interface QwGroupChatMapper
             "           and gc.owner in " +
             "                   <foreach  item='item' index='index' collection='qwUserIds' open='(' separator=',' close=')'> #{item}   </foreach> " +
             "           </if>" +
+            "            <if test=\"map.cuDeptIdList != null and !map.cuDeptIdList.isEmpty() and  map.userType != '00' \">" +
+            "               AND cu.dept_id IN " +
+            "                   <foreach collection='map.cuDeptIdList' item='item' open='(' separator=',' close=')'> " +
+            "                       #{item} " +
+            "                   </foreach> " +
+            "            </if>" +
             "        </where>" +
             "GROUP BY " +
             "    gc.chat_id, cu.nick_name,qu.qw_user_name   " +

+ 25 - 0
fs-service/src/main/java/com/fs/qw/mapper/QwUserMapper.java

@@ -9,6 +9,7 @@ import com.fs.qw.dto.QwUserDTO;
 import com.fs.qw.dto.QwUserKeyDTO;
 import com.fs.qw.param.*;
 import com.fs.qw.vo.*;
+import com.fs.sop.domain.QwSop;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.ibatis.annotations.MapKey;
 import org.apache.ibatis.annotations.Param;
@@ -151,6 +152,12 @@ public interface QwUserMapper extends BaseMapper<QwUser>
             "            <if test=\"qwUserName != null  and qwUserName != ''\"> and qu.qw_user_name like concat( #{qwUserName}, '%') </if> " +
             "            <if test=\"corpId != null \"> and qu.corp_id = #{corpId}</if>\n" +
             "            <if test=\"companyId != null \"> and qu.company_id = #{companyId}</if>\n " +
+            "            <if test=\"cuDeptIdList != null and !cuDeptIdList.isEmpty() and  userType != '00' \">" +
+            "               AND cu.dept_id IN " +
+            "                   <foreach collection='cuDeptIdList' item='item' open='(' separator=',' close=')'> " +
+            "                       #{item} " +
+            "                   </foreach> " +
+            "            </if>" +
             "ORDER BY  qu.login_status asc,qu.tool_status desc " +
             "</script>"})
     List<QwUserVO> selectQwUserListStaffVO(QwUserListParam qwUser);
@@ -390,4 +397,22 @@ public interface QwUserMapper extends BaseMapper<QwUser>
     @Select("select qw_user_id from qw_user where company_user_id = ${companyUserId}")
     List<String> findQwUserIdListByCompanyUserId(@Param("companyUserId") Long companyUserId);
 
+    @Select("select qw_user_id from qw_user where company_user_id = #{userId} and corp_id = #{corpId}")
+    List<String> selectQwUserListByCompanyUserId(@Param("userId") Long userId,@Param("corpId") String corpId);
+
+    @Select("<script>" +
+            "select qu.id from qw_user qu " +
+            "left join company_user cu on cu.user_id=qu.company_user_id " +
+            "where 1=1 " +
+            "            <if test=\"map.corpId != null \"> and qu.corp_id = #{map.corpId}</if>\n" +
+            "            <if test=\"map.userId != null \"> and qu.company_user_id = #{map.userId}</if>\n " +
+            "            <if test=\"map.cuDeptIdList != null and !map.cuDeptIdList.isEmpty() and  map.userType != '00' \">" +
+            "               AND cu.dept_id IN " +
+            "                   <foreach collection='map.cuDeptIdList' item='item' open='(' separator=',' close=')'> " +
+            "                       #{item} " +
+            "                   </foreach> " +
+            "            </if>" +
+            "</script>")
+    List<Long> selectQwUserListByCuDeptIdList(@Param("map") QwSop qwSop);
+
 }

+ 11 - 0
fs-service/src/main/java/com/fs/qw/param/QwExternalContactParam.java

@@ -111,4 +111,15 @@ public class QwExternalContactParam {
 
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date sTime;
+
+    /**
+     * 销售部门
+     */
+    private List<Long> cuDeptIdList;
+
+    /**
+     * 部门类型 00 管理员 01 员工
+     */
+    private String userType;
+
 }

+ 12 - 0
fs-service/src/main/java/com/fs/qw/param/QwExternalContactTransferLogParam.java

@@ -5,6 +5,7 @@ import com.fs.common.annotation.Excel;
 import lombok.Data;
 
 import java.util.Date;
+import java.util.List;
 
 @Data
 public class QwExternalContactTransferLogParam {
@@ -44,4 +45,15 @@ public class QwExternalContactTransferLogParam {
     private Integer status;
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
+
+
+    /**
+     * 销售部门
+     */
+    private List<Long> cuDeptIdList;
+
+    /**
+     * 部门类型 00 管理员 01 员工
+     */
+    private String userType;
 }

+ 11 - 0
fs-service/src/main/java/com/fs/qw/param/QwFriendWelcomeParam.java

@@ -6,6 +6,7 @@ import com.fs.common.core.domain.BaseEntity;
 import lombok.Data;
 
 import java.util.Date;
+import java.util.List;
 
 @Data
 public class QwFriendWelcomeParam extends BaseEntity {
@@ -61,4 +62,14 @@ public class QwFriendWelcomeParam extends BaseEntity {
     /** 部门ID */
     private Long deptId;
 
+    /**
+     * 销售部门
+     */
+    private List<Long> cuDeptIdList;
+
+    /**
+     * 部门类型 00 管理员 01 员工
+     */
+    private String userType;
+
 }

+ 10 - 0
fs-service/src/main/java/com/fs/qw/param/QwGroupChatParam.java

@@ -50,4 +50,14 @@ public class QwGroupChatParam {
     /** 状态集合 */
     private List<String> statusList;
 
+    /**
+     * 销售部门
+     */
+    private List<Long> cuDeptIdList;
+
+    /**
+     * 部门类型 00 管理员 01 员工
+     */
+    private String userType;
+
 }

+ 15 - 0
fs-service/src/main/java/com/fs/qw/param/QwUserListParam.java

@@ -47,4 +47,19 @@ public class QwUserListParam {
 
     private Integer sendType;
 
+    /**
+     * 企业微信李的部门
+     */
+    private Long deptId;
+
+    /**
+     * 销售部门
+     */
+    private List<Long> cuDeptIdList;
+
+    /**
+     * 部门类型 00 管理员 01 员工
+     */
+    private String userType;
+
 }

+ 1 - 2
fs-service/src/main/java/com/fs/qw/service/IQwGroupChatService.java

@@ -10,7 +10,6 @@ import com.fs.qw.vo.QwGroupChatOptionsVO;
 import com.fs.qw.vo.QwGroupChatTransferVO;
 import com.fs.qw.vo.QwGroupChatVO;
 
-import javax.validation.Valid;
 import java.util.List;
 
 /**
@@ -40,7 +39,7 @@ public interface IQwGroupChatService
     /**
      *  同步客户群列表
      */
-    public R cogradientGroupChat(String corpId) throws Exception;
+    public R cogradientGroupChat(String corpId,List<String> qwUserIdList ) throws Exception;
     /**
      * 新增客户群
      *

+ 5 - 0
fs-service/src/main/java/com/fs/qw/service/IQwUserService.java

@@ -9,6 +9,7 @@ import com.fs.qw.vo.QwHookAuthVO;
 import com.fs.qw.vo.QwOptionsVO;
 import com.fs.qw.vo.QwUserVO;
 import com.fs.qw.vo.UserVOs;
+import com.fs.sop.domain.QwSop;
 import org.apache.commons.lang3.tuple.Pair;
 
 import java.util.ArrayList;
@@ -166,6 +167,10 @@ public interface IQwUserService
 
     List<QwWorkTask> selectQwWorkTaskList(SelectQwWorkTaskListParam param);
 
+    List<String> selectQwUserListByCompanyUserId(Long userId,String corpId );
+    List<Long> selectQwUserListByCuDeptIdList(QwSop qwSop);
+
+
     /**
      * 重启云主机
      * @param IP 服务器ip

+ 21 - 21
fs-service/src/main/java/com/fs/qw/service/impl/QwExternalContactServiceImpl.java

@@ -1701,27 +1701,27 @@ public class QwExternalContactServiceImpl extends ServiceImpl<QwExternalContactM
         qwExternalContact.setExternalUserId(externalUserID); // 设置外部联系人ID
         qwExternalContact.setCorpId(corpId);
         qwExternalContact.setCreateTime(new Date());
-        if(StringUtils.isNotEmpty(state)){
-            try {
-                AdUploadVo vo = AdUploadVo.builder().state(state).type(AdUploadType.ADD_WX).build();
-                logger.info("上传mq:{}", vo);
-                rocketMQTemplate.syncSend("ad-upload", JSON.toJSONString(vo));
-            }catch (Exception e){
-                logger.error("广告回调上传",e);
-            }
-        }
-        try {
-            new Thread(() -> {
-                try {
-                    Thread.sleep(3000);
-                    rocketMQTemplate.syncSend("repeat-upload", JSON.toJSONString(RepeatUploadVo.builder().type(0).externalUserId(externalUserID).build()));
-                } catch (InterruptedException e) {
-                    logger.error("添加等待时长错误", e);
-                }
-            }).start();
-        }catch (Exception e){
-            logger.error("重粉提交mq失败", e);
-        }
+//        if(StringUtils.isNotEmpty(state)){
+//            try {
+//                AdUploadVo vo = AdUploadVo.builder().state(state).type(AdUploadType.ADD_WX).build();
+//                logger.info("上传mq:{}", vo);
+//                rocketMQTemplate.syncSend("ad-upload", JSON.toJSONString(vo));
+//            }catch (Exception e){
+//                logger.error("广告回调上传",e);
+//            }
+//        }
+//        try {
+//            new Thread(() -> {
+//                try {
+//                    Thread.sleep(3000);
+//                    rocketMQTemplate.syncSend("repeat-upload", JSON.toJSONString(RepeatUploadVo.builder().type(0).externalUserId(externalUserID).build()));
+//                } catch (InterruptedException e) {
+//                    logger.error("添加等待时长错误", e);
+//                }
+//            }).start();
+//        }catch (Exception e){
+//            logger.error("重粉提交mq失败", e);
+//        }
 //        iAdHtmlClickLogService.upload(state, AdUploadType.ADD_WX, e -> finalQwExternalContact.setUploadAddWxStatus(1));
 
         //先入一次库

+ 8 - 4
fs-service/src/main/java/com/fs/qw/service/impl/QwGroupChatServiceImpl.java

@@ -249,21 +249,25 @@ public class QwGroupChatServiceImpl implements IQwGroupChatService
      *  同步客户群列表
      */
     @Override
-    public R cogradientGroupChat(String corpId) throws Exception {
+    public R cogradientGroupChat(String corpId,List<String> qwUserIdList) throws Exception {
 
 //        过滤群主的id集合
-        ArrayList<String> ownerFilterList=new ArrayList<>();
-
+        ArrayList<String> ownerFilterList = new ArrayList<>(qwUserIdList);
         try {
             QwGroupChatListResult qwGroupChatListResult = qwApiService.groupChatList(ownerFilterList, null, corpId);
 
+            if (qwGroupChatListResult.getErrcode()!=0){
+                return R.error(qwGroupChatListResult.getErrmsg());
+            }
             insertGroupChatList(qwGroupChatListResult,corpId,ownerFilterList);
 
         }catch (Exception e){
+            e.printStackTrace();
+            System.out.println("同步客户群列表失败");
             return R.error(e.getMessage());
         }
 
-
+        System.out.println("同步客户群列表成功");
         return R.ok();
 
     }

+ 12 - 0
fs-service/src/main/java/com/fs/qw/service/impl/QwUserServiceImpl.java

@@ -37,6 +37,7 @@ import com.fs.qwApi.domain.QwUserIdResult;
 import com.fs.qwApi.domain.inner.DeptUser;
 import com.fs.qwApi.param.QwOpenidByUserParams;
 import com.fs.qwApi.service.QwApiService;
+import com.fs.sop.domain.QwSop;
 import com.fs.voice.utils.StringUtil;
 import com.fs.wxwork.dto.*;
 import com.fs.wxwork.service.WxWorkService;
@@ -238,6 +239,17 @@ public class QwUserServiceImpl implements IQwUserService
         return qwWorkTasks;
     }
 
+    @Override
+    public List<String> selectQwUserListByCompanyUserId(Long userId, String corpId) {
+        return qwUserMapper.selectQwUserListByCompanyUserId(userId,corpId);
+
+    }
+
+    @Override
+    public List<Long> selectQwUserListByCuDeptIdList(QwSop qwSop) {
+        return qwUserMapper.selectQwUserListByCuDeptIdList(qwSop);
+    }
+
 
     /**
      * 查询企微用户

+ 1 - 0
fs-service/src/main/java/com/fs/qw/vo/QwUserVO.java

@@ -40,6 +40,7 @@ public class QwUserVO {
     private String nickName;
     private String userName;
     private String welcomeText;
+    private Integer isSendMsg;
     /**
     * 活码id
     */

+ 24 - 0
fs-service/src/main/java/com/fs/sop/domain/QwSop.java

@@ -1,12 +1,14 @@
 package com.fs.sop.domain;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fs.common.annotation.Excel;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * 企微sop对象 qw_sop
@@ -113,6 +115,28 @@ public class QwSop implements Serializable
     // 群聊ID
     private String chatId;
 
+
+    /**
+     * 销售id
+     */
+    @TableField(exist = false)
+    private Long userId;
+
+    /**
+     * 销售部门
+     */
+    @TableField(exist = false)
+    private List<Long> cuDeptIdList;
+
+    /**
+     * 部门类型 00 管理员 01 员工
+     */
+    @TableField(exist = false)
+    private String userType;
+
+    @TableField(exist = false)
+    private List<Long> qwUserIdList;
+
     @Excel(name = "开启评论或者弹幕,1-开启评论;2-开启弹幕;3-都关闭")
     private Integer openCommentStatus;
 

+ 24 - 0
fs-service/src/main/java/com/fs/statis/dto/StatsWatchLogPageListDTO.java

@@ -4,6 +4,7 @@ import lombok.Data;
 
 import java.io.Serializable;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Data
 public class StatsWatchLogPageListDTO implements Serializable {
@@ -13,6 +14,29 @@ public class StatsWatchLogPageListDTO implements Serializable {
      */
     private List<String> userIds;
 
+    public List<String> getUserIds() {
+        if (userIds == null || userIds.isEmpty()) {
+            return userIds;
+        }
+
+        return userIds.stream()
+                .map(id -> {
+                    if (id == null) {
+                        return null;
+                    }
+                    // 去除前缀
+                    if (id.startsWith("dept_")) {
+                        return id.substring(5);
+                    } else if (id.startsWith("company_")) {
+                        return id.substring(8);
+                    } else if (id.startsWith("user_")) {
+                        return id.substring(5);
+                    }
+                    return id;
+                })
+                .collect(Collectors.toList());
+    }
+
     /**
      * 开始时间
      */

+ 8 - 4
fs-service/src/main/java/com/fs/system/service/impl/SysMenuServiceImpl.java

@@ -54,7 +54,6 @@ public class SysMenuServiceImpl implements ISysMenuService
     public List<SysMenu> selectMenuList(Long userId)
     {
         SysMenu sysMenu = new SysMenu();
-        sysMenu.setStatus("0");
         return selectMenuList(sysMenu, userId);
     }
 
@@ -214,8 +213,11 @@ public class SysMenuServiceImpl implements ISysMenuService
             // 如果是顶级节点, 遍历该父节点的所有子节点
             if (!tempList.contains(menu.getParentId()))
             {
-                recursionFn(menus, menu);
-                returnList.add(menu);
+                // 如果正常
+                if("0".equals(menu.getStatus())){
+                    recursionFn(menus, menu);
+                    returnList.add(menu);
+                }
             }
         }
         if (returnList.isEmpty())
@@ -488,7 +490,9 @@ public class SysMenuServiceImpl implements ISysMenuService
             SysMenu n = (SysMenu) it.next();
             if (n.getParentId().longValue() == t.getMenuId().longValue())
             {
-                tlist.add(n);
+                if("0".equals(n.getStatus())){
+                    tlist.add(n);
+                }
             }
         }
         return tlist;

+ 1 - 1
fs-service/src/main/resources/application-config-druid-bnkc.yml

@@ -84,7 +84,7 @@ tmp_secret_config:
 cloud_host:
   company_name: 百年康成
 headerImg:
-  imgUrl: https
+  imgUrl: https://bnkc-1363824368.cos.ap-chongqing.myqcloud.com/fs/logo/bnkc.png
 ipad:
   ipadUrl: http://ipad.cdwjyyh.com
 wx_miniapp_temp:

+ 1 - 1
fs-service/src/main/resources/application-config-druid-whhm.yml

@@ -79,7 +79,7 @@ tmp_secret_config:
 cloud_host:
   company_name: 武汉惠名
 headerImg:
-  imgUrl: https
+  imgUrl: https://whhm-1361716159.cos.ap-chongqing.myqcloud.com/fs/logo/8d71d552783718d726149312bfca24a.png
 ipad:
   ipadUrl: http://ipad.cdwjyyh.com
 wx_miniapp_temp:

+ 4 - 4
fs-service/src/main/resources/mapper/company/CompanyRoleMapper.xml

@@ -139,10 +139,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="selectRoleVo"/>
         <where>
             <if test="roleName != null">
-                r.role_name=#{roleName}
+                AND r.role_name=#{roleName}
             </if>
             <if test="companyId != null">
-                r.company_id = #{companyId}
+                AND r.company_id = #{companyId}
             </if>
         </where>
         limit 1
@@ -152,10 +152,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="selectRoleVo"/>
         <where>
             <if test="roleKey != null">
-                r.role_key=#{roleKey}
+                AND r.role_key=#{roleKey}
             </if>
             <if test="companyId != null">
-                r.company_id = #{companyId}
+                AND r.company_id = #{companyId}
             </if>
         </where>
         limit 1

+ 1 - 1
fs-service/src/main/resources/mapper/statis/FsStatisQwWatchMapper.xml

@@ -252,7 +252,7 @@
                 AND data_date between #{startDate} and #{endDate}
             </if>
             <if test="userIds != null and userIds.size() > 0">
-                AND company_user in
+                AND company_user_id in
                 <foreach collection="userIds" item="item" open="(" close=")" separator=",">
                     #{item}
                 </foreach>