Administrator
19 hours ago 2fb72d56082e2ee19aa187707751dd0dacd34f4b
feat(ai): 增加公司列表接口并优化相关服务

- 新增公司列表接口和相关控制器
- 实现公司列表服务方法
- 优化角色列表、产品分类、产品知识点等接口,支持按公司ID筛选
- 更新数据库映射和实体类,增加公司ID字段
25 files modified
7 files added
432 ■■■■■ changed files
src/main/java/cc/mrbird/febs/ai/controller/company/ApiCompanyController.java 39 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/controller/memberRole/ApiMemberRoleController.java 11 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/controller/productCategory/ApiProductCategoryController.java 20 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/controller/productPoint/ApiProductPointController.java 14 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/entity/AiProductPoint.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/mapper/AiProductPointMapper.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/req/memberRole/ApiMemberRoleDto.java 13 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/req/product/ApiProductPageDto.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/req/productCategory/ApiProductCategoryAllDto.java 13 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/req/productCategory/ApiProductCategoryHotDto.java 13 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/req/productPoint/ApiProductPointPageDto.java 27 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/res/company/ApiCompanyVo.java 13 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/res/product/ApiProductVo.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/res/productPoint/ApiProductPointListVo.java 46 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/service/AiMemberRoleProductService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/service/AiMemberRoleService.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/service/AiMemberService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/service/AiProductCategoryService.java 6 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/service/AiProductPointService.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/service/AiProductService.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberRoleProductServiceImpl.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberRoleServiceImpl.java 47 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberServiceImpl.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/service/impl/AiProductCategoryServiceImpl.java 41 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/service/impl/AiProductPointServiceImpl.java 24 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/service/impl/AiProductServiceImpl.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/ApiXcxLoginDto.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/ApiXcxSaveInfoDto.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java 16 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/AiProductMapper.xml 6 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/AiProductPointMapper.xml 22 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/ai/controller/company/ApiCompanyController.java
New file
@@ -0,0 +1,39 @@
package cc.mrbird.febs.ai.controller.company;
import cc.mrbird.febs.ai.req.memberRole.ApiMemberRoleDto;
import cc.mrbird.febs.ai.res.company.ApiCompanyVo;
import cc.mrbird.febs.ai.res.memberRole.ApiMemberRoleVo;
import cc.mrbird.febs.ai.service.AiMemberRoleService;
import cc.mrbird.febs.common.entity.FebsResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
 * @author Administrator
 */
