Browse Source

Merge remote-tracking branch 'origin/master'

xgb 5 ngày trước cách đây
mục cha
commit
f162d6b3df
53 tập tin đã thay đổi với 501 bổ sung71 xóa
  1. 2 1
      fs-admin/src/main/java/com/fs/course/controller/FsUserCourseCategoryController.java
  2. 1 1
      fs-admin/src/main/java/com/fs/his/controller/FsUserController.java
  3. 70 0
      fs-company/src/main/java/com/fs/company/controller/company/CompanyUserController.java
  4. 2 2
      fs-company/src/main/java/com/fs/company/controller/course/FsCourseFinishTempParentController.java
  5. 2 1
      fs-company/src/main/java/com/fs/company/controller/course/FsUserCourseCategoryController.java
  6. 52 7
      fs-company/src/main/java/com/fs/company/controller/qw/QwSopTempController.java
  7. 2 2
      fs-company/src/main/java/com/fs/company/controller/qw/SopUserLogsController.java
  8. 2 2
      fs-ipad-task/src/main/java/com/fs/app/service/IpadSendServer.java
  9. 4 0
      fs-service/src/main/java/com/fs/company/domain/CompanyUser.java
  10. 21 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyUserMapper.java
  11. 1 0
      fs-service/src/main/java/com/fs/company/service/ICompanyUserService.java
  12. 6 0
      fs-service/src/main/java/com/fs/company/service/impl/CompanyUserServiceImpl.java
  13. 44 0
      fs-service/src/main/java/com/fs/course/mapper/FsCourseWatchLogMapper.java
  14. 2 2
      fs-service/src/main/java/com/fs/course/mapper/FsUserCourseCategoryMapper.java
  15. 5 0
      fs-service/src/main/java/com/fs/course/mapper/FsVideoResourceMapper.java
  16. 1 1
      fs-service/src/main/java/com/fs/course/service/IFsUserCourseCategoryService.java
  17. 2 2
      fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseCategoryServiceImpl.java
  18. 15 6
      fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java
  19. 20 0
      fs-service/src/main/java/com/fs/fastGpt/service/impl/AiHookServiceImpl.java
  20. 1 1
      fs-service/src/main/java/com/fs/his/mapper/FsUserMapper.java
  21. 3 0
      fs-service/src/main/java/com/fs/his/param/FsUserParam.java
  22. 11 6
      fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreOrderItemScrmMapper.java
  23. 20 3
      fs-service/src/main/java/com/fs/hisStore/mapper/FsStorePaymentScrmMapper.java
  24. 2 0
      fs-service/src/main/java/com/fs/hisStore/param/FsStoreOrderParam.java
  25. 4 0
      fs-service/src/main/java/com/fs/hisStore/param/FsStorePaymentParam.java
  26. 1 0
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java
  27. 4 0
      fs-service/src/main/java/com/fs/hisStore/vo/FsStorePaymentVO.java
  28. 1 0
      fs-service/src/main/java/com/fs/qw/mapper/QwUserMapper.java
  29. 6 0
      fs-service/src/main/java/com/fs/qw/mapper/QwWatchLogMapper.java
  30. 5 0
      fs-service/src/main/java/com/fs/qw/param/QwUserListParam.java
  31. 1 0
      fs-service/src/main/java/com/fs/qw/service/impl/QwExternalContactServiceImpl.java
  32. 3 1
      fs-service/src/main/java/com/fs/qw/service/impl/QwUserComplainRecordServiceImpl.java
  33. 1 1
      fs-service/src/main/java/com/fs/qw/vo/QwWatchLogStatisticsListVO.java
  34. 14 0
      fs-service/src/main/java/com/fs/sop/domain/QwSopTemp.java
  35. 3 0
      fs-service/src/main/java/com/fs/sop/mapper/SopUserLogsMapper.java
  36. 1 1
      fs-service/src/main/java/com/fs/sop/service/ISopUserLogsService.java
  37. 7 0
      fs-service/src/main/java/com/fs/sop/service/impl/QwSopTempServiceImpl.java
  38. 5 0
      fs-service/src/main/java/com/fs/sop/service/impl/SopUserLogsInfoServiceImpl.java
  39. 55 2
      fs-service/src/main/java/com/fs/sop/service/impl/SopUserLogsServiceImpl.java
  40. 1 0
      fs-service/src/main/resources/application-config-druid-heyantang.yml
  41. 4 4
      fs-service/src/main/resources/application-config-druid-yxj.yml
  42. 2 2
      fs-service/src/main/resources/application-druid-kyt.yml
  43. 3 2
      fs-service/src/main/resources/application-druid-yxj.yml
  44. 12 0
      fs-service/src/main/resources/mapper/company/CompanyUserMapper.xml
  45. 8 0
      fs-service/src/main/resources/mapper/course/FsUserCourseCategoryMapper.xml
  46. 22 16
      fs-service/src/main/resources/mapper/hisStore/FsStoreOrderScrmMapper.xml
  47. 6 1
      fs-service/src/main/resources/mapper/hisStore/FsStorePaymentScrmMapper.xml
  48. 3 0
      fs-service/src/main/resources/mapper/sop/QwSopMapper.xml
  49. 6 0
      fs-service/src/main/resources/mapper/sop/QwSopTempMapper.xml
  50. 23 0
      fs-service/src/main/resources/mapper/sop/SopUserLogsMapper.xml
  51. 2 2
      fs-user-app/src/main/java/com/fs/app/controller/CourseController.java
  52. 2 1
      fs-user-app/src/main/java/com/fs/app/controller/store/CourseScrmController.java
  53. 5 1
      fs-user-app/src/main/java/com/fs/app/controller/store/WxUserScrmController.java

+ 2 - 1
fs-admin/src/main/java/com/fs/course/controller/FsUserCourseCategoryController.java

@@ -163,7 +163,8 @@ public class FsUserCourseCategoryController extends BaseController
             List<OptionsVO> list = fsUserCourseCategoryService.selectFsUserCourseCategoryPidList(userId);
             return R.ok().put("data", list);
         }
-        List<OptionsVO> list = fsUserCourseCategoryService.selectFsUserCourseCategoryPidList();
+        Integer isShow = null;
+        List<OptionsVO> list = fsUserCourseCategoryService.selectFsUserCourseCategoryPidList(isShow);
         return R.ok().put("data", list);
     }
 

+ 1 - 1
fs-admin/src/main/java/com/fs/his/controller/FsUserController.java

@@ -99,7 +99,7 @@ public class FsUserController extends BaseController
             fsUser.setPhone(encryptPhone(fsUser.getPhoneMk()));
         }
         if(StringUtils.isNotEmpty(fsUser.getPhone())){
-            fsUser.setPhone(encryptPhone(fsUser.getPhone()));
+            fsUser.setEncryptPhone(encryptPhone(fsUser.getPhone()));
         }
         List<FsUserVO> list = fsUserService.selectFsUserListVO(fsUser);
         SysRole sysRole = isCheckPermission();

+ 70 - 0
fs-company/src/main/java/com/fs/company/controller/company/CompanyUserController.java

@@ -122,6 +122,37 @@ public class CompanyUserController extends BaseController {
         List<CompanyUser> list = companyUserService.selectCompanyUserList(user);
         return getDataTable(list);
     }
