| 5 days ago | Administrator | ![]() |
| 5 days ago | Administrator | ![]() |
| 5 days ago | Administrator | ![]() |
| 5 days ago | Administrator | ![]() |
| 5 days ago | Administrator | ![]() |
| 5 days ago | Administrator | ![]() |
| 5 days ago | Administrator | ![]() |
| 5 days ago | Administrator | ![]() |
| 5 days ago | Administrator | ![]() |
| 5 days ago | Administrator | ![]() |
| 5 days ago | Administrator | ![]() |
| 5 days ago | Administrator | ![]() |
| 5 days ago | Administrator | ![]() |
| 5 days ago | Administrator | ![]() |
| 5 days ago | Administrator | ![]() |
src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java
@@ -27,7 +27,8 @@ public void addInterceptors(InterceptorRegistry registry) { InterceptorRegistration registration = registry.addInterceptor(new LoginInterceptor()); registration.addPathPatterns("/api/**"); registration.excludePathPatterns("/api/login/**"); // registration.excludePathPatterns("/api/login/**"); registration.excludePathPatterns("/api/login/xcxLogin"); registration.excludePathPatterns("/api/common/**"); registration.excludePathPatterns("/api/category/**"); registration.excludePathPatterns("/api/goods/**"); @@ -72,5 +73,8 @@ registration.excludePathPatterns("/api/yh/agent/categorySysList"); registration.excludePathPatterns("/api/yh/agent/agentSysList"); registration.excludePathPatterns("/api/yh/agent/agentSysInfo"); registration.excludePathPatterns("/api/yh/banner/bannerList"); registration.excludePathPatterns("/api/yh/banner/logoInfo"); } } src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
@@ -34,8 +34,10 @@ import cc.mrbird.febs.vip.entity.MallVipConfig; import cc.mrbird.febs.vip.mapper.MallVipConfigMapper; import cc.mrbird.febs.yinhe.entity.YHAiCompany; import cc.mrbird.febs.yinhe.entity.YHSysCompanyLevel; import cc.mrbird.febs.yinhe.entity.YhAiMember; import cc.mrbird.febs.yinhe.mapper.YHAiCompanyMapper; import cc.mrbird.febs.yinhe.mapper.YHSysCompanyLevelMapper; import cc.mrbird.febs.yinhe.mapper.YhAiMemberMapper; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; @@ -702,8 +704,10 @@ private final XcxProperties xcxProperties = SpringContextHolder.getBean(XcxProperties.class); private final YhAiMemberMapper yhAiMemberMapper; private final YHAiCompanyMapper yhAiCompanyMapper; private final YHSysCompanyLevelMapper yhSysCompanyLevelMapper; @Override @Transactional public FebsResponse xcxLogin(ApiXcxLoginDto apiXcxLoginDto) throws IOException { log.info("登录请求参数:{}", JSONObject.toJSONString(apiXcxLoginDto)); FebsResponse febsResponse = new FebsResponse(); @@ -743,9 +747,25 @@ Wrappers.lambdaQuery(YHAiCompany.class) .eq(YHAiCompany::getCode, apiXcxLoginDto.getCompanyId()) ); if (ObjectUtil.isNotEmpty(aiCompany)){ entity.setCompanyId(aiCompany.getId()); if (ObjectUtil.isEmpty(aiCompany)){ throw new FebsException("公司编码错误"); } String levelCode = aiCompany.getLevelCode(); YHSysCompanyLevel yhSysCompanyLevel = yhSysCompanyLevelMapper.selectOne( Wrappers.lambdaQuery(YHSysCompanyLevel.class) .eq(YHSysCompanyLevel::getCode, levelCode) ); Integer memberNum = yhSysCompanyLevel.getMemberNum(); List<YhAiMember> yhAiMembers = yhAiMemberMapper.selectList( Wrappers.lambdaQuery(YhAiMember.class) .eq(YhAiMember::getCompanyId, aiCompany.getId()) .isNull(YhAiMember::getRoleId) ); Integer realNum = CollUtil.isEmpty(yhAiMembers) ? 0 : yhAiMembers.size(); if (realNum >= memberNum){ throw new FebsException("公司会员已满"); } entity.setCompanyId(aiCompany.getId()); } entity.setCreateTime(systemTime); entity.setUpdateTime(systemTime); @@ -777,13 +797,14 @@ redisUtils.del(existToken); } } YhAiMember yhAiMember = yhAiMemberMapper.selectById(entity.getId()); String token = IdUtil.simpleUUID(); redisUtils.set(token, JSONObject.toJSONString(entity), -1); redisUtils.set(token, JSONObject.toJSONString(yhAiMember), -1); redisUtils.set(redisKey, token, -1); Map<String, Object> authInfo = new HashMap<>(); authInfo.put("token", token); authInfo.put("appid", xcxProperties.getXcxAppid()); authInfo.put("member", entity); authInfo.put("member", yhAiMember); authInfo.put("rasToken", generateAsaToken(token)); febsResponse.success().data(authInfo); } else { @@ -797,7 +818,7 @@ public FebsResponse xcxSaveInfo(ApiXcxSaveInfoDto apiXcxSaveInfoDto) { log.info("name={},phone={},avatar={},sex={}", apiXcxSaveInfoDto.getNickName(),apiXcxSaveInfoDto.getPhone(),apiXcxSaveInfoDto.getAvatarUrl(),apiXcxSaveInfoDto.getGender()); String memberId = LoginUserUtil.getLoginUser().getMemberUuid(); String memberId = YHLoginUserUtil.getLoginUser().getMemberUuid(); YhAiMember entity = yhAiMemberMapper.selectOne( Wrappers.lambdaQuery(YhAiMember.class) .eq(YhAiMember::getMemberUuid, memberId) src/main/java/cc/mrbird/febs/yinhe/controller/YHApiBannerController.java
New file @@ -0,0 +1,70 @@ package cc.mrbird.febs.yinhe.controller; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.yinhe.req.*; import cc.mrbird.febs.yinhe.res.*; import cc.mrbird.febs.yinhe.service.YhAiService; import cn.hutool.core.util.StrUtil; 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.*; import reactor.core.publisher.Flux; /** * @author Administrator */ @Slf4j @Validated @RestController @RequiredArgsConstructor @RequestMapping(value = "/api/yh/banner") @Api(value = "YHApiBannerController", tags = "AI-银和-轮播图相关接口") public class YHApiBannerController { private final YhAiService service; @ApiOperation(value = "未登录-轮播图列表", notes = "未登录-轮播图列表") @ApiResponses({ @ApiResponse(code = 200, message = "success", response = YHBannerVo.class) }) @GetMapping(value = "/bannerList") public FebsResponse bannerList() { return service.bannerList(); } @ApiOperation(value = "未登录-logo", notes = "未登录-logo") @ApiResponses({ @ApiResponse(code = 200, message = "success", response = YHLogoVo.class) }) @GetMapping(value = "/logoInfo") public FebsResponse logoInfo() { return service.logoInfo(); } @ApiOperation(value = "登录-轮播图列表", notes = "未登录-轮播图列表") @ApiResponses({ @ApiResponse(code = 200, message = "success", response = YHBannerVo.class) }) @GetMapping(value = "/loginBannerList") public FebsResponse loginBannerList() { return service.loginBannerList(); } @ApiOperation(value = "登录-logo", notes = "未登录-logo") @ApiResponses({ @ApiResponse(code = 200, message = "success", response = YHLogoVo.class) }) @GetMapping(value = "/loginLogoInfo") public FebsResponse loginLogoInfo() { return service.loginLogoInfo(); } } src/main/java/cc/mrbird/febs/yinhe/entity/YHAiBanner.java
New file @@ -0,0 +1,17 @@ package cc.mrbird.febs.yinhe.entity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @Data @TableName("ai_banner") public class YHAiBanner extends YhBaseEntity { private String id; private String name; private String imageUrl; private Integer sort; //状态 0-禁用 1-启用 private Integer state; private String companyId; } src/main/java/cc/mrbird/febs/yinhe/entity/YHAiLogo.java
New file @@ -0,0 +1,18 @@ package cc.mrbird.febs.yinhe.entity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @Data @TableName("ai_logo") public class YHAiLogo extends YhBaseEntity { private String id; private String companyId; private String name; private String imageUrl; //状态 0-禁用 1-启用 private Integer state; private String desription; } src/main/java/cc/mrbird/febs/yinhe/entity/YHSysCompanyLevel.java
@@ -11,4 +11,5 @@ private String code; private Integer agentNum; private Integer token; private Integer memberNum; } src/main/java/cc/mrbird/febs/yinhe/mapper/YHAiBannerMapper.java
New file @@ -0,0 +1,7 @@ package cc.mrbird.febs.yinhe.mapper; import cc.mrbird.febs.yinhe.entity.YHAiBanner; import com.baomidou.mybatisplus.core.mapper.BaseMapper; public interface YHAiBannerMapper extends BaseMapper<YHAiBanner> { } src/main/java/cc/mrbird/febs/yinhe/mapper/YHAiLogoMapper.java
New file @@ -0,0 +1,7 @@ package cc.mrbird.febs.yinhe.mapper; import cc.mrbird.febs.yinhe.entity.YHAiLogo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; public interface YHAiLogoMapper extends BaseMapper<YHAiLogo> { } src/main/java/cc/mrbird/febs/yinhe/mapper/YHSysAgentMapper.java
@@ -1,7 +1,14 @@ package cc.mrbird.febs.yinhe.mapper; import cc.mrbird.febs.yinhe.entity.YHSysAgent; import cc.mrbird.febs.yinhe.req.YHSysAgentDto; import cc.mrbird.febs.yinhe.res.YHSysAgentVo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; public interface YHSysAgentMapper extends BaseMapper<YHSysAgent> { Page<YHSysAgentVo> getPageListByQuery(Page<YHSysAgentVo> page, @Param("record")YHSysAgentDto dto); } src/main/java/cc/mrbird/febs/yinhe/req/YHCategoryDto.java
@@ -10,9 +10,6 @@ @ApiModel(value = "YHCategoryDto", description = "参数") public class YHCategoryDto { @ApiModelProperty(value = "ID", example = "10") private String id; @ApiModelProperty(value = "是否推荐到小程序首页 1-推荐 0-不推荐", example = "1") private Integer hotState; src/main/java/cc/mrbird/febs/yinhe/req/YHSysAgentDto.java
@@ -4,10 +4,20 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotNull; @Data @ApiModel(value = "YHSysAgentDto", description = "参数") public class YHSysAgentDto { @NotNull(message = "页码不能为空") @ApiModelProperty(value = "页码", example = "1") private Integer pageNow; @NotNull(message = "每页数量不能为空") @ApiModelProperty(value = "每页数量", example = "10") private Integer pageSize; @ApiModelProperty(value = "分类", example = "1") private String agentCategoryId; } src/main/java/cc/mrbird/febs/yinhe/res/YHBannerVo.java
New file @@ -0,0 +1,17 @@ package cc.mrbird.febs.yinhe.res; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "YHBannerVo", description = "参数") public class YHBannerVo { @ApiModelProperty(value = "名称*", example = "1") private String name; @ApiModelProperty(value = "图片链接*", example = "1") private String imageUrl; @ApiModelProperty(value = "排序*", example = "1") private Integer sort; } src/main/java/cc/mrbird/febs/yinhe/res/YHLogoVo.java
New file @@ -0,0 +1,16 @@ package cc.mrbird.febs.yinhe.res; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "YHLogoVo", description = "参数") public class YHLogoVo { @ApiModelProperty(value = "名称*", example = "1") private String name; @ApiModelProperty(value = "图片链接*", example = "1") private String imageUrl; @ApiModelProperty(value = "欢迎语*", example = "1") private String desription; } src/main/java/cc/mrbird/febs/yinhe/service/YhAiService.java
@@ -35,4 +35,12 @@ FebsResponse saveContext(YHSaveContextDto dto); Flux<FebsResponse> aiAnswer(YHAitalkItemStreamDto dto); FebsResponse bannerList(); FebsResponse logoInfo(); FebsResponse loginBannerList(); FebsResponse loginLogoInfo(); } src/main/java/cc/mrbird/febs/yinhe/service/impl/YhAiServiceImpl.java
@@ -1,12 +1,12 @@ package cc.mrbird.febs.yinhe.service.impl; import cc.mrbird.febs.ai.res.product.ApiProductVo; import cc.mrbird.febs.ai.strategy.LlmStrategyFactory; import cc.mrbird.febs.ai.strategy.enumerates.LlmStrategyEnum; import cc.mrbird.febs.ai.utils.UUID; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.common.utils.AppContants; import cc.mrbird.febs.common.utils.LoginUserUtil; import cc.mrbird.febs.common.utils.RedisUtils; import cc.mrbird.febs.common.utils.YHLoginUserUtil; import cc.mrbird.febs.rabbit.producter.AgentProducer; @@ -22,6 +22,7 @@ import com.alibaba.dashscope.common.Role; 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; @@ -39,6 +40,8 @@ private final YhAiMemberMapper yhAiMemberMapper; private final YHAiCompanyMapper yhAiCompanyMapper; private final YHAiBannerMapper yhAiBannerMapper; private final YHAiLogoMapper yhAiLogoMapper; private final YHAiAgentCategoryMapper yhAiAgentCategoryMapper; private final YHAiAgentMapper yhAiAgentMapper; @@ -87,15 +90,15 @@ @Override public FebsResponse categoryList(YHCategoryDto dto) { String companyId = YHLoginUserUtil.getLoginUser().getCompanyId(); String memberUuid = YHLoginUserUtil.getLoginUser().getMemberUuid(); YhAiMember yhAiMember = yhAiMemberMapper.selectOne(Wrappers.lambdaQuery(YhAiMember.class).eq(YhAiMember::getMemberUuid, memberUuid)); String companyId = yhAiMember.getCompanyId(); List<YHCategoryVo> yhCategoryVos = new ArrayList<>(); LambdaQueryWrapper<YHAiAgentCategory> query = Wrappers.lambdaQuery(YHAiAgentCategory.class); query.eq(YHAiAgentCategory::getCompanyId,companyId); query.eq(YHAiAgentCategory::getState,1); if (ObjectUtil.isNotEmpty(dto.getId())){ query.eq(YHAiAgentCategory::getId,dto.getId()); } if (ObjectUtil.isNotEmpty(dto.getHotState())){ query.eq(YHAiAgentCategory::getHotState,dto.getHotState()); } @@ -116,7 +119,9 @@ @Override public FebsResponse agentList(YHAgentDto dto) { String companyId = YHLoginUserUtil.getLoginUser().getCompanyId(); String memberUuid = YHLoginUserUtil.getLoginUser().getMemberUuid(); YhAiMember yhAiMember = yhAiMemberMapper.selectOne(Wrappers.lambdaQuery(YhAiMember.class).eq(YhAiMember::getMemberUuid, memberUuid)); String companyId = yhAiMember.getCompanyId(); ArrayList<YHAgentVo> yhAgentVos = new ArrayList<>(); LambdaQueryWrapper<YHAiAgent> query = Wrappers.lambdaQuery(YHAiAgent.class); @@ -145,7 +150,7 @@ @Override public FebsResponse agentInfo(YHAgentInitDto dto) { String companyId = YHLoginUserUtil.getLoginUser().getCompanyId(); String memberUuid = YHLoginUserUtil.getLoginUser().getMemberUuid(); YHAgentInitVo yhAgentInitVo = new YHAgentInitVo(); String id = dto.getId(); @@ -196,27 +201,10 @@ @Override public FebsResponse agentSysList(YHSysAgentDto dto) { ArrayList<YHSysAgentVo> vos = new ArrayList<>(); LambdaQueryWrapper<YHSysAgent> query = Wrappers.lambdaQuery(YHSysAgent.class); query.eq(YHSysAgent::getState,1); if (ObjectUtil.isNotEmpty(dto.getAgentCategoryId())){ query.eq(YHSysAgent::getAgentCategoryId,dto.getAgentCategoryId()); } query.orderByDesc(YHSysAgent::getCreateTime); List<YHSysAgent> list = yhSysAgentMapper.selectList(query); if (CollUtil.isNotEmpty(list)){ for (YHSysAgent entity : list) { YHSysAgentVo vo = new YHSysAgentVo(); vo.setId(entity.getId()); vo.setName(entity.getName()); vo.setDescription(entity.getDescription()); vo.setIconImg(entity.getIconImg()); vos.add(vo); } } return new FebsResponse().success().data(vos); // 创建分页对象,传入当前页和每页大小 Page<YHSysAgentVo> page = new Page<>(dto.getPageNow(), dto.getPageSize()); Page<YHSysAgentVo> pageListByQuery = yhSysAgentMapper.getPageListByQuery(page, dto); return new FebsResponse().success().data(pageListByQuery); } @Override @@ -248,7 +236,7 @@ @Override public FebsResponse logout() { String memberUuid = LoginUserUtil.getLoginUser().getMemberUuid(); String memberUuid = YHLoginUserUtil.getLoginUser().getMemberUuid(); String redisKey = AppContants.XCX_LOGIN_PREFIX + memberUuid; String existToken = redisUtils.getString(redisKey); @@ -264,7 +252,7 @@ @Override public FebsResponse initSend(YHSendInitDto dto) { String memberUuid = LoginUserUtil.getLoginUser().getMemberUuid(); String memberUuid = YHLoginUserUtil.getLoginUser().getMemberUuid(); YHSendInitVo vo = new YHSendInitVo(); @@ -438,4 +426,92 @@ } return messages; } @Override public FebsResponse bannerList() { List<YHBannerVo> vos = new ArrayList<>(); List<YHAiBanner> list = yhAiBannerMapper.selectList( Wrappers.lambdaQuery(YHAiBanner.class) .eq(YHAiBanner::getState, 1) .isNull(YHAiBanner::getCompanyId) .orderByDesc(YHAiBanner::getSort) ); if (CollUtil.isNotEmpty(list)){ for (YHAiBanner aiBanner : list){ YHBannerVo vo = new YHBannerVo(); vo.setName(aiBanner.getName()); vo.setImageUrl(aiBanner.getImageUrl()); vo.setSort(aiBanner.getSort()); vos.add(vo); } } return new FebsResponse().success().data(vos); } @Override public FebsResponse logoInfo() { YHLogoVo yhLogoVo = new YHLogoVo(); List<YHAiLogo> yhAiLogos = yhAiLogoMapper.selectList( Wrappers.lambdaQuery(YHAiLogo.class) .eq(YHAiLogo::getState, 1) .isNull(YHAiLogo::getCompanyId) ); if (CollUtil.isNotEmpty(yhAiLogos)){ YHAiLogo yhAiLogo = yhAiLogos.get(0); yhLogoVo.setName(yhAiLogo.getName()); yhLogoVo.setImageUrl(yhAiLogo.getImageUrl()); yhLogoVo.setDesription(yhAiLogo.getDesription()); } return new FebsResponse().success().data(yhLogoVo); } @Override public FebsResponse loginBannerList() { String memberUuid = YHLoginUserUtil.getLoginUser().getMemberUuid(); YhAiMember yhAiMember = yhAiMemberMapper.selectOne(Wrappers.lambdaQuery(YhAiMember.class).eq(YhAiMember::getMemberUuid, memberUuid)); String companyId = yhAiMember.getCompanyId(); List<YHBannerVo> vos = new ArrayList<>(); List<YHAiBanner> list = yhAiBannerMapper.selectList( Wrappers.lambdaQuery(YHAiBanner.class) .eq(YHAiBanner::getState, 1) .eq(YHAiBanner::getCompanyId, companyId) .orderByAsc(YHAiBanner::getSort) ); if (CollUtil.isNotEmpty(list)){ for (YHAiBanner aiBanner : list){ YHBannerVo vo = new YHBannerVo(); vo.setName(aiBanner.getName()); vo.setImageUrl(aiBanner.getImageUrl()); vo.setSort(aiBanner.getSort()); vos.add(vo); } } return new FebsResponse().success().data(vos); } @Override public FebsResponse loginLogoInfo() { String memberUuid = YHLoginUserUtil.getLoginUser().getMemberUuid(); YhAiMember yhAiMember = yhAiMemberMapper.selectOne(Wrappers.lambdaQuery(YhAiMember.class).eq(YhAiMember::getMemberUuid, memberUuid)); String companyId = yhAiMember.getCompanyId(); YHLogoVo yhLogoVo = new YHLogoVo(); List<YHAiLogo> yhAiLogos = yhAiLogoMapper.selectList( Wrappers.lambdaQuery(YHAiLogo.class) .eq(YHAiLogo::getState, 1) .eq(YHAiLogo::getCompanyId, companyId) ); if (CollUtil.isNotEmpty(yhAiLogos)){ YHAiLogo yhAiLogo = yhAiLogos.get(0); yhLogoVo.setName(yhAiLogo.getName()); yhLogoVo.setImageUrl(yhAiLogo.getImageUrl()); yhLogoVo.setDesription(yhAiLogo.getDesription()); } return new FebsResponse().success().data(yhLogoVo); } } src/main/resources/application-test.yml
@@ -2,7 +2,7 @@ datasource: dynamic: # 是否开启 SQL日志输出,生产环境建议关闭,有性能损耗 p6spy: false p6spy: true hikari: connection-timeout: 30000 max-lifetime: 1800000 src/main/resources/mapper/modules/YHSysAgentMapper.xml
New file @@ -0,0 +1,25 @@ <?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.yinhe.mapper.YHSysAgentMapper"> <select id="getPageListByQuery" resultType="cc.mrbird.febs.yinhe.res.YHSysAgentVo"> select a.id as id, a.name as name, a.icon_img as iconImg, a.description as description from sys_agent a <where> a.state = 1 <if test="record != null"> <if test="record.agentCategoryId != null and record.agentCategoryId != ''"> and a.agent_category_id = #{record.agentCategoryId} </if> </if> </where> order by a.create_time desc </select> </mapper>