xw 7 часов назад
Родитель
Сommit
a50b8a4901

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

@@ -40,6 +40,7 @@ import org.springframework.web.bind.annotation.*;
 import javax.validation.Valid;
 import java.time.LocalDateTime;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @RestController
 @RequestMapping("/course/playSourceConfig")
@@ -82,6 +83,9 @@ public class FsCoursePlaySourceConfigController extends BaseController {
 
         PageHelper.startPage(pageNum, pageSize);
         List<FsCoursePlaySourceConfigVO> list = fsCoursePlaySourceConfigService.selectCoursePlaySourceConfigVOListByMap(params);
+        for (FsCoursePlaySourceConfigVO item : list) {
+            item.setCompanyIds(parseCompanyIds(item.getCompanyIdsText(), item.getCompanyId()));
+        }
         return getDataTable(list);
     }
 
@@ -95,6 +99,7 @@ public class FsCoursePlaySourceConfigController extends BaseController {
 
         FsCoursePlaySourceConfigVO configVO = new FsCoursePlaySourceConfigVO();
         BeanUtils.copyProperties(config, configVO);
+        configVO.setCompanyIds(parseCompanyIds(config.getCompanyIds(), config.getCompanyId()));
         return AjaxResult.success(configVO);
     }
 
@@ -124,6 +129,7 @@ public class FsCoursePlaySourceConfigController extends BaseController {
         config.setCreateUserId(loginUser.getUserId());
         config.setCreateDeptId(loginUser.getDeptId());
         BeanUtils.copyProperties(param, config);
+        applyCompanyIds(param.getCompanyId(), param.getCompanyIds(), config);
 
         config.setIsDel(0);
         config.setCreateTime(LocalDateTime.now());
@@ -160,6 +166,7 @@ public class FsCoursePlaySourceConfigController extends BaseController {
         }
 
         BeanUtils.copyProperties(param, config);
+        applyCompanyIds(param.getCompanyId(), param.getCompanyIds(), config);
 
         fsCoursePlaySourceConfigService.updateById(config);
         return AjaxResult.success();
@@ -278,7 +285,11 @@ public class FsCoursePlaySourceConfigController extends BaseController {
             queryWrapper.eq("create_user_id", loginUser.getUserId()).eq(config.getDept() == null || !config.getDept(), "create_dept_id", loginUser.getDeptId());
         }
         if(companyId != null){
-            queryWrapper.and(e -> e.eq("company_id", companyId).or().isNull("company_id"));
+            queryWrapper.and(e -> e.eq("company_id", companyId)
+                    .or()
+                    .apply("(company_ids is not null and company_ids != '' and find_in_set({0}, company_ids))", companyId)
+                    .or()
+                    .isNull("company_id"));
         }
         queryWrapper.in("status","0","1");//查询正常、半封禁小程序
         return R.ok().put("data", fsCoursePlaySourceConfigService.list(queryWrapper));
@@ -337,4 +348,46 @@ public class FsCoursePlaySourceConfigController extends BaseController {
         return AjaxResult.success(result);
     }
 
+    private static void applyCompanyIds(Long companyId, List<Long> companyIds, FsCoursePlaySourceConfig config) {
+        List<Long> ids = new ArrayList<>();
+        if (companyIds != null) {
+            for (Long id : companyIds) {
+                if (id != null) {
+                    ids.add(id);
+                }
+            }
+        }
+        if (ids.isEmpty() && companyId != null) {
+            ids.add(companyId);
+        }
+
+        if (!ids.isEmpty()) {
+            List<Long> distinct = ids.stream().distinct().collect(Collectors.toList());
+            config.setCompanyId(config.getCompanyId() != null ? config.getCompanyId() : distinct.get(0));
+            config.setCompanyIds(distinct.stream().map(String::valueOf).collect(Collectors.joining(",")));
+        } else {
+            config.setCompanyIds(null);
+        }
+    }
+
+    private static List<Long> parseCompanyIds(String companyIds, Long companyId) {
+        List<Long> ids = new ArrayList<>();
+        if (companyIds != null && !companyIds.trim().isEmpty()) {
+            for (String s : companyIds.split(",")) {
+                String v = s == null ? "" : s.trim();
+                if (!v.isEmpty()) {
+                    try {
+                        ids.add(Long.parseLong(v));
+                    } catch (NumberFormatException ignored) {
+                    }
+                }
+            }
+        }
+        if (ids.isEmpty() && companyId != null) {
+            ids.add(companyId);
+        }
+        return ids.stream().distinct().collect(Collectors.toList());
+    }
+
 }
