فهرست منبع

Merge remote-tracking branch 'origin/master'

ct 2 هفته پیش
والد
کامیت
7c1c68d9ff
23فایلهای تغییر یافته به همراه584 افزوده شده و 32 حذف شده
  1. 14 0
      fs-admin/src/main/java/com/fs/company/controller/CompanyUserController.java
  2. 100 0
      fs-admin/src/main/java/com/fs/course/controller/FsCourseFinishTempController.java
  3. 97 0
      fs-admin/src/main/java/com/fs/course/controller/FsCourseFinishTempParentController.java
  4. 107 1
      fs-admin/src/main/java/com/fs/course/controller/FsUserCourseController.java
  5. 1 1
      fs-admin/src/main/java/com/fs/course/controller/FsVideoResourceController.java
  6. 20 0
      fs-admin/src/main/java/com/fs/his/controller/FsUserController.java
  7. 2 2
      fs-company/src/main/java/com/fs/company/controller/qw/QwGroupChatController.java
  8. 27 0
      fs-company/src/main/java/com/fs/company/controller/store/FsUserController.java
  9. 0 5
      fs-service/pom.xml
  10. 4 3
      fs-service/src/main/java/com/fs/ad/enums/AdUploadType.java
  11. 3 0
      fs-service/src/main/java/com/fs/ad/service/impl/AdHtmlClickLogServiceImpl.java
  12. 4 0
      fs-service/src/main/java/com/fs/baidu/service/impl/BdAccountServiceImpl.java
  13. 6 0
      fs-service/src/main/java/com/fs/his/mapper/FsUserMapper.java
  14. 6 0
      fs-service/src/main/java/com/fs/his/service/IFsUserService.java
  15. 49 0
      fs-service/src/main/java/com/fs/his/service/impl/FsUserServiceImpl.java
  16. 2 2
      fs-service/src/main/java/com/fs/qw/mapper/QwGroupChatMapper.java
  17. 1 1
      fs-service/src/main/java/com/fs/qw/service/IQwGroupChatService.java
  18. 2 2
      fs-service/src/main/java/com/fs/qw/service/impl/QwGroupChatServiceImpl.java
  19. 5 0
      fs-service/src/main/java/com/fs/sop/domain/QwSopLogs.java
  20. 12 12
      fs-service/src/main/java/com/fs/sop/service/impl/QwSopServiceImpl.java
  21. 2 2
      fs-service/src/main/resources/application-config-druid-yzt.yml
  22. 114 0
      fs-service/src/main/resources/mapper/his/FsUserMapper.xml
  23. 6 1
      pom.xml

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

@@ -117,4 +117,18 @@ public class CompanyUserController extends BaseController
         List<CompanyUser> list = companyUserService.getUserListByDeptId(user);
         return R.ok().put("data",list);
     }
+
+    /**
+     * 获取所有的销售列表
+     * @param companyId
+     * @return
+     */
+    @GetMapping("/getUserList")
+    public R getUserList(@RequestParam("companyId") Long companyId)
+    {
+        CompanyUser map=new CompanyUser();
+        map.setCompanyId(companyId);
+        List<CompanyUser> list = companyUserService.selectCompanyUserList(map);
+        return  R.ok().put("data",list);
+    }
 }

+ 100 - 0
fs-admin/src/main/java/com/fs/course/controller/FsCourseFinishTempController.java

