diff --git a/ruoyi-admin/src/main/java/com/ruoyi/mall/controller/MallMemberUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/mall/controller/MallMemberUserController.java index 8e0e588b2b06f6509275b89178ec3c47e6dc75a9..c74c09415f418b58c60f7d1340d443ba2cc93034 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/mall/controller/MallMemberUserController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/mall/controller/MallMemberUserController.java @@ -58,10 +58,10 @@ public class MallMemberUserController extends BaseController // if (school != null && loginUser.getUserId() != 1) { // mallMemberUser.setSchoolId(school.getSchoolId()); // } - + System.out.println(loginUser.getUserId()); MallMemberUser sysUserId = mallMemberUserService.selectMallMemberUserBySysUserId(loginUser.getUserId()); if (sysUserId != null && loginUser.getUserId() != 1) { - mallMemberUser.setIndexUserId(sysUserId.getId()); + mallMemberUser.setFindId(sysUserId.getId()); } startPage(); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ApiChatController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ApiChatController.java index 044652c1f20a643ba3d7cf3ae96dfdcd34e2c8c3..5a101347393af3b7494c10c07415453501b10056 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ApiChatController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ApiChatController.java @@ -65,6 +65,7 @@ public class ApiChatController { private final String CHAT_URI = "https://aip.baidubce.com/rpc/2.0/ai_custom/v2/wenxinworkshop/chat/completions"; private String apiKey = "hco0U4TGdVpA73F5mGBZliai"; +// private String apiKey = "bce-v3/ALTAK-e4lAevfWLzhTYIIXIlSmj/27d290cd6a83173d0221ce37240e92fb9a95a6ea"; private String secretKey = "kBwPxP7PxRy5fTtIalW81GN7A3LFBrEN"; @@ -113,7 +114,7 @@ public class ApiChatController { */ private String getQianFanAccessToken() { String qianFanAccessToken = new String(); - if(null == redisTemplate.boundValueOps("qianFanAccessToken").get()){ + if(StringUtils.isBlank((String) redisTemplate.boundValueOps("qianFanAccessToken").get())){ MediaType mediaType = MediaType.parse("application/json"); // MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); RequestBody body = RequestBody.create(mediaType, ""); @@ -497,15 +498,6 @@ public class ApiChatController { saveMessage.setVoiceUrl(params.get("voiceUrl").toString()); } - com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject(); - jsonObject.put("query", question); - List plugins = new ArrayList<>(); - plugins.add("uuid-zhishiku"); - //plugins.add("uuid-weatherforecast"); - //jsonObject.put("plugins", plugins); - //jsonObject.put("verbose", false); - - // 创建存储类 SaveChatRequestMessage saveChatRequestMessage = new SaveChatRequestMessage(); ArrayList historyList = new ArrayList<>(); @@ -530,8 +522,30 @@ public class ApiChatController { } } - //将新的问题添加到消息上下文 - //jsonObject.put("history", historyList); + + // 构建请求参数,包含历史消息和当前问题 + com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject(); + List> maps = new ArrayList<>(); + + // 添加历史消息到请求中 + if (!historyList.isEmpty()) { + for (Message historyMsg : historyList) { + Map historyMap = new HashMap<>(); + historyMap.put("role", historyMsg.getRole()); + historyMap.put("content", historyMsg.getContent()); + maps.add(historyMap); + } + } + + // 添加当前用户问题 + Map map = new HashMap(); + map.put("role","user"); + map.put("content",question); + maps.add(map); + + jsonObject.put("messages", maps); + jsonObject.put("model","deepseek-v3.1-250821"); + // 新信息添加保存 saveChatRequestMessage.addSaveMessage(saveMessage); @@ -539,60 +553,67 @@ public class ApiChatController { MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, jsonStr); Request request = new Request.Builder() - // .url("https://aip.baidubce.com/rpc/2.0/ai_custom/v2/wenxinworkshop/plugin/jfa2nhi1zap61qy7?access_token="+getQianFanAccessToken()) .url("https://qianfan.baidubce.com/v2/chat/completions") .method("POST", body) .addHeader("Content-Type", "application/json") - .addHeader("Authorization", "Bearer " + getQianFanAccessToken()) +// .addHeader("Authorization", "Bearer " + getQianFanAccessToken()) + .addHeader("Authorization", "Bearer bce-v3/ALTAK-e4lAevfWLzhTYIIXIlSmj/27d290cd6a83173d0221ce37240e92fb9a95a6ea") .build(); try{ - logger.info("千帆AccessToken:{}",getQianFanAccessToken()); + logger.info("千帆AccessToken:bce-v3/ALTAK-e4lAevfWLzhTYIIXIlSmj/27d290cd6a83173d0221ce37240e92fb9a95a6ea"); + logger.info("请求参数:{}",jsonStr); Response response = client.newCall(request).execute(); String responseJsonStr = response.body().string(); + logger.info("返回的响应结果为:{}",responseJsonStr); + + // 解析新API格式的响应:从choices[0].message.content获取内容 + com.alibaba.fastjson.JSONObject data = com.alibaba.fastjson.JSONObject.parseObject(responseJsonStr); + com.alibaba.fastjson.JSONArray choices = data.getJSONArray("choices"); + + if (choices != null && choices.size() > 0) { + com.alibaba.fastjson.JSONObject choice = choices.getJSONObject(0); + com.alibaba.fastjson.JSONObject messageObj = choice.getJSONObject("message"); + String result = messageObj.getString("content"); + + if (StringUtils.isNotBlank(result)){ + // 保留换行符,只去除多余的连续换行 + String answer = result.replaceAll("\n", ""); + logger.info("AI回复内容:{}",answer); + + Message assistant = new Message("assistant", answer); + + // 存储信息 + SaveMessage saveAnswer = BeanUtil.copyProperties(assistant, SaveMessage.class); + saveAnswer.setHasVoice(hasVoice); + + saveChatRequestMessage.addSaveMessage(saveAnswer); + + //redis 存储 + if(redisTemplate.hasKey("ChatWith" + memberUser.getId())){ + Long expire = redisTemplate.getExpire("ChatWith" + memberUser.getId()); + redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).set(JSONUtil.toJsonStr(saveChatRequestMessage), 30, TimeUnit.DAYS); + }else{ + redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).set(JSONUtil.toJsonStr(saveChatRequestMessage), 30, TimeUnit.DAYS); + } + logger.info("存入redis:" +redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).get().toString()); + List newChat = new ArrayList<>(); + newChat.add(saveMessage); + newChat.add(saveAnswer); - com.alibaba.fastjson.JSONObject data = JSONUtil.toBean(responseJsonStr, com.alibaba.fastjson.JSONObject.class); - System.out.println("返回的响应结果为:"+responseJsonStr); - System.out.println("data:"+data); - System.out.println("result:"+data.getString("result")); - System.out.println("response:"+response); - String result = data.getString("result"); - if (StringUtils.isNotBlank(result)){ - String answer = result.replaceAll("\n", ""); - - //int i = answer.indexOf("\n"); - Message assistant = new Message("assistant", answer); - //if (i> 0){ - // assistant.setContent(answer.substring(0,i)); - //} - - - // 存储信息 - SaveMessage saveAnswer = BeanUtil.copyProperties(assistant, SaveMessage.class); - saveAnswer.setHasVoice(hasVoice); - - saveChatRequestMessage.addSaveMessage(saveAnswer); - - //redis 存储 - if(redisTemplate.hasKey("ChatWith" + memberUser.getId())){ - Long expire = redisTemplate.getExpire("ChatWith" + memberUser.getId()); - redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).set(JSONUtil.toJsonStr(saveChatRequestMessage), 30, TimeUnit.DAYS); + return AjaxResult.success(newChat); }else{ - redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).set(JSONUtil.toJsonStr(saveChatRequestMessage), 30, TimeUnit.DAYS); + logger.error("对话返回结果内容为空"); + return AjaxResult.error("对话失败:返回内容为空!"); } - logger.info("存入redis:" +redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).get().toString()); - List newChat = new ArrayList<>(); - newChat.add(saveMessage); - newChat.add(saveAnswer); - - return AjaxResult.success(newChat); }else{ - logger.error("对话返回结果为空"); - return AjaxResult.error("对话失败!"); + logger.error("对话返回choices为空"); + return AjaxResult.error("对话失败:返回格式异常!"); } }catch (Exception e){ + logger.error("调用千帆API异常", e); e.printStackTrace(); - return AjaxResult.error("对话失败!"); + return AjaxResult.error("对话失败:" + e.getMessage()); } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ApiMemberController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ApiMemberController.java index addd85d990dc884551ca41135e37fa3ce29bd7bb..2556b0de2664edf41e55372cf1163e1f836192fe 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ApiMemberController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ApiMemberController.java @@ -99,14 +99,16 @@ public class ApiMemberController { // String nickName = userInfoJson.getString("nickName"); // String avatarUrl = userInfoJson.getString("avatarUrl"); - String nickName = map.get("nickName").toString(); - String avatarUrl = map.get("avatarUrl").toString(); +// String nickName = map.get("nickName").toString(); +// String avatarUrl = map.get("avatarUrl").toString(); + String avatarUrl = "https://image.xnszz.com/IMG_64_64@Fj0Nw2316X8QtYj9phrPwA4IJYHi.png"; + if (memberUserDO == null) { //2、对encryptedData加密数据进行AES解密 MallMemberUser memberUser = new MallMemberUser(); - memberUser.setName(nickName); + memberUser.setName("艺智果" + IdUtils.buildNumberCode(6)); memberUser.setOpenid(openid); memberUser.setAvatar(avatarUrl); memberUser.setCreateNum(5); @@ -149,7 +151,7 @@ public class ApiMemberController { } } - return ApiResult.ok().put("data", memberUser); + return ApiResult.ok().put("data", memberUser).put("code",200); } }else{ // 绑定上级 @@ -164,7 +166,7 @@ public class ApiMemberController { } } } - return ApiResult.ok("登陆成功").put("data", memberUserDO); + return ApiResult.ok("登陆成功").put("data", memberUserDO).put("code",200); } catch (Exception e) { e.printStackTrace(); return ApiResult.error("授权失败"); diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 84a09a111ce255083b12cf757014e69bb26dca07..adeedcc9e4245c832d4d3a37f61e9eb8f2cfc4d7 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -134,7 +134,7 @@ wx: # 小程序码跳转页面 wxPath: pages/index/index?parentId= # 小程序码跳转页面 - schoolPath: pages/schoolDeail/schoolDetail?schoolId= + schoolPath: pages/index/index?schoolId= # 七牛云 qiNiu: diff --git a/ruoyi-system/src/main/java/com/ruoyi/mall/domain/MallMemberUser.java b/ruoyi-system/src/main/java/com/ruoyi/mall/domain/MallMemberUser.java index 9dc9c0ebce946e889778b10abdf5eb815b7c534c..211838f0f941809e177ac7fbfc11353cf68dfc0f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/mall/domain/MallMemberUser.java +++ b/ruoyi-system/src/main/java/com/ruoyi/mall/domain/MallMemberUser.java @@ -235,6 +235,8 @@ public class MallMemberUser extends BaseEntity /** 小程序邀请价 */ private BigDecimal indexPrice; + private Long findId; + public BigDecimal getIndexPrice() { return indexPrice; } @@ -790,45 +792,83 @@ public class MallMemberUser extends BaseEntity this.developDirection = developDirection; } + public Long getFindId() { + return findId; + } + + public void setFindId(Long findId) { + this.findId = findId; + } + @Override public String toString() { - return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) - .append("id", getId()) - .append("avatar", getAvatar()) - .append("name", getName()) - .append("phone", getPhone()) - .append("openid", getOpenid()) - .append("wechat", getWechat()) - .append("sex", getSex()) - .append("password", getPassword()) - .append("token", getToken()) - .append("status", getStatus()) - .append("introUser", getIntroUser()) - .append("invitationCode", getInvitationCode()) - .append("money", getMoney()) - .append("allMoney", getAllMoney()) - .append("qrCode", getQrCode()) - .append("userLevel", getUserLevel()) - .append("provinceId", getProvinceId()) - .append("cityId", getCityId()) - .append("areaId", getAreaId()) - .append("provinceName", getProvinceName()) - .append("cityName", getCityName()) - .append("areaName", getAreaName()) - .append("address", getAddress()) - .append("subjectId", getSubjectId()) - .append("subjectName", getSubjectName()) - .append("isOpen", getIsOpen()) - .append("openTypeId", getOpenTypeId()) - .append("openTypeName", getOpenTypeName()) - .append("openAt", getOpenAt()) - .append("expireAt", getExpireAt()) - .append("createAt", getCreateAt()) - .append("updateAt", getUpdateAt()) - .append("loginAt", getLoginAt()) - .append("delFlag", getDelFlag()) - .append("developDirection", getDevelopDirection()) - .append("createNum", getCreateNum()) - .toString(); + return "MallMemberUser{" + + "id=" + id + + ", avatar='" + avatar + '\'' + + ", name='" + name + '\'' + + ", phone='" + phone + '\'' + + ", openid='" + openid + '\'' + + ", wechat='" + wechat + '\'' + + ", sex='" + sex + '\'' + + ", password='" + password + '\'' + + ", token='" + token + '\'' + + ", status='" + status + '\'' + + ", introUser=" + introUser + + ", introUserName='" + introUserName + '\'' + + ", childrenNum=" + childrenNum + + ", invitationCode='" + invitationCode + '\'' + + ", parentCode='" + parentCode + '\'' + + ", money=" + money + + ", allMoney=" + allMoney + + ", qrCode='" + qrCode + '\'' + + ", userLevel=" + userLevel + + ", provinceId=" + provinceId + + ", cityId=" + cityId + + ", areaId=" + areaId + + ", provinceName='" + provinceName + '\'' + + ", cityName='" + cityName + '\'' + + ", areaName='" + areaName + '\'' + + ", address='" + address + '\'' + + ", subjectId=" + subjectId + + ", subjectName='" + subjectName + '\'' + + ", isOpen='" + isOpen + '\'' + + ", openTypeId=" + openTypeId + + ", openTypeName='" + openTypeName + '\'' + + ", openAt='" + openAt + '\'' + + ", expireAt='" + expireAt + '\'' + + ", createAt='" + createAt + '\'' + + ", updateAt='" + updateAt + '\'' + + ", loginAt='" + loginAt + '\'' + + ", delFlag='" + delFlag + '\'' + + ", developDirection='" + developDirection + '\'' + + ", subjectType='" + subjectType + '\'' + + ", grade='" + grade + '\'' + + ", majorSchool='" + majorSchool + '\'' + + ", cultureSchool='" + cultureSchool + '\'' + + ", cultureScore=" + cultureScore + + ", majorScore=" + majorScore + + ", languageType=" + languageType + + ", languageScore=" + languageScore + + ", scoreModify='" + scoreModify + '\'' + + ", createNum=" + createNum + + ", sharePerson=" + sharePerson + + ", useCode=" + useCode + + ", codeId=" + codeId + + ", vipCode='" + vipCode + '\'' + + ", rateFlag=" + rateFlag + + ", schoolId=" + schoolId + + ", indexCode='" + indexCode + '\'' + + ", indexName='" + indexName + '\'' + + ", indexLogo='" + indexLogo + '\'' + + ", indexUserId=" + indexUserId + + ", sysUserId=" + sysUserId + + ", sysUserName='" + sysUserName + '\'' + + ", sysUserPassword='" + sysUserPassword + '\'' + + ", sysUserStatus=" + sysUserStatus + + ", isSysUser=" + isSysUser + + ", schoolName='" + schoolName + '\'' + + ", indexPrice=" + indexPrice + + ", findId=" + findId + + '}'; } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/mall/mapper/MallMemberUserMapper.java b/ruoyi-system/src/main/java/com/ruoyi/mall/mapper/MallMemberUserMapper.java index add9587f08993e471999542b4414130c3560565b..dd1b9679259aa74835f36d81d55c83f12fb6d20c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/mall/mapper/MallMemberUserMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/mall/mapper/MallMemberUserMapper.java @@ -29,7 +29,7 @@ public interface MallMemberUserMapper * 查询用户会员列表 * * @param mallMemberUser 用户会员 - * @return 用户会员集合 + * @return 用户会员集合 ? */ public List selectMallMemberUserList(MallMemberUser mallMemberUser); diff --git a/ruoyi-system/src/main/java/com/ruoyi/mall/service/impl/MallCountMethodServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/mall/service/impl/MallCountMethodServiceImpl.java index d0bda073e784951d61919d3e3b8f9bbdac5d488c..6eff3557912eaeb4fde16a8e68c428a2fe315838 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/mall/service/impl/MallCountMethodServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/mall/service/impl/MallCountMethodServiceImpl.java @@ -633,6 +633,8 @@ public class MallCountMethodServiceImpl implements IMallCountMethodService // 个人综合分 BigDecimal totalScore = this.getTotalScore(cultureScore, majorScore, acceptRuleId); + reference = Optional.ofNullable(reference).orElse(BigDecimal.ZERO); + acceptRate = totalScore.subtract(reference).add(new BigDecimal("80")); if (acceptRate.compareTo(BigDecimal.valueOf(99)) >= 0){ diff --git a/ruoyi-system/src/main/resources/mapper/mall/MallMemberUserMapper.xml b/ruoyi-system/src/main/resources/mapper/mall/MallMemberUserMapper.xml index f54a66db71278be8418302212d870f2a9e4ca5b9..c226092abe0db9812d1a83b7226532e78129bda5 100644 --- a/ruoyi-system/src/main/resources/mapper/mall/MallMemberUserMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/mall/MallMemberUserMapper.xml @@ -132,62 +132,62 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"