+

+ 69 - 1
fs-company/src/main/java/com/fs/company/controller/course/FsCoursePlaySourceConfigController.java

@@ -26,6 +26,7 @@ import org.springframework.web.bind.annotation.*;
 import javax.validation.Valid;
 import java.time.LocalDateTime;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @RestController
 @RequestMapping("/course/playSourceConfig")
@@ -48,6 +49,9 @@ public class FsCoursePlaySourceConfigController extends BaseController {
 
         PageHelper.startPage(pageNum, pageSize);
         List<FsCoursePlaySourceConfigVO> list = fsCoursePlaySourceConfigService.selectCoursePlaySourceConfigVOListByMap(params);
+        for (FsCoursePlaySourceConfigVO item : list) {
+            item.setCompanyIds(parseCompanyIds(item.getCompanyIdsText(), item.getCompanyId()));
+        }
         return getDataTable(list);
     }
 
@@ -61,6 +65,7 @@ public class FsCoursePlaySourceConfigController extends BaseController {
 
         FsCoursePlaySourceConfigVO configVO = new FsCoursePlaySourceConfigVO();
         BeanUtils.copyProperties(config, configVO);
+        configVO.setCompanyIds(parseCompanyIds(config.getCompanyIds(), config.getCompanyId()));
         return AjaxResult.success(configVO);
     }
 
@@ -90,6 +95,7 @@ public class FsCoursePlaySourceConfigController extends BaseController {
 
         LoginUser loginUser = SecurityUtils.getLoginUser();
         config.setCompanyId(loginUser.getCompany().getCompanyId());
+        applyCompanyIds(config.getCompanyId(), param.getCompanyIds(), config);
         config.setCompanyUserId(loginUser.getUser().getUserId());
         config.setIsDel(0);
         config.setCreateTime(LocalDateTime.now());
@@ -117,7 +123,8 @@ public class FsCoursePlaySourceConfigController extends BaseController {
         }
 
         LoginUser loginUser = SecurityUtils.getLoginUser();
-        if (!loginUser.getCompany().getCompanyId().equals(config.getCompanyId())) {
+        Long currentCompanyId = loginUser.getCompany().getCompanyId();
+        if (!belongsToCompany(config, currentCompanyId)) {
             return AjaxResult.error("非法操作");
         }
 
@@ -132,6 +139,7 @@ public class FsCoursePlaySourceConfigController extends BaseController {
         }
 
         BeanUtils.copyProperties(param, config);
+        applyCompanyIds(config.getCompanyId(), param.getCompanyIds(), config);
         fsCoursePlaySourceConfigService.updateById(config);
         return AjaxResult.success();
     }
@@ -171,4 +179,64 @@ public class FsCoursePlaySourceConfigController extends BaseController {
         }
         return R.ok().put("date",start);
     }
+
+    private static void applyCompanyIds(Long companyId, List<Long> companyIds, FsCoursePlaySourceConfig config) {
+        List<Long> ids = new ArrayList<>();
+        if (companyIds != null) {
+            for (Long id : companyIds) {
+                if (id != null) {
+                    ids.add(id);
+                }
+            }
+        }
+        if (ids.isEmpty() && companyId != null) {
+            ids.add(companyId);
+        }
+
+        if (!ids.isEmpty()) {
+            List<Long> distinct = ids.stream().distinct().collect(Collectors.toList());
+            config.setCompanyId(config.getCompanyId() != null ? config.getCompanyId() : distinct.get(0));
+            config.setCompanyIds(distinct.stream().map(String::valueOf).collect(Collectors.joining(",")));
+        } else {
+            config.setCompanyIds(null);
+        }
+    }
+
+    private static List<Long> parseCompanyIds(String companyIds, Long companyId) {
+        List<Long> ids = new ArrayList<>();
+        if (companyIds != null && !companyIds.trim().isEmpty()) {
+            for (String s : companyIds.split(",")) {
+                String v = s == null ? "" : s.trim();
+                if (!v.isEmpty()) {
+                    try {
+                        ids.add(Long.parseLong(v));
+                    } catch (NumberFormatException ignored) {
+                    }
+                }
+            }
+        }
+        if (ids.isEmpty() && companyId != null) {
+            ids.add(companyId);
+        }
+        return ids.stream().distinct().collect(Collectors.toList());
+    }
+
+    private static boolean belongsToCompany(FsCoursePlaySourceConfig config, Long companyId) {
+        if (companyId == null || config == null) {
+            return false;
+        }
+        if (companyId.equals(config.getCompanyId())) {
+            return true;
+        }
+        String companyIds = config.getCompanyIds();
+        if (companyIds == null || companyIds.trim().isEmpty()) {
+            return false;
+        }
+        for (String s : companyIds.split(",")) {
+            if (s != null && s.trim().equals(String.valueOf(companyId))) {
+                return true;
+            }
+        }
+        return false;
+    }
 }