+
+
+    /**
+     * 获取用户列表
+     */
+    @GetMapping("/deptList")
+    public TableDataInfo deptList(CompanyUser user)
+    {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        user.setCompanyId(loginUser.getCompany().getCompanyId());
+
+        List<Long> combinedDpetList = new ArrayList<>();
+        //本部门
+        Long deptId = loginUser.getUser().getDeptId();
+        if (deptId!=null){
+            combinedDpetList.add(deptId);
+        }
+        //本部门的下级部门
+        List<Long> deptList = companyDeptService.selectCompanyDeptByParentId(deptId);
+        if (!deptList.isEmpty()){
+            combinedDpetList.addAll(deptList);
+        }
+
+        user.setDeptList(combinedDpetList);
+
+        startPage();
+        List<CompanyUser> list = companyUserService.selectCompanyUserList(user);
+        return getDataTable(list);
+    }
+
+
     @GetMapping("/getUserList")
     public R getUserList()
     {
@@ -563,6 +594,45 @@ public class CompanyUserController extends BaseController {
         return R.ok().put("data", new PageInfo<>(companyUserList));
     }
 
+    /**
+     * 根据销售名称模糊查询+部门
+     * @param name  名称
+     * @return  list
+     */
+    @GetMapping("/getCompanyUserListLikeNameDept")
+    public R getCompanyUserListLikeNameDept(@RequestParam(required = false) String name,
+                                        @RequestParam(required = false, defaultValue = "1") Integer pageNum,
+                                        @RequestParam(required = false, defaultValue = "10") Integer pageSize) {
+        Map<String,Object> params = new HashMap<>();
+        params.put("nickName", name);
+
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+
+        //查询多条数据传入公司
+        if (pageSize>=200){
+
+            params.put("companyId", loginUser.getCompany().getCompanyId());
+        }
+        List<Long> combinedDeptList = new ArrayList<>();
+        //本部门
+        Long deptId = loginUser.getUser().getDeptId();
+        if (deptId!=null){
+            combinedDeptList.add(deptId);
+        }
+        //本部门的下级部门
+        List<Long> deptList = companyDeptService.selectCompanyDeptByParentId(deptId);
+        if (!deptList.isEmpty()){
+            combinedDeptList.addAll(deptList);
+        }
+
+        params.put("combinedDeptList",combinedDeptList);
+
+
+        PageHelper.startPage(pageNum, pageSize);
+        List<OptionsVO> companyUserList = companyUserService.selectCompanyUserListByMap(params);
+        return R.ok().put("data", new PageInfo<>(companyUserList));
+    }
+
 
     /**
      * 获取用户列表

+ 2 - 2
fs-company/src/main/java/com/fs/company/controller/course/FsCourseFinishTempParentController.java

@@ -97,7 +97,7 @@ public class FsCourseFinishTempParentController extends BaseController
             combinedList.addAll(deptList);
         }
 
-        List<Long> userIds = companyUserService.selectCompanyQwUserByDept(deptList, loginUser.getUser().getUserType());
+        List<Long> userIds = companyUserService.selectCompanyQwUserByDept(combinedList, loginUser.getUser().getUserType());
         if (userIds.isEmpty()){
             return getDataTable(new ArrayList<>());
         }
@@ -162,7 +162,7 @@ public class FsCourseFinishTempParentController extends BaseController
             combinedList.addAll(deptList);
         }
 
-        List<Long> userIds = companyUserService.selectCompanyQwUserByDept(deptList, loginUser.getUser().getUserType());
+        List<Long> userIds = companyUserService.selectCompanyQwUserByDept(combinedList, loginUser.getUser().getUserType());
         if (userIds.isEmpty()){
             return AjaxResult.error();
         }

+ 2 - 1
fs-company/src/main/java/com/fs/company/controller/course/FsUserCourseCategoryController.java

@@ -109,7 +109,8 @@ public class FsUserCourseCategoryController extends BaseController
     @GetMapping("/getCatePidList")
     public R getCatePidList()
     {
-        List<OptionsVO> list = fsUserCourseCategoryService.selectFsUserCourseCategoryPidList();
+        Integer isShow = null;
+        List<OptionsVO> list = fsUserCourseCategoryService.selectFsUserCourseCategoryPidList(isShow);
         return R.ok().put("data", list);
     }
 

+ 52 - 7
fs-company/src/main/java/com/fs/company/controller/qw/QwSopTempController.java

@@ -10,22 +10,26 @@ 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.company.service.impl.CompanyUserServiceImpl;
+import com.fs.company.vo.DocCompanyUserVO;
 import com.fs.framework.security.LoginUser;
 import com.fs.framework.service.TokenService;
+import com.fs.qw.service.IQwUserService;
 import com.fs.qw.vo.SortDayVo;
+import com.fs.sop.domain.QwSop;
 import com.fs.sop.domain.QwSopTemp;
 import com.fs.sop.domain.QwSopTempDay;
 import com.fs.sop.params.QwSopShareTempParam;
 import com.fs.sop.service.IQwSopTempService;
 import com.fs.sop.vo.UpdateRedVo;
+import com.fs.voice.utils.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -43,14 +47,19 @@ public class QwSopTempController extends BaseController
     @Autowired
     private TokenService tokenService;
 
+    @Autowired
+    private IQwUserService iQwUserService;
+
 
     @Autowired
     private CompanyDeptServiceImpl companyDeptService;
 
+    @Autowired
+    private CompanyUserServiceImpl companyUserService;
+
     /**
      * 查询sop模板列表
      */
-    @PreAuthorize("@ss.hasPermi('qw:sopTemp:list')")
     @GetMapping("/list")
     public TableDataInfo list(QwSopTemp qwSopTemp)
     {
@@ -58,8 +67,37 @@ public class QwSopTempController extends BaseController
         LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
         qwSopTemp.setCompanyId(loginUser.getCompany().getCompanyId());
 
-//        List<QwSopTemp> list = qwSopTempService.selectQwSopTempList(qwSopTemp);
         List<QwSopTemp> list = qwSopTempService.selectQwSopTempListNew(qwSopTemp);
+
+        // 收集所有需要查询的用户ID
+        Set<Long> userIds = list.stream()
+                .map(QwSopTemp::getCreateBy)
+                .filter(StringUtil::strIsNullOrEmpty)
+                .map(Long::valueOf)
+                .collect(Collectors.toSet());
+
+        if (!userIds.isEmpty()){
+            // 批量查询用户信息
+            Map<Long, DocCompanyUserVO> userMap = companyUserService
+                    .selectDocCompanyUserListByUserIds(userIds)
+                    .stream()
+                    .collect(Collectors.toMap(DocCompanyUserVO::getUserId, Function.identity()));
+
+
+            list.forEach(item->{
+
+                if (!StringUtil.strIsNullOrEmpty(item.getCreateBy())) {
+                    DocCompanyUserVO user = userMap.get(Long.valueOf(item.getCreateBy()));
+                    if (user != null) {
+                        item.setCreateByName(user.getNickName());
+                        item.setCreateByDeptName(user.getDeptName());
+                    }
+                }
+
+            });
+        }
+
+
         return getDataTable(list);
     }
 
@@ -90,7 +128,6 @@ public class QwSopTempController extends BaseController
         qwSopTemp.setCompanyId(loginUser.getCompany().getCompanyId());
         qwSopTemp.setCreateBy(String.valueOf(loginUser.getUser().getUserId()));
         startPage();
-//        List<QwSopTemp> list = qwSopTempService.selectQwSopTempList(qwSopTemp);
         List<QwSopTemp> list = qwSopTempService.selectQwSopTempListNew(qwSopTemp);
         return getDataTable(list);
     }
@@ -118,7 +155,13 @@ public class QwSopTempController extends BaseController
         if (!deptList.isEmpty()){
             combinedDpetList.addAll(deptList);
         }
-        qwSopTemp.setCuDeptIdList(combinedDpetList);
+
+        List<Long> userIds = companyUserService.selectCompanyQwUserByDept(combinedDpetList, loginUser.getUser().getUserType());
+        if (userIds.isEmpty()){
+            return getDataTable(new ArrayList<>());
+        }
+
+        qwSopTemp.setUserIds(userIds);
 
         startPage();
 //        List<QwSopTemp> list = qwSopTempService.selectQwSopTempList(qwSopTemp);
@@ -236,6 +279,8 @@ public class QwSopTempController extends BaseController
     @PreAuthorize("@ss.hasPermi('qw:sopTemp:edit') or @ss.hasPermi('qw:sopTemp:myEdit') or @ss.hasPermi('qw:sopTemp:deptEdit')")
     @PostMapping("/copyTemplate")
     public AjaxResult copyTemplate(@RequestBody QwSopTemp qwSopTemp){
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        qwSopTemp.setCreateBy(loginUser.getUser().getUserId().toString());
         qwSopTempService.copyTemplate(qwSopTemp);
         return toAjax(1);
     }

+ 2 - 2
fs-company/src/main/java/com/fs/company/controller/qw/SopUserLogsController.java

@@ -179,8 +179,8 @@ public class SopUserLogsController extends BaseController
     @Log(title = "修改群营期时间", businessType = BusinessType.UPDATE)
     @PostMapping("/updateLogDate")
     public R updateLogDate(@RequestBody UpdateSopUserLogDateVo vo){
-        sopUserLogsService.updateLogDate(vo);
-        return R.ok();
+
+        return sopUserLogsService.updateLogDate(vo);
     }
     @Log(title = "追加SOP群聊", businessType = BusinessType.UPDATE)
     @PostMapping("/addGroupChat")

+ 2 - 2
fs-ipad-task/src/main/java/com/fs/app/service/IpadSendServer.java

@@ -296,7 +296,7 @@ public class IpadSendServer {
             return false;
         }
 
