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

Merge branch 'master' of http://1.14.104.71:10880/root/ylrz_his_scrm_java

caoliqin 1 неделя назад
Родитель
Сommit
5b9efba957
47 измененных файлов с 619 добавлено и 160 удалено
  1. 1 2
      fs-admin/src/main/java/com/fs/course/controller/FsUserCourseCategoryController.java
  2. 29 0
      fs-admin/src/main/java/com/fs/his/controller/FsInquiryOrderController.java
  3. 27 4
      fs-admin/src/main/java/com/fs/his/controller/FsInquiryOrderReportController.java
  4. 30 4
      fs-admin/src/main/java/com/fs/his/controller/FsPackageOrderController.java
  5. 42 1
      fs-admin/src/main/java/com/fs/his/controller/FsPrescribeController.java
  6. 29 0
      fs-admin/src/main/java/com/fs/his/controller/FsStoreAfterSalesController.java
  7. 51 5
      fs-admin/src/main/java/com/fs/his/controller/FsStoreOrderController.java
  8. 29 0
      fs-admin/src/main/java/com/fs/his/controller/FsStoreSubOrderController.java
  9. 1 1
      fs-admin/src/main/java/com/fs/live/controller/LiveDataController.java
  10. 1 0
      fs-common/src/main/java/com/fs/common/constant/LiveKeysConstant.java
  11. 13 0
      fs-common/src/main/java/com/fs/common/core/domain/entity/SysUser.java
  12. 1 2
      fs-company/src/main/java/com/fs/company/controller/course/FsUserCourseCategoryController.java
  13. 1 1
      fs-live-app/src/main/java/com/fs/live/controller/LiveController.java
  14. 1 0
      fs-live-app/src/main/java/com/fs/live/websocket/bean/SendMsgVo.java
  15. 5 0
      fs-live-app/src/main/java/com/fs/live/websocket/service/WebSocketServer.java
  16. 40 5
      fs-qw-task/src/main/java/com/fs/app/taskService/impl/AsyncCourseWatchFinishService.java
  17. 5 0
      fs-service/src/main/java/com/fs/company/domain/CompanyDeptUserInfo.java
  18. 103 48
      fs-service/src/main/java/com/fs/company/service/impl/StatisticManageServiceImpl.java
  19. 3 0
      fs-service/src/main/java/com/fs/course/mapper/FsUserCourseCategoryMapper.java
  20. 1 0
      fs-service/src/main/java/com/fs/course/service/IFsUserCourseCategoryService.java
  21. 13 2
      fs-service/src/main/java/com/fs/course/service/impl/FsCourseFinishTempParentServiceImpl.java
  22. 5 0
      fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseCategoryServiceImpl.java
  23. 1 1
      fs-service/src/main/java/com/fs/his/service/impl/FsStoreOrderServiceImpl.java
  24. 2 2
      fs-service/src/main/java/com/fs/live/domain/LiveCoupon.java
  25. 1 1
      fs-service/src/main/java/com/fs/live/mapper/LiveAfterSalesMapper.java
  26. 1 1
      fs-service/src/main/java/com/fs/live/mapper/LiveMsgMapper.java
  27. 26 26
      fs-service/src/main/java/com/fs/live/service/impl/LiveDataServiceImpl.java
  28. 1 1
      fs-service/src/main/java/com/fs/live/service/impl/LiveRedConfServiceImpl.java
  29. 2 2
      fs-service/src/main/java/com/fs/live/vo/LiveDashBoardDataVo.java
  30. 1 0
      fs-service/src/main/java/com/fs/live/vo/LiveDataListVo.java
  31. 1 0
      fs-service/src/main/java/com/fs/live/vo/LiveDataStatisticsVo.java
  32. 59 0
      fs-service/src/main/java/com/fs/live/vo/LiveMsgVo.java
  33. 2 0
      fs-service/src/main/java/com/fs/live/vo/LiveVo.java
  34. 1 1
      fs-service/src/main/java/com/fs/qw/mapper/QwFriendWelcomeMapper.java
  35. 2 0
      fs-service/src/main/java/com/fs/statis/dto/ComprehensiveStatisticsDTO.java
  36. 2 0
      fs-service/src/main/java/com/fs/statis/param/ComprehensiveStatisticsParam.java
  37. 1 1
      fs-service/src/main/resources/application-config-druid-bjzm-test.yml
  38. 1 1
      fs-service/src/main/resources/application-config-druid-bjzm.yml
  39. 1 1
      fs-service/src/main/resources/application-config-druid-heyantang.yml
  40. 1 1
      fs-service/src/main/resources/application-config-druid-qdtst.yml
  41. 1 1
      fs-service/src/main/resources/mapper/company/CourseWatchLogStatisticsMapper.xml
  42. 23 11
      fs-service/src/main/resources/mapper/company/StatisticManageMapper.xml
  43. 6 1
      fs-service/src/main/resources/mapper/live/LiveCouponMapper.xml
  44. 29 24
      fs-service/src/main/resources/mapper/system/SysUserMapper.xml
  45. 9 0
      fs-user-app/pom.xml
  46. 2 0
      fs-user-app/src/main/java/com/fs/app/controller/live/LiveMsgController.java
  47. 12 9
      fs-user-app/src/main/java/com/fs/app/facade/impl/LiveFacadeServiceImpl.java

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

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

+ 29 - 0
fs-admin/src/main/java/com/fs/his/controller/FsInquiryOrderController.java

@@ -30,6 +30,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -57,6 +58,20 @@ public class FsInquiryOrderController extends BaseController
    public TableDataInfo list(FsInquiryOrderParam fsInquiryOrder)
     {
         startPage();
+        //根据订单权限查询相关公司订单
+        try {
+            Long companyId = getLoginUser().getUser().getCompanyId();
+            if (companyId!=null){
+                if (fsInquiryOrder.getCompanyId()!=null){
+                    if (!companyId.equals(fsInquiryOrder.getCompanyId())) {
+                        return getDataTable(new ArrayList<>());
+                    }
+                }
+                fsInquiryOrder.setCompanyId(companyId);
+            }
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+        }
         if(!StringUtils.isEmpty(fsInquiryOrder.getCreateTimeRange())){
             fsInquiryOrder.setCreateTimeList(fsInquiryOrder.getCreateTimeRange().split("--"));
         }
@@ -84,6 +99,20 @@ public class FsInquiryOrderController extends BaseController
         }
         Integer inquiryType = fsInquiryOrder.getInquiryType();
         fsInquiryOrder.setInquiryType(null);