@@ -0,0 +1,100 @@
+package com.fs.course.controller;
+
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.page.TableDataInfo;
+import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.course.domain.FsCourseFinishTemp;
+import com.fs.course.service.IFsCourseFinishTempService;
+import com.fs.course.vo.FsCourseFinishTempListVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 完课模板Controller
+ *
+ * @author fs
+ * @date 2024-12-19
+ */
+@RestController
+@RequestMapping("/course/courseFinishTemp")
+public class FsCourseFinishTempController extends BaseController
+{
+    @Autowired
+    private IFsCourseFinishTempService fsCourseFinishTempService;
+
+    /**
+     * 查询完课模板列表
+     */
+    @PreAuthorize("@ss.hasPermi('courseFinishTemp:course:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(FsCourseFinishTemp fsCourseFinishTemp)
+    {
+        startPage();
+        List<FsCourseFinishTempListVO> list = fsCourseFinishTempService.selectFsCourseFinishTempListVO(fsCourseFinishTemp);
+        return getDataTable(list);
+    }
+
+
+    /**
+     * 导出完课模板列表
+     */
+    @PreAuthorize("@ss.hasPermi('courseFinishTemp:course:export')")
+    @Log(title = "完课模板", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(FsCourseFinishTemp fsCourseFinishTemp)
+    {
+        List<FsCourseFinishTemp> list = fsCourseFinishTempService.selectFsCourseFinishTempList(fsCourseFinishTemp);
+        ExcelUtil<FsCourseFinishTemp> util = new ExcelUtil<FsCourseFinishTemp>(FsCourseFinishTemp.class);
+        return util.exportExcel(list, "完课模板数据");
+    }
+
+    /**
+     * 获取完课模板详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('courseFinishTemp:course:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+//        return AjaxResult.success(fsCourseFinishTempService.selectFsCourseFinishTempById(id));
+        return AjaxResult.success(fsCourseFinishTempService.selectFsCourseFinishTempByIdVO(id));
+    }
+
+    /**
+     * 新增完课模板
+     */
+    @PreAuthorize("@ss.hasPermi('courseFinishTemp:course:add')")
+    @Log(title = "完课模板", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody FsCourseFinishTemp fsCourseFinishTemp)
+    {
+        return toAjax(fsCourseFinishTempService.insertFsCourseFinishTemp(fsCourseFinishTemp));
+    }
+
+    /**
+     * 修改完课模板
+     */
+    @PreAuthorize("@ss.hasPermi('courseFinishTemp:course:edit')")
+    @Log(title = "完课模板", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody FsCourseFinishTemp fsCourseFinishTemp)
+    {
+        return toAjax(fsCourseFinishTempService.updateFsCourseFinishTemp(fsCourseFinishTemp));
+    }
+
+    /**
+     * 删除完课模板
+     */
+    @PreAuthorize("@ss.hasPermi('courseFinishTemp:course:remove')")
+    @Log(title = "完课模板", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(fsCourseFinishTempService.deleteFsCourseFinishTempByIds(ids));
+    }
+}

+ 97 - 0
fs-admin/src/main/java/com/fs/course/controller/FsCourseFinishTempParentController.java

@@ -0,0 +1,97 @@
+package com.fs.course.controller;
+
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.page.TableDataInfo;
+import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.course.domain.FsCourseFinishTempParent;
+import com.fs.course.service.IFsCourseFinishTempParentService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 完课模板Controller
+ * 
+ * @author 吴树波
+ * @date 2025-05-22
+ */
+@RestController
+@RequestMapping("/course/courseFinishTempParent")
+public class FsCourseFinishTempParentController extends BaseController
+{
+    @Autowired
+    private IFsCourseFinishTempParentService fsCourseFinishTempParentService;
+
+    /**
+     * 查询完课模板列表
+     */
+    @PreAuthorize("@ss.hasPermi('course:courseFinishTempParent:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(FsCourseFinishTempParent fsCourseFinishTempParent)
+    {
+        startPage();
+        List<FsCourseFinishTempParent> list = fsCourseFinishTempParentService.selectFsCourseFinishTempParentList(fsCourseFinishTempParent);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出完课模板列表
+     */
+    @PreAuthorize("@ss.hasPermi('course:courseFinishTempParent:export')")
+    @Log(title = "完课模板", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(FsCourseFinishTempParent fsCourseFinishTempParent)
+    {
+        List<FsCourseFinishTempParent> list = fsCourseFinishTempParentService.selectFsCourseFinishTempParentList(fsCourseFinishTempParent);
+        ExcelUtil<FsCourseFinishTempParent> util = new ExcelUtil<FsCourseFinishTempParent>(FsCourseFinishTempParent.class);
+        return util.exportExcel(list, "完课模板数据");
+    }
+
+    /**
+     * 获取完课模板详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('course:courseFinishTempParent:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(fsCourseFinishTempParentService.selectFsCourseFinishTempParentById(id));
+    }
+
+    /**
+     * 新增完课模板
+     */
+    @PreAuthorize("@ss.hasPermi('course:courseFinishTempParent:add')")
+    @Log(title = "完课模板", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody FsCourseFinishTempParent fsCourseFinishTempParent){
+
+        return toAjax(fsCourseFinishTempParentService.insertFsCourseFinishTempParent(fsCourseFinishTempParent));
+    }
+
+    /**
+     * 修改完课模板
+     */
+    @PreAuthorize("@ss.hasPermi('course:courseFinishTempParent:edit')")
+    @Log(title = "完课模板", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody FsCourseFinishTempParent fsCourseFinishTempParent)
+    {
+        return toAjax(fsCourseFinishTempParentService.updateFsCourseFinishTempParent(fsCourseFinishTempParent));
+    }
+
+    /**
+     * 删除完课模板
+     */
+    @PreAuthorize("@ss.hasPermi('course:courseFinishTempParent:remove')")
+    @Log(title = "完课模板", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(fsCourseFinishTempParentService.deleteFsCourseFinishTempParentByIds(ids));
+    }
+}

+ 107 - 1
fs-admin/src/main/java/com/fs/course/controller/FsUserCourseController.java

@@ -43,7 +43,7 @@ public class FsUserCourseController extends BaseController
     /**
      * 查询课程列表
      */
-//    @PreAuthorize("@ss.hasPermi('course:userCourse:list')")
+    @PreAuthorize("@ss.hasPermi('course:userCourse:list')")
     @GetMapping("/list")
     public TableDataInfo list(FsUserCourse fsUserCourse)
     {
@@ -52,6 +52,18 @@ public class FsUserCourseController extends BaseController
         return getDataTable(list);
     }
 
+    /**
+     * 查询公域课程列表
+     */
+    @PreAuthorize("@ss.hasPermi('course:userCourse:publicList')")
+    @GetMapping("/publicList")
+    public TableDataInfo publicList(FsUserCourse fsUserCourse)
+    {
+        startPage();
+        List<FsUserCourseListPVO> list = fsUserCourseService.selectFsUserCourseListPVO(fsUserCourse);
+        return getDataTable(list);
+    }
+
     /**
      * 导出课程列表
      */
@@ -65,6 +77,19 @@ public class FsUserCourseController extends BaseController
         return util.exportExcel(list, "课程数据");
     }
 
+    /**
+     * 导出公域课程列表
+     */
+    @PreAuthorize("@ss.hasPermi('course:userCourse:publicExport')")
+    @Log(title = "课程", businessType = BusinessType.EXPORT)
+    @GetMapping("/publicExport")
+    public AjaxResult publicExport(FsUserCourse fsUserCourse)
+    {
+        List<FsUserCourse> list = fsUserCourseService.selectFsUserCourseList(fsUserCourse);
+        ExcelUtil<FsUserCourse> util = new ExcelUtil<FsUserCourse>(FsUserCourse.class);
+        return util.exportExcel(list, "课程数据");
+    }
+
     /**
      * 获取课程详细信息
      */
@@ -75,6 +100,16 @@ public class FsUserCourseController extends BaseController
         return AjaxResult.success(fsUserCourseService.selectFsUserCourseByCourseId(courseId));
     }
 
+    /**
+     * 获取公域课程详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('course:userCourse:publicQuery')")
+    @GetMapping(value = "/public/{courseId}")
+    public AjaxResult publicGetInfo(@PathVariable("courseId") Long courseId)
+    {
+        return AjaxResult.success(fsUserCourseService.selectFsUserCourseByCourseId(courseId));
+    }
+
     /**
      * 新增课程
      */
@@ -89,6 +124,20 @@ public class FsUserCourseController extends BaseController
         return toAjax(1);
     }
 
+    /**
+     * 新增课程
+     */
+    @PreAuthorize("@ss.hasPermi('course:userCourse:publicAdd')")
+    @Log(title = "课程", businessType = BusinessType.INSERT)
+    @PostMapping("/public")
+    public AjaxResult publicAdd(@RequestBody FsUserCourse fsUserCourse)
+    {
+        fsUserCourseService.insertFsUserCourse(fsUserCourse);
+        redisCacheUtil.delRedisKey("getCourseList");
+
+        return toAjax(1);
+    }
+
     /**
      * 修改课程
      */
@@ -102,6 +151,19 @@ public class FsUserCourseController extends BaseController
         return toAjax(1);
     }
 
+    /**
+     * 修改课程
+     */
+    @PreAuthorize("@ss.hasPermi('course:userCourse:publicEdit')")
+    @Log(title = "课程", businessType = BusinessType.UPDATE)
+    @PutMapping("/public")
+    public AjaxResult publicEdit(@RequestBody FsUserCourse fsUserCourse)
+    {
+        fsUserCourseService.updateFsUserCourse(fsUserCourse);
+        redisCacheUtil.delRedisKey("getCourseList");
+        return toAjax(1);
+    }
+
     /**
      * 删除课程
      */
@@ -115,6 +177,19 @@ public class FsUserCourseController extends BaseController
         return toAjax(1);
     }
 