-        if (qwSopLogs.getSendType() != 12 && qwSopLogs.getSendType() != 6 && noSop) {
+        if (qwSopLogs.getSendType() != 6 && noSop) {
             // 客户的信息
 //            QwExternalContactHParam contactHParam = new QwExternalContactHParam();
 //            contactHParam.setUserId(qwUser.getQwUserId().trim());
@@ -335,7 +335,7 @@ public class IpadSendServer {
     public void send(QwSopCourseFinishTempSetting.Setting content, QwUser qwUser, QwSopLogs qwSopLogs, Map<String, FsCoursePlaySourceConfig> miniMap, BaseVo parentVo) {
         BaseVo vo = new BaseVo();
         vo.setId(Long.parseLong(qwSopLogs.getId()));
-        vo.setRoom(qwSopLogs.getSendType() == 6 || qwSopLogs.getSendType() == 12);
+        vo.setRoom(qwSopLogs.getSendType() == 6);
         vo.setUuid(qwUser.getUid());
         vo.setExId(qwSopLogs.getExternalUserId());
         vo.setServerId(qwUser.getServerId());

+ 4 - 0
fs-service/src/main/java/com/fs/company/domain/CompanyUser.java

@@ -1,5 +1,6 @@
 package com.fs.company.domain;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fs.common.annotation.Excel;
 import com.fs.common.core.domain.BaseEntity;
@@ -177,6 +178,9 @@ public class CompanyUser extends BaseEntity
     /** 是否允许所有方式注册会员,1-是,0-否,默认1(用于个微注册会员) */
     private Integer isAllowedAllRegister;
 
+    @TableField(exist = false)
+    private List<Long> deptList;
+
     public String getMaOpenId() {
         return maOpenId;
     }

+ 21 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyUserMapper.java

@@ -95,16 +95,37 @@ public interface CompanyUserMapper
     List<CompanyUser> selectAllUsersList(CompanyUser user);
 
     List<CompanyUserVO> selectMyUserList(CompanyUser user);
+
     @Select("select u.* from company_user u where u.dept_id in ( SELECT dept_id FROM company_dept WHERE dept_id = #{maps.deptId} or find_in_set( #{maps.deptId} , ancestors ) ) ${maps.params.dataScope}")
     List<CompanyUser> getUserListByDeptId(@Param("maps") CompanyUser user);
+
     @Select("select count(1) from company_user  where company_id=#{companyId} and del_flag=0  ")
     Integer selectCompanyUserCountByCompanyId(Long companyId);
+
     @Select("select count(1) from company_user  where user_name=#{userName} and del_flag=0  ")
     Integer checkUserNameUnique(String userName);
+
     @Select("select u.*,d.dept_name from company_user u left join company_dept d on d.dept_id=u.dept_id  where u.user_id in (select )  ")
     List<DocCompanyUserVO> selectDocCompanyUserList(Long docId);
+
     @Select("select u.*,d.dept_name from company_user u left join company_dept d on d.dept_id=u.dept_id  where find_in_set(u.user_id,#{companyUserIds})  ")
     List<DocCompanyUserVO> selectDocCompanyUserListByIds(String companyUserIds);
+
+    @Select("<script>"+
+            "    SELECT u.*, d.dept_name \n" +
+            "    FROM company_user u \n" +
+            "    LEFT JOIN company_dept d ON d.dept_id = u.dept_id \n" +
+            "    <where>\n" +
+            "        <if test=\"userIds != null and userIds.size() > 0\">\n" +
+            "            u.user_id IN\n" +
+            "            <foreach collection=\"userIds\" item=\"userId\" open=\"(\" separator=\",\" close=\")\">\n" +
+            "                #{userId}\n" +
+            "            </foreach>\n" +
+            "        </if>\n" +
+            "    </where>"+
+            "</script>")
+    List<DocCompanyUserVO> selectDocCompanyUserListByUserIds(@Param("userIds") Set<Long> userIds);
+
     @Select("select u.* from company_user u   where u.company_id=#{companyId} and u.nick_name=#{nickName} limit 1 ")
     CompanyUser selectCompanyUserByCompanyIdAndNickName(@Param("companyId")long companyId,@Param("nickName") String nickName);
 

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

@@ -117,6 +117,7 @@ public interface ICompanyUserService {
 
 
     List<DocCompanyUserVO> selectDocCompanyUserListByIds(String companyUserIds);
+    List<DocCompanyUserVO> selectDocCompanyUserListByUserIds(Set<Long> userIds);
 
     CompanyUser selectCompanyUserByCompanyIdAndNickName(long companyId, String nickName);
 

+ 6 - 0
fs-service/src/main/java/com/fs/company/service/impl/CompanyUserServiceImpl.java

@@ -639,6 +639,12 @@ public class CompanyUserServiceImpl implements ICompanyUserService
         return companyUserMapper.selectDocCompanyUserListByIds(companyUserIds);
     }
 
+
+    @Override
+    public List<DocCompanyUserVO> selectDocCompanyUserListByUserIds(Set<Long> userIds) {
+        return companyUserMapper.selectDocCompanyUserListByUserIds(userIds);
+    }
+
     @Override
     public CompanyUser selectCompanyUserByCompanyIdAndNickName(long companyId, String nickName) {
         return companyUserMapper.selectCompanyUserByCompanyIdAndNickName(companyId,nickName);

+ 44 - 0
fs-service/src/main/java/com/fs/course/mapper/FsCourseWatchLogMapper.java

@@ -295,6 +295,50 @@ public interface FsCourseWatchLogMapper extends BaseMapper<FsCourseWatchLog> {
             "</script>"})
     List<FsCourseWatchLogStatisticsListVO> selectFsCourseWatchLogStatisticsListVO(FsCourseWatchLogStatisticsListParam param);
 
+    @Select({"<script> " +
+            "SELECT COUNT(*) FROM (" +
+            "    SELECT 1 " +
+            "    FROM fs_course_watch_log o " +
+            "    <if test= 'sendType != 1 '> " +
+            "    LEFT JOIN qw_user qu on qu.id = o.qw_user_id " +
+            "    </if> " +
+            "    <if test= 'sendType == 1 '> " +
+            "    LEFT JOIN company_user cu on cu.user_id = o.company_user_id " +
+            "    </if> " +
+            "    WHERE o.company_id = #{companyId} " +
+            "    <if test= 'sendType != null '> " +
+            "        AND o.send_type = #{sendType} " +
+            "    </if> " +
+            "    <if test= 'sTime != null '> " +
+            "        AND o.create_time &gt;= #{sTime} " +
+            "    </if> " +
+            "    <if test='eTime != null '> " +
+            "        AND o.create_time &lt; DATE_ADD(#{eTime}, INTERVAL 1 DAY) " +
+            "    </if> " +
+            "    <if test ='sendType != 1 and nickName != null and nickName != \"\"'> " +
+            "        AND qu.qw_user_name LIKE CONCAT(#{nickName}, '%') " +
+            "    </if> " +
+            "    <if test ='sendType == 1 and nickName != null and nickName != \"\"'> " +
+            "        AND cu.nick_name LIKE CONCAT(#{nickName}, '%') " +
+            "    </if> " +
+            "    <if test ='courseId != null'> " +
+            "        AND o.course_id = #{courseId} " +
+            "    </if> " +
+            "    <if test ='videoId != null'> " +
+            "        AND o.video_id = #{videoId} " +
+            "    </if> " +
+            "    GROUP BY o.video_id, " +
+            "    <if test= 'sendType != 1 '> " +
+            "        o.qw_user_id, " +
+            "    </if> " +
+            "    <if test= 'sendType == 1 '> " +
+            "        o.company_user_id, " +
+            "    </if> " +
+            "    DATE(o.create_time) " +
+            ") t " +
+            "</script>"})
+    Long selectFsCourseWatchLogStatisticsListVOCount(FsCourseWatchLogStatisticsListParam param);
+
 
     ArrayList<FsCourseWatchLogByFinishTimeParam> selectFsCourseWatchLogByFinishTime();
 

+ 2 - 2
fs-service/src/main/java/com/fs/course/mapper/FsUserCourseCategoryMapper.java

@@ -68,8 +68,8 @@ public interface FsUserCourseCategoryMapper
     @Select("select cate_id dict_value, cate_name dict_label,is_del status from fs_store_product_category WHERE pid = 0 and is_del=0 ")
     List<OptionsVO> selectFsUserCoursePidList();
 
-    @Select("select cate_id dict_value, cate_name dict_label  from fs_user_course_category WHERE pid = 0 and is_del=0 ")
-    List<OptionsVO> selectFsUserCourseCategoryPidList();
+//    @Select("select cate_id dict_value, cate_name dict_label  from fs_user_course_category WHERE pid = 0 and is_del=0 ")
+    List<OptionsVO> selectFsUserCourseCategoryPidList(@Param("isShow") Integer isShow);
 
     @Select("select cate_id dict_value, cate_name dict_label  from fs_user_course_category WHERE pid = 0 and is_del=0 and user_id = #{userId}")
     List<OptionsVO> selectFsUserCourseCategoryPidListByUserId(Long userId);

+ 5 - 0
fs-service/src/main/java/com/fs/course/mapper/FsVideoResourceMapper.java

@@ -22,6 +22,11 @@ public interface FsVideoResourceMapper extends BaseMapper<FsVideoResource> {
     @Select("select * from fs_video_resource where line1 is not null and is_transcode = 0 and is_del = 0")
     List<FsVideoResource> selectVideoNotTranscode();
 
+
+    @Select("select * from fs_video_resource where file_key = 'course/20251020/1760932918788.mp4'")
+    List<FsVideoResource> selectVideoNotTranscodeTest();
+
+
     @Select("select * from fs_video_resource where is_transcode = 1 and is_del = 0 and transcode_file_key is null")
     List<FsVideoResource> selectVideoIsTranscode();
 

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

@@ -63,7 +63,7 @@ public interface IFsUserCourseCategoryService
 
     List<OptionsVO> selectFsUserCoursePidList();
 
-    List<OptionsVO> selectFsUserCourseCategoryPidList();
+    List<OptionsVO> selectFsUserCourseCategoryPidList(Integer isShow);
     List<OptionsVO> selectFsUserCourseCategoryPidList(Long userId);
 
     List<OptionsVO> selectCateListByPid(Long pid);

+ 2 - 2
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseCategoryServiceImpl.java

@@ -101,8 +101,8 @@ public class FsUserCourseCategoryServiceImpl implements IFsUserCourseCategorySer
     }
 
     @Override
-    public List<OptionsVO> selectFsUserCourseCategoryPidList() {
-        return fsUserCourseCategoryMapper.selectFsUserCourseCategoryPidList();
+    public List<OptionsVO> selectFsUserCourseCategoryPidList(Integer isShow) {
+        return fsUserCourseCategoryMapper.selectFsUserCourseCategoryPidList(isShow);
     }
 
     @Override

+ 15 - 6
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -517,6 +517,10 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
 //        }
         String msg = "<div style=\"color: red;margin-bottom: 15px;font-weight: bold;\">本课程为会员独享<br>请长按二维码</div>\n" +
                 "\t\t\t\t\t<div style=\"color: #999;font-size: 14px;font-weight: bold;\">添加伴学助手免费领取会员权限</div>";
+        //济南联志隐藏二维码
+        if ("济南联志健康".equals(signProjectName)) {
+            msg = "<div style=\"color: red;margin-bottom: 15px;font-weight: bold;\">本课程为会员独享<br></div>";
+        }
 //        try {
 //            new Thread(() -> {
 //                try {
@@ -905,6 +909,9 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
     }
 
     private R addCustomerService(String qwUserById,String msg){
+        if ("济南联志健康".equals(signProjectName)){
+            return R.error(400,msg).put("qrcode", "");
+        }
         String json = configService.selectConfigByKey("course.config");
         CourseConfig config = JSONUtil.toBean(json, CourseConfig.class);
         String contactWay = "";
@@ -1167,10 +1174,6 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
                 return R.error("会员被停用,无权限,请联系客服!");
             }
 
-            if (StringUtil.strIsNullOrEmpty(user.getMpOpenId())){
-                return R.error(401,"授权后可继续!");
-            }
-
             FsCourseWatchLog watchLog = new FsCourseWatchLog();
 
             // 根据链接类型判断是否已发放奖励
@@ -1209,6 +1212,12 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
             // 获取配置信息
             String json = configService.selectConfigByKey("course.config");
             CourseConfig config = JSONUtil.toBean(json, CourseConfig.class);
+
+            //服务号授权的,缺mpOpenId的重新登录
+            if (config.getMiniAppAuthType()==2 && StringUtil.strIsNullOrEmpty(user.getMpOpenId())){
+                return R.error(401,"授权后可继续!");
+            }
+
             log.info("奖励类型:{}", config.getRewardType());
             // 根据奖励类型发放不同奖励
             switch (config.getRewardType()) {
@@ -1401,7 +1410,7 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
         WxSendRedPacketParam packetParam = new WxSendRedPacketParam();
 
         //判断是否走服务号openId发红包
-        if (user.getMpOpenId()!=null&&!isNewWxMerchant){
+        if (config.getMiniAppAuthType()==2 && user.getMpOpenId()!=null&&!isNewWxMerchant ){
             packetParam.setOpenId(user.getMpOpenId());
         }else {
             //查询是否绑定小程序
@@ -1414,7 +1423,7 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
         }
 
         //判断服务号配置是否存在
-        if (StringUtils.isNotEmpty(config.getMpAppId())){
+        if (config.getMiniAppAuthType()==2 && StringUtils.isNotEmpty(config.getMpAppId()) ){
             packetParam.setMpAppId(config.getMpAppId());
         }
         packetParam.setAmount(amount);

+ 20 - 0
fs-service/src/main/java/com/fs/fastGpt/service/impl/AiHookServiceImpl.java

@@ -1492,6 +1492,26 @@ public class AiHookServiceImpl implements AiHookService {
         if(info==null){
             info=new QwExternalContactInfo();
         }
+
+        if (info.getCreateTime()!=null){
+            Calendar today = Calendar.getInstance();
+            today.set(Calendar.HOUR_OF_DAY, 0);
+            today.set(Calendar.MINUTE, 0);
+            today.set(Calendar.SECOND, 0);
+            today.set(Calendar.MILLISECOND, 0);
+            Calendar createDate = Calendar.getInstance();
+            createDate.setTime(info.getCreateTime());
+            createDate.set(Calendar.HOUR_OF_DAY, 0);
+            createDate.set(Calendar.MINUTE, 0);
+            createDate.set(Calendar.SECOND, 0);
+            createDate.set(Calendar.MILLISECOND, 0);
+            if(createDate.before(today)){
+                if (info.getTalk()==null||info.getTalk().isEmpty()){
+                    info.setTalk("非首次交流");
+                }
+            }
+        }
+
         if (info!=null){
             str="【用户状态信息\n";
             Field[] fields = info.getClass().getDeclaredFields();

+ 1 - 1
fs-service/src/main/java/com/fs/his/mapper/FsUserMapper.java

@@ -86,7 +86,7 @@ public interface FsUserMapper
             " where f1.is_del=0 "+
             "  <if test=\"nickName != null  and nickName != ''\"> and f1.nick_name like concat( #{nickName}, '%')</if>\n" +
             "            <if test=\"avatar != null  and avatar != ''\"> and f1.avatar = #{avatar}</if>\n" +
-            "            <if test=\"phone != null  and phone != ''\"> and f1.phone like concat('%', #{phone}, '%')</if>\n" +
+            "            <if test=\"phone != null  and phone != ''\"> and (f1.phone like concat('%', #{phone}, '%') or f1.phone = #{encryptPhone} ) </if>\n" +
             "            <if test=\"status != null \"> and f1.status = #{status}</if>\n" +
             "            <if test=\"isBuy != null \"> and f1.is_buy = #{isBuy}</if>\n" +
             "            <if test=\"userId != null \"> and f1.user_id = #{userId}</if>\n" +

+ 3 - 0
fs-service/src/main/java/com/fs/his/param/FsUserParam.java

@@ -78,4 +78,7 @@ public class FsUserParam {
     private String loginDevice;//当前登录设备
 
     private String source;
+
+    /** 加密的手机号码-用于查询 */
+    private String encryptPhone;
 }

+ 11 - 6
fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreOrderItemScrmMapper.java

@@ -145,10 +145,15 @@ public interface FsStoreOrderItemScrmMapper
     List<FsStoreOrderItemExportVO> selectFsStoreOrderItemListExportVO(@Param("maps")FsStoreOrderParam fsStoreOrder);
 
     @Select({"<script> " +
-            "select count(0) from fs_store_order_item_scrm i left join fs_store_order_scrm o on o.id=i.order_id left join fs_user u on o.user_id=u.user_id  " +
-            " left join fs_store_product_package_scrm p on o.package_id=p.package_id left join company c on c.company_id=o.company_id left join company_user cu on cu.user_id=o.company_user_id left join company_tcm_schedule cts on cts.id = o.schedule_id " +
+            "select count(0) from fs_store_order_item_scrm i " +
+            "left join fs_store_order_scrm o on o.id=i.order_id " +
+            "left join fs_user u on o.user_id=u.user_id  " +
+            " left join fs_store_product_package_scrm p on o.package_id=p.package_id " +
+            "left join company c on c.company_id=o.company_id " +
+            "left join company_user cu on cu.user_id=o.company_user_id " +
+            "left join company_tcm_schedule cts on cts.id = o.schedule_id " +
             "LEFT JOIN fs_store_order_df df on df.order_id=o.id\n" +
-            "        <if test=\"maps.coursePlaySourceConfigId != null\">\n" +
+            "        <if test=\"maps.appId != null and maps.appId != ''\">\n" +
             "            LEFT JOIN (\n" +
             "            SELECT\n" +
             "            sp.*,\n" +
@@ -159,9 +164,9 @@ public interface FsStoreOrderItemScrmMapper
             "            LEFT JOIN fs_course_play_source_config csc ON csc.appid = sp_latest.app_id\n" +
             "        </if>" +
             "where 1=1 " +
-            "<if test=\"maps.coursePlaySourceConfigId != null\">\n" +
-            "                and csc.id = #{maps.coursePlaySourceConfigId}\n" +
-            "            </if>\n" +
+            "<if test=\"maps.appId != null and maps.appId != ''\">\n" +
+            "   and csc.appid = #{maps.appId}\n" +
+            " </if>\n" +
             "            <if test=\"maps.orderCodes != null  and maps.orderCodes.size > 0\">\n" +
             "                and o.order_code in\n" +
             "                <foreach collection=\"maps.orderCodes\" item=\"orderCode\" open=\"(\" close=\")\" separator=\",\">\n" +

+ 20 - 3
fs-service/src/main/java/com/fs/hisStore/mapper/FsStorePaymentScrmMapper.java

@@ -74,7 +74,15 @@ public interface FsStorePaymentScrmMapper
     FsStorePaymentScrm selectFsStorePaymentByCode(String payCode);
 
     @Select({"<script> " +
-            "select p.*,o.order_code,c.company_name,d.dept_name,u.phone as user_phone,cu.nick_name as company_user_nick_name,cu.user_name as company_user_name  from fs_store_payment_scrm p left join company_user cu on p.company_user_id=cu.user_id left join fs_user u on u.user_id=p.user_id left join company_dept d on d.dept_id=p.dept_id left join company c on c.company_id=p.company_id left join fs_store_order_scrm o on o.id=p.order_id   " +
+            "select p.*,o.order_code,c.company_name,d.dept_name,u.phone as user_phone," +
+            "cu.nick_name as company_user_nick_name,cu.user_name as company_user_name ,csc.name miniProgramName " +
+            "from fs_store_payment_scrm p " +
+            "left join company_user cu on p.company_user_id=cu.user_id " +
+            "left join fs_user u on u.user_id=p.user_id " +
+            "left join company_dept d on d.dept_id=p.dept_id " +
+            "left join company c on c.company_id=p.company_id " +
+            "left join fs_store_order_scrm o on o.id=p.order_id   " +
+            "LEFT JOIN fs_course_play_source_config csc ON csc.appid = p.app_id " +
             "where 1=1 " +
             "<if test = 'maps.payCode != null and  maps.payCode !=\"\"    '> " +
             "and p.pay_code like CONCAT('%',#{maps.payCode},'%') " +
@@ -131,6 +139,7 @@ public interface FsStorePaymentScrmMapper
             " AND date_format(p.create_time,'%y%m%d') &gt;= date_format(#{maps.createTimeList[0]},'%y%m%d') " +
             " AND date_format(p.create_time,'%y%m%d') &lt;= date_format(#{maps.createTimeList[1]},'%y%m%d') " +
             "</if>" +
+            "<if test=\"maps.appId != null and maps.appId != ''\">  and p.app_id like #{maps.appId}</if>\n" +
 
 //            "<if test = 'maps.refundTime != null    '> " +
 //            "and DATE_FORMAT(p.refund_time,'%Y-%m-%d') = DATE_FORMAT(#{maps.refundTime},'%Y-%m-%d')  " +
@@ -143,8 +152,15 @@ public interface FsStorePaymentScrmMapper
 
     @Select({"<script> " +
             "select p.*,o.order_code,fsp.title, c.company_name,u.phone as user_phone,cu.nick_name as company_user_nick_name,cu.user_name as company_user_name " +
-            ",(select group_concat(dd.dept_name separator  '>') from company_dept dd where p.dept_id=dd.dept_id or find_in_set(dd.dept_id,d.ancestors)) as dept_name "+
-            " from fs_store_payment_scrm p left join company_user cu on p.company_user_id=cu.user_id left join fs_user u on u.user_id=p.user_id left join company_dept d on d.dept_id=p.dept_id left join company c on c.company_id=p.company_id left join fs_store_order_scrm o on o.id=p.order_id left join fs_store_product_package_scrm fsp on o.package_id = fsp.package_id " +
+            ",(select group_concat(dd.dept_name separator  '>') from company_dept dd where p.dept_id=dd.dept_id or find_in_set(dd.dept_id,d.ancestors)) as dept_name ,csc.name miniProgramName "+
+            " from fs_store_payment_scrm p " +
+            "left join company_user cu on p.company_user_id=cu.user_id " +
+            "left join fs_user u on u.user_id=p.user_id " +
+            "left join company_dept d on d.dept_id=p.dept_id " +
+            "left join company c on c.company_id=p.company_id " +
+            "left join fs_store_order_scrm o on o.id=p.order_id " +
+            "left join fs_store_product_package_scrm fsp on o.package_id = fsp.package_id " +
+            "LEFT JOIN fs_course_play_source_config csc ON csc.appid = p.app_id " +
             "where 1=1 " +
             "<if test = 'maps.payCode != null and  maps.payCode !=\"\"    '> " +
             "and p.pay_code like CONCAT('%',#{maps.payCode},'%') " +
@@ -186,6 +202,7 @@ public interface FsStorePaymentScrmMapper
             " AND date_format(p.create_time,'%y%m%d') &gt;= date_format(#{maps.createTimeList[0]},'%y%m%d') " +
             " AND date_format(p.create_time,'%y%m%d') &lt;= date_format(#{maps.createTimeList[1]},'%y%m%d') " +
             "</if>" +
+            "<if test=\"maps.appId != null and maps.appId != ''\">  and p.app_id like #{maps.appId}</if>\n" +
             " ${maps.params.dataScope} "+
             " order by p.payment_id desc limit 30000  "+
             "</script>"})

+ 2 - 0
fs-service/src/main/java/com/fs/hisStore/param/FsStoreOrderParam.java

@@ -111,4 +111,6 @@ public class FsStoreOrderParam extends BaseEntity implements Serializable
     //导出字段
     private String filter;
 
+    private String appId;
+
 }

+ 4 - 0
fs-service/src/main/java/com/fs/hisStore/param/FsStorePaymentParam.java

@@ -46,4 +46,8 @@ public class FsStorePaymentParam  extends BaseEntity implements Serializable
     private String createTimeRange;
 
     private String[] createTimeList;
+
+    // 小程序ID
+    private Long coursePlaySourceConfigId;
+    private String appId;
 }

+ 1 - 0
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java

@@ -3991,6 +3991,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
                         mt.setPaymentId(storePayment.getPaymentId());
                         mt.setTradeNo(result.getHf_seq_id());
                         mt.setAppId(param.getAppId());
+                        mt.setBusinessCode(order.getOrderCode());
                         fsStorePaymentMapper.updateFsStorePayment(mt);
                         redisCache.setCacheObject("isPaying:"+order.getId(),order.getId().toString(),1, TimeUnit.MINUTES);
                         Map<String, Object> resultMap = JSON.parseObject(result.getPay_info(), new TypeReference<Map<String, Object>>() {});

+ 4 - 0
fs-service/src/main/java/com/fs/hisStore/vo/FsStorePaymentVO.java

@@ -90,6 +90,10 @@ public class FsStorePaymentVO implements Serializable
 
     private String payMode;
 
+    // 小程序名称
+    @Excel(name = "所属小程序")
+    private String miniProgramName;
+
 
 
 }

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

@@ -152,6 +152,7 @@ public interface QwUserMapper extends BaseMapper<QwUser>
             "left join fastgpt_role fr on fr.role_id=qu.fastGpt_role_id " +
             "where qu.company_user_id is not null "+
             "            <if test=\"qwUserId != null  and qwUserId != ''\"> and qu.qw_user_id = #{qwUserId}</if>\n" +
+            "            <if test=\"loginStatus != null  and loginStatus != ''\"> and qu.ipad_status = #{loginStatus}</if>\n" +
             "            <if test=\"appKey != null  and appKey != ''\"> and qu.app_key = #{appKey}</if>\n" +
             "            <if test=\"nickName != null  and nickName != ''\"> and cu.nick_name like concat( #{nickName}, '%') </if>\n" +
             "            <if test=\"qwUserName != null  and qwUserName != ''\"> and qu.qw_user_name like concat('%', #{qwUserName}, '%') </if> " +

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

@@ -102,6 +102,12 @@ public interface QwWatchLogMapper extends BaseMapper<QwWatchLog>{
             "<if test ='(deptIds ==null or deptIds.size = 0) and deptId !=null and deptId!=\"\"'>\n" +
             "   and cu.dept_id = #{deptId}\n" +
             "</if>" +
+            "<if test ='companyId !=null and companyId!=\"\"'>\n" +
+            "   and qu.company_id =#{companyId} \n" +
+            "</if>" +
+            "<if test ='companyUserId !=null and companyUserId!=\"\"'>\n" +
+            "   and qu.company_user_id =#{companyUserId} \n" +
+            "</if>" +
             "<if test ='ids !=null and ids!=\"\"'>\n" +
             "   and qec.qw_user_id in (${ids})\n" +
             "</if>" +

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

@@ -37,6 +37,11 @@ public class QwUserListParam {
     @Excel(name = "企微")
     private Integer status;
 
+    /**
+    * 登录状态
+    */
+    private Integer loginStatus;
+
     @Excel(name = "员工状态")
     private Integer isDel;
 

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

@@ -2907,6 +2907,7 @@ public class QwExternalContactServiceImpl extends ServiceImpl<QwExternalContactM
                     asyncQwAiChatSopService.executeQwAiChatSop(qwSopAutoByTags,userID,qwUser,externalUserID
                             ,externalContact.getName(),contact.getId(),contact.getFsUserId(),currentDate,localTime);
                 }
+
                 //aiSop任务
 //                List<QwSopRuleTimeVO> qwSopAiRuleTimeVOS = qwSopMapper.selectQwAiSopAutoByTagsByForeach(qwSopAutoByTags);
 //                if (qwSopAiRuleTimeVOS != null && !qwSopAiRuleTimeVOS.isEmpty()){

+ 3 - 1
fs-service/src/main/java/com/fs/qw/service/impl/QwUserComplainRecordServiceImpl.java

@@ -1,6 +1,8 @@
 package com.fs.qw.service.impl;
 
 import java.util.List;
+
+import com.alibaba.fastjson.JSON;
 import com.fs.common.utils.DateUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fs.course.domain.FsUserCourseComplaintRecord;
@@ -155,7 +157,7 @@ public class QwUserComplainRecordServiceImpl extends ServiceImpl<QwUserComplainR
         textCard.setUrl("https://www.baidu.com/");
         textCard.setBtntxt("详情");
         sendMsgParam.setTextcard(textCard);
-        log.info("发送投诉信息请求体:{}",sendMsgParam);
+        log.info("发送投诉信息请求体:{}", JSON.toJSONString(sendMsgParam));
         //发送消息
         QwSendMsgResult result = qwApiService.sendMsg(sendMsgParam, qwCompany.getCorpId());
         log.info("发送投诉应用消息返回:{}",result);

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

@@ -9,8 +9,8 @@ import java.util.Date;
 @Data
 public class QwWatchLogStatisticsListVO {
     private Long id;
-    private String qwUserName;
     @Excel(name = "企微员工名称")
+    private String qwUserName;
     private String companyUserName;
     private Long companyUserId;
     private Long companyId;

+ 14 - 0
fs-service/src/main/java/com/fs/sop/domain/QwSopTemp.java

@@ -108,4 +108,18 @@ public class QwSopTemp implements Serializable
     @TableField(exist = false)
     private List<Long> cuDeptIdList;
 
+    @TableField(exist = false)
+    private List<Long> userIds;
+
+    /**
+     * 部门类型 00 管理员 01 员工
+     */
+    @TableField(exist = false)
+    private String userType;
+
+    @TableField(exist = false)
+    private String createByName;
+
+    @TableField(exist = false)
+    private String createByDeptName;
 }

+ 3 - 0
fs-service/src/main/java/com/fs/sop/mapper/SopUserLogsMapper.java

@@ -350,6 +350,9 @@ List<SopUserLogsVO> selectSopUserLogsGroupListByParam(@Param("maps") SopUserLogs
             "             AND qw_sop.status in(2,3)")
     List<SopUserLogs> queryAllSopUserLogs();
 
+    @DataSource(DataSourceType.SOP)
+    List<SopUserLogs> selectSopUserLogsListByIds(List<String> ids);
+
     @DataSource(DataSourceType.SOP)
     void updateSopuserLogsDateById(UpdateSopUserLogDateVo vo);
 

+ 1 - 1
fs-service/src/main/java/com/fs/sop/service/ISopUserLogsService.java

@@ -59,7 +59,7 @@ public interface ISopUserLogsService {
      */
     public R ratingUserLogs(String sopId);
 
-    void updateLogDate(UpdateSopUserLogDateVo vo);
+    R updateLogDate(UpdateSopUserLogDateVo vo);
 
     void addGroupChat(AddSopUserGroupChat vo);
 

+ 7 - 0
fs-service/src/main/java/com/fs/sop/service/impl/QwSopTempServiceImpl.java

@@ -7,6 +7,9 @@ import com.fs.common.annotation.DataSource;
 import com.fs.common.enums.DataSourceType;
 import com.fs.common.exception.base.BaseException;
 import com.fs.common.utils.PubFun;
+import com.fs.company.domain.Company;
+import com.fs.company.service.ICompanyService;
+import com.fs.company.service.impl.CompanyServiceImpl;
 import com.fs.config.cloud.CloudHostProper;
 import com.fs.course.config.CourseConfig;
 import com.fs.course.domain.FsUserCourse;
@@ -75,6 +78,7 @@ public class QwSopTempServiceImpl implements IQwSopTempService
     private final FsUserCourseMapper fsUserCourseMapper;
     private final IQwSopService qwSopService;
     private final IQwUserService qwUserService;
+    private final ICompanyService companyService;
 
     /**
      * 查询sop模板
@@ -171,6 +175,9 @@ public class QwSopTempServiceImpl implements IQwSopTempService
     public int shareQwSopTemp(QwSopShareTempParam param) {
         QwSopTemp qwSopTemp = qwSopTempMapper.selectQwSopTempById(param.getTempleId());
         Arrays.stream(param.getCompanyIds()).forEach(companyId -> {
+
+            Company company = companyService.selectCompanyById(companyId);
+            qwSopTemp.setCreateBy(company.getUserId().toString());
             qwSopTemp.setCompanyId(companyId);
             copyTemplate(qwSopTemp);
         });

+ 5 - 0
fs-service/src/main/java/com/fs/sop/service/impl/SopUserLogsInfoServiceImpl.java

@@ -679,6 +679,9 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
             else {
                 sopLogsList = groupList.stream().map(groupChat -> {
                     QwUser qwUser = qwUserMapper.selectQwUserByIdByWeComeText2(groupChat.getOwner(), groupChat.getCorpId());
+                    if(qwUser.getCompanyUserId() == null){
+                        throw new BaseException("当前企微没绑定员工,无法发送!");
+                    }
                     QwSopLogs sopLogs = new QwSopLogs();
 
                     sopLogs.setQwUserid(qwUser.getQwUserId());
@@ -1057,6 +1060,7 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
                 break;
             case 2:
                 processQwSopLogsBySendMsg(param,param.getDraftStrategy());
+                log.info("一键群发操作日志2:{}", JSON.toJSONString(param));
                 break;
         }
 
@@ -1071,6 +1075,7 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
         }
         String[] ids = sopUserLogsIds.toArray(new String[0]);
         param.setIds(ids);
+        log.info("一键群发操作日志1:{}", JSON.toJSONString(param));
         processQwSopLogsBySendMsg(param,param.getDraftStrategy());
         return null;
     }

+ 55 - 2
fs-service/src/main/java/com/fs/sop/service/impl/SopUserLogsServiceImpl.java

@@ -914,14 +914,67 @@ public class SopUserLogsServiceImpl  implements ISopUserLogsService {
     }
 
     @Override
-    public void updateLogDate(UpdateSopUserLogDateVo vo) {
+    public R updateLogDate(UpdateSopUserLogDateVo vo) {
         if(vo.getDate() == null){
             throw new BaseException("修改时间不能为空");
         }
         if(vo.getIds() == null || vo.getIds().isEmpty()){
             throw new BaseException("营期ID不能为空");
         }
-        sopUserLogsMapper.updateSopuserLogsDateById(vo);
+//        sopUserLogsMapper.updateSopuserLogsDateById(vo);
+        List<SopUserLogs> sopUserLogs = sopUserLogsMapper.selectSopUserLogsListByIds(vo.getIds());
+        LocalDate date = vo.getDate();
+        String targetDateStr = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+
+        // 记录需要剔除的重复ID
+        List<String> duplicateIds = new ArrayList<>();
+        List<String> validIds = new ArrayList<>();
+
+        // 检查是否存在相同组合的数据
+        for (SopUserLogs log : sopUserLogs) {
+            boolean isDuplicate = checkDuplicateCombination(log, sopUserLogs, targetDateStr);
+            if (isDuplicate) {
+                duplicateIds.add(log.getId());
+            } else {
+                validIds.add(log.getId());
+            }
+        }
+
+        // 更新有效记录
+        if (!validIds.isEmpty()) {
+            vo.setIds(validIds);
+            sopUserLogsMapper.updateSopuserLogsDateById(vo);
+        }
+
+        // 记录剔除的重复ID
+        if (!duplicateIds.isEmpty()) {
+            log.error("根据sopId、qwUserId、corpId、startTime组合检查,剔除重复ID: {},时间:{}", duplicateIds,targetDateStr);
+        }
+
+        return  R.ok().put("data",duplicateIds);
+    }
+
+    /**
+     * 检查是否存在相同组合的数据
+     */
+    private boolean checkDuplicateCombination(SopUserLogs currentLog, List<SopUserLogs> allLogs, String targetDate) {
+        for (SopUserLogs log : allLogs) {
+            // 跳过自身比较
+            if (log.getId().equals(currentLog.getId())) {
+                continue;
+            }
+
+            // 检查组合是否相同 - 直接比较字符串
+            boolean sameCombination = Objects.equals(log.getSopId(), currentLog.getSopId()) &&
+                    Objects.equals(log.getQwUserId(), currentLog.getQwUserId()) &&
+                    Objects.equals(log.getCorpId(), currentLog.getCorpId()) &&
+                    targetDate.equals(log.getStartTime()); // 直接比较字符串
+
+            if (sameCombination) {
+                return true;
+            }
+        }
+        return false;
     }
 
     @Override

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

@@ -90,5 +90,6 @@ ipad:
 wx_miniapp_temp:
   pay_order_temp_id: -SjnK9K6cNKASa6AD9Q_c0YT7J1lPTEpPIpqbMJF8F0
   inquiry_temp_id: hwFXVh0AWqeasBsZpa0-urb3CrPeYEwBiy3P6AMMGFQ
+enableRedPackAccount: 1
 
 

+ 4 - 4
fs-service/src/main/resources/application-config-druid-yxj.yml

@@ -60,8 +60,8 @@ watch:
   password3: v9xsKuqn_$d2y
 
 fs :
-  commonApi: http://159.75.111.224:8010
-  h5CommonApi: http://159.75.111.224:8010
+  commonApi: http://172.16.16.4:8010
+  h5CommonApi: http://172.16.16.4:8010
 nuonuo:
   key: 10924508
   secret: A2EB20764D304D16
@@ -80,8 +80,8 @@ cloud_host:
 headerImg:
   imgUrl: https://yxj-1323137866.cos.ap-chongqing.myqcloud.com/app/yxj.jpg
 ipad:
-  ipadUrl: http://ipad.ysya.top
-  aiApi: http://49.232.181.28:3000/api
+  ipadUrl: http://.top
+  aiApi: http://49/api
   voiceApi:
   commonApi:
 wx_miniapp_temp:

+ 2 - 2
fs-service/src/main/resources/application-druid-kyt.yml

@@ -150,6 +150,6 @@ openIM:
 im:
   type: NONE
 #是否为新商户,新商户不走mpOpenId
-isNewWxMerchant: false
+isNewWxMerchant: true
 
-enableRedPackAccount: 1
+enableRedPackAccount: 0

+ 3 - 2
fs-service/src/main/resources/application-druid-yxj.yml

@@ -1,7 +1,7 @@
 # 数据源配置
 spring:
     profiles:
-        include: config-druid-syysy,common
+        include: config-druid-yxj,common
     # redis 配置
     redis:
         host: 172.17.0.4
@@ -163,10 +163,11 @@ token:
 openIM:
     secret: openIM123
     userID: imAdmin
-    url: https://web.im.ysya.top/api
+    url: https://web.im.ya.top/api
 #是否使用新im
 im:
     type: OPENIM
 #是否为新商户,新商户不走mpOpenId
 isNewWxMerchant: true
+enableRedPackAccount: 0
 

+ 12 - 0
fs-service/src/main/resources/mapper/company/CompanyUserMapper.xml

@@ -185,6 +185,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="deptId != null and deptId != 0">
             AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM company_dept t WHERE find_in_set(#{deptId}, ancestors) ))
         </if>
+        <if test="deptList != null and !deptList.isEmpty()">
+           AND u.dept_id IN
+              <foreach collection='deptList' item='item' open='(' separator=',' close=')'>
+                  #{item}
+              </foreach>
+        </if>
         <!-- 数据范围过滤 -->
         ${params.dataScope}
     </select>
@@ -463,6 +469,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="params.companyId != null">
                 and cu.company_id = #{params.companyId}
             </if>
+            <if test="params.combinedDeptList != null and !params.combinedDeptList.isEmpty() ">
+                AND cu.dept_id IN
+                     <foreach collection='params.combinedDeptList' item='item' open='(' separator=',' close=')'>
+                      #{item}
+                     </foreach>
+            </if>
         </where>
     </select>
 

+ 8 - 0
fs-service/src/main/resources/mapper/course/FsUserCourseCategoryMapper.xml

@@ -36,6 +36,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="selectFsUserCourseCategoryVo"/>
         where cate_id = #{cateId}
     </select>
+    <select id="selectFsUserCourseCategoryPidList" resultType="com.fs.his.vo.OptionsVO">
+        select cate_id dict_value, cate_name dict_label  from fs_user_course_category WHERE pid = 0 and is_del=0
+        and is_show = 1
+<!--        <if test="isShow != null">-->
+<!--            and is_show = #{isShow} -->
+<!--        </if>-->
+        order by sort asc
+    </select>
 
     <insert id="insertFsUserCourseCategory" parameterType="FsUserCourseCategory" useGeneratedKeys="true" keyProperty="cateId">
         insert into fs_user_course_category

+ 22 - 16
fs-service/src/main/resources/mapper/hisStore/FsStoreOrderScrmMapper.xml

@@ -1003,8 +1003,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         ) sp_latest ON sp_latest.business_code = o.order_code AND sp_latest.rn = 1
         LEFT JOIN fs_course_play_source_config csc ON csc.appid = sp_latest.app_id
         <where>
-            <if test="maps.coursePlaySourceConfigId != null">
-                and csc.id = #{maps.coursePlaySourceConfigId}
+            <if test="maps.appId != null and maps.appId != ''">
+                and csc.appid = #{maps.appId}
             </if>
             <if test="maps.orderCodes != null  and maps.orderCodes.size > 0">
                 and o.order_code in
@@ -1159,7 +1159,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="maps.erpAccount != null and  maps.erpAccount != ''">
             LEFT JOIN fs_store_order_df df on df.order_id==o.id
         </if>
-        <if test="maps.coursePlaySourceConfigId != null">
+        <if test="maps.appId != null and maps.appId != ''">
             LEFT JOIN (
             SELECT
             sp.*,
@@ -1169,8 +1169,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             LEFT JOIN fs_course_play_source_config csc ON csc.appid = sp_latest.app_id
         </if>
         <where>
-            <if test="maps.coursePlaySourceConfigId != null">
-                and csc.id = #{maps.coursePlaySourceConfigId}
+            <if test="maps.appId != null and maps.appId != ''">
+                and csc.appid = #{maps.appId}
             </if>
             <if test="maps.orderCodes != null  and maps.orderCodes.size > 0">
                 and o.order_code in
@@ -1301,7 +1301,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             left join fs_store_order_item_scrm oi on o.id = oi.order_id
             left join fs_store_product_scrm fsp on fsp.product_id = oi.product_id
         </if>
-        <if test="maps.coursePlaySourceConfigId != null">
+        <if test="maps.appId != null and maps.appId != ''">
             LEFT JOIN (
             SELECT
             sp.*,
@@ -1312,8 +1312,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             LEFT JOIN fs_course_play_source_config csc ON csc.appid = sp_latest.app_id
         </if>
         <where>
-            <if test="maps.coursePlaySourceConfigId != null">
-                and csc.id = #{maps.coursePlaySourceConfigId}
+            <if test="maps.appId != null and maps.appId != ''">
+                and csc.appid = #{maps.appId}
             </if>
             <if test="maps.orderCodes != null  and maps.orderCodes.size > 0">
                 and o.order_code in
@@ -1424,6 +1424,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="maps.erpAccount == '未分拣'">
                 and ( df.login_account is null or df.login_account like '')
             </if>
+            <if test="maps.appId != null and maps.appId != ''">
+                and csc.appid = #{maps.appId}
+            </if>
 
         </where>
         ${maps.params.dataScope}
@@ -1442,7 +1445,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         LEFT JOIN fs_user us ON us.user_id=o.user_id
         LEFT JOIN company_user cu on cu.user_id=o.company_user_id
         LEFT JOIN fs_store_order_df df on df.order_id=o.id
-        <if test="maps.coursePlaySourceConfigId != null">
+        <if test="maps.appId != null and maps.appId != ''">
             LEFT JOIN (
             SELECT
             sp.*,
@@ -1453,8 +1456,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             LEFT JOIN fs_course_play_source_config csc ON csc.appid = sp_latest.app_id
         </if>
         <where>
-            <if test="maps.coursePlaySourceConfigId != null">
-                and csc.id = #{maps.coursePlaySourceConfigId}
+            <if test="maps.appId != null and maps.appId != ''">
+                and csc.appid = #{maps.appId}
             </if>
             <if test="maps.orderCodes != null  and maps.orderCodes.size > 0">
                 and o.order_code in
@@ -1593,8 +1596,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         ) sp_latest ON sp_latest.business_code = o.order_code AND sp_latest.rn = 1
         LEFT JOIN fs_course_play_source_config csc ON csc.appid = sp_latest.app_id
         <where>
-            <if test="maps.coursePlaySourceConfigId != null">
-                and csc.id = #{maps.coursePlaySourceConfigId}
+            <if test="maps.appId != null and maps.appId != ''">
+                and csc.appid = #{maps.appId}
             </if>
             <if test="maps.orderCodes != null  and maps.orderCodes.size > 0">
                 and o.order_code in
@@ -1742,7 +1745,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             left join fs_store_order_item_scrm oi on o.id = oi.order_id
             left join fs_store_product_scrm fsp on fsp.product_id = oi.product_id
         </if>
-        <if test="maps.coursePlaySourceConfigId != null">
+        <if test="maps.appId != null and maps.appId != ''">
             LEFT JOIN (
             SELECT
             sp.*,
@@ -1754,8 +1757,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </if>
 
         <where>
-            <if test="maps.coursePlaySourceConfigId != null">
-                and csc.id = #{maps.coursePlaySourceConfigId}
+            <if test="maps.appId != null and map.appId != ''">
+                and csc.appid = #{maps.appId}
             </if>
             <if test="maps.orderCode != null and  maps.orderCode !=''">
                 and o.order_code like CONCAT('%',#{maps.orderCode},'%')
@@ -1852,6 +1855,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="maps.erpPhoneNumber != null and maps.erpPhoneNumber != ''">
                 and so.erp_phone like concat(#{maps.erpPhoneNumber},'%')
             </if>
+            <if test="maps.appId != null and maps.appId != ''">
+                and csc.appid = #{maps.appId}
+            </if>
         </where>
         ${maps.params.dataScope}
         <if test="maps.productName != null and  maps.productName !=  ''   ">

+ 6 - 1
fs-service/src/main/resources/mapper/hisStore/FsStorePaymentScrmMapper.xml

@@ -28,10 +28,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="orderId"    column="order_id"    />
         <result property="isPayRemain"    column="is_pay_remain"    />
         <result property="payMode"    column="pay_mode"    />
+        <result property="businessCode"    column="business_code"    />
     </resultMap>
 
     <sql id="selectFsStorePaymentVo">
-        select payment_id,pay_mode, pay_code, pay_type_code, pay_money, pay_time, create_time, trade_no, user_id, open_id, business_type, business_order_id, status,remark,company_id,company_user_id,dept_id,bank_transaction_id,bank_serial_no,refund_money,refund_time,order_id,is_pay_remain from fs_store_payment_scrm
+        select payment_id,pay_mode, pay_code, pay_type_code, pay_money, pay_time, create_time, trade_no, user_id, open_id, business_type, business_order_id, status,remark,company_id,company_user_id,dept_id,bank_transaction_id,bank_serial_no,refund_money,refund_time,order_id,is_pay_remain,business_code from fs_store_payment_scrm
 
     </sql>
 
@@ -55,6 +56,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="bankTransactionId != null "> and bank_transaction_id = #{bankTransactionId}</if>
             <if test="bankSerialNo != null "> and bank_serial_no = #{bankSerialNo}</if>
             <if test="orderId != null "> and order_id = #{orderId}</if>
+            <if test="businessCode != null and businessCode != ''"> and business_code = #{businessCode}</if>
         </where>
     </select>
 
@@ -89,6 +91,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="isPayRemain != null">is_pay_remain,</if>
             <if test="payMode != null">pay_mode,</if>
             <if test="appId != null">app_id,</if>
+            <if test="businessCode != null">business_code,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="payCode != null">#{payCode},</if>
@@ -114,6 +117,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="isPayRemain != null">#{isPayRemain},</if>
             <if test="payMode != null">#{payMode},</if>
             <if test="appId != null">#{appId},</if>
+            <if test="businessCode != null">#{businessCode},</if>
         </trim>
     </insert>
 
@@ -143,6 +147,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="isPayRemain != null">is_pay_remain = #{isPayRemain},</if>
             <if test="payMode != null">pay_mode = #{payMode},</if>
             <if test="appId != null">app_id = #{appId},</if>
+            <if test="businessCode != null and businessCode != ''">business_code = #{businessCode},</if>
         </trim>
         where payment_id = #{paymentId}
     </update>

+ 3 - 0
fs-service/src/main/resources/mapper/sop/QwSopMapper.xml

@@ -294,6 +294,7 @@
             <if test="data.autoGroup != null">auto_group,</if>
             <if test="data.autoGroupLevel != null">auto_group_level,</if>
             <if test="data.groupName != null">group_name,</if>
+            <if test="data.isFixed != null">is_fixed,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="data.name != null">#{data.name},</if>
@@ -326,6 +327,7 @@
             <if test="data.autoGroup != null">#{data.autoGroup},</if>
             <if test="data.autoGroupLevel != null">#{data.autoGroupLevel},</if>
             <if test="data.groupName != null">#{data.groupName},</if>
+            <if test="data.isFixed != null">#{data.isFixed},</if>
         </trim>
     </insert>
 
@@ -505,6 +507,7 @@
             <if test="data.autoGroup != null">auto_group = #{data.autoGroup},</if>
             <if test="data.autoGroupLevel != null">auto_group_level = #{data.autoGroupLevel},</if>
             <if test="data.groupName != null">group_name = #{data.groupName},</if>
+            <if test="data.isFixed != null">is_fixed = #{data.isFixed},</if>
         </trim>
         where id = #{data.id}
     </update>

+ 6 - 0
fs-service/src/main/resources/mapper/sop/QwSopTempMapper.xml

@@ -50,6 +50,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                     #{item}
                 </foreach>
             </if>
+            <if test="userIds != null and !userIds.isEmpty()">
+                AND create_by IN
+                <foreach collection='userIds' item='item' open='(' separator=',' close=')'>
+                    #{item}
+                </foreach>
+            </if>
         </where>
         order by sort,create_time desc
     </select>

+ 23 - 0
fs-service/src/main/resources/mapper/sop/SopUserLogsMapper.xml

@@ -433,6 +433,7 @@
 
         where sop_id=#{sopId}
     </select>
+
     <select id="selectSopUserLogsByQwUserIds" resultType="java.lang.String">
         select id from sop_user_logs
         <where>
@@ -442,6 +443,28 @@
             </foreach>
         </where>
     </select>
+
+    <select id="selectSopUserLogsListByIds" resultType="java.util.Map">
+        select
+            id,
+            sop_id,
+            qw_user_id,
+            corp_id,
+            start_time,
+            status
+        from sop_user_logs
+        <where>
+            status = 0
+            <if test="ids != null and ids.size() > 0">
+                and id in
+                <foreach collection="ids" item="item" open="(" close=")" separator=",">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+        order by start_time desc
+    </select>
+
     <select id="querySopUserLogsByParam" resultType="com.fs.sop.domain.SopUserLogs">
         SELECT DISTINCT log.id as id,
         log.qw_user_id as qw_user_id,

+ 2 - 2
fs-user-app/src/main/java/com/fs/app/controller/CourseController.java

@@ -54,9 +54,9 @@ public class CourseController extends  AppBaseController{
 //    @Cacheable(value="getCourseCate" )
     @ApiOperation("获取分类")
     @GetMapping("/getCourseCate")
-    public R getCourseCate(){
+    public R getCourseCate(@RequestParam(value = "isShow",required = false) Integer isShow){
         try {
-            List<OptionsVO> list = courseCategoryService.selectFsUserCourseCategoryPidList();
+            List<OptionsVO> list = courseCategoryService.selectFsUserCourseCategoryPidList(isShow);
             return R.ok().put("data",list);
         } catch (Exception e){
             return R.error("操作异常");

+ 2 - 1
fs-user-app/src/main/java/com/fs/app/controller/store/CourseScrmController.java

@@ -89,7 +89,8 @@ public class CourseScrmController extends AppBaseController {
     @GetMapping("/getCourseCate")
     public R getCourseCate(){
         try {
-            List<OptionsVO> list = courseCategoryService.selectFsUserCourseCategoryPidList();
+            Integer isShow = null;
+            List<OptionsVO> list = courseCategoryService.selectFsUserCourseCategoryPidList(isShow);
             return R.ok().put("data",list);
         } catch (Exception e){
             return R.error("操作异常");

+ 5 - 1
fs-user-app/src/main/java/com/fs/app/controller/store/WxUserScrmController.java

@@ -267,7 +267,11 @@ public class WxUserScrmController extends AppBaseController {
         logger.info("appid"+param.getCode());
         logger.info("appid"+param.getAppId());
         if(StringUtils.isNotEmpty(param.getAppId())){
-            courseMa_appId = configUtil.generateConfigMiniByKey(SysConfigEnum.COURSE_MA_CONFIG.getKey(),param.getAppId()).getString("appid");
+            try {
+                courseMa_appId = configUtil.generateConfigMiniByKey(SysConfigEnum.COURSE_MA_CONFIG.getKey(),param.getAppId()).getString("appid");
+            } catch (Exception e) {
+                courseMa_appId = param.getAppId();
+            }
         }else{
             courseMa_appId = configUtil.generateConfigByKey(SysConfigEnum.COURSE_MA_CONFIG.getKey()).getString("appid");
         }