+        //根据订单权限查询相关公司订单
+        try {
+            Long companyId = getLoginUser().getUser().getCompanyId();
+            if (companyId!=null){
+                if (fsInquiryOrder.getCompanyId()!=null){
+                    if (!companyId.equals(fsInquiryOrder.getCompanyId())) {
+                        return AjaxResult.error("请筛选数据自己公司数据");
+                    }
+                }
+                fsInquiryOrder.setCompanyId(companyId);
+            }
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+        }
         logger.info("导出问诊订单:"+ SecurityUtils.getUserId());
         if (fsInquiryOrderService.isEntityNull(fsInquiryOrder)){
             return AjaxResult.error("请筛选数据导出");

+ 27 - 4
fs-admin/src/main/java/com/fs/his/controller/FsInquiryOrderReportController.java

@@ -22,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -51,8 +52,19 @@ public class FsInquiryOrderReportController extends BaseController
     public TableDataInfo list(FsInquiryOrderReportParam fsInquiryOrderReport)
     {
         startPage();
-        if (getUserId().equals(54L)||getUserId().equals(211L)){
-            fsInquiryOrderReport.setCompanyId(188L);
+        //根据订单权限查询相关公司订单
+        try {
+            Long companyId = getLoginUser().getUser().getCompanyId();
+            if (companyId!=null){
+                if (fsInquiryOrderReport.getCompanyId()!=null){
+                    if (!companyId.equals(fsInquiryOrderReport.getCompanyId())) {
+                        return getDataTable(new ArrayList<>());
+                    }
+                }
+                fsInquiryOrderReport.setCompanyId(companyId);
+            }
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
         }
         List<FsInquiryOrderReportListVO> list = fsInquiryOrderReportService.selectFsInquiryOrderReportListVO(fsInquiryOrderReport);
         for (FsInquiryOrderReportListVO vo : list){
@@ -78,8 +90,19 @@ public class FsInquiryOrderReportController extends BaseController
         if (fsInquiryOrderReportService.isEntityNull(fsInquiryOrderReport)){
             return AjaxResult.error("请筛选数据导出");
         }
-        if (getUserId().equals(54L)||getUserId().equals(211L)){
-            fsInquiryOrderReport.setCompanyId(188L);
+        //根据订单权限查询相关公司订单
+        try {
+            Long companyId = getLoginUser().getUser().getCompanyId();
+            if (companyId!=null){
+                if (fsInquiryOrderReport.getCompanyId()!=null){
+                    if (!companyId.equals(fsInquiryOrderReport.getCompanyId())) {
+                        return AjaxResult.error("请筛选数据自己公司数据");
+                    }
+                }
+                fsInquiryOrderReport.setCompanyId(companyId);
+            }
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
         }
         Integer exportType1 = exportTaskService.isExportType1(SecurityUtils.getUserId());
         if (exportType1>0){

+ 30 - 4
fs-admin/src/main/java/com/fs/his/controller/FsPackageOrderController.java

@@ -1,5 +1,6 @@
 package com.fs.his.controller;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -10,10 +11,7 @@ import com.fs.his.domain.FsExportTask;
 import com.fs.his.mapper.FsStorePaymentMapper;
 import com.fs.his.param.FsPackageOrderParam;
 import com.fs.his.service.IFsExportTaskService;
-import com.fs.his.vo.FsPackageOrderExcelVO;
-import com.fs.his.vo.FsPackageOrderListVO;
-import com.fs.his.vo.FsPackageOrderVO;
-import com.fs.his.vo.FsStoreOrderVO;
+import com.fs.his.vo.*;
 import com.fs.ybPay.service.IPayService;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -62,6 +60,20 @@ public class FsPackageOrderController extends BaseController
     public TableDataInfo list(FsPackageOrderParam  fsPackageOrder)
     {
         startPage();
+        //根据订单权限查询相关公司订单
+        try {
+            Long companyId = getLoginUser().getUser().getCompanyId();
+            if (companyId!=null){
+                if (fsPackageOrder.getCompanyId()!=null){
+                    if (!companyId.equals(fsPackageOrder.getCompanyId())) {
+                        return getDataTable(new ArrayList<FsStoreOrderListAndStatisticsVo>());
+                    }
+                }
+                fsPackageOrder.setCompanyId(companyId);
+            }
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+        }
         if (fsPackageOrder.getPhoneMk()!=null&&fsPackageOrder.getPhoneMk()!=""){
             fsPackageOrder.setPhone(encryptPhone(fsPackageOrder.getPhoneMk()));
         }
@@ -86,6 +98,20 @@ public class FsPackageOrderController extends BaseController
         if (fsPackageOrderService.isEntityNull(fsPackageOrder)){
             return AjaxResult.error("请筛选数据导出");
         }
+        //根据订单权限查询相关公司订单
+        try {
+            Long companyId = getLoginUser().getUser().getCompanyId();
+            if (companyId!=null){
+                if (fsPackageOrder.getCompanyId()!=null){
+                    if (!companyId.equals(fsPackageOrder.getCompanyId())) {
+                        return AjaxResult.error("请筛选数据自己公司数据");
+                    }
+                }
+                fsPackageOrder.setCompanyId(companyId);
+            }
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+        }
         fsPackageOrder.setStatus(status); //解决isEntityNull方法后status缺失
         Long count = fsPackageOrderService.selectFsPackageOrderExcelListVOCount(fsPackageOrder);
         if (count>30000){

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

@@ -72,6 +72,20 @@ public class FsPrescribeController extends BaseController
     public TableDataInfo list(FsPrescribeParam fsPrescribe)
     {
         startPage();
+        //根据订单权限查询相关公司订单
+        try {
+            Long companyId = getLoginUser().getUser().getCompanyId();
+            if (companyId!=null){
+                if (fsPrescribe.getCompanyId()!=null){
+                    if (!companyId.equals(fsPrescribe.getCompanyId())) {
+                        return getDataTable(new ArrayList<>());
+                    }
+                }
+                fsPrescribe.setCompanyId(companyId);
+            }
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+        }
         List<FsPrescribeListVO> list = fsPrescribeService.selectFsPrescribeListVO(fsPrescribe);
         for (FsPrescribeListVO vo : list){
             if (vo.getPatientTel()!=null){
@@ -97,6 +111,20 @@ public class FsPrescribeController extends BaseController
             return AjaxResult.error("请筛选数据导出");
         }
         logger.info("tc>\n【导出处方】:{}", SecurityUtils.getUserId());
+        //根据订单权限查询相关公司订单
+        try {
+            Long companyId = getLoginUser().getUser().getCompanyId();
+            if (companyId!=null){
+                if (fsPrescribe.getCompanyId()!=null){
+                    if (!companyId.equals(fsPrescribe.getCompanyId())) {
+                        return AjaxResult.error("请筛选数据自己公司数据");
+                    }
+                }
+                fsPrescribe.setCompanyId(companyId);
+            }
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+        }
         Long count = fsPrescribeService.selectFsPrescribeExcelListVOCount(fsPrescribe);
         if (count>30000){
             return AjaxResult.error("导出数据不可超过3w条");
@@ -131,7 +159,20 @@ public class FsPrescribeController extends BaseController
         if (exportType1>0){
             return AjaxResult.error("你已经有正在导出的任务");
         }
-
+        //根据订单权限查询相关公司订单
+        try {
+            Long companyId = getLoginUser().getUser().getCompanyId();
+            if (companyId!=null){
+                if (fsPrescribe.getCompanyId()!=null){
+                    if (!companyId.equals(fsPrescribe.getCompanyId())) {
+                        return AjaxResult.error("请筛选数据自己公司数据");
+                    }
+                }
+                fsPrescribe.setCompanyId(companyId);
+            }
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+        }
         FsExportTask task=new FsExportTask();
         task.setTaskType(6);
         task.setStatus(0);

+ 29 - 0
fs-admin/src/main/java/com/fs/his/controller/FsStoreAfterSalesController.java

@@ -1,5 +1,6 @@
 package com.fs.his.controller;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -66,6 +67,20 @@ public class FsStoreAfterSalesController extends BaseController
     public TableDataInfo list(FsStoreAfterSalesParam fsStoreAfterSales)
     {
         startPage();
+        //根据订单权限查询相关公司订单
+        try {
+            Long companyId = getLoginUser().getUser().getCompanyId();
+            if (companyId!=null){
+                if (fsStoreAfterSales.getCompanyId()!=null){
+                    if (!companyId.equals(fsStoreAfterSales.getCompanyId())) {
+                        return getDataTable(new ArrayList<FsStoreAfterSalesListVO>());
+                    }
+                }
+                fsStoreAfterSales.setCompanyId(companyId);
+            }
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+        }
         if(!StringUtils.isEmpty(fsStoreAfterSales.getCreateTimeRange())){
             fsStoreAfterSales.setCreateTimeList(fsStoreAfterSales.getCreateTimeRange().split("--"));
         }
@@ -88,6 +103,20 @@ public class FsStoreAfterSalesController extends BaseController
         if (exportType1>0){
             return AjaxResult.error("你已经有正在导出的任务");
         }
+        //根据订单权限查询相关公司订单
+        try {
+            Long companyId = getLoginUser().getUser().getCompanyId();
+            if (companyId!=null){
+                if (fsStoreAfterSales.getCompanyId()!=null){
+                    if (!companyId.equals(fsStoreAfterSales.getCompanyId())) {
+                        return AjaxResult.error("请筛选数据自己公司数据");
+                    }
+                }
+                fsStoreAfterSales.setCompanyId(companyId);
+            }
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+        }
         if(!StringUtils.isEmpty(fsStoreAfterSales.getCreateTimeRange())){
             fsStoreAfterSales.setCreateTimeList(fsStoreAfterSales.getCreateTimeRange().split("--"));
         }

+ 51 - 5
fs-admin/src/main/java/com/fs/his/controller/FsStoreOrderController.java

@@ -131,10 +131,28 @@ public class FsStoreOrderController extends BaseController
     @PostMapping("/list")
     public FsStoreOrderListAndStatisticsVo list(@RequestBody FsStoreOrderParam fsStoreOrder)
     {
+        FsStoreOrderListAndStatisticsVo vo = new FsStoreOrderListAndStatisticsVo();
         PageHelper.startPage(fsStoreOrder);
         if (fsStoreOrder.getUserPhoneMk()!=null&& !fsStoreOrder.getUserPhoneMk().isEmpty()){
             fsStoreOrder.setUserPhone(encryptPhone(fsStoreOrder.getUserPhoneMk()));
         }
+        //根据订单权限查询相关公司订单
+        try {
+            Long companyId = getLoginUser().getUser().getCompanyId();
+            if (companyId!=null){
+                if (fsStoreOrder.getCompanyId()!=null){
+                    if (!companyId.equals(fsStoreOrder.getCompanyId())) {
+                        vo.setRows(new ArrayList<FsStoreOrderListAndStatisticsVo>());
+                        vo.setTotal(0);
+                        return vo;
+                    }
+                }
+                fsStoreOrder.setCompanyId(companyId);
+            }
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+        }
+
         List<FsStoreOrderListVO> list;
         if (StringUtils.isNotBlank(fsStoreOrder.getErpAccount())){
             //金牛erp查询
@@ -146,17 +164,17 @@ public class FsStoreOrderController extends BaseController
         TableDataInfo dataTable = getDataTable(list);
         if ("金牛明医".equals(cloudHostProper.getCompanyName())){
             if (fsStoreOrder.getStatus() !=null && fsStoreOrder.getStatus() != 1){
-                list.forEach(vo->{
+                list.forEach(fsStoreOrderListVO->{
                     //查询顺丰代服账号
-                    FsStoreOrderDf df = fsStoreOrderDfService.selectFsStoreOrderDfByOrderId(vo.getOrderId());
+                    FsStoreOrderDf df = fsStoreOrderDfService.selectFsStoreOrderDfByOrderId(fsStoreOrderListVO.getOrderId());
                     if (df != null){
-                        vo.setErpAccount(df.getLoginAccount());
+                        fsStoreOrderListVO.setErpAccount(df.getLoginAccount());
                     }
                 });
             }
             dataTable.setMsg("jnmy");
         }
-        FsStoreOrderListAndStatisticsVo vo = new FsStoreOrderListAndStatisticsVo();
+
         BeanUtils.copyProperties(dataTable, vo);
         if (dataTable.getTotal()>0){
             Map<String,BigDecimal> statistics= fsStoreOrderService.selectFsStoreOrderStatistics(fsStoreOrder);
@@ -197,6 +215,20 @@ public class FsStoreOrderController extends BaseController
             return AjaxResult.error("请筛选数据导出");
         }
         logger.info("tc>\n【订单导出】:{}", SecurityUtils.getUserId());
+        //根据订单权限查询相关公司订单
+        try {
+            Long companyId = getLoginUser().getUser().getCompanyId();
+            if (companyId!=null){
+                if (fsStoreOrder.getCompanyId()!=null){
+                    if (!companyId.equals(fsStoreOrder.getCompanyId())) {
+                        return AjaxResult.error("请筛选数据自己公司数据");
+                    }
+                }
+                fsStoreOrder.setCompanyId(companyId);
+            }
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+        }
         Long count = fsStoreOrderService.selectFsStoreOrderExcelListVOCount(fsStoreOrder);
         if (count>30000){
             return AjaxResult.error("导出数据不可超过3w条");
@@ -239,7 +271,21 @@ public class FsStoreOrderController extends BaseController
             return AjaxResult.error("请筛选数据导出");
         }
         logger.info("tc>\n【咨询报告】:{}", SecurityUtils.getUserId());
-        Long count;
+        //根据订单权限查询相关公司订单
+        try {
+            Long companyId = getLoginUser().getUser().getCompanyId();
+            if (companyId!=null){
+                if (param.getCompanyId()!=null){
+                    if (!companyId.equals(param.getCompanyId())) {
+                        return AjaxResult.error("请筛选数据自己公司数据");
+                    }
+                }
+                param.setCompanyId(companyId);
+            }
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+        }
+        Long count = 0L;
         if (StringUtils.isNotBlank(param.getErpAccount())){
             //金牛erp查询
             count = fsStoreOrderService.selectFsStoreOrderListVOByErpAccountByExportCount(param);

+ 29 - 0
fs-admin/src/main/java/com/fs/his/controller/FsStoreSubOrderController.java

@@ -1,5 +1,6 @@
 package com.fs.his.controller;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import com.fs.his.domain.FsStoreOrder;
@@ -46,6 +47,20 @@ public class FsStoreSubOrderController extends BaseController
     public TableDataInfo list(FsStoreOrderParam fsStoreSubOrder)
     {
         startPage();
+        //根据订单权限查询相关公司订单
+        try {
+            Long companyId = getLoginUser().getUser().getCompanyId();
+            if (companyId!=null){
+                if (fsStoreSubOrder.getCompanyId()!=null){
+                    if (!companyId.equals(fsStoreSubOrder.getCompanyId())) {
+                        return getDataTable(new ArrayList<>());
+                    }
+                }
+                fsStoreSubOrder.setCompanyId(companyId);
+            }
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+        }
         List<FsStoreSubOrderListVO> list = fsStoreSubOrderService.selectFsStoreSubOrderList(fsStoreSubOrder);
         return getDataTable(list);
     }
@@ -61,6 +76,20 @@ public class FsStoreSubOrderController extends BaseController
         if (fsStoreSubOrderService.isEntityNull(fsStoreSubOrder)){
             return AjaxResult.error("请筛选数据导出");
         }
+        //根据订单权限查询相关公司订单
+        try {
+            Long companyId = getLoginUser().getUser().getCompanyId();
+            if (companyId!=null){
+                if (fsStoreSubOrder.getCompanyId()!=null){
+                    if (!companyId.equals(fsStoreSubOrder.getCompanyId())) {
+                        return AjaxResult.error("请筛选数据自己公司数据");
+                    }
+                }
+                fsStoreSubOrder.setCompanyId(companyId);
+            }
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+        }
         Long count = fsStoreSubOrderService.selectFsStoreSubOrderListCount(fsStoreSubOrder);
         if (count>30000){
             return AjaxResult.error("导出数据不可超过3w条");

+ 1 - 1
fs-admin/src/main/java/com/fs/live/controller/LiveDataController.java

@@ -17,7 +17,7 @@ import java.util.Map;
 
 
 @RestController
-@RequestMapping("/live/liveData")
+@RequestMapping("/liveData/liveData")
 public class LiveDataController extends BaseController {
 
     @Autowired

+ 1 - 0
fs-common/src/main/java/com/fs/common/constant/LiveKeysConstant.java

@@ -25,6 +25,7 @@ public class LiveKeysConstant {
     public static final String LIVE_HOME_PAGE_CONFIG_RED = "live:config:%s:red:%s"; //红包记录
     public static final String LIVE_HOME_PAGE_CONFIG_COUPON = "live:config:%s:coupon:%s"; //优惠券记录
     public static final String LIVE_HOME_PAGE_CONFIG_DRAW = "live:config:%s:draw:%s"; //抽奖记录
+    public static final String TOP_MSG = "topMsg"; //抽奖记录
 
 
 

+ 13 - 0
fs-common/src/main/java/com/fs/common/core/domain/entity/SysUser.java

@@ -95,6 +95,11 @@ public class SysUser extends BaseEntity
     /** 角色ID */
     private Long roleId;
 
+
+
+    /**  公司相关数据权限,如订单类的,为空时查所有 **/
+    private Long companyId;
+
     @Excel(name = "角色名称")
     private List<String> roleName;
 
@@ -323,6 +328,13 @@ public class SysUser extends BaseEntity
     {
         this.roleId = roleId;
     }
+    public Long getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(Long companyId) {
+        this.companyId = companyId;
+    }
 
     @Override
     public String toString() {
@@ -347,6 +359,7 @@ public class SysUser extends BaseEntity
             .append("updateTime", getUpdateTime())
             .append("remark", getRemark())
             .append("dept", getDept())
+            .append("companyId", getCompanyId())
             .toString();
     }
 }

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

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

+ 1 - 1
fs-live-app/src/main/java/com/fs/live/controller/LiveController.java

@@ -125,7 +125,7 @@ public class LiveController {
 
 		LinkedHashMap<String,Object> result = (LinkedHashMap<String,Object>) params.get("WorkflowExecution");
 		String string = result.get("Object").toString();
-		videoService.updateFinishStatus("https://fs-1319721001.cos.ap-chongqing.myqcloud.com/" + string.replace(".mp4", ".m3u8"));
+		videoService.updateFinishStatus("https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/" + string.replace(".mp4", ".m3u8"));
 
 		return R.ok();
 //		{app=200149.push.tlivecloud.com, appid=1319721001, appname=live, channel_id=673,

+ 1 - 0
fs-live-app/src/main/java/com/fs/live/websocket/bean/SendMsgVo.java

@@ -33,5 +33,6 @@ public class SendMsgVo {
     private String avatar;
     private boolean on = false;
     private Integer status;
+    private Integer duration;
 
 }

+ 5 - 0
fs-live-app/src/main/java/com/fs/live/websocket/service/WebSocketServer.java

@@ -346,10 +346,15 @@ public class WebSocketServer {
                     liveMsg.setNickName(msg.getNickName());
                     liveMsg.setAvatar(msg.getAvatar());
                     liveMsg.setMsg(msg.getMsg());
+                    liveMsg.setEndTime(DateUtils.addMinutes(new Date(),msg.getDuration()).toString());
                     msg.setOn(true);
                     msg.setData(JSONObject.toJSONString(liveMsg));
                     // 广播消息
                     broadcastMessage(liveId, JSONObject.toJSONString(R.ok().put("data", msg)));
+                    // 放在当前活动里面
+                    redisCache.deleteObject(String.format(LiveKeysConstant.LIVE_HOME_PAGE_CONFIG, liveId, TOP_MSG));
+                    redisCache.setCacheObject(String.format(LiveKeysConstant.LIVE_HOME_PAGE_CONFIG, liveId, TOP_MSG), JSONObject.toJSONString(liveMsg));
+                    redisCache.expire(String.format(LiveKeysConstant.LIVE_HOME_PAGE_CONFIG, liveId, TOP_MSG), msg.getDuration(), TimeUnit.MINUTES);
                     break;
                 case "globalVisible":
                     msg.setOn(true);

+ 40 - 5
fs-qw-task/src/main/java/com/fs/app/taskService/impl/AsyncCourseWatchFinishService.java

@@ -184,13 +184,23 @@ public class AsyncCourseWatchFinishService {
 
             @Override
             public void onException(Throwable e) {
+//                if (isFlowControlException(e)) {
+//                    // 流控异常处理
+//                    handleFlowControlRetry(TOPIC, finishLog, validationResult, retryCount, e);
+//                    log.error("推送完课打备注失败1流控异常:finishLog={},e={}",JSON.toJSONString(finishLog),e.getMessage());
+//                } else {
+//                    // 其他异常
+//                    log.error("推送完课打备注失败1:{},{}",JSON.toJSONString(finishLog),e.getMessage());
+//                }
                 if (isFlowControlException(e)) {
                     // 流控异常处理
                     handleFlowControlRetry(TOPIC, finishLog, validationResult, retryCount, e);
-                    log.error("推送完课打备注失败1流控异常:finishLog={},e={}",JSON.toJSONString(finishLog),e.getMessage());
+                    log.error("推送完课打备注流控异常,准备重试。retryCount: {}, topic: {}, finishLogId: {}",
+                            retryCount, TOPIC, finishLog.getLogId()); // 只记录关键信息
                 } else {
-                    // 其他异常
-                    log.error("推送完课打备注失败1:{},{}",JSON.toJSONString(finishLog),e.getMessage());
+                    // 其他异常 - 记录完整堆栈
+                    log.error("推送完课打备注失败,非流控异常。finishLog: {}",
+                            JSON.toJSONString(finishLog), e); // 注意这里传 e 而不是 e.getMessage()
                 }
             }
         });
@@ -245,6 +255,15 @@ public class AsyncCourseWatchFinishService {
      * 判断是否为流控异常
      */
     private boolean isFlowControlException(Throwable e) {
+        // 检查异常消息中是否包含流控关键词(双重保障)
+        String errorMessage = e.getMessage();
+        if (errorMessage != null && (
+                errorMessage.contains("flow control") ||
+                errorMessage.contains("exhausted the send quota") ||
+                errorMessage.contains("CODE: 215"))) {
+            return true;
+        }
+
         if (e instanceof MQClientException) {
             return ((MQClientException) e).getResponseCode() == 215;
         }
@@ -256,11 +275,20 @@ public class AsyncCourseWatchFinishService {
         return false;
     }
 
+    private static final int MAX_FLOW_CONTROL_RETRY = 5;
     /**
      * 流控重试处理
      */
     private void handleFlowControlRetry(String topic, FsCourseWatchLog finishLog,
                                         ValidationResult validationResult, int retryCount, Throwable e) {
+        // 检查重试次数限制
+//        if (retryCount >= MAX_FLOW_CONTROL_RETRY) {
+//            log.error("流控重试达到最大次数 {},放弃重试。topic: {}, qwUserId: {}, logId: {}",
+//                    MAX_FLOW_CONTROL_RETRY, topic, finishLog.getQwUserId(), finishLog.getLogId());
+//            //todo 可以记录到数据库或发送告警
+//            return;
+//        }
+
         long backoffTime = calculateBackoffTime(retryCount);
         log.warn("流控触发,{}ms后第{}次重试: topic={}, qwUserId={}",
                 backoffTime, retryCount + 1, topic, finishLog.getQwUserId());
@@ -270,7 +298,8 @@ public class AsyncCourseWatchFinishService {
             try {
                 sendWithFlowControl(finishLog, validationResult, retryCount + 1);
             } catch (Exception ex) {
-                log.error("延迟重试执行异常: {}", ex.getMessage(), ex);
+                log.error("延迟重试执行异常 - qwUserId: {}, logId: {}, error: {}",
+                        finishLog.getQwUserId(), finishLog.getLogId(), ex.getMessage(), ex);
             }
         }, backoffTime, TimeUnit.MILLISECONDS);
     }
@@ -278,7 +307,13 @@ public class AsyncCourseWatchFinishService {
      * 计算退避时间(指数退避)
      */
     private long calculateBackoffTime(int retryCount) {
-        return Math.min(1000 * (long) Math.pow(2, retryCount), 10000); // 最大10秒
+//        return Math.min(1000 * (long) Math.pow(2, retryCount), 10000); // 最大10秒
+        // 基础退避:1s, 2s, 4s, 8s, 16s, 32s
+        long baseDelay = Math.min(1000L * (1L << Math.min(retryCount, 5)), 32000L);
+        // 添加随机抖动 (0~2s),避免多个客户端同时重试
+        long jitter = (long) (Math.random() * 1000);
+
+        return baseDelay + jitter;
     }
 
     @PreDestroy

+ 5 - 0
fs-service/src/main/java/com/fs/company/domain/CompanyDeptUserInfo.java

@@ -2,6 +2,8 @@ package com.fs.company.domain;
 
 import lombok.Data;
 
+import java.util.List;
+
 /**
  * @description:
  * @author: Guos
@@ -50,4 +52,7 @@ public class CompanyDeptUserInfo {
     */
    private String nickName;
 
+
+   private List<CompanyDeptUserInfo> children;
+
 }

+ 103 - 48
fs-service/src/main/java/com/fs/company/service/impl/StatisticManageServiceImpl.java

@@ -8,6 +8,7 @@ import com.fs.company.domain.CourseWatchLogStatistics;
 import com.fs.company.mapper.CourseWatchLogStatisticsMapper;
 import com.fs.company.mapper.StatisticManageMapper;
 import com.fs.company.service.IStatisticManageService;
+import java.util.function.Function;
 import com.fs.statis.dto.ComprehensiveStatisticsDTO;
 import com.fs.statis.param.ComprehensiveStatisticsParam;
 import com.google.common.collect.Lists;
@@ -45,38 +46,33 @@ public class StatisticManageServiceImpl implements IStatisticManageService {
     @Override
     public Object statisticMain(ComprehensiveStatisticsParam param) {
         if(param.getDimension() == DimensionEnum.COMPANY.getValue()){
-            Assert.notNull(param.getId(), "按公司展示查询条件不能为空!");
-            return getStatisticNumByCompanyId(param);
+            return getStatisticNumByCompany(param);
         }
         if(param.getDimension() == DimensionEnum.DEPARTMENT.getValue()){
             Assert.notNull(param.getId(), "按部门展示查询条件不能为空!");
-            return getStatisticNumByDeptId(param);
+            return getStatisticNumByCompanyId(param);
         }
         if (param.getDimension() == DimensionEnum.PERSONAL.getValue()){
             Assert.notNull(param.getId(), "按个人展示查询条件不能为空!");
-            return getStatisticNumByPersonal(param);
+            return getStatisticNumByDeptId(param);
         }
         return null;
     }
 
     /**
-     * 获取个人统计数据
+     * 按照公司维度统计数据
      */
-    public List getStatisticNumByDeptId(ComprehensiveStatisticsParam param){
-        //先获取部门下的用户的信息
-        Long id = param.getId();
-        List<CompanyDeptUserInfo> searchUserInfo = statisticManageMapper.getSearchUserInfo(id);
+    public List getStatisticNumByCompany(ComprehensiveStatisticsParam param) {
+        List<CompanyDeptUserInfo> companyInfo = statisticManageMapper.getCompanyInfo();
         List result = Lists.newArrayList();
         List<Date> dates = generateDateList(param.getStartTime(), param.getEndTime());
         for (Date date : dates){
             param.setStartTime(date);
             param.setEndTime(date);
-            for (CompanyDeptUserInfo companyDeptUserInfo : searchUserInfo) {
-                String deptName = companyDeptUserInfo.getDeptName();
+            for (CompanyDeptUserInfo companyDeptUserInfo : companyInfo) {
                 String companyName = companyDeptUserInfo.getCompanyName();
-                Long deptId = companyDeptUserInfo.getDeptId();
                 Long companyId = companyDeptUserInfo.getCompanyId();
-                param.setUserId(companyDeptUserInfo.getUserId());
+                param.setCompanyId(companyId);
                 ComprehensiveStatisticsDTO statisticDataByDeptId =
                         statisticManageMapper.getStatisticDataByDeptId(param);
                 if(ObjectUtils.isEmpty(statisticDataByDeptId)){
@@ -85,11 +81,10 @@ public class StatisticManageServiceImpl implements IStatisticManageService {
                     statisticDataByDeptId.setRedPacketNum(BigDecimal.ZERO.intValue());
                     statisticDataByDeptId.setSendCount(BigDecimal.ZERO.intValue());
                     statisticDataByDeptId.setRedPacketAmount(BigDecimal.ZERO);
+                    statisticDataByDeptId.setCompleteNum(BigDecimal.ZERO.intValue());
                 }
                 statisticDataByDeptId.setCompanyUserName(companyDeptUserInfo.getNickName());
                 statisticDataByDeptId.setCompanyUserId(companyDeptUserInfo.getUserId());
-                statisticDataByDeptId.setDeptName(deptName);
-                statisticDataByDeptId.setDeptId(deptId.intValue());
                 statisticDataByDeptId.setCompanyName(companyName);
                 statisticDataByDeptId.setCompanyId(companyId);
                 statisticDataByDeptId.setStatisticsTime(date);
@@ -100,54 +95,74 @@ public class StatisticManageServiceImpl implements IStatisticManageService {
     }
 
     /**
-     * 获取个人统计数据
+     * 根据部门id获取个人统计数据
      */
-    public List getStatisticNumByPersonal(ComprehensiveStatisticsParam param){
-        //先获取用户的信息
+    public List getStatisticNumByDeptId(ComprehensiveStatisticsParam param){
+        //先获取部门下的用户的信息
         Long id = param.getId();
-        CompanyDeptUserInfo userInfoByUserId = statisticManageMapper.getUserInfoByUserId(id);
+        List<CompanyDeptUserInfo> searchUserInfo = statisticManageMapper.getSearchUserInfo(id);
         List result = Lists.newArrayList();
         List<Date> dates = generateDateList(param.getStartTime(), param.getEndTime());
-        for (Date date : dates){
+        for (Date date : dates) {
             param.setStartTime(date);
             param.setEndTime(date);
-            param.setDeptId(userInfoByUserId.getDeptId());
-            param.setUserId(id);
-            ComprehensiveStatisticsDTO statisticDataByDeptId = statisticManageMapper.getStatisticDataByDeptId(param);
-            if(ObjectUtils.isEmpty(statisticDataByDeptId)){
-                statisticDataByDeptId = new ComprehensiveStatisticsDTO();
-                statisticDataByDeptId.setAnswerNum(BigDecimal.ZERO.intValue());
-                statisticDataByDeptId.setRedPacketNum(BigDecimal.ZERO.intValue());
-                statisticDataByDeptId.setSendCount(BigDecimal.ZERO.intValue());
-                statisticDataByDeptId.setRedPacketAmount(BigDecimal.ZERO);
+            for (CompanyDeptUserInfo companyDeptUserInfo : searchUserInfo) {
+                Long parentId = companyDeptUserInfo.getParentId();
+                Long deptId = companyDeptUserInfo.getDeptId();
+                if (parentId != BigDecimal.ZERO.longValue()) {
+                    Optional<CompanyDeptUserInfo> first = searchUserInfo.stream().filter(dept -> dept.getDeptId().equals(parentId)).findFirst();
+                    if (first.isPresent()){
+                        CompanyDeptUserInfo findParentDept = first.get();
+                        String parentDeptName = findParentDept.getDeptName();
+                        String deptName = companyDeptUserInfo.getDeptName();
+                        companyDeptUserInfo.setDeptName(parentDeptName + "/" + deptName);
+                    }
+                }
+                String companyName = companyDeptUserInfo.getCompanyName();
+                Long companyId = companyDeptUserInfo.getCompanyId();
+                param.setUserId(companyDeptUserInfo.getUserId());
+                ComprehensiveStatisticsDTO statisticDataByDeptId =
+                        statisticManageMapper.getStatisticDataByDeptId(param);
+                if(ObjectUtils.isEmpty(statisticDataByDeptId)){
+                    statisticDataByDeptId = new ComprehensiveStatisticsDTO();
+                    statisticDataByDeptId.setAnswerNum(BigDecimal.ZERO.intValue());
+                    statisticDataByDeptId.setRedPacketNum(BigDecimal.ZERO.intValue());
+                    statisticDataByDeptId.setSendCount(BigDecimal.ZERO.intValue());
+                    statisticDataByDeptId.setRedPacketAmount(BigDecimal.ZERO);
+                    statisticDataByDeptId.setCompleteNum(BigDecimal.ZERO.intValue());
+                }
+                statisticDataByDeptId.setCompanyUserName(companyDeptUserInfo.getNickName());
+                statisticDataByDeptId.setCompanyUserId(companyDeptUserInfo.getUserId());
+                statisticDataByDeptId.setDeptName(companyDeptUserInfo.getDeptName());
+                statisticDataByDeptId.setDeptId(deptId.intValue());
+                statisticDataByDeptId.setCompanyName(companyName);
+                statisticDataByDeptId.setCompanyId(companyId);
+                statisticDataByDeptId.setStatisticsTime(date);
+                result.add(statisticDataByDeptId);
             }
-            statisticDataByDeptId.setDeptName(userInfoByUserId.getDeptName());
-            statisticDataByDeptId.setCompanyUserName(userInfoByUserId.getNickName());
-            statisticDataByDeptId.setCompanyUserId(userInfoByUserId.getUserId());
-            statisticDataByDeptId.setDeptName(userInfoByUserId.getDeptName());
-            statisticDataByDeptId.setDeptId(userInfoByUserId.getDeptId().intValue());
-            statisticDataByDeptId.setCompanyName(userInfoByUserId.getCompanyName());
-            statisticDataByDeptId.setCompanyId(userInfoByUserId.getCompanyId());
-            statisticDataByDeptId.setStatisticsTime(date);
-            result.add(statisticDataByDeptId);
         }
         return result;
     }
 
     /**
-     * 根据公司获取统计数据
+     * 根据公司获取统部门的计数据
      */
     public List getStatisticNumByCompanyId(ComprehensiveStatisticsParam param){
         //先从公司拿到公司和部门的信息
-        List<CompanyDeptUserInfo> searchDeptInfo = getSearchDeptInfo(param.getId());
+        List<CompanyDeptUserInfo> searchDeptInfo = statisticManageMapper.getSearchDeptInfo(param.getId());;
         List result = Lists.newArrayList();
-
         List<Date> dates = generateDateList(param.getStartTime(), param.getEndTime());
         for (Date date : dates){
             param.setStartTime(date);
             param.setEndTime(date);
             for (CompanyDeptUserInfo companyDeptUserInfo : searchDeptInfo) {
-                String deptName = companyDeptUserInfo.getDeptName();
+                //判断当前部门的父级id不是0就组装名称
+                Long parentId = companyDeptUserInfo.getParentId();
+                if(parentId != BigDecimal.ZERO.longValue()){
+                    String parentDeptName = searchDeptInfo.stream().filter(dept -> dept.getDeptId().equals(parentId)).findFirst().get().getDeptName();
+                    String deptName = companyDeptUserInfo.getDeptName();
+                    companyDeptUserInfo.setDeptName(parentDeptName + "/" + deptName);
+                }
                 String companyName = companyDeptUserInfo.getCompanyName();
                 Long deptId = companyDeptUserInfo.getDeptId();
                 Long companyId = companyDeptUserInfo.getCompanyId();
@@ -160,8 +175,9 @@ public class StatisticManageServiceImpl implements IStatisticManageService {
                     statisticDataByDeptId.setRedPacketNum(BigDecimal.ZERO.intValue());
                     statisticDataByDeptId.setSendCount(BigDecimal.ZERO.intValue());
                     statisticDataByDeptId.setRedPacketAmount(BigDecimal.ZERO);
+                    statisticDataByDeptId.setCompleteNum(BigDecimal.ZERO.intValue());
                 }
-                statisticDataByDeptId.setDeptName(deptName);
+                statisticDataByDeptId.setDeptName(companyDeptUserInfo.getDeptName());
                 statisticDataByDeptId.setDeptId(deptId.intValue());
                 statisticDataByDeptId.setCompanyName(companyName);
                 statisticDataByDeptId.setCompanyId(companyId);
@@ -229,12 +245,51 @@ public class StatisticManageServiceImpl implements IStatisticManageService {
     }
 
     /**
-     * 根据公司id获取部门下拉搜索信息
-     * @param id
+     * 根据公司id获取部门下拉搜索信息(递归获取完整部门树)
+     * @param id 公司ID
      */
     @Override
     public List<CompanyDeptUserInfo> getSearchDeptInfo(Long id){
-        return statisticManageMapper.getSearchDeptInfo(id);
+        List<CompanyDeptUserInfo> allDepts = statisticManageMapper.getSearchDeptInfo(id);
+        if(CollectionUtils.isEmpty(allDepts)){
+            return allDepts;
+        }
+
+        // 构建ID到部门的映射,方便查找
+        Map<Long, CompanyDeptUserInfo> deptMap = allDepts.stream()
+                .collect(Collectors.toMap(CompanyDeptUserInfo::getDeptId, Function.identity()));
+
+        // 找到所有根部门(父级ID为0或null的部门)
+        List<CompanyDeptUserInfo> rootDepts = allDepts.stream()
+                .filter(dept -> dept.getParentId() == null ||
+                        dept.getParentId().equals(BigDecimal.ZERO.longValue()))
+                .collect(Collectors.toList());
+
+        // 递归构建部门树
+        buildDeptTree(rootDepts, deptMap);
+
+        return rootDepts;
+    }
+
+    /**
+     * 递归构建部门树结构
+     * @param parentDepts 父部门列表
+     * @param deptMap 部门映射表
+     */
+    private void buildDeptTree(List<CompanyDeptUserInfo> parentDepts, Map<Long, CompanyDeptUserInfo> deptMap) {
+        for (CompanyDeptUserInfo parentDept : parentDepts) {
+            // 查找当前部门的所有直接子部门
+            List<CompanyDeptUserInfo> children = deptMap.values().stream()
+                    .filter(dept -> dept.getParentId() != null &&
+                            dept.getParentId().equals(parentDept.getDeptId()))
+                    .collect(Collectors.toList());
+
+            if (!children.isEmpty()) {
+                // 递归构建子部门的子树
+                buildDeptTree(children, deptMap);
+                parentDept.setChildren(children);
+            }
+        }
     }
 
     /**
@@ -264,7 +319,7 @@ public class StatisticManageServiceImpl implements IStatisticManageService {
         companyDeptdUserList.forEach(companyDeptUserInfo -> {
             Long userId = companyDeptUserInfo.getUserId();
             courseWatchLogStatisticsMapper.deleteByStatisticsTimeAndDeptId(userId, companyDeptUserInfo.getDeptId(), finalDateTime);
-            //第一步通过人去查询【课程,项目,视频id】,【发送,看视频状态】
+            //第一步通过人去查询【课程,项目,视频id】,【发送,看视频状态】userId空就按照部门删除,但是要先将userId为空的先删除
             List<CourseWatchLogData> courseWatchLogData = statisticManageMapper.getCourseWatchLogData(userId, finalDateTime);
             CourseWatchLogStatistics courseWatchLogStatistics = component(companyDeptUserInfo, finalDateTime);
             if(CollectionUtils.isEmpty(courseWatchLogData)){
@@ -343,7 +398,7 @@ public class StatisticManageServiceImpl implements IStatisticManageService {
         //上面代码其实都是差不多,为了方便之后优化代码,保持整个逻辑清晰,先将整个数据保存后,再反查数据将答题数量、红包领取数量,以及金额统计更新
         updateCourseRedPacket(finalDateTime);
         stopWatch.stop();
-        log.info("gs-执行数据统计任务完成,耗时:{}", stopWatch.getTotalTimeSeconds());
+        log.info("gs-执行数据统计任务完成,耗时:{}", stopWatch.prettyPrint());
     }
 
     /**

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

@@ -98,4 +98,7 @@ public interface FsUserCourseCategoryMapper
     @Select("select cate_id as cateId,cate_name as cateName from fs_user_course_category where is_del = 0")
     @MapKey("cateId")
     Map<Long, FsUserCourseCategory> queryAllIdKeyCategoryData();
+
+    @Select("select cate_id dict_value, cate_name dict_label  from fs_user_course_category WHERE pid = 0 and is_del=0 ")
+    List<OptionsVO> selectAllFsUserCourseCategoryPidList();
 }

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

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

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

@@ -4,8 +4,11 @@ import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.fs.common.utils.DateUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fs.common.utils.StringUtils;
 import com.fs.course.domain.FsCourseFinishTemp;
 import com.fs.course.domain.FsUserCourse;
 import com.fs.course.domain.FsUserCourseVideo;
@@ -13,7 +16,10 @@ import com.fs.course.service.IFsCourseFinishTempService;
 import com.fs.course.service.IFsUserCourseService;
 import com.fs.course.service.IFsUserCourseVideoService;
 import lombok.AllArgsConstructor;
+import lombok.NoArgsConstructor;
+import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import com.fs.course.mapper.FsCourseFinishTempParentMapper;
 import com.fs.course.domain.FsCourseFinishTempParent;
@@ -26,9 +32,13 @@ import com.fs.course.service.IFsCourseFinishTempParentService;
  * @date 2025-05-22
  */
 @Service
-@AllArgsConstructor
+@RequiredArgsConstructor
 public class FsCourseFinishTempParentServiceImpl extends ServiceImpl<FsCourseFinishTempParentMapper, FsCourseFinishTempParent> implements IFsCourseFinishTempParentService {
 
+
+    @Value("${cloud_host.company_name}")
+    private String signProjectName;
+
     private final IFsUserCourseService fsUserCourseService;
     private final IFsUserCourseVideoService fsUserCourseVideoService;
     private final IFsCourseFinishTempService fsCourseFinishTempService;
@@ -71,10 +81,11 @@ public class FsCourseFinishTempParentServiceImpl extends ServiceImpl<FsCourseFin
         List<FsUserCourseVideo> videoList = fsUserCourseVideoService.selectFsUserCourseVideoListByCourseId(fsUserCourseVideo);
         int insert = baseMapper.insert(fsCourseFinishTempParent);
         fsCourseFinishTempParent.setCreateTime(DateUtils.getNowDate());
+        Long currentStatus = "济南联志健康".equals(signProjectName) ? fsCourseFinishTempParent.getStatus() : 0L;
         videoList.forEach(e -> {
             FsCourseFinishTemp temp = new FsCourseFinishTemp();
             temp.setName(e.getFileName());
-            temp.setStatus(0L);
+            temp.setStatus(currentStatus);
             temp.setSetting(fsCourseFinishTempParent.getSetting());
             temp.setChatSetting(fsCourseFinishTempParent.getChatSetting());
             temp.setCompanyId(fsCourseFinishTempParent.getCompanyId());

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

@@ -105,6 +105,11 @@ public class FsUserCourseCategoryServiceImpl implements IFsUserCourseCategorySer
         return fsUserCourseCategoryMapper.selectFsUserCourseCategoryPidList(isShow);
     }
 
+    @Override
+    public List<OptionsVO> selectFsUserCourseCategoryPidList() {
+        return fsUserCourseCategoryMapper.selectAllFsUserCourseCategoryPidList();
+    }
+
     @Override
     public List<OptionsVO> selectFsUserCourseCategoryPidList(Long userId) {
         return fsUserCourseCategoryMapper.selectFsUserCourseCategoryPidListByUserId(userId);

+ 1 - 1
fs-service/src/main/java/com/fs/his/service/impl/FsStoreOrderServiceImpl.java

@@ -846,7 +846,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService {
 
         Map<String, Object> packageJson = (Map) JSON.parse(packageOrder.getPackageJson());
         Integer packageSubType = (Integer) packageJson.get("packageSubType");
-        if (packageSubType == 3) {
+        if (packageSubType == 3 && !CloudHostUtils.hasCloudHostName("金牛明医")) {
             inquiryOrderService.createOrderByPackageOrderStatus4(packageOrder);
         }
         Long prescribeId = fsPrescribeService.insertFsPrescribeByPackageOrder(packageOrder);

+ 2 - 2
fs-service/src/main/java/com/fs/live/domain/LiveCoupon.java

@@ -59,8 +59,8 @@ public class LiveCoupon extends BaseEntity
     @Excel(name = "套餐分类ids")
     private String packageCateIds;
 
-    /** 优惠券类型 0-通用 1-商品券 2-无门槛券 */
-    @Excel(name = "优惠券类型 0-通用 1-商品券 2-无门槛券")
+    /** 优惠券类型 0-普通 1-套餐 2-制单 3.无门槛 */
+    @Excel(name = "优惠券类型")
     private Long type;
 
     /** 是否删除 */

+ 1 - 1
fs-service/src/main/java/com/fs/live/mapper/LiveAfterSalesMapper.java

@@ -123,7 +123,7 @@ public interface LiveAfterSalesMapper {
             "</if>" +
             "order by create_time desc "+
             "</script>"})
-    List<LiveAfterSalesQueryVO> selectLiveAfterSalesListQuery(LiveAfterSalesQueryParam param);
+    List<LiveAfterSalesQueryVO> selectLiveAfterSalesListQuery(@Param("maps") LiveAfterSalesQueryParam param);
 
     @Select({"<script> " +
             "select ifnull(count(1),0) from live_after_sales   " +

+ 1 - 1
fs-service/src/main/java/com/fs/live/mapper/LiveMsgMapper.java

@@ -81,7 +81,7 @@ public interface LiveMsgMapper
             "    SUM(CASE WHEN live_flag = 1 THEN 1 ELSE 0 END) AS liveCommentNum, " +
             "    SUM(CASE WHEN replay_flag = 1 THEN 1 ELSE 0 END) AS replayCommentNum " +
             "FROM live_msg WHERE live_id = #{liveId}")
-    Map<String, Long> selectDashboardCount(@Param("liveId") Long liveId);
+    Map<String, BigDecimal> selectDashboardCount(@Param("liveId") Long liveId);
 
     List<LiveMsg> selectLiveMsgSingleList(LiveMsg liveMsg);
 }

+ 26 - 26
fs-service/src/main/java/com/fs/live/service/impl/LiveDataServiceImpl.java

@@ -77,56 +77,56 @@ public class LiveDataServiceImpl implements ILiveDataService {
         // 查询观看和点赞数据(直播和回放)
         Map<String, Integer> liveDataMap = baseMapper.selectDashboardCount(liveId);
         // 查询评论数据(直播和回放)
-        Map<String, Long> msgMap = liveMsgMapper.selectDashboardCount(liveId);
+        Map<String, BigDecimal> msgMap = liveMsgMapper.selectDashboardCount(liveId);
         // 查询分享和直接访问数据
         Map<String, BigDecimal> firstEntryMap = liveUserFirstEntryMapper.selectDashboardCount(liveId);
-        
+
         LiveDashBoardDataVo result = new LiveDashBoardDataVo();
-        
+
         // 在线人数
-        result.setOnlineNum(watchUserMap == null ? BigDecimal.valueOf(0) : 
+        result.setOnlineNum(watchUserMap == null ? BigDecimal.valueOf(0) :
             watchUserMap.getOrDefault("onlineNum", BigDecimal.valueOf(0)));
-        
+
         // 直播用户数据
-        result.setLiveNewUserNum(watchUserMap == null ? BigDecimal.valueOf(0) : 
+        result.setLiveNewUserNum(watchUserMap == null ? BigDecimal.valueOf(0) :
             watchUserMap.getOrDefault("liveNewUserNum", BigDecimal.valueOf(0)));
-        result.setLiveOldUserNum(watchUserMap == null ? BigDecimal.valueOf(0) : 
+        result.setLiveOldUserNum(watchUserMap == null ? BigDecimal.valueOf(0) :
             watchUserMap.getOrDefault("liveOldUserNum", BigDecimal.valueOf(0)));
-        
+
         // 回放用户数据
-        result.setReplayNewUserNum(watchUserMap == null ? BigDecimal.valueOf(0) : 
+        result.setReplayNewUserNum(watchUserMap == null ? BigDecimal.valueOf(0) :
             watchUserMap.getOrDefault("replayNewUserNum", BigDecimal.valueOf(0)));
-        result.setReplayOldUserNum(watchUserMap == null ? BigDecimal.valueOf(0) : 
+        result.setReplayOldUserNum(watchUserMap == null ? BigDecimal.valueOf(0) :
             watchUserMap.getOrDefault("replayOldUserNum", BigDecimal.valueOf(0)));
-        
+
         // 直播观看和点赞数据
-        result.setLiveViewNum(liveDataMap == null ? 0 : 
+        result.setLiveViewNum(liveDataMap == null ? 0 :
             liveDataMap.getOrDefault("liveViewNum", 0));
-        result.setLiveLikeNum(liveDataMap == null ? 0 : 
+        result.setLiveLikeNum(liveDataMap == null ? 0 :
             liveDataMap.getOrDefault("liveLikeNum", 0));
-        
+
         // 回放观看和点赞数据
-        result.setReplayViewNum(liveDataMap == null ? 0 : 
+        result.setReplayViewNum(liveDataMap == null ? 0 :
             liveDataMap.getOrDefault("replayViewNum", 0));
-        result.setReplayLikeNum(liveDataMap == null ? 0 : 
+        result.setReplayLikeNum(liveDataMap == null ? 0 :
             liveDataMap.getOrDefault("replayLikeNum", 0));
-        
+
         // 直播和回放评论数据
-        result.setLiveCommentNum(msgMap == null ? 0L : 
-            msgMap.getOrDefault("liveCommentNum", 0L));
-        result.setReplayCommentNum(msgMap == null ? 0L : 
-            msgMap.getOrDefault("replayCommentNum", 0L));
-        
+        result.setLiveCommentNum(msgMap == null ? BigDecimal.valueOf(0) :
+            msgMap.getOrDefault("liveCommentNum", BigDecimal.valueOf(0)));
+        result.setReplayCommentNum(msgMap == null ? BigDecimal.valueOf(0) :
+            msgMap.getOrDefault("replayCommentNum", BigDecimal.valueOf(0)));
+
         // 分享和直接访问数据
-        result.setShareUrlNum(firstEntryMap == null ? BigDecimal.valueOf(0) : 
+        result.setShareUrlNum(firstEntryMap == null ? BigDecimal.valueOf(0) :
             firstEntryMap.getOrDefault("shareUrlNum", BigDecimal.valueOf(0)));
-        result.setDirectAccessNum(firstEntryMap == null ? BigDecimal.valueOf(0) : 
+        result.setDirectAccessNum(firstEntryMap == null ? BigDecimal.valueOf(0) :
             firstEntryMap.getOrDefault("directAccessNum", BigDecimal.valueOf(0)));
-        
+
         // 邀请用户列表
         List<LiveUserFirstVo> liveUserFirstVos = liveUserFirstEntryMapper.selectDashboardInviteCount(liveId);
         result.setInviteUserList(liveUserFirstVos);
-        
+
         return R.ok().put("data", result);
     }
 

+ 1 - 1
fs-service/src/main/java/com/fs/live/service/impl/LiveRedConfServiceImpl.java

@@ -192,7 +192,7 @@ public class LiveRedConfServiceImpl implements ILiveRedConfService {
             return R.error("您已经领取过红包了!");
         }
         /*try {*/
-/*            //获取红包锁
+/*            //获取红包锁w
             if (!tryLock(claimKey, red.getUserId().toString(), 5)) {
                 return R.error("您已经领取过红包了!");
             }*/

+ 2 - 2
fs-service/src/main/java/com/fs/live/vo/LiveDashBoardDataVo.java

@@ -24,10 +24,10 @@ public class LiveDashBoardDataVo {
     private Integer replayLikeNum;
 
     // 直播评论数量 liveMsg
-    private Long liveCommentNum;
+    private BigDecimal liveCommentNum;
 
     // 回放评论数量 liveMsg
-    private Long replayCommentNum;
+    private BigDecimal replayCommentNum;
 
     // 直播新用户数量 liveWatchUser
     private BigDecimal liveNewUserNum;

+ 1 - 0
fs-service/src/main/java/com/fs/live/vo/LiveDataListVo.java

@@ -72,3 +72,4 @@ public class LiveDataListVo {
 }
 
 
+

+ 1 - 0
fs-service/src/main/java/com/fs/live/vo/LiveDataStatisticsVo.java

@@ -53,3 +53,4 @@ public class LiveDataStatisticsVo {
 }
 
 
+

+ 59 - 0
fs-service/src/main/java/com/fs/live/vo/LiveMsgVo.java

@@ -0,0 +1,59 @@
+package com.fs.live.vo;
+
+
+
+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;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * 直播讨论对象 live_msg
+ *
+ * @author fs
+ * @date 2025-01-17
+ */
+@Data
+public class LiveMsgVo {
+
+    /** id */
+
+    private Long msgId;
+
+    /** 直播ID */
+    @Excel(name = "直播ID")
+    private Long liveId;
+
+    /** 用户ID */
+    @Excel(name = "用户ID")
+    private Long userId;
+
+    /** 用户ID */
+    @Excel(name = "用户ID")
+    private String nickName;
+
+    /** 用户ID */
+    @Excel(name = "用户ID")
+    private String avatar;
+
+    /** 消息 */
+    @Excel(name = "消息")
+    private String msg;
+
+    @TableField(exist = false)
+    private Integer singleVisible;
+
+    /** 直播消息标记:0-否 1-是 */
+    @Excel(name = "直播消息标记")
+    private Integer liveFlag = 0;
+
+    /** 回放消息标记:0-否 1-是 */
+    @Excel(name = "回放消息标记")
+    private Integer replayFlag = 0;
+
+    private String endTime;
+}

+ 2 - 0
fs-service/src/main/java/com/fs/live/vo/LiveVo.java

@@ -2,6 +2,7 @@ package com.fs.live.vo;
 
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.models.auth.In;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -51,4 +52,5 @@ public class LiveVo {
     private String previewUrl;
     private Integer previewVideoType;
     private Long previewVideoId;
+    private Integer globalVisible;
 }

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

@@ -85,7 +85,7 @@ public interface QwFriendWelcomeMapper
             "           SELECT 1 FROM qw_user qu " +
             "           JOIN company_user cu ON cu.user_id = qu.company_user_id " +
             "           WHERE FIND_IN_SET(qu.id, REPLACE(REPLACE(REPLACE(qfw.qw_user_ids, '[', ''), ']', ''), ' ', '')) > 0 " +
-            "           AND qu.id = #{qwUserIds} " +
+            "           AND qu.qw_user_id = #{qwUserIds} " +
             "       ) AND " +
             "   </if>" +
             "   <if test=\"isSendMsg != null\"> qfw.is_send_msg = #{isSendMsg} AND </if>" +

+ 2 - 0
fs-service/src/main/java/com/fs/statis/dto/ComprehensiveStatisticsDTO.java

@@ -29,6 +29,8 @@ public class ComprehensiveStatisticsDTO {
 
     private Integer logType;
 
+    private Integer completeNum; //完成数
+
     private Integer answerNum;
 
     private Integer redPacketNum;

+ 2 - 0
fs-service/src/main/java/com/fs/statis/param/ComprehensiveStatisticsParam.java

@@ -47,6 +47,8 @@ public class ComprehensiveStatisticsParam {
 
     private Long projectId;
 
+    private Long companyId;
+
     private String companyName;
 
     private String deptName;

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

@@ -73,7 +73,7 @@ tencent_cloud_config:
   secret_key: u5SuS80342xzx8FRBukza9lVNHKNMSaB
   bucket: bjzm-1323137866
   app_id: 1323137866
-  region: ap-guangzhou
+  region: ap-chongqing
   proxy: bjzm
 tmp_secret_config:
   secret_id: AKIDCj7NSNAovtqeJpBau8GZ4CGB71thXIxX

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

@@ -73,7 +73,7 @@ tencent_cloud_config:
   secret_key: u5SuS80342xzx8FRBukza9lVNHKNMSaB
   bucket: bjzmky-1323137866
   app_id: 1323137866
-  region: ap-guangzhou
+  region: ap-chongqing
   proxy: bjzm
 tmp_secret_config:
   secret_id: AKIDCj7NSNAovtqeJpBau8GZ4CGB71thXIxX

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

@@ -79,7 +79,7 @@ tencent_cloud_config:
   proxy: cdhyt
 cloud_host:
   company_name: 鹤颜堂
-  projectCode: HEYANTANG
+  projectCode: CDHYT
 headerImg:
   imgUrl: https
 ipad:

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

@@ -64,7 +64,7 @@ fs :
   h5CommonApi: http://10.206.0.16:8010
   jwt:
     # 加密秘钥
-    secret: f4e2e52034348f86b67cde581c0f9eb5
+    secret: f4q2d52034348t86b67ste581c0f9eb5
     # token有效时长,7天,单位秒
     expire: 31536000
     header: AppToken

+ 1 - 1
fs-service/src/main/resources/mapper/company/CourseWatchLogStatisticsMapper.xml

@@ -43,7 +43,7 @@
             #{companyUserId},
             #{companyId},
             #{deptId},
-            #{statisticsTime},
+            DATE_FORMAT(#{statisticsTime}, '%Y-%m-%d' ),
             #{courseId},
             #{videoId},
             #{projectId},

+ 23 - 11
fs-service/src/main/resources/mapper/company/StatisticManageMapper.xml

@@ -246,6 +246,7 @@
 
     <select id="getSearchUserInfo" resultMap="CompanyDeptUserListMap">
         SELECT
+            cd.parent_id,
             ci.company_id,
             ci.company_name,
             cd.dept_id,
@@ -256,22 +257,26 @@
         FROM company AS ci
                  LEFT JOIN company_dept AS cd ON ci.company_id = cd.company_id AND cd.STATUS = 0
                  LEFT JOIN company_user AS cu ON cu.dept_id = cd.dept_id AND cu.del_flag = 0
-        WHERE ci.is_del = 0 AND cd.del_flag = 0 and cu.dept_id = #{id}
+        WHERE ci.is_del = 0
+          AND cd.del_flag = 0
+          and (cd.dept_id = #{id} OR FIND_IN_SET(#{id}, cd.ancestors) > 0)
+        order by cd.dept_id
     </select>
 
     <select id="getCourseWatchLogData" resultType="com.fs.company.domain.CourseWatchLogData">
         SELECT
-            company_user_id,
-            video_id,
-            course_id,
-            project,
-            log_type,
-            create_time
+            fcwl.company_user_id,
+            fcwl.video_id,
+            fcwl.course_id,
+            fuc.project,
+            fcwl.log_type,
+            fcwl.create_time
         FROM
-            fs_course_watch_log
+            fs_course_watch_log as fcwl
+            left join fs_user_course as fuc on fcwl.course_id = fuc.course_id and fuc.is_del = 0
         WHERE
-            company_user_id = #{companyUserId}
-          and DATE_FORMAT(create_time, '%Y-%m-%d') = DATE_FORMAT(#{dateTime}, '%Y-%m-%d')
+            fcwl.company_user_id = #{companyUserId}
+          and DATE_FORMAT(fcwl.create_time, '%Y-%m-%d') = DATE_FORMAT(#{dateTime}, '%Y-%m-%d')
     </select>
 
     <select id="getAnswerAndRedPacketData" resultType="com.fs.company.domain.CourseWatchLogData">
@@ -302,6 +307,7 @@
 
     <select id="getStatisticDataByDeptId" resultType="com.fs.statis.dto.ComprehensiveStatisticsDTO">
         SELECT
+            SUM(CASE WHEN fs.log_type != 2 THEN 0 ELSE fs.send_count END) AS completeNum,
             SUM(IFNULL(fs.send_count, 0)) as sendCount,
             SUM(IFNULL(fs.log_type, 0)) as logType,
             SUM(IFNULL(fs.answer_num, 0)) as answerNum,
@@ -313,6 +319,9 @@
         WHERE
           DATE_FORMAT(fs.statistics_time, '%Y-%m-%d' ) >= DATE_FORMAT(#{startTime}, '%Y-%m-%d' )
           ANd DATE_FORMAT(fs.statistics_time, '%Y-%m-%d' ) &lt;= DATE_FORMAT(#{endTime}, '%Y-%m-%d' )
+        <if test="companyId != null">
+          and company_id = #{companyId}
+        </if>
         <if test="deptId != null">
              and fs.dept_id = #{deptId}
         </if>
@@ -335,9 +344,12 @@
         order by fs.statistics_time
         <if test="dimension != null">
             <if test="dimension == 2">
-                , fs.dept_id
+                , fs.company_id
             </if>
             <if test="dimension == 3">
+                , fs.dept_id
+            </if>
+            <if test="dimension == 1">
                 , fs.company_user_id
             </if>
         </if>

+ 6 - 1
fs-service/src/main/resources/mapper/live/LiveCouponMapper.xml

@@ -19,10 +19,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="createTime"    column="create_time"    />
         <result property="updateTime"    column="update_time"    />
         <result property="isDel"    column="is_del"    />
+        <result property="limitReceiveCount"    column="limit_receive_count"    />
     </resultMap>
 
     <sql id="selectLiveCouponVo">
-        select coupon_id, title, integral, coupon_price, use_min_price, coupon_time, sort, status, product_ids, package_cate_ids, type, create_time, update_time, is_del from live_coupon
+        select coupon_id, title, integral, coupon_price, use_min_price, coupon_time, sort, status, product_ids, package_cate_ids, type, create_time, update_time, is_del,limit_receive_count from live_coupon
     </sql>
 
     <select id="selectLiveCouponList" parameterType="LiveCoupon" resultMap="LiveCouponResult">
@@ -39,6 +40,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="packageCateIds != null  and packageCateIds != ''"> and package_cate_ids = #{packageCateIds}</if>
             <if test="type != null "> and type = #{type}</if>
             <if test="isDel != null "> and is_del = #{isDel}</if>
+            <if test="limitReceiveCount != null "> and limit_receive_count = #{limitReceiveCount}</if>
         </where>
     </select>
 
@@ -63,6 +65,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="createTime != null">create_time,</if>
             <if test="updateTime != null">update_time,</if>
             <if test="isDel != null">is_del,</if>
+            <if test="limitReceiveCount != null">limit_receive_count,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="title != null and title != ''">#{title},</if>
@@ -78,6 +81,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="createTime != null">#{createTime},</if>
             <if test="updateTime != null">#{updateTime},</if>
             <if test="isDel != null">#{isDel},</if>
+            <if test="limitReceiveCount != null">#{limitReceiveCount},</if>
          </trim>
     </insert>
 
@@ -97,6 +101,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="createTime != null">create_time = #{createTime},</if>
             <if test="updateTime != null">update_time = #{updateTime},</if>
             <if test="isDel != null">is_del = #{isDel},</if>
+            <if test="limitReceiveCount != null">limit_receive_count = #{limitReceiveCount},</if>
         </trim>
         where coupon_id = #{couponId}
     </update>

+ 29 - 24
fs-service/src/main/resources/mapper/system/SysUserMapper.xml

@@ -23,6 +23,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<result property="updateBy"     column="update_by"    />
 		<result property="updateTime"   column="update_time"  />
 		<result property="remark"       column="remark"       />
+		<result property="companyId"       column="company_id"       />
 		<association property="dept"    column="dept_id" javaType="SysDept" resultMap="deptResult" />
 		<collection  property="roles"   javaType="java.util.List"        resultMap="RoleResult" />
 		<collection property="roleName" ofType="java.lang.String" javaType="java.util.ArrayList">
@@ -48,10 +49,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<result property="updateBy"     column="update_by"    />
 		<result property="updateTime"   column="update_time"  />
 		<result property="remark"       column="remark"       />
+		<result property="companyId"       column="company_id"       />
 		<association property="dept"    column="dept_id" javaType="SysDept" resultMap="deptResult" />
 		<collection  property="roles"   javaType="java.util.List"        resultMap="RoleResult" />
 	</resultMap>
-	
+
 	<resultMap id="deptResult" type="SysDept">
 		<id     property="deptId"   column="dept_id"     />
 		<result property="parentId" column="parent_id"   />
@@ -60,7 +62,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<result property="leader"   column="leader"      />
 		<result property="status"   column="dept_status" />
 	</resultMap>
-	
+
 	<resultMap id="RoleResult" type="SysRole">
 		<id     property="roleId"       column="role_id"        />
 		<result property="roleName"     column="role_name"      />
@@ -69,11 +71,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<result property="dataScope"     column="data_scope"    />
 		<result property="status"       column="role_status"    />
 	</resultMap>
-	
+
 	<sql id="selectUserVo">
-        select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, 
+        select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
         d.dept_id, d.parent_id, d.dept_name, d.order_num, d.leader, d.status as dept_status,
-        r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
+        r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status,u.company_id
         from sys_user u
 		    left join sys_dept d on u.dept_id = d.dept_id
 		    left join sys_user_role ur on u.user_id = ur.user_id
@@ -146,7 +148,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	<select id="selectUserListByIds" parameterType="java.util.List" resultMap="SysUserResults">
 		select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber,
 		u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by,
-		u.create_time, u.remark, d.dept_name, d.leader, r.role_name
+		u.create_time, u.remark, d.dept_name, d.leader, r.role_name,u.company_id
 		from sys_user u
 		left join sys_dept d on u.dept_id = d.dept_id
 		left join sys_user_role sur on u.user_id = sur.user_id
@@ -158,7 +160,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		order by u.user_id
 	</select>
     <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResults">
-		select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader,r.role_name from sys_user u
+		select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader,r.role_name,u.company_id from sys_user u
 		left join sys_dept d on u.dept_id = d.dept_id
 		left join sys_user_role sur on u.user_id = sur.user_id
 		left join sys_role r on r.role_id = sur.role_id
@@ -187,7 +189,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<!-- 数据范围过滤 -->
 		${params.dataScope}
 	</select>
-	
+
 	<select id="selectAllocatedList" parameterType="SysUser" resultMap="SysUserResult">
 	    select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
 	    from sys_user u
@@ -204,7 +206,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<!-- 数据范围过滤 -->
 		${params.dataScope}
 	</select>
-	
+
 	<select id="selectUnallocatedList" parameterType="SysUser" resultMap="SysUserResult">
 	    select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
 	    from sys_user u
@@ -222,29 +224,29 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<!-- 数据范围过滤 -->
 		${params.dataScope}
 	</select>
-	
+
 	<select id="selectUserByUserName" parameterType="String" resultMap="SysUserResult">
 	    <include refid="selectUserVo"/>
 		where u.user_name = #{userName}
 	</select>
-	
+
 	<select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
 		<include refid="selectUserVo"/>
 		where u.user_id = #{userId}
 	</select>
-	
+
 	<select id="checkUserNameUnique" parameterType="String" resultType="int">
 		select count(1) from sys_user where user_name = #{userName} limit 1
 	</select>
-	
+
 	<select id="checkPhoneUnique" parameterType="String" resultMap="SysUserResult">
 		select user_id, phonenumber from sys_user where phonenumber = #{phonenumber} limit 1
 	</select>
-	
+
 	<select id="checkEmailUnique" parameterType="String" resultMap="SysUserResult">
 		select user_id, email from sys_user where email = #{email} limit 1
 	</select>
-	
+
 	<insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
  		insert into sys_user(
  			<if test="userId != null and userId != 0">user_id,</if>
@@ -259,6 +261,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="status != null and status != ''">status,</if>
  			<if test="createBy != null and createBy != ''">create_by,</if>
  			<if test="remark != null and remark != ''">remark,</if>
+ 			<if test="companyId != null">company_id,</if>
  			create_time
  		)values(
  			<if test="userId != null and userId != ''">#{userId},</if>
@@ -273,10 +276,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="status != null and status != ''">#{status},</if>
  			<if test="createBy != null and createBy != ''">#{createBy},</if>
  			<if test="remark != null and remark != ''">#{remark},</if>
+ 			<if test="companyId != null">#{companyId},</if>
  			sysdate()
  		)
 	</insert>
-	
+
 	<update id="updateUser" parameterType="SysUser">
  		update sys_user
  		<set>
@@ -293,32 +297,33 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="loginDate != null">login_date = #{loginDate},</if>
  			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
  			<if test="remark != null">remark = #{remark},</if>
+ 			<if test="companyId != null">company_id = #{companyId},</if>
  			update_time = sysdate()
  		</set>
  		where user_id = #{userId}
 	</update>
-	
+
 	<update id="updateUserStatus" parameterType="SysUser">
  		update sys_user set status = #{status} where user_id = #{userId}
 	</update>
-	
+
 	<update id="updateUserAvatar" parameterType="SysUser">
  		update sys_user set avatar = #{avatar} where user_name = #{userName}
 	</update>
-	
+
 	<update id="resetUserPwd" parameterType="SysUser">
  		update sys_user set password = #{password} where user_name = #{userName}
 	</update>
-	
+
 	<delete id="deleteUserById" parameterType="Long">
 		update sys_user set del_flag = '2' where user_id = #{userId}
  	</delete>
- 	
+
  	<delete id="deleteUserByIds" parameterType="Long">
  		update sys_user set del_flag = '2' where user_id in
  		<foreach collection="array" item="userId" open="(" separator="," close=")">
  			#{userId}
-        </foreach> 
+        </foreach>
  	</delete>
-	
-</mapper> 
+
+</mapper>

+ 9 - 0
fs-user-app/pom.xml

@@ -136,6 +136,15 @@
                     <warName>${project.artifactId}</warName>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <compilerArgs>
+                        <arg>-parameters</arg>
+                    </compilerArgs>
+                </configuration>
+            </plugin>
         </plugins>
         <finalName>${project.artifactId}</finalName>
     </build>

+ 2 - 0
fs-user-app/src/main/java/com/fs/app/controller/live/LiveMsgController.java

@@ -1,5 +1,6 @@
 package com.fs.app.controller.live;
 
+import com.fs.app.annotation.Login;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
@@ -40,6 +41,7 @@ public class LiveMsgController extends BaseController
     /**
      * 查询直播讨论列表
      */
+    @Login
     @GetMapping("/myList")
     public TableDataInfo myList(LiveMsg liveMsg)
     {

+ 12 - 9
fs-user-app/src/main/java/com/fs/app/facade/impl/LiveFacadeServiceImpl.java

@@ -11,19 +11,13 @@ import com.fs.common.core.domain.R;
 import com.fs.common.core.page.PageRequest;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.core.redis.RedisCache;
-import com.fs.live.domain.Live;
-import com.fs.live.domain.LiveLotteryRegistration;
+import com.fs.live.domain.*;
 import com.fs.framework.aspectj.lock.DistributeLock;
-import com.fs.live.domain.LiveRedConf;
-import com.fs.live.domain.LiveWatchUser;
 import com.fs.live.param.CouponPO;
 import com.fs.live.param.LotteryPO;
 import com.fs.live.param.RedPO;
 import com.fs.live.service.*;
-import com.fs.live.vo.LiveConfigVo;
-import com.fs.live.vo.LiveLotteryConfVo;
-import com.fs.live.vo.LiveVo;
-import com.fs.live.vo.LiveWatchUserVO;
+import com.fs.live.vo.*;
 import com.github.pagehelper.PageInfo;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -153,10 +147,19 @@ public class LiveFacadeServiceImpl extends BaseController implements LiveFacadeS
                 .stream()
                 .filter(item -> ObjectUtil.isEmpty(redisCache.hashGet(String.format(LiveKeysConstant.LIVE_HOME_PAGE_CONFIG_RED, liveId, item.getLotteryId()), userId)))
                 .collect(Collectors.toList());
+        Object cacheObject = redisCache.getCacheObject(String.format(LiveKeysConstant.LIVE_HOME_PAGE_CONFIG, liveId, LiveKeysConstant.TOP_MSG));
+        LiveMsgVo liveMsg;
+        if (ObjectUtil.isNotEmpty(cacheObject)) {
+            liveMsg = JSON.parseObject(cacheObject.toString(), LiveMsgVo.class);
+        } else {
+            liveMsg = null;
+        }
+
         return R.ok()
                 .put("red", redConfs)
                 .put("lottery", lotteryConfs)
-                .put("goods", liveConfigVo.getLiveGoodsVo());
+                .put("goods", liveConfigVo.getLiveGoodsVo())
+                .put("topMsg", liveMsg);
     }
 
     @Override