+    /**
+     * 删除课程
+     */
+    @PreAuthorize("@ss.hasPermi('course:userCourse:publicRemove')")
+    @Log(title = "课程", businessType = BusinessType.DELETE)
+    @DeleteMapping("/public/{courseIds}")
+    public AjaxResult publicRemove(@PathVariable Long[] courseIds)
+    {
+        fsUserCourseService.deleteFsUserCourseByCourseIds(courseIds);
+        redisCacheUtil.delRedisKey("getCourseList");
+        return toAjax(1);
+    }
+
 
     @GetMapping("/getAllList")
     public R getAllList()
@@ -123,6 +198,7 @@ public class FsUserCourseController extends BaseController
         return R.ok().put("data", list);
     }
 
+    @PreAuthorize("@ss.hasPermi('course:userCourse:updateIsShow')")
     @Log(title = "课程上架", businessType = BusinessType.UPDATE)
     @PostMapping("/updateIsShow")
     public AjaxResult updateIsShow(@RequestBody FsUserCourse fsUserCourse)
@@ -132,6 +208,16 @@ public class FsUserCourseController extends BaseController
        return toAjax(1);
     }
 
+    @PreAuthorize("@ss.hasPermi('course:userCourse:publicUpdateIsShow')")
+    @Log(title = "课程上架", businessType = BusinessType.UPDATE)
+    @PostMapping("/publicUpdateIsShow")
+    public AjaxResult publicUpdateIsShow(@RequestBody FsUserCourse fsUserCourse)
+    {
+        fsUserCourseService.updateFsUserCourse(fsUserCourse);
+        redisCacheUtil.delRedisKey("getCourseList");
+        return toAjax(1);
+    }
+
     @PreAuthorize("@ss.hasPermi('course:userCourse:putOn')")
     @Log(title = "课程批量上架", businessType = BusinessType.UPDATE)
     @PostMapping("/putOn/{courseIds}")
@@ -142,6 +228,16 @@ public class FsUserCourseController extends BaseController
         return toAjax(1);
     }
 
+    @PreAuthorize("@ss.hasPermi('course:userCourse:publicPutOn')")
+    @Log(title = "课程批量上架", businessType = BusinessType.UPDATE)
+    @PostMapping("/publicPutOn/{courseIds}")
+    public AjaxResult publicPutOn(@PathVariable Long[] courseIds)
+    {
+        fsUserCourseService.updateFsUserCourseIsShow(courseIds,1);
+        redisCacheUtil.delRedisKey("getCourseList");
+        return toAjax(1);
+    }
+
     @PreAuthorize("@ss.hasPermi('course:userCourse:putOn')")
     @Log(title = "课程批量下架", businessType = BusinessType.UPDATE)
     @PostMapping("/pullOff/{courseIds}")