@Slf4j
@Validated
@RestController
@RequiredArgsConstructor
@RequestMapping(value = "/api/ai/company")
@Api(value = "ApiCompanyController", tags = "AI-公司")
public class ApiCompanyController {
    private final AiMemberRoleService aiMemberRoleService;
    @ApiOperation(value = "公司列表", notes = "公司列表")
    @ApiResponses({
            @ApiResponse(code = 200, message = "success", response = ApiCompanyVo.class)
    })
    @GetMapping(value = "/list")
    public FebsResponse list() {
        return aiMemberRoleService.companyList();
    }
}
src/main/java/cc/mrbird/febs/ai/controller/memberRole/ApiMemberRoleController.java
@@ -1,5 +1,7 @@
package cc.mrbird.febs.ai.controller.memberRole;
import cc.mrbird.febs.ai.req.memberRole.ApiMemberRoleDto;
import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkItemPageDto;
import cc.mrbird.febs.ai.res.memberRole.ApiMemberRoleVo;
import cc.mrbird.febs.ai.service.AiMemberRoleService;
import cc.mrbird.febs.common.entity.FebsResponse;
@@ -33,4 +35,13 @@
    public FebsResponse list() {
        return aiMemberRoleService.memberRoleList();
    }
    @ApiOperation(value = "角色列表(带公司ID)", notes = "角色列表(带公司ID)")
    @ApiResponses({
            @ApiResponse(code = 200, message = "success", response = ApiMemberRoleVo.class)
    })
    @PostMapping(value = "/listV1")
    public FebsResponse listV1(@RequestBody ApiMemberRoleDto dto) {
        return aiMemberRoleService.memberRoleListV1(dto);
    }
}
src/main/java/cc/mrbird/febs/ai/controller/productCategory/ApiProductCategoryController.java
@@ -1,5 +1,7 @@
package cc.mrbird.febs.ai.controller.productCategory;
import cc.mrbird.febs.ai.req.productCategory.ApiProductCategoryAllDto;
import cc.mrbird.febs.ai.req.productCategory.ApiProductCategoryHotDto;
import cc.mrbird.febs.ai.req.productCategory.ApiProductCategoryPageDto;
import cc.mrbird.febs.ai.res.productCategory.ApiProductCategoryVo;
import cc.mrbird.febs.ai.service.AiProductCategoryService;
@@ -35,15 +37,23 @@
        return aiProductCategoryService.hot();
    }
    @ApiOperation(value = "全部父级分类", notes = "全部父级分类")
    @ApiOperation(value = "首页推荐(带公司ID)", notes = "首页推荐(带公司ID)")
    @ApiResponses({
            @ApiResponse(code = 200, message = "success", response = ApiProductCategoryVo.class)
    })
    @GetMapping(value = "/allList")
    public FebsResponse allList() {
    @PostMapping(value = "/hotV1")
    public FebsResponse hotV1(@RequestBody ApiProductCategoryHotDto dto) {
        return aiProductCategoryService.hotV1(dto);
    }
        return aiProductCategoryService.allList();
    @ApiOperation(value = "全部父级分类(带公司ID)", notes = "全部父级分类(带公司ID)")
    @ApiResponses({
            @ApiResponse(code = 200, message = "success", response = ApiProductCategoryVo.class)
    })
    @PostMapping(value = "/allList")
    public FebsResponse allList(@RequestBody ApiProductCategoryAllDto dto) {
        return aiProductCategoryService.allList(dto);
    }
src/main/java/cc/mrbird/febs/ai/controller/productPoint/ApiProductPointController.java
@@ -1,9 +1,13 @@
package cc.mrbird.febs.ai.controller.productPoint;
import cc.mrbird.febs.ai.req.product.ApiProductInfoDto;
import cc.mrbird.febs.ai.req.product.ApiProductPageDto;
import cc.mrbird.febs.ai.req.productPoint.ApiProductPointInfoDto;
import cc.mrbird.febs.ai.req.productPoint.ApiProductPointPageDto;
import cc.mrbird.febs.ai.res.product.ApiProductInfoVo;
import cc.mrbird.febs.ai.res.product.ApiProductVo;
import cc.mrbird.febs.ai.res.productPoint.ApiProductPointInfoVo;
import cc.mrbird.febs.ai.res.productPoint.ApiProductPointListVo;
import cc.mrbird.febs.ai.service.AiProductPointService;
import cc.mrbird.febs.common.entity.FebsResponse;
import io.swagger.annotations.Api;
@@ -31,6 +35,16 @@
    private final AiProductPointService aiProductPointService;
    @ApiOperation(value = "知识点列表", notes = "知识点列表")
    @ApiResponses({
            @ApiResponse(code = 200, message = "success", response = ApiProductPointListVo.class)
    })
    @PostMapping(value = "/list")
    public FebsResponse list(@RequestBody @Validated ApiProductPointPageDto dto) {
        return aiProductPointService.productPointList(dto);
    }
    @ApiOperation(value = "知识点详情", notes = "知识点详情")
    @ApiResponses({
            @ApiResponse(code = 200, message = "success", response = ApiProductPointInfoVo.class)
src/main/java/cc/mrbird/febs/ai/entity/AiProductPoint.java
@@ -19,6 +19,11 @@
    private String companyId;
    /**
     * 类型
     */
    private String productCategoryId;
    /**
     * 类型1:普通内容  2:视频号内容
     */
    private Integer isNormal;
src/main/java/cc/mrbird/febs/ai/mapper/AiProductPointMapper.java
@@ -1,7 +1,11 @@
package cc.mrbird.febs.ai.mapper;
import cc.mrbird.febs.ai.entity.AiProductPoint;
import cc.mrbird.febs.ai.req.productPoint.ApiProductPointPageDto;
import cc.mrbird.febs.ai.res.productPoint.ApiProductPointListVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
/**
 * AI产品知识点 Mapper接口
@@ -11,4 +15,5 @@
 */
public interface AiProductPointMapper extends BaseMapper<AiProductPoint> {
    Page<ApiProductPointListVo> selectPageListByQuery(Page<ApiProductPointListVo> page,  @Param("record")ApiProductPointPageDto dto);
}
src/main/java/cc/mrbird/febs/ai/req/memberRole/ApiMemberRoleDto.java
New file
@@ -0,0 +1,13 @@
package cc.mrbird.febs.ai.req.memberRole;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "ApiMemberRoleDto", description = "参数")
public class ApiMemberRoleDto {
    @ApiModelProperty(value = "公司ID", example = "1")
    private String companyId;
}
src/main/java/cc/mrbird/febs/ai/req/product/ApiProductPageDto.java
@@ -24,6 +24,9 @@
    @ApiModelProperty(value = "分类ID", example = "123")
    private String categoryId;
    @ApiModelProperty(value = "公司ID", example = "123")
    private String companyId;
    @ApiModelProperty(value = "角色ID", example = "123")
    private String memberRoleId;
}
src/main/java/cc/mrbird/febs/ai/req/productCategory/ApiProductCategoryAllDto.java
New file
@@ -0,0 +1,13 @@
package cc.mrbird.febs.ai.req.productCategory;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "ApiProductCategoryAllDto", description = "参数")
public class ApiProductCategoryAllDto {
    @ApiModelProperty(value = "公司ID", example = "1")
    private String companyId;
}
src/main/java/cc/mrbird/febs/ai/req/productCategory/ApiProductCategoryHotDto.java
New file
@@ -0,0 +1,13 @@
package cc.mrbird.febs.ai.req.productCategory;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "ApiProductCategoryHotDto", description = "参数")
public class ApiProductCategoryHotDto {
    @ApiModelProperty(value = "公司ID", example = "1")
    private String companyId;
}
src/main/java/cc/mrbird/febs/ai/req/productPoint/ApiProductPointPageDto.java
New file
@@ -0,0 +1,27 @@
package cc.mrbird.febs.ai.req.productPoint;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
@Data
@ApiModel(value = "ApiProductPointPageDto", description = "参数")
public class ApiProductPointPageDto {
    @NotNull(message = "页码不能为空")
    @ApiModelProperty(value = "页码", example = "1")
    private Integer pageNow;
    @NotNull(message = "每页数量不能为空")
    @ApiModelProperty(value = "每页数量", example = "10")
    private Integer pageSize;
    @ApiModelProperty(value = "分类ID", example = "123")
    private String categoryId;
    @ApiModelProperty(value = "公司ID", example = "123")
    private String companyId;
}
src/main/java/cc/mrbird/febs/ai/res/company/ApiCompanyVo.java
New file
@@ -0,0 +1,13 @@
package cc.mrbird.febs.ai.res.company;
import io.swagger.annotations.ApiModel;
import lombok.Data;
@Data
@ApiModel(value = "ApiCompanyVo", description = "参数")
public class ApiCompanyVo {
    private String name;
    private String id;
}
src/main/java/cc/mrbird/febs/ai/res/product/ApiProductVo.java
@@ -25,4 +25,10 @@
    @ApiModelProperty(value = "ID")
    private String target;
    /**
     * 小图标
     */
    @ApiModelProperty(value = "图片")
    private String iconImg;
}
src/main/java/cc/mrbird/febs/ai/res/productPoint/ApiProductPointListVo.java
New file
@@ -0,0 +1,46 @@
package cc.mrbird.febs.ai.res.productPoint;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "ApiProductPointListVo", description = "参数")
public class ApiProductPointListVo {
    @ApiModelProperty(value = "知识点ID")
    private String id;
    /**
     * 类型1:普通内容  2:视频号内容
     */
    @ApiModelProperty(value = "类型1:普通内容  2:视频号内容")
    private Integer isNormal;
    /**
     * 视频号 id,以"sph"开头的id,可在视频号助手获取
     */
    @ApiModelProperty(value = "视频号 id")
    private String finderUserName;
    /**
     * 视频 feedId
     */
    @ApiModelProperty(value = "视频 feedId")
    private String feedId;
    /**
     * 视频封面
     */
    @ApiModelProperty(value = "视频封面")
    private String feedImg;
    /**
     * 标题
     */
    @ApiModelProperty(value = "标题")
    private String title;
}
src/main/java/cc/mrbird/febs/ai/service/AiMemberRoleProductService.java
@@ -12,5 +12,7 @@
 */