+ 5 - 0
fs-service/src/main/java/com/fs/course/domain/FsCoursePlaySourceConfig.java

@@ -82,6 +82,11 @@ public class FsCoursePlaySourceConfig {
      */
     private Long companyId;
 
+    /**
+     * 所属公司ids(逗号分隔),用于一个小程序绑定多个公司
+     */
+    private String companyIds;
+
     /**
      * 销售公司ids 用于判定销售公司可见编辑列表
      */

+ 4 - 0
fs-service/src/main/java/com/fs/course/param/FsCoursePlaySourceConfigCreateParam.java

@@ -3,6 +3,7 @@ package com.fs.course.param;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.List;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 
@@ -45,6 +46,9 @@ public class FsCoursePlaySourceConfigCreateParam {
 
     @ApiModelProperty("所属公司")
     private Long companyId;
+
+    @ApiModelProperty("所属公司(多选)")
+    private List<Long> companyIds;
     /**
      * 销售公司ids 用于判定销售公司可见编辑列表
      */

+ 4 - 0
fs-service/src/main/java/com/fs/course/param/FsCoursePlaySourceConfigEditParam.java

@@ -3,6 +3,7 @@ package com.fs.course.param;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.List;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 
@@ -43,6 +44,9 @@ public class FsCoursePlaySourceConfigEditParam {
     @ApiModelProperty("所属公司")
     private Long companyId;
 
+    @ApiModelProperty("所属公司(多选)")
+    private List<Long> companyIds;
+
     /**
      * 销售公司ids 用于判定销售公司可见编辑列表
      */

+ 8 - 0
fs-service/src/main/java/com/fs/course/vo/FsCoursePlaySourceConfigVO.java

@@ -1,10 +1,12 @@
 package com.fs.course.vo;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 @Data
 public class FsCoursePlaySourceConfigVO {
@@ -42,6 +44,12 @@ public class FsCoursePlaySourceConfigVO {
     @ApiModelProperty("所属公司")
     private Long companyId;
 
+    @ApiModelProperty("所属公司(多选)")
+    private List<Long> companyIds;
+
+    @JsonIgnore
+    private String companyIdsText;
+
     /**
      * 销售公司ids 用于判定销售公司可见编辑列表
      */

+ 26 - 2
fs-service/src/main/resources/mapper/course/FsCoursePlaySourceConfigMapper.xml

@@ -6,7 +6,28 @@
 
     <select id="selectCoursePlaySourceConfigVOListByMap" resultType="com.fs.course.vo.FsCoursePlaySourceConfigVO">
         select
-            fcpsc.*
+            fcpsc.id,
+            fcpsc.name,
+            fcpsc.appid,
+            fcpsc.secret,
+            fcpsc.img,
+            fcpsc.original_id,
+            fcpsc.token,
+            fcpsc.aes_key,
+            fcpsc.msg_data_format,
+            fcpsc.type,
+            fcpsc.company_id,
+            fcpsc.company_ids as company_ids_text,
+            fcpsc.set_company_ids,
+            fcpsc.create_time,
+            fcpsc.update_time,
+            fcpsc.is_mall,
+            fcpsc.create_dept_id,
+            fcpsc.status,
+            fcpsc.merchant_config_id,
+            fcpsc.custom_auth_enabled,
+            fcpsc.mini_app_auth_type,
+            fcpsc.user_course_auth_domain
         from fs_course_play_source_config fcpsc
         where fcpsc.is_del = 0
         <if test="params.name != null and params.name != ''">
@@ -16,7 +37,10 @@
             and fcpsc.appid like concat('%', #{params.appid}, '%')
         </if>
         <if test="params.companyId != null">
-            and fcpsc.company_id = #{params.companyId}
+            and (
+                fcpsc.company_id = #{params.companyId}
+                or (fcpsc.company_ids is not null and fcpsc.company_ids != '' and find_in_set(#{params.companyId}, fcpsc.company_ids))
+            )
         </if>
         <if test="params.userId != null">
             and fcpsc.create_user_id = #{params.userId}