@@ -151,4 +247,14 @@ public class FsUserCourseController extends BaseController
         redisCacheUtil.delRedisKey("getCourseList");
         return toAjax(1);
     }
+
+    @PreAuthorize("@ss.hasPermi('course:userCourse:publicPutOff')")
+    @Log(title = "课程批量下架", businessType = BusinessType.UPDATE)
+    @PostMapping("/publicPutOff/{courseIds}")
+    public AjaxResult publicPutOff(@PathVariable Long[] courseIds)
+    {
+        fsUserCourseService.updateFsUserCourseIsShow(courseIds,0);
+        redisCacheUtil.delRedisKey("getCourseList");
+        return toAjax(1);
+    }
 }

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

@@ -102,7 +102,7 @@ public class FsVideoResourceController extends BaseController {
         return AjaxResult.success();
     }
 
-    @PreAuthorize("@ss.hasPermi('course:videoResource:add')")
+    @PreAuthorize("@ss.hasPermi('course:videoResource:batchAdd')")
     @Log(title = "视频素材库", businessType = BusinessType.INSERT)
     @PostMapping("/batchAddVideoResource")
     public AjaxResult batchAddVideoResource(@RequestBody List<FsVideoResource> list) {

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

@@ -3,6 +3,7 @@ package com.fs.his.controller;
 import java.util.List;
 
 import com.fs.common.core.domain.R;
+import com.fs.common.core.domain.ResponseResult;
 import com.fs.common.utils.ParseUtils;
 import com.fs.common.utils.SecurityUtils;
 import com.fs.his.domain.FsUserAddress;
@@ -11,6 +12,9 @@ import com.fs.his.utils.PhoneUtil;
 import com.fs.his.vo.FsUserExportListVO;
 import com.fs.his.vo.FsUserVO;
 import com.fs.his.vo.UserVo;
+import com.fs.store.param.h5.FsUserPageListParam;
+import com.fs.store.vo.h5.FsUserPageListVO;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -183,5 +187,21 @@ public class FsUserController extends BaseController
         return R.ok().put("data",list);
     }
 
+    @PreAuthorize("@ss.hasPermi('his:user:darkRoomList')")
+    @GetMapping("/darkRoomList")
+    @ApiOperation("小黑屋")
+    public TableDataInfo darkRoomList(FsUserPageListParam param) {
+        startPage();
+        List<FsUserPageListVO> list = fsUserService.selectFsUserPageList(param);
+        return getDataTable(list);
+    }
+
+    @PreAuthorize("@ss.hasPermi('his:user:enabledUsers')")
+    @PostMapping("/enabledUsers")
+    @ApiOperation("批量启用会员")
+    public ResponseResult<Boolean> enabledUsers(@RequestBody String[] ids) {
+        Boolean r = fsUserService.disabledUser(ids, true);
+        return ResponseResult.ok(r);
+    }
 
 }

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

@@ -90,8 +90,8 @@ public class QwGroupChatController extends BaseController
         return AjaxResult.success(list);
     }
     @GetMapping("/listAll")
-    public AjaxResult listAll(String qwUserIds){
-        List<QwGroupChatOptionsVO> list = qwGroupChatService.listAllByQwUserList(qwUserIds);
+    public AjaxResult listAll(String qwUserIds, String corpId){
+        List<QwGroupChatOptionsVO> list = qwGroupChatService.listAllByQwUserList(qwUserIds, corpId);
         return AjaxResult.success(list);
     }
 }

+ 27 - 0
fs-company/src/main/java/com/fs/company/controller/store/FsUserController.java

@@ -3,11 +3,14 @@ package com.fs.company.controller.store;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.domain.ResponseResult;
 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.framework.security.LoginUser;
 import com.fs.framework.security.SecurityUtils;
+import com.fs.framework.service.TokenService;
 import com.fs.his.domain.FsUser;
 import com.fs.his.domain.FsUserAddress;
 import com.fs.his.param.FsUserParam;
@@ -15,6 +18,9 @@ import com.fs.his.service.IFsUserService;
 import com.fs.his.vo.FsUserExportListVO;
 import com.fs.his.vo.FsUserVO;
 import com.fs.his.vo.UserVo;
+import com.fs.store.param.h5.FsUserPageListParam;
+import com.fs.store.vo.h5.FsUserPageListVO;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
@@ -36,6 +42,9 @@ public class FsUserController extends BaseController
 {
     @Autowired
     private IFsUserService fsUserService;
+    @Autowired
+    private TokenService tokenService;
+
     /**
      * 查询用户列表
      */
@@ -214,5 +223,23 @@ public class FsUserController extends BaseController
         return getDataTable(list);
     }
 
+    @PreAuthorize("@ss.hasPermi('users:user:darkRoomList')")
+    @GetMapping("/darkRoomList")
+    @ApiOperation("小黑屋")
+    public TableDataInfo darkRoomList(FsUserPageListParam param) {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        param.setUserId(loginUser.getUser().getUserId());
+        startPage();
+        List<FsUserPageListVO> list = fsUserService.selectFsUserPageList(param);
+        return getDataTable(list);
+    }
+
+    @PreAuthorize("@ss.hasPermi('users:user:enabledUsers')")
+    @PostMapping("/enabledUsers")
+    @ApiOperation("批量启用会员")
+    public ResponseResult<Boolean> enabledUsers(@RequestBody String[] ids) {
+        Boolean r = fsUserService.disabledUser(ids, true);
+        return ResponseResult.ok(r);
+    }
 
 }