public interface AiMemberRoleProductService extends IService<AiMemberRoleProduct> {
    List<AiMemberRoleProduct> getProductListByMemberRoleId(String memberRoleId);
}
src/main/java/cc/mrbird/febs/ai/service/AiMemberRoleService.java
@@ -1,6 +1,7 @@
package cc.mrbird.febs.ai.service;
import cc.mrbird.febs.ai.entity.AiMemberRole;
import cc.mrbird.febs.ai.req.memberRole.ApiMemberRoleDto;
import cc.mrbird.febs.common.entity.FebsResponse;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -19,5 +20,9 @@
    FebsResponse memberRoleList();
    FebsResponse memberRoleListV1(ApiMemberRoleDto dto);
    String getDefaultMemberRoleId();
    FebsResponse companyList();
}
src/main/java/cc/mrbird/febs/ai/service/AiMemberService.java
@@ -4,4 +4,6 @@
import com.baomidou.mybatisplus.extension.service.IService;
public interface AiMemberService extends IService<AiMember> {
    AiMember getById(String id);
}
src/main/java/cc/mrbird/febs/ai/service/AiProductCategoryService.java
@@ -1,6 +1,8 @@
package cc.mrbird.febs.ai.service;
import cc.mrbird.febs.ai.entity.AiProductCategory;
import cc.mrbird.febs.ai.req.productCategory.ApiProductCategoryAllDto;
import cc.mrbird.febs.ai.req.productCategory.ApiProductCategoryHotDto;
import cc.mrbird.febs.ai.req.productCategory.ApiProductCategoryPageDto;
import cc.mrbird.febs.ai.res.productCategory.ApiProductCategoryVo;
import cc.mrbird.febs.common.entity.FebsResponse;
@@ -25,9 +27,11 @@
    FebsResponse hot();
    FebsResponse hotV1(ApiProductCategoryHotDto dto);
    FebsResponse categoryList(ApiProductCategoryPageDto dto);
    String getDefaultProductCategoryId();
    FebsResponse allList();
    FebsResponse allList(ApiProductCategoryAllDto dto);
}
src/main/java/cc/mrbird/febs/ai/service/AiProductPointService.java
@@ -2,6 +2,7 @@
import cc.mrbird.febs.ai.entity.AiProductPoint;
import cc.mrbird.febs.ai.req.productPoint.ApiProductPointInfoDto;
import cc.mrbird.febs.ai.req.productPoint.ApiProductPointPageDto;
import cc.mrbird.febs.ai.res.productPoint.ApiProductPointVo;
import cc.mrbird.febs.common.entity.FebsResponse;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -21,5 +22,7 @@
    List<ApiProductPointVo> listByProductId(String productId);
    FebsResponse productPointList(ApiProductPointPageDto dto);
    FebsResponse productPointInfo(ApiProductPointInfoDto dto);
}
src/main/java/cc/mrbird/febs/ai/service/AiProductService.java
@@ -7,6 +7,7 @@
import cc.mrbird.febs.ai.res.product.ApiProductVo;
import cc.mrbird.febs.ai.res.productCategory.ApiProductCategoryVo;
import cc.mrbird.febs.common.entity.FebsResponse;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
@@ -28,4 +29,6 @@
    FebsResponse productInfo(ApiProductInfoDto dto);
    FebsResponse pointInfoList(ApiProductInfoDto dto);
    List<AiProduct> getProductListByQuery(LambdaQueryWrapper<AiProduct> productQuery);
}
src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberRoleProductServiceImpl.java
@@ -4,6 +4,7 @@
import cc.mrbird.febs.ai.mapper.AiMemberRoleProductMapper;
import cc.mrbird.febs.ai.service.AiMemberRoleProductService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -26,4 +27,12 @@
    private final AiMemberRoleProductMapper aiMemberRoleProductMapper;
    @Override
    public List<AiMemberRoleProduct> getProductListByMemberRoleId(String memberRoleId) {
        return aiMemberRoleProductMapper.selectList(
                Wrappers.lambdaQuery(AiMemberRoleProduct.class)
                        .eq(AiMemberRoleProduct::getRoleId, memberRoleId)
        );
    }
}
src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberRoleServiceImpl.java
@@ -1,11 +1,16 @@
package cc.mrbird.febs.ai.service.impl;
import cc.mrbird.febs.ai.entity.AiCompany;
import cc.mrbird.febs.ai.entity.AiMemberRole;
import cc.mrbird.febs.ai.mapper.AiCompanyMapper;
import cc.mrbird.febs.ai.mapper.AiMemberRoleMapper;
import cc.mrbird.febs.ai.req.memberRole.ApiMemberRoleDto;
import cc.mrbird.febs.ai.res.company.ApiCompanyVo;
import cc.mrbird.febs.ai.res.memberRole.ApiMemberRoleVo;
import cc.mrbird.febs.ai.service.AiMemberRoleService;
import cc.mrbird.febs.common.entity.FebsResponse;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -29,6 +34,7 @@
public class AiMemberRoleServiceImpl extends ServiceImpl<AiMemberRoleMapper, AiMemberRole> implements AiMemberRoleService {
    private final AiMemberRoleMapper aiMemberRoleMapper;
    private final AiCompanyMapper aiCompanyMapper;
    @Override
    public List<AiMemberRole> getListByQuery(LambdaQueryWrapper<AiMemberRole> query) {
@@ -57,9 +63,34 @@
    }
    @Override
    public FebsResponse memberRoleListV1(ApiMemberRoleDto dto) {
        List<ApiMemberRoleVo> list = new ArrayList<>();
        LambdaQueryWrapper<AiMemberRole> query = Wrappers.lambdaQuery(AiMemberRole.class);
        if (StrUtil.isNotEmpty(dto.getCompanyId())){
            query.eq(AiMemberRole::getCompanyId, dto.getCompanyId());
        }else{
            query.isNull(AiMemberRole::getCompanyId);
        }
        query.eq(AiMemberRole::getState, 1);
        List<AiMemberRole> listByQuery = this.getListByQuery(query);
        if (CollUtil.isNotEmpty(listByQuery)){
            for (AiMemberRole aiMemberRole : listByQuery){
                ApiMemberRoleVo apiMemberRoleVo = new ApiMemberRoleVo();
                apiMemberRoleVo.setId(aiMemberRole.getId());
                apiMemberRoleVo.setName(aiMemberRole.getName());
                apiMemberRoleVo.setIconImg(aiMemberRole.getIconImg());
                list.add(apiMemberRoleVo);
            }
        }
        return new FebsResponse().success().data(list);
    }
    @Override
    public String getDefaultMemberRoleId() {
        LambdaQueryWrapper<AiMemberRole> queryWrapper = Wrappers.lambdaQuery(AiMemberRole.class);
        queryWrapper.eq(AiMemberRole::getState, 1);
        queryWrapper.isNull(AiMemberRole::getCompanyId);
        queryWrapper.orderByAsc(AiMemberRole::getCreatedTime);
        queryWrapper.last("limit 1");
        List<AiMemberRole> listByQuery = this.getListByQuery(queryWrapper);
@@ -70,4 +101,20 @@
        }
        return null;
    }
    @Override
    public FebsResponse companyList() {
        List<ApiCompanyVo> list = new ArrayList<>();
        List<AiCompany> aiCompanies = aiCompanyMapper.selectList(null);
        if (CollUtil.isNotEmpty(aiCompanies)){
            for (AiCompany aiCompany : aiCompanies){
                ApiCompanyVo apiCompanyVo = new ApiCompanyVo();
                apiCompanyVo.setId(aiCompany.getId());
                apiCompanyVo.setName(aiCompany.getName());
                list.add(apiCompanyVo);
            }
        }
        return new FebsResponse().success().data(list);
    }
}
src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberServiceImpl.java
@@ -15,4 +15,10 @@
@Service
@RequiredArgsConstructor
public class AiMemberServiceImpl extends ServiceImpl<AiMemberMapper, AiMember> implements AiMemberService {
    private final AiMemberMapper aiMemberMapper;
    @Override
    public AiMember getById(String id) {
        return aiMemberMapper.selectById( id);
    }
}
src/main/java/cc/mrbird/febs/ai/service/impl/AiProductCategoryServiceImpl.java
@@ -1,14 +1,18 @@
package cc.mrbird.febs.ai.service.impl;
import cc.mrbird.febs.ai.entity.AiMemberRole;
import cc.mrbird.febs.ai.entity.AiProductCategory;
import cc.mrbird.febs.ai.enumerates.ProductCategoryLevelEnum;
import cc.mrbird.febs.ai.mapper.AiProductCategoryMapper;
import cc.mrbird.febs.ai.req.productCategory.ApiProductCategoryAllDto;
import cc.mrbird.febs.ai.req.productCategory.ApiProductCategoryHotDto;
import cc.mrbird.febs.ai.req.productCategory.ApiProductCategoryPageDto;
import cc.mrbird.febs.ai.res.productCategory.ApiProductCategoryVo;
import cc.mrbird.febs.ai.service.AiProductCategoryService;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.mall.vo.ApiActivityInfoVo;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -70,6 +74,35 @@
    }
    @Override
    public FebsResponse hotV1(ApiProductCategoryHotDto dto) {
        List<ApiProductCategoryVo> list = new ArrayList<>();
        LambdaQueryWrapper<AiProductCategory> query = Wrappers.lambdaQuery(AiProductCategory.class);
        if (StrUtil.isNotEmpty(dto.getCompanyId())){
            query.eq(AiProductCategory::getCompanyId, dto.getCompanyId());
        }else{
            query.isNull(AiProductCategory::getCompanyId);
        }
        query.eq(AiProductCategory::getLevel, ProductCategoryLevelEnum.LEVEL_TWO.getLevel());
        query.eq(AiProductCategory::getState, 1);
        query.eq(AiProductCategory::getHotState, 1);
        query.orderByAsc(AiProductCategory::getSort);
        List<AiProductCategory> listByQuery = this.getListByQuery(query);
        if (CollUtil.isNotEmpty(listByQuery)){
            for (AiProductCategory aiProductCategory : listByQuery){
                ApiProductCategoryVo apiProductCategoryVo = new ApiProductCategoryVo();
                apiProductCategoryVo.setId(aiProductCategory.getId());
                apiProductCategoryVo.setName(aiProductCategory.getName());
                apiProductCategoryVo.setBackImg(aiProductCategory.getBackImg());
                apiProductCategoryVo.setIconImg(aiProductCategory.getIconImg());
                list.add(apiProductCategoryVo);
            }
        }
        return new FebsResponse().success().data(list);
    }
    @Override
    public FebsResponse categoryList(ApiProductCategoryPageDto dto) {
        // 创建分页对象,传入当前页和每页大小
        Page<ApiProductCategoryVo> page = new Page<>(dto.getPageNow(), dto.getPageSize());
@@ -81,6 +114,7 @@
    public String getDefaultProductCategoryId() {
        LambdaQueryWrapper<AiProductCategory> query = Wrappers.lambdaQuery(AiProductCategory.class);
        query.eq(AiProductCategory::getState, 1);
        query.isNull(AiProductCategory::getCompanyId);
        query.eq(AiProductCategory::getHotState, 1);
        query.orderByAsc(AiProductCategory::getSort);
        query.last("limit 1");
@@ -92,9 +126,14 @@
    }
    @Override
    public FebsResponse allList() {
    public FebsResponse allList(ApiProductCategoryAllDto dto) {
        List<ApiProductCategoryVo> list = new ArrayList<>();
        LambdaQueryWrapper<AiProductCategory> query = Wrappers.lambdaQuery(AiProductCategory.class);
        if (StrUtil.isNotEmpty(dto.getCompanyId())){
            query.eq(AiProductCategory::getCompanyId, dto.getCompanyId());
        }else{
            query.isNull(AiProductCategory::getCompanyId);
        }
        query.eq(AiProductCategory::getState, 1);
        query.eq(AiProductCategory::getLevel, ProductCategoryLevelEnum.LEVEL_ONE.getLevel());
        query.orderByAsc(AiProductCategory::getSort);
src/main/java/cc/mrbird/febs/ai/service/impl/AiProductPointServiceImpl.java
@@ -1,23 +1,27 @@
package cc.mrbird.febs.ai.service.impl;
import cc.mrbird.febs.ai.entity.AiMemberRoleProduct;
import cc.mrbird.febs.ai.entity.AiProduct;
import cc.mrbird.febs.ai.entity.AiProductPoint;
import cc.mrbird.febs.ai.entity.AiProductPointLink;
import cc.mrbird.febs.ai.mapper.AiProductPointMapper;
import cc.mrbird.febs.ai.req.productPoint.ApiProductPointInfoDto;
import cc.mrbird.febs.ai.req.productPoint.ApiProductPointPageDto;
import cc.mrbird.febs.ai.res.productPoint.ApiProductPointInfoVo;
import cc.mrbird.febs.ai.res.productPoint.ApiProductPointListVo;
import cc.mrbird.febs.ai.res.productPoint.ApiProductPointVo;
import cc.mrbird.febs.ai.service.AiProductPointLinkService;
import cc.mrbird.febs.ai.service.AiProductPointService;
import cc.mrbird.febs.ai.service.*;
import cc.mrbird.febs.common.entity.FebsResponse;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
@@ -37,6 +41,7 @@
    private final AiProductPointMapper aiProductPointMapper;
    private final AiProductPointLinkService aiProductPointLinkService;
    private final AiProductCategoryService aiProductCategoryService;
    @Override
    public AiProductPoint getById(String id) {
@@ -74,6 +79,19 @@
    }
    @Override
    public FebsResponse productPointList(ApiProductPointPageDto dto) {
        if(StrUtil.isEmpty(dto.getCategoryId())){
            String categoryId = aiProductCategoryService.getDefaultProductCategoryId();
            dto.setCategoryId(categoryId);
        }
        // 创建分页对象,传入当前页和每页大小
        Page<ApiProductPointListVo> page = new Page<>(dto.getPageNow(), dto.getPageSize());
        Page<ApiProductPointListVo> pageListByQuery = aiProductPointMapper.selectPageListByQuery(page, dto);
        return new FebsResponse().success().data(pageListByQuery);
    }
    @Override
    public FebsResponse productPointInfo(ApiProductPointInfoDto dto) {
        ApiProductPointInfoVo apiProductPointInfoVo = new ApiProductPointInfoVo();
        String id = dto.getId();
src/main/java/cc/mrbird/febs/ai/service/impl/AiProductServiceImpl.java
@@ -11,6 +11,7 @@
import cc.mrbird.febs.ai.service.*;
import cc.mrbird.febs.common.entity.FebsResponse;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
@@ -91,4 +92,9 @@
        List<ApiProductPointVo> apiProductPointVos = aiProductPointService.listByProductId(id);
        return new FebsResponse().success().data(apiProductPointVos);
    }
    @Override
    public List<AiProduct> getProductListByQuery(LambdaQueryWrapper<AiProduct> productQuery) {
        return aiProductMapper.selectList(productQuery);
    }
}
src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java
@@ -64,5 +64,6 @@
        registration.excludePathPatterns("/api/ai/test/**");
        registration.excludePathPatterns("/api/ai/memberTalk/answer-stream");
        registration.excludePathPatterns("/api/ai/talk/questionList");
        registration.excludePathPatterns("/api/ai/company/list");
    }
}
src/main/java/cc/mrbird/febs/mall/dto/ApiXcxLoginDto.java
@@ -11,4 +11,6 @@
    private String inviteId;
    private String companyId;
}
src/main/java/cc/mrbird/febs/mall/dto/ApiXcxSaveInfoDto.java
@@ -27,6 +27,9 @@
    @ApiModelProperty(value = "邀请码")
    private String inviteId;
    @ApiModelProperty(value = "公司ID")
    private String companyId;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @ApiModelProperty(value = "生日")
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
@@ -2,6 +2,7 @@
import cc.mrbird.febs.ai.entity.AiMember;
import cc.mrbird.febs.ai.mapper.AiMemberMapper;
import cc.mrbird.febs.ai.service.AiMemberService;
import cc.mrbird.febs.ai.utils.UUID;
import cc.mrbird.febs.common.configure.FebsConfigure;
import cc.mrbird.febs.common.entity.FebsResponse;
@@ -104,6 +105,7 @@
    private final HappyMemberLabelRecordMapper happyMemberLabelRecordMapper;
    private final HappyMemberLabelMapper happyMemberLabelMapper;
    private final FebsConfigure febsConfigure;
    private final AiMemberService aiMemberService;
    @Value("${spring.profiles.active}")
@@ -734,6 +736,9 @@
                    AiMember aiMember = new AiMember();
                    aiMember.setId(UUID.getSimpleUUIDString());
                    if (StrUtil.isNotEmpty(apiXcxLoginDto.getCompanyId())){
                        aiMember.setCompanyId(apiXcxLoginDto.getCompanyId());
                    }
                    aiMember.setCreatedTime(new Date());
                    aiMemberMapper.insert(aiMember);
@@ -843,6 +848,17 @@
        }
        this.baseMapper.updateById(mallMember);
        String memberUuid = mallMember.getMemberUuid();
        AiMember aiMember = aiMemberService.getById(memberUuid);
        if (ObjectUtil.isNotEmpty(aiMember) && StrUtil.isNotEmpty(apiXcxSaveInfoDto.getCompanyId())){
            aiMemberService.update(null,
                    Wrappers.lambdaUpdate(AiMember.class)
                    .set(AiMember::getCompanyId, aiMember.getCompanyId())
                    .eq(AiMember::getId, aiMember.getId())
                    );
        }
//        //完善信息赠送新人礼
//        if (StrUtil.isNotBlank(mallMember.getPhone()) && mallMember.getNewGift() == 0) {
//            DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
src/main/resources/mapper/modules/AiProductMapper.xml
@@ -6,13 +6,17 @@
        select
            a.id as id,
            a.name as name,
            a.icon_img as iconImg,
            a.target as target
        from ai_product a
        <where>
            a.state = 1
            <if test="record != null">
                <if test="record.categoryId != null and record.categoryId != ''">
                    and a.product_category_id=#{record.categoryId}
                    and a.product_category_id = #{record.categoryId}
                </if>
                <if test="record.companyId != null and record.companyId != ''">
                    and a.company_id = #{record.companyId}
                </if>
                <if test="record.memberRoleId != null and record.memberRoleId != ''">
                    and a.id in (
src/main/resources/mapper/modules/AiProductPointMapper.xml
@@ -1,4 +1,26 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cc.mrbird.febs.ai.mapper.AiProductPointMapper">
    <select id="selectPageListByQuery" resultType="cc.mrbird.febs.ai.res.productPoint.ApiProductPointListVo">
        select
        a.id as id,
        a.is_normal as isNormal,
        a.finder_user_name as finderUserName,
        a.feed_img as feedImg,
        a.title as title,
        a.feed_id as feedId
        from ai_product_point a
        <where>
            <if test="record != null">
                <if test="record.categoryId != null and record.categoryId != ''">
                    and a.product_category_id = #{record.categoryId}
                </if>
                <if test="record.companyId != null and record.companyId != ''">
                    and a.company_id = #{record.companyId}
                </if>
            </if>
        </where>
        order by a.CREATED_TIME asc
    </select>
</mapper>