+ 0 - 5
fs-service/pom.xml

@@ -252,11 +252,6 @@
             <artifactId>wechatpay-java</artifactId>
             <version>0.2.16</version>
         </dependency>
-<!--        <dependency>-->
-<!--            <groupId>redis.clients</groupId>-->
-<!--            <artifactId>jedis</artifactId>-->
-<!--            <version>3.7.0</version>-->
-<!--        </dependency>-->
 
         <dependency>
             <groupId>org.mapstruct</groupId>

+ 4 - 3
fs-service/src/main/java/com/fs/ad/enums/AdUploadType.java

@@ -7,16 +7,17 @@ import lombok.Getter;
 @AllArgsConstructor
 public enum AdUploadType {
     // 添加微信
-    ADD_WX(0, 79, "wechat", 200),
+    ADD_WX(0, 79, "wechat", 200, 386),
     // 注册
-    REGISTERED(1, 25, "", 0),
+    REGISTERED(1, 25, "", 0, 19),
     // 完课
-    FINISH_THE_CLASS(2, 27, "", 0);
+    FINISH_THE_CLASS(2, 27, "", 0, 0);
 
     private final int code;
     private final int bdType;
     private final String youkuType;
     private final Integer iqiyiType;
+    private final Integer dyType;
 
 
 

+ 3 - 0
fs-service/src/main/java/com/fs/ad/service/impl/AdHtmlClickLogServiceImpl.java

@@ -322,6 +322,9 @@ public class AdHtmlClickLogServiceImpl extends ServiceImpl<AdHtmlClickLogMapper,
         if(type == 2){
             return AD_LOG_KEY + vid + ":" + type + ":" + clickType.getIqiyiType();
         }
+        if(type == 3){
+            return AD_LOG_KEY + vid + ":" + type + ":" + clickType.getDyType();
+        }
         throw new BaseException("错误类型");
     }
 

+ 4 - 0
fs-service/src/main/java/com/fs/baidu/service/impl/BdAccountServiceImpl.java

@@ -82,12 +82,16 @@ public class BdAccountServiceImpl extends ServiceImpl<BdAccountMapper, BdAccount
     @Override
     public List<BdAccount> selectBdAccountList(BdAccount bdAccount){
         List<BdAccount> list = baseMapper.selectBdAccountList(bdAccount);
+        if(list.isEmpty()) return list;
         List<Long> longs = PubFun.listToNewList(list, BdAccount::getAccountId);
         List<BdPlan> planList = bdPlanService.list(new QueryWrapper<BdPlan>().in("account_id", longs));
+        if(planList.isEmpty()) return list;
         Map<Long, Long> planMap = PubFun.listToMapByGroupCount(planList, BdPlan::getAccountId);
         List<BdUnit> unitList = bdUnitService.list(new QueryWrapper<BdUnit>().in("account_id", longs));
+        if(unitList.isEmpty()) return list;
         Map<Long, Long> unitMap = PubFun.listToMapByGroupCount(unitList, BdUnit::getAccountId);
         List<BdCreative> creativeList = bdCreativeService.list(new QueryWrapper<BdCreative>().in("account_id", longs));
+        if(creativeList.isEmpty()) return list;
         Map<Long, Long> creativeMap = PubFun.listToMapByGroupCount(creativeList, BdCreative::getAccountId);
         list.stream().filter(e -> e.getAccountId() != null).forEach(e -> {
             e.setPlanCount(planMap.getOrDefault(e.getAccountId(), 0L));

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

@@ -10,6 +10,8 @@ import com.fs.his.vo.FsUserExportListVO;
 import com.fs.his.vo.FsUserVO;
 import com.fs.qw.param.QwFsUserParam;
 import com.fs.qw.vo.QwFsUserVO;
+import com.fs.store.param.h5.FsUserPageListParam;
+import com.fs.store.vo.h5.FsUserPageListVO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
@@ -243,4 +245,8 @@ public interface FsUserMapper
     List<FsCourseAnalysisCountVO> courseAnalysisAnswerCount(CourseAnalysisParam param);
 
     FsUser selectFsUserById(@Param("userId") Long userId);
+
+    int batchUpdateFsUserByIds(@Param("ids") String[] ids, @Param("status") Integer status);
+
+    List<FsUserPageListVO> selectFsUserPageList(FsUserPageListParam param);
 }

+ 6 - 0
fs-service/src/main/java/com/fs/his/service/IFsUserService.java

@@ -14,6 +14,8 @@ import com.fs.his.vo.FsUserVO;
 import com.fs.his.vo.UserVo;
 import com.fs.qw.param.QwFsUserParam;
 import com.fs.qw.vo.QwFsUserVO;
+import com.fs.store.param.h5.FsUserPageListParam;
+import com.fs.store.vo.h5.FsUserPageListVO;
 
 /**
  * 用户Service接口
@@ -118,4 +120,8 @@ public interface IFsUserService
     FsUser selectFsUserByMpOpenId(String openId);
 
     void setRepeatFansTag(FsUserCourseBeMemberParam param);
+
+    List<FsUserPageListVO> selectFsUserPageList(FsUserPageListParam param);
+
+    Boolean disabledUser(String[] ids, boolean status);
 }

+ 49 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsUserServiceImpl.java

@@ -5,6 +5,7 @@ import java.math.BigDecimal;
 import java.math.MathContext;
 import java.math.RoundingMode;
 import java.util.*;
+import java.util.stream.Collectors;
 
 import cn.hutool.json.JSONUtil;
 import com.fs.common.core.domain.R;
@@ -15,6 +16,8 @@ import com.fs.company.domain.CompanyTagUser;
 import com.fs.company.mapper.CompanyTagMapper;
 import com.fs.company.mapper.CompanyTagUserMapper;
 import com.fs.company.service.ICompanyTagService;
+import com.fs.course.domain.FsUserCompanyUser;
+import com.fs.course.mapper.FsUserCompanyUserMapper;
 import com.fs.course.param.newfs.FsUserCourseBeMemberParam;
 import com.fs.his.config.IntegralConfig;
 import com.fs.his.domain.FsUserAddress;
@@ -28,11 +31,14 @@ import com.fs.his.vo.FsUserVO;
 import com.fs.his.vo.UserVo;
 import com.fs.qw.param.QwFsUserParam;
 import com.fs.qw.vo.QwFsUserVO;
+import com.fs.store.param.h5.FsUserPageListParam;
+import com.fs.store.vo.h5.FsUserPageListVO;
 import com.fs.system.service.ISysConfigService;
 import com.fs.watch.domain.WatchUser;
 import com.fs.watch.service.WatchUserService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.fs.his.domain.FsUser;
@@ -70,6 +76,8 @@ public class FsUserServiceImpl implements IFsUserService
 
     @Autowired
     private CompanyTagUserMapper companyTagUserMapper;
+    @Autowired
+    private FsUserCompanyUserMapper fsUserCompanyUserMapper;
 
 
     /**
@@ -454,4 +462,45 @@ public class FsUserServiceImpl implements IFsUserService
         }
     }
 
+    @Override
+    public List<FsUserPageListVO> selectFsUserPageList(FsUserPageListParam param) {
+        List<FsUserPageListVO> fsUserPageListVOS = fsUserMapper.selectFsUserPageList(param);
+
+        // 获取当前销售所有重粉会员
+        List<FsUserCompanyUser> fsUserCompanyUsers = fsUserCompanyUserMapper.selectRepeatUser(param.getUserId());
+
+        if(!fsUserCompanyUsers.isEmpty()){
+            List<Long> userIds = fsUserCompanyUsers.stream().map(FsUserCompanyUser::getUserId).collect(Collectors.toList());
+            // 获取会员所属的重粉销售
+            List<FsUserCompanyUser> repeatCompanyUserNames = fsUserCompanyUserMapper.selectRepeatCompanyUserName(userIds);
+            Map<Long, String> map = repeatCompanyUserNames.stream().collect(Collectors.toMap(FsUserCompanyUser::getUserId, FsUserCompanyUser::getRepeatCompanyUserName));
+
+            return fsUserPageListVOS.stream().map(v -> {
+                FsUserPageListVO fsUserPageListVO = new FsUserPageListVO();
+                BeanUtils.copyProperties(v, fsUserPageListVO);
+                fsUserPageListVO.setRepeatCompanyUserName(map.get(v.getUserId()));
+                if("微信用户".equals(v.getNickname()) && StringUtils.isNotEmpty(v.getPhone())){
+                    fsUserPageListVO.setNickname(v.getPhone());
+                }
+                return fsUserPageListVO;
+            }).collect(Collectors.toList());
+
+        } else {
+            return fsUserPageListVOS;
+        }
+    }
+
+    @Override
+    public Boolean disabledUser(String[] ids, boolean status) {
+        boolean result;
+        if (status) {
+            // 启用
+            result = fsUserMapper.batchUpdateFsUserByIds(ids, 1) > 0;
+        } else {
+            // 禁用
+            result = fsUserMapper.batchUpdateFsUserByIds(ids, 0) > 0;
+        }
+        return result;
+    }
+
 }

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

@@ -110,8 +110,8 @@ public interface QwGroupChatMapper
     @Select("select chat_id,name from qw_group_chat where  corp_id=#{corpId}")
     List<QwGroupChatOptionsVO> selectGroupChatOptionsVOList(String corpId);
 
-    @Select("select chat_id,name from qw_group_chat where  find_in_set(owner,#{qwUserIds})")
-    List<QwGroupChatOptionsVO> listAllByQwUserList(String qwUserIds);
+    @Select("select chat_id,name from qw_group_chat where corp_id = #{corpId} and find_in_set(owner,#{qwUserIds})")
+    List<QwGroupChatOptionsVO> listAllByQwUserList(@Param("qwUserIds") String qwUserIds, @Param("corpId") String corpId);
 
     List<QwGroupChat> selectQwGroupChatByChatIds(@Param("ids") String[] ids);
 

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

@@ -62,7 +62,7 @@ public interface IQwGroupChatService
     public int deleteQwGroupChatByChatIdAndCompanyId(String chatId,String corpId);
 
     List<QwGroupChatOptionsVO> selectGroupChatOptionsVOList(String corpId);
-    List<QwGroupChatOptionsVO> listAllByQwUserList(String qwUserIds);
+    List<QwGroupChatOptionsVO> listAllByQwUserList(String qwUserIds, String corpId);
 
     List<QwGroupChat> selectQwGroupChatByChatIds(String[] ids);
 }

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

@@ -431,8 +431,8 @@ public class QwGroupChatServiceImpl implements IQwGroupChatService
 
 
     @Override
-    public List<QwGroupChatOptionsVO> listAllByQwUserList(String qwUserIds) {
-        return qwGroupChatMapper.listAllByQwUserList(qwUserIds);
+    public List<QwGroupChatOptionsVO> listAllByQwUserList(String qwUserIds, String corpId) {
+        return qwGroupChatMapper.listAllByQwUserList(qwUserIds, corpId);
     }
 
     @Override

+ 5 - 0
fs-service/src/main/java/com/fs/sop/domain/QwSopLogs.java

@@ -70,6 +70,11 @@ public class QwSopLogs implements Serializable {
     */
     private String sopId;
 
+    /**
+     * 营期主键
+     */
+    private String userLogsId;
+
     /**
      * 备注
      */

+ 12 - 12
fs-service/src/main/java/com/fs/sop/service/impl/QwSopServiceImpl.java

@@ -754,6 +754,8 @@ public class QwSopServiceImpl implements IQwSopService
         List<QwSop> qwSopList = qwSops.stream().filter(e -> e.getType() == 2 && e.getFilterMode() == 1).collect(Collectors.toList());
         List<QwSop> wxSopList = qwSops.stream().filter(e -> e.getType() == 1).collect(Collectors.toList());
         List<QwSop> chatSopList = qwSops.stream().filter(e -> e.getType() == 2 && e.getFilterMode() == 2).collect(Collectors.toList());
+        List<String> areadyListAll = new ArrayList<>();
+        List<String> toBeSentAll = new ArrayList<>();
 
         if(!wxSopList.isEmpty()){
             // 筛选出 status == 1 的 IDs
@@ -773,12 +775,11 @@ public class QwSopServiceImpl implements IQwSopService
             if (toBeSent.length > 0) {
                 int i = qwSopMapper.updateStatusQwSopById(toBeSent);
                 if (i > 0) {
-                    return R.ok().put("suc",toBeSent).put("err",areadyList);
-                }else {
-                    return R.error();
+                    areadyListAll.addAll(areadyList);
+                    toBeSentAll.addAll(Arrays.asList(toBeSent));
                 }
             }else {
-                return R.error().put("err",areadyList);
+                areadyListAll.addAll(areadyList);
             }
 
         }
@@ -801,12 +802,12 @@ public class QwSopServiceImpl implements IQwSopService
             if (toBeSent.length > 0) {
                 int i = qwSopMapper.updateStatusQwSopById(toBeSent);
                 if (i > 0) {
+                    areadyListAll.addAll(areadyList);
+                    toBeSentAll.addAll(Arrays.asList(toBeSent));
                     return R.ok().put("suc",toBeSent).put("err",areadyList);
-                }else {
-                    return R.error();
                 }
             }else {
-                return R.error().put("err",areadyList);
+                areadyListAll.addAll(areadyList);
             }
         }
         if(!chatSopList.isEmpty()){
@@ -828,15 +829,14 @@ public class QwSopServiceImpl implements IQwSopService
             if (toBeSent.length > 0) {
                 int i = qwSopMapper.updateStatusQwSopById(toBeSent);
                 if (i > 0) {
-                    return R.ok().put("suc",toBeSent).put("err",areadyList);
-                }else {
-                    return R.error();
+                    areadyListAll.addAll(areadyList);
+                    toBeSentAll.addAll(Arrays.asList(toBeSent));
                 }
             }else {
-                return R.error().put("err",areadyList);
+                areadyListAll.addAll(areadyList);
             }
         }
-        return R.error();
+        return R.ok().put("suc",toBeSentAll).put("err",areadyListAll);
     }
 
     @Override

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

@@ -29,8 +29,8 @@ wx:
       port: 6379
       timeout: 2000
     configs:
-      - appId: wxbc45c3882797e662 # 第一个公众号的appid  //公众号名称:成都九州在线互联网医院
-        secret: 5da9ae6d354c130dc81cde1a6d097480 # 公众号的appsecret
+      - appId: wx5b979cb3448d6fa5 # 第一个公众号的appid  //公众号名称:成都九州在线互联网医院
+        secret: c66f99034e06e4ae1f857895e3868bb0 # 公众号的appsecret
         token: PPKOdAlCoMO # 接口配置里的Token值
         aesKey: Eswa6VjwtVcw03qZy6Wllgrv5aytIA1SZPEU0kU2 # 接口配置里的EncodingAESKey值
 aifabu:  #爱链接

+ 114 - 0
fs-service/src/main/resources/mapper/his/FsUserMapper.xml

@@ -185,7 +185,121 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where user_id = #{userId}
     </select>
 
+    <select id="selectFsUserPageList" resultType="com.fs.store.vo.h5.FsUserPageListVO">
+        SELECT
+        fs_user.*,
+        fs_user_course_count.id,
+        fs_user_course_count.watch_course_count,
+        fs_user_course_count.miss_course_count,
+        fs_user_course_count.miss_course_status,
+        fs_user_course_count.course_ids,
+        fs_user_course_count.part_course_count,
+        fs_user_course_count.last_watch_date,
+        fs_user_course_count.STATUS AS courseCountStatus,
+        fs_user_course_count.stop_watch_days,
+        fs_user_course_count.complete_watch_date,
+        GROUP_CONCAT(DISTINCT company_tag.tag) AS tag,
+        GROUP_CONCAT(DISTINCT company_tag.tag_id) AS tagIds,
+        company_user.nick_name as companyUserNickName,
+        fs_user_company_user.is_repeat_fans
+        FROM
+        fs_user
+        LEFT JOIN fs_user_course_count ON fs_user.user_id = fs_user_course_count.user_id
+        LEFT JOIN company_tag_user ON fs_user.user_id = company_tag_user.user_id
+        LEFT JOIN company_tag ON FIND_IN_SET(company_tag.tag_id, company_tag_user.tag_ids) > 0
+        LEFT JOIN fs_user_company_user ON fs_user_company_user.user_id = fs_user.user_id
+        LEFT JOIN company_user ON company_user.user_id = fs_user_company_user.company_user_id
+        where fs_user.is_del = 0
+        <if test="userId != null and userId !='' ">
+            and (company_user.user_id = #{userId} OR company_user.parent_id = #{userId} )
+        </if>
+        <if test="companyUserId != null and companyUserId !='' ">
+            and company_user.user_id = #{companyUserId}
+        </if>
+        <choose>
+            <when test = "isBlack">
+                AND (fs_user.status = 0 or fs_user_company_user.is_repeat_fans = 1)
+            </when>
+            <otherwise>
+                AND (fs_user.status = 1 and fs_user_company_user.is_repeat_fans = 0)
+            </otherwise>
+        </choose>
+        <if test="keyword != null and keyword !='' ">
+            AND (fs_user.nickname LIKE concat('%',#{keyword},'%')
+            or  fs_user.phone LIKE concat('%',#{keyword},'%')
+            )
+        </if>
+        <if test="registerStartTime != null and registerStartTime !='' ">
+            AND fs_user.create_time &gt;= #{registerStartTime}
+        </if>
+        <if test="registerEndTime != null and registerEndTime !='' ">
+            AND fs_user.create_time &lt;= #{registerEndTime}
+        </if>
+        <if test="tagIds != null and tagIds.length > 0">
+            AND
+            <foreach collection="tagIds" item="item" index="index" open="(" separator="or" close=")">
+                company_tag_user.tag_ids LIKE concat('%"',#{item},'"%')
+            </foreach>
+        </if>
+        <if test="tabValue != null and tabValue !='' ">
+            <choose>
+                <when test = "tabValue == 1">
+                    AND DAY(fs_user.create_time) = DAY(NOW())
+                </when>
+                <when test = "tabValue == 2">
+                    AND DAY(fs_user_course_count.complete_watch_date) = DAY(NOW())
+                </when>
+                <when test = "tabValue == 3">
+                    AND (fs_user_course_count.status = 3 or fs_user_course_count.status is null)
+                </when>
+            </choose>
+        </if>
+        <if test="watchCourseType != null and watchCourseType !='' ">
+            <choose>
+                <when test = "watchCourseType == 1">
+                    AND (fs_user_course_count.status = 3 or fs_user_course_count.status is null)
+                </when>
+                <when test = "watchCourseType == 2">
+                    AND fs_user_course_count.status = 1
+                </when>
+                <when test = "watchCourseType == 3">
+                    AND fs_user_course_count.status = 2
+                </when>
+            </choose>
+        </if>
+        <if test="missCourseStatus != null and missCourseStatus !='' ">
+            <choose>
+                <when test = "missCourseStatus == 1">
+                    AND fs_user_course_count.miss_course_status = 1
+                </when>
+                <when test = "missCourseStatus == 2">
+                    AND (fs_user_course_count.miss_course_status = 2 or fs_user_course_count.miss_course_status is null )
+                </when>
+            </choose>
+        </if>
+
+        group by fs_user.user_id
+
+        <if test="continueMissCourseSort != null and continueMissCourseSort !='' ">
+            order by
+            <choose>
+                <when test = "continueMissCourseSort == 0">
+                    fs_user.create_time desc
+                </when>
+                <when test = "continueMissCourseSort == 1">
+                    fs_user.nickname asc
+                </when>
+            </choose>
+        </if>
+    </select>
 
+    <update id="batchUpdateFsUserByIds" parameterType="Long">
+        update fs_user
+        set status = #{status} where user_id in
+        <foreach item="id" collection="ids" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
 
     <insert id="insertFsUser" parameterType="FsUser" useGeneratedKeys="true" keyProperty="userId">
         insert into fs_user

+ 6 - 1
pom.xml

@@ -217,7 +217,6 @@
                 <artifactId>fs-common</artifactId>
                 <version>${fs.version}</version>
             </dependency>
-
         </dependencies>
     </dependencyManagement>
 
@@ -275,6 +274,12 @@
                 <enabled>true</enabled>
             </releases>
         </repository>
+        <repository>
+            <id>OceanengineOpenApi</id>
+            <name>ad_open_sdk_java</name>
+            <layout>default</layout>
+            <url>https://artifact.bytedance.com/repository/releases/</url>
+        </repository>
     </repositories>
 
     <pluginRepositories>