...
 
Commits (12)
......@@ -73,11 +73,12 @@
<artifactId>weixin-java-miniapp</artifactId>
</dependency>
<!--千帆 智能对话-->
<!--文心一言-->
<!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp -->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.8.1</version>
<version>4.12.0</version>
</dependency>
<!-- <dependency>-->
......
......@@ -4,14 +4,18 @@ import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.mall.domain.Bo.MallSchoolExcelBo;
import com.ruoyi.mall.domain.Bo.MallTestSchoolRecordBo;
import com.ruoyi.mall.domain.MallSchool;
import com.ruoyi.mall.service.IMallSchoolService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
......@@ -109,5 +113,16 @@ public class MallSchoolController extends BaseController
return mallSchoolService.submitSchoolUser(mallSchool);
}
/**
* 导入学校录取数据列表
*/
@Log(title = "导入学校录取数据列表", businessType = BusinessType.IMPORT)
@PostMapping("/importData")
public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
{
ExcelUtil<MallSchoolExcelBo> util = new ExcelUtil<MallSchoolExcelBo>(MallSchoolExcelBo.class);
List<MallSchoolExcelBo> list = util.importExcel(file.getInputStream());
return AjaxResult.success(mallSchoolService.importTestSchoolRecord(list, updateSupport));
}
}
package com.ruoyi.web.controller.api;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.github.pagehelper.PageInfo;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.mall.domain.Bo.SaveChatRequestMessage;
import com.ruoyi.mall.domain.Bo.SaveMessage;
import com.ruoyi.mall.domain.Chat.ChatRequestMessage;
import com.ruoyi.mall.domain.Chat.ChatResponseMessage;
import com.ruoyi.mall.domain.Chat.Message;
import com.ruoyi.mall.domain.MallMemberUser;
import com.ruoyi.mall.service.IMallMemberUserService;
import okhttp3.*;
import okhttp3.RequestBody;
import org.apache.commons.lang3.ObjectUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.constraints.NotNull;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
* @ClassName 智能对话接口
* @Description 智能对话接口
* @Author LHY
* @Date 2023/10/18
* @Version 1.0
**/
@RestController
@RequestMapping("/api/chat")
public class ApiChatController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Resource
private RedisTemplate redisTemplate;
@Resource
private IMallMemberUserService mallMemberUserService;
//读取超时为60s
private static final long READ_TIMEOUT = 60000;
//写入超时为60s
private static final long WRITE_TIMEOUT = 60000;
//连接超时为60s
private static final long CONNECT_TIMEOUT = 60000;
private OkHttpClient.Builder builder = new OkHttpClient.Builder()
.readTimeout(READ_TIMEOUT, TimeUnit.MILLISECONDS)
.writeTimeout(WRITE_TIMEOUT, TimeUnit.MILLISECONDS)
.connectTimeout(CONNECT_TIMEOUT, TimeUnit.MILLISECONDS);
private OkHttpClient client = builder.build();
private final String ACCESS_TOKEN_URI = "https://aip.baidubce.com/oauth/2.0/token";
// private final String CHAT_URI = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions";
private final String CHAT_URI = "https://aip.baidubce.com/rpc/2.0/ai_custom/v2/wenxinworkshop/chat/completions";
private String apiKey = "hco0U4TGdVpA73F5mGBZliai";
private String secretKey = "kBwPxP7PxRy5fTtIalW81GN7A3LFBrEN";
//响应超时时间
private int responseTimeOut = 5000;
/**
* 删除旧token
*
* @return
*/
@GetMapping("/delQFAccessToken")
public AjaxResult delQFAccessToken(){
try {
// 删除原来的token
redisTemplate.delete("qianFanAccessToken");
return AjaxResult.success("删除token成功");
}catch (Exception e){
return AjaxResult.error("获取AccessToken异常!");
}
}
/**
* 获取千帆AccessToken
*
* @return
*/
@GetMapping("/getQFAccessToken")
public AjaxResult getAccessToken(){
try {
String token = getQianFanAccessToken();
return AjaxResult.success(token);
}catch (Exception e){
return AjaxResult.error("获取AccessToken异常!");
}
}
/**
* 从缓存中拿到千帆AccessToken
*
* @return
*/
private String getQianFanAccessToken() {
String qianFanAccessToken = new String();
if(null == redisTemplate.boundValueOps("qianFanAccessToken").get()){
MediaType mediaType = MediaType.parse("application/json");
// MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
RequestBody body = RequestBody.create(mediaType, "");
//创建一个请求
Request request = new Request.Builder()
.url(ACCESS_TOKEN_URI+"?client_id=" + apiKey + "&client_secret=" + secretKey + "&grant_type=client_credentials")
.method("POST",body)
.addHeader("Content-Type", "application/json")
.addHeader("Accept", "application/json")
// .addHeader("Content-Type", "application/x-www-form-urlencoded")
.build();
try {
//使用浏览器对象发起请求
Response response = client.newCall(request).execute();
//只能执行一次response.body().string()。下次再执行会抛出流关闭异常,因此需要一个对象存储返回结果
String responseMessage = response.body().string();
logger.info("获取accessToken成功");
JSONObject jsonObject = JSONUtil.parseObj(responseMessage);
String accessToken = (String) jsonObject.get("access_token");
redisTemplate.boundValueOps("qianFanAccessToken").set(accessToken, 30, TimeUnit.DAYS);
qianFanAccessToken = (String) redisTemplate.boundValueOps("qianFanAccessToken").get();
} catch (Exception e) {
e.printStackTrace();
}
}else{
qianFanAccessToken = (String) redisTemplate.boundValueOps("qianFanAccessToken").get();
}
return qianFanAccessToken;
}
/**对话
*
* @param params
* @return
* @throws IOException
*/
@PostMapping("/createPicture")
@org.springframework.web.bind.annotation.ResponseBody
public AjaxResult chat(@org.springframework.web.bind.annotation.RequestBody Map<String, Object> params) throws IOException {
//对用户问题的判断
if (!params.containsKey("question") || StringUtils.isEmpty(params.get("question").toString())) {
return AjaxResult.error("缺少问题");
}
if (!params.containsKey("userId") || StringUtils.isEmpty(params.get("userId").toString())) {
return AjaxResult.error("缺少用户id");
}
long userId = Long.parseLong(params.get("userId").toString());
MallMemberUser memberUser = mallMemberUserService.selectMallMemberUserById(userId);
if (memberUser == null) {
return AjaxResult.error("用户信息异常!!!");
}
String question = params.get("question").toString();
//通过参数获取一个Message
Message message = new Message("user",question);
//请求参数
ChatRequestMessage requestBody = new ChatRequestMessage();
if(redisTemplate.hasKey("ChatWith" + memberUser.getId())){
String json = redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).get().toString();
//System.out.println("json:"+json);
requestBody = JSONUtil.toBean(json, ChatRequestMessage.class);
}
//将新的问题添加到消息上下文
requestBody.addMessage(message);
String jsonStr = JSONUtil.toJsonStr(requestBody);
//System.out.println("jsonStr:"+jsonStr);
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, jsonStr);
Request request = new Request.Builder()
.url(CHAT_URI+"?access_token="+getQianFanAccessToken())
.method("POST", body)
.addHeader("Content-Type", "application/json")
.build();
try{
//logger.info("千帆AccessToken:{}",getQianFanAccessToken());
Response response = client.newCall(request).execute();
String responseJsonStr = response.body().string();
logger.info("发送一次请求,询问问题:{}",question);
ChatResponseMessage responseMessage = JSONUtil.toBean(responseJsonStr, ChatResponseMessage.class);
System.out.println("返回的响应结果为:"+responseJsonStr);
String result = responseMessage.getResult();
String answer = result.replaceAll("\n+", "\n");
logger.info("{}",answer);
Message assistant = new Message("assistant", answer);
requestBody.addMessage(assistant);
//redis 存储
if(redisTemplate.hasKey("ChatWith" + memberUser.getId())){
Long expire = redisTemplate.getExpire("ChatWith" + memberUser.getId());
redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).set(JSONUtil.toJsonStr(requestBody), 30, TimeUnit.DAYS);
}else{
redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).set(JSONUtil.toJsonStr(requestBody), 30, TimeUnit.DAYS);
}
logger.info("存入redis:" +redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).get().toString());
return AjaxResult.success(requestBody);
}catch (Exception e){
e.printStackTrace();
return AjaxResult.error("对话失败!");
}
}
/**对话 只返回最新内容
*
* @param params
* @return
* @throws IOException
*/
@PostMapping("/newChat")
@org.springframework.web.bind.annotation.ResponseBody
public AjaxResult chatNew(@org.springframework.web.bind.annotation.RequestBody Map<String, Object> params) throws IOException {
//对用户问题的判断
if (!params.containsKey("question") || StringUtils.isEmpty(params.get("question").toString())) {
return AjaxResult.error("缺少问题");
}
if (!params.containsKey("userId") || StringUtils.isEmpty(params.get("userId").toString())) {
return AjaxResult.error("缺少用户id");
}
if (!params.containsKey("hasVoice") || ObjectUtils.isEmpty(Integer.valueOf(params.get("hasVoice").toString()))){
return AjaxResult.error("缺少语音状态");
}
long userId = Long.parseLong(params.get("userId").toString());
// 是否有语音0-没有,1-有
Integer hasVoice = Integer.valueOf(params.get("hasVoice").toString());
MallMemberUser memberUser = mallMemberUserService.selectMallMemberUserById(userId);
if (memberUser == null) {
return AjaxResult.error("用户信息异常!!!");
}
String question = params.get("question").toString();
//通过参数获取一个Message
Message message = new Message("user",question);
// 创建存储用saveMessage
SaveMessage saveMessage = new SaveMessage();
saveMessage.setRole("user");
saveMessage.setContent(question);
saveMessage.setHasVoice(hasVoice);
if (hasVoice == 1){
saveMessage.setVoiceUrl(params.get("voiceUrl").toString());
}
//请求参数
ChatRequestMessage requestBody = new ChatRequestMessage();
// 创建存储类
SaveChatRequestMessage saveChatRequestMessage = new SaveChatRequestMessage();
// 查询是否有记录
if(redisTemplate.hasKey("ChatWith" + memberUser.getId())){
String json = redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).get().toString();
//System.out.println("json:"+json);
//requestBody = JSONUtil.toBean(json, ChatRequestMessage.class);
saveChatRequestMessage = JSONUtil.toBean(json, SaveChatRequestMessage.class);
// 记录信息复制到请求参数中
BeanUtil.copyProperties(saveChatRequestMessage, requestBody);
List<SaveMessage> saveMessageList = saveChatRequestMessage.getSaveMessageList();
ArrayList<Message> list = new ArrayList<>();
if (!saveMessageList.isEmpty()){
for (SaveMessage saveMessageHistory : saveMessageList) {
Message m = BeanUtil.copyProperties(saveMessageHistory, Message.class);
list.add(m);
}
requestBody.setMessages(list);
}
}
//将新的问题添加到消息上下文
requestBody.addMessage(message);
// 新信息添加保存
saveChatRequestMessage.addSaveMessage(saveMessage);
String jsonStr = JSONUtil.toJsonStr(requestBody);
//System.out.println("jsonStr:"+jsonStr);
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, jsonStr);
Request request = new Request.Builder()
.url(CHAT_URI+"?access_token="+getQianFanAccessToken())
.method("POST", body)
.addHeader("Content-Type", "application/json")
.build();
try{
//logger.info("千帆AccessToken:{}",getQianFanAccessToken());
Response response = client.newCall(request).execute();
String responseJsonStr = response.body().string();
logger.info("发送一次请求,询问问题:{}",question);
ChatResponseMessage responseMessage = JSONUtil.toBean(responseJsonStr, ChatResponseMessage.class);
System.out.println("返回的响应结果为:"+responseJsonStr);
String result = responseMessage.getResult();
String answer = result.replaceAll("\n+", "\n");
logger.info("{}",answer);
Message assistant = new Message("assistant", answer);
requestBody.addMessage(assistant);
// 存储信息
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<SaveMessage> newChat = new ArrayList<>();
newChat.add(saveMessage);
newChat.add(saveAnswer);
return AjaxResult.success(newChat);
}catch (Exception e){
e.printStackTrace();
return AjaxResult.error("对话失败!");
}
}
/**对话历史-近到远—分页
*
* @param userId 当前对话用户id
* @return
*/
@GetMapping("/getChatHistory")
public AjaxResult getChatHistory(@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize,
@NotNull(message = "Chat.getChatHistory.userId.isNull") Long userId){
try {
MallMemberUser memberUser = mallMemberUserService.selectMallMemberUserById(userId);
if (memberUser == null) {
return AjaxResult.error("用户信息异常!!!");
}
SaveChatRequestMessage requestBody = new SaveChatRequestMessage();
List<SaveMessage> history = new ArrayList<>();
//有历史消息
if(redisTemplate.hasKey("ChatWith" + memberUser.getId())){
String json = redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).get().toString();
System.out.println("json:"+json);
requestBody = JSONUtil.toBean(json, SaveChatRequestMessage.class);
if(null != requestBody.getSaveMessageList() && requestBody.getSaveMessageList().size()>0){
history = requestBody.getSaveMessageList();
Collections.reverse(history);
}
}
//Page page = new Page<>(pageNum,pageSize);
////为Page类中的total属性赋值
//int total = history.size();
//page.setTotal(total);
////计算当前需要显示的数据下标起始值
//int startIndex = (pageNum - 1) * pageSize;
//int endIndex = Math.min(startIndex + pageSize,total);
////从链表中截取需要显示的子链表,并加入到Page
//page.addAll(history.subList(startIndex,endIndex));
////以Page创建PageInfo
//PageInfo pageInfo = new PageInfo<>(page);
//return AjaxResult.success().put("data",pageInfo);
//java8 stream实现list分页
List<SaveMessage> pageList = history.stream().sorted().skip((pageNum - 1) * pageSize)
.limit(pageSize)
.collect(Collectors.toList());
PageInfo<SaveMessage> pageInfo = new PageInfo<SaveMessage>(pageList);
//获取PageInfo其他参数
pageInfo.setTotal(history.size());
int endRow = pageInfo.getEndRow() == 0 ? 0 : (int)((pageNum - 1) * pageSize + pageInfo.getEndRow() + 1);
pageInfo.setEndRow(endRow);
boolean hasNextPage = history.size() <= pageSize * pageNum ? false : true;
pageInfo.setHasNextPage(hasNextPage);
boolean hasPreviousPage = pageNum == 1 ? false : true;
pageInfo.setHasPreviousPage(hasPreviousPage);
pageInfo.setIsFirstPage(!hasPreviousPage);
boolean isLastPage = (history.size() > pageSize * (pageNum - 1) && history.size() <= pageSize * pageNum) ? true : false;
pageInfo.setIsLastPage(isLastPage);
int pages = history.size() % pageSize == 0 ? history.size() / pageSize : (history.size() / pageSize) + 1;
pageInfo.setNavigateLastPage(pages);
int[] navigatePageNums = new int[pages];
for (int i = 1; i < pages; i++) {
navigatePageNums[i - 1] = i;
}
pageInfo.setNavigatepageNums(navigatePageNums);
int nextPage = pageNum < pages ? pageNum + 1 : 0;
pageInfo.setNextPage(nextPage);
pageInfo.setPageNum(pageNum);
pageInfo.setPageSize(pageSize);
pageInfo.setPages(pages);
pageInfo.setPrePage(pageNum - 1);
pageInfo.setSize(pageInfo.getList().size());
int starRow = history.size() < pageSize * pageNum ? 1 + pageSize * (pageNum - 1) : 0;
pageInfo.setStartRow(starRow);
return AjaxResult.success().put("data", pageInfo);
}catch (Exception e){
return AjaxResult.error("获取对话历史异常!");
}
}
/** 最后一页页数
*
* @param pageNum
* @param pageSize
* @param userId
* @return
*/
@GetMapping("/getLastNum")
public AjaxResult getLastNum(@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize,
@NotNull(message = "Chat.getChatHistory.userId.isNull") Long userId){
try {
MallMemberUser memberUser = mallMemberUserService.selectMallMemberUserById(userId);
if (memberUser == null) {
return AjaxResult.error("用户信息异常!!!");
}
SaveChatRequestMessage requestBody = new SaveChatRequestMessage();
List<SaveMessage> history = new ArrayList<>();
//有历史消息
if(redisTemplate.hasKey("ChatWith" + memberUser.getId())){
String json = redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).get().toString();
System.out.println("json:"+json);
requestBody = JSONUtil.toBean(json, SaveChatRequestMessage.class);
if(null != requestBody.getSaveMessageList() && requestBody.getSaveMessageList().size()>0){
history = requestBody.getSaveMessageList();
}
int total = history.size();
int num = total/pageSize;
int remain = total%pageSize;
if(num == 0 && remain > 0){
return AjaxResult.success().put("lastPage",1);
} else if(num > 0 && remain > 0) {
return AjaxResult.success().put("lastPage",num+1);
}else if(num > 0 && remain == 0) {
return AjaxResult.success().put("lastPage",num);
}else{
return AjaxResult.success().put("lastPage",0);
}
}else{
return AjaxResult.success().put("lastPage",0);
}
}catch (Exception e){
return AjaxResult.error("获取最后页数异常!");
}
}
/**
* 调用知识库
*/
@PostMapping("/chatNew")
@org.springframework.web.bind.annotation.ResponseBody
public AjaxResult newChat(@org.springframework.web.bind.annotation.RequestBody Map<String, Object> params){
//对用户问题的判断
if (!params.containsKey("question") || StringUtils.isEmpty(params.get("question").toString())) {
return AjaxResult.error("缺少问题");
}
if (!params.containsKey("userId") || StringUtils.isEmpty(params.get("userId").toString())) {
return AjaxResult.error("缺少用户id");
}
if (!params.containsKey("hasVoice") || ObjectUtils.isEmpty(Integer.valueOf(params.get("hasVoice").toString()))){
return AjaxResult.error("缺少语音状态");
}
long userId = Long.parseLong(params.get("userId").toString());
// 是否有语音0-没有,1-有
Integer hasVoice = Integer.valueOf(params.get("hasVoice").toString());
MallMemberUser memberUser = mallMemberUserService.selectMallMemberUserById(userId);
if (memberUser == null) {
return AjaxResult.error("用户信息异常!!!");
}
String question = params.get("question").toString();
//通过参数获取一个Message
Message message = new Message("user",question);
// 创建存储用saveMessage
SaveMessage saveMessage = new SaveMessage();
saveMessage.setRole("user");
saveMessage.setContent(question);
saveMessage.setHasVoice(hasVoice);
if (hasVoice == 1){
saveMessage.setVoiceUrl(params.get("voiceUrl").toString());
}
com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject();
jsonObject.put("query", question);
List<String> plugins = new ArrayList<>();
plugins.add("uuid-zhishiku");
//plugins.add("uuid-weatherforecast");
//jsonObject.put("plugins", plugins);
//jsonObject.put("verbose", false);
// 创建存储类
SaveChatRequestMessage saveChatRequestMessage = new SaveChatRequestMessage();
ArrayList<Message> historyList = new ArrayList<>();
// 查询是否有记录
if(redisTemplate.hasKey("ChatWith" + memberUser.getId())){
String json = redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).get().toString();
saveChatRequestMessage = JSONUtil.toBean(json, SaveChatRequestMessage.class);
// 记录信息复制到请求参数中
List<SaveMessage> saveMessageList = saveChatRequestMessage.getSaveMessageList();
if (!saveMessageList.isEmpty()){
List<SaveMessage> shortList = new ArrayList<>();
int size = saveMessageList.size();
if ( size >= 2){
shortList.add(saveMessageList.get(size - 2));
shortList.add(saveMessageList.get(size - 1));
for (SaveMessage saveMessageHistory : shortList) {
Message m = BeanUtil.copyProperties(saveMessageHistory, Message.class);
historyList.add(m);
}
}
}
}
//将新的问题添加到消息上下文
//jsonObject.put("history", historyList);
// 新信息添加保存
saveChatRequestMessage.addSaveMessage(saveMessage);
String jsonStr = jsonObject.toJSONString();
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())
.build();
try{
logger.info("千帆AccessToken:{}",getQianFanAccessToken());
Response response = client.newCall(request).execute();
String responseJsonStr = response.body().string();
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);
}else{
redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).set(JSONUtil.toJsonStr(saveChatRequestMessage), 30, TimeUnit.DAYS);
}
logger.info("存入redis:" +redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).get().toString());
List<SaveMessage> newChat = new ArrayList<>();
newChat.add(saveMessage);
newChat.add(saveAnswer);
return AjaxResult.success(newChat);
}else{
logger.error("对话返回结果为空");
return AjaxResult.error("对话失败!");
}
}catch (Exception e){
e.printStackTrace();
return AjaxResult.error("对话失败!");
}
}
}
// package com.ruoyi.web.controller.api;
//
// import cn.hutool.core.bean.BeanUtil;
// import cn.hutool.json.JSONObject;
// import cn.hutool.json.JSONUtil;
// import com.github.pagehelper.PageInfo;
// import com.ruoyi.common.core.domain.AjaxResult;
// import com.ruoyi.common.utils.StringUtils;
// import com.ruoyi.mall.domain.Bo.SaveChatRequestMessage;
// import com.ruoyi.mall.domain.Bo.SaveMessage;
// import com.ruoyi.mall.domain.Chat.ChatRequestMessage;
// import com.ruoyi.mall.domain.Chat.ChatResponseMessage;
// import com.ruoyi.mall.domain.Chat.Message;
// import com.ruoyi.mall.domain.MallMemberUser;
// import com.ruoyi.mall.service.IMallMemberUserService;
// import okhttp3.*;
// import okhttp3.RequestBody;
// import org.apache.commons.lang3.ObjectUtils;
// import org.slf4j.Logger;
// import org.slf4j.LoggerFactory;
// import org.springframework.data.redis.core.RedisTemplate;
// import org.springframework.web.bind.annotation.*;
//
// import javax.annotation.Resource;
// import javax.validation.constraints.NotNull;
// import java.io.IOException;
// import java.util.*;
// import java.util.concurrent.TimeUnit;
// import java.util.stream.Collectors;
//
// /**
// * @ClassName 智能对话接口
// * @Description 智能对话接口
// * @Author LHY
// * @Date 2023/10/18
// * @Version 1.0
// **/
// @RestController
// @RequestMapping("/api/chat")
// public class ApiChatController {
//
// private final Logger logger = LoggerFactory.getLogger(this.getClass());
//
// @Resource
// private RedisTemplate redisTemplate;
//
// @Resource
// private IMallMemberUserService mallMemberUserService;
// //读取超时为60s
// private static final long READ_TIMEOUT = 60000;
// //写入超时为60s
// private static final long WRITE_TIMEOUT = 60000;
// //连接超时为60s
// private static final long CONNECT_TIMEOUT = 60000;
//
// private OkHttpClient.Builder builder = new OkHttpClient.Builder()
// .readTimeout(READ_TIMEOUT, TimeUnit.MILLISECONDS)
// .writeTimeout(WRITE_TIMEOUT, TimeUnit.MILLISECONDS)
// .connectTimeout(CONNECT_TIMEOUT, TimeUnit.MILLISECONDS);
//
//
// private OkHttpClient client = builder.build();
// private final String ACCESS_TOKEN_URI = "https://aip.baidubce.com/oauth/2.0/token";
// // private final String CHAT_URI = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions";
// private final String CHAT_URI = "https://aip.baidubce.com/rpc/2.0/ai_custom/v2/wenxinworkshop/chat/completions";
//
// private String apiKey = "hco0U4TGdVpA73F5mGBZliai";
// private String secretKey = "kBwPxP7PxRy5fTtIalW81GN7A3LFBrEN";
//
//
// //响应超时时间
// private int responseTimeOut = 5000;
//
//
// /**
// * 删除旧token
// *
// * @return
// */
// @GetMapping("/delQFAccessToken")
// public AjaxResult delQFAccessToken(){
// try {
// // 删除原来的token
// redisTemplate.delete("qianFanAccessToken");
// return AjaxResult.success("删除token成功");
// }catch (Exception e){
// return AjaxResult.error("获取AccessToken异常!");
// }
// }
//
//
// /**
// * 获取千帆AccessToken
// *
// * @return
// */
// @GetMapping("/getQFAccessToken")
// public AjaxResult getAccessToken(){
// try {
// String token = getQianFanAccessToken();
// return AjaxResult.success(token);
// }catch (Exception e){
// return AjaxResult.error("获取AccessToken异常!");
// }
// }
//
//
//
// /**
// * 从缓存中拿到千帆AccessToken
// *
// * @return
// */
// private String getQianFanAccessToken() {
// String qianFanAccessToken = new String();
// if(null == redisTemplate.boundValueOps("qianFanAccessToken").get()){
// MediaType mediaType = MediaType.parse("application/json");
// // MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
// RequestBody body = RequestBody.create(mediaType, "");
// //创建一个请求
// Request request = new Request.Builder()
// .url(ACCESS_TOKEN_URI+"?client_id=" + apiKey + "&client_secret=" + secretKey + "&grant_type=client_credentials")
// .method("POST",body)
// .addHeader("Content-Type", "application/json")
// .addHeader("Accept", "application/json")
// // .addHeader("Content-Type", "application/x-www-form-urlencoded")
// .build();
// try {
// //使用浏览器对象发起请求
// Response response = client.newCall(request).execute();
// //只能执行一次response.body().string()。下次再执行会抛出流关闭异常,因此需要一个对象存储返回结果
// String responseMessage = response.body().string();
// logger.info("获取accessToken成功");
// JSONObject jsonObject = JSONUtil.parseObj(responseMessage);
// String accessToken = (String) jsonObject.get("access_token");
// redisTemplate.boundValueOps("qianFanAccessToken").set(accessToken, 30, TimeUnit.DAYS);
//
// qianFanAccessToken = (String) redisTemplate.boundValueOps("qianFanAccessToken").get();
// } catch (Exception e) {
// e.printStackTrace();
// }
// }else{
// qianFanAccessToken = (String) redisTemplate.boundValueOps("qianFanAccessToken").get();
// }
// return qianFanAccessToken;
// }
//
// /**对话
// *
// * @param params
// * @return
// * @throws IOException
// */
// @PostMapping("/createPicture")
// @org.springframework.web.bind.annotation.ResponseBody
// public AjaxResult chat(@org.springframework.web.bind.annotation.RequestBody Map<String, Object> params) throws IOException {
// //对用户问题的判断
// if (!params.containsKey("question") || StringUtils.isEmpty(params.get("question").toString())) {
// return AjaxResult.error("缺少问题");
// }
// if (!params.containsKey("userId") || StringUtils.isEmpty(params.get("userId").toString())) {
// return AjaxResult.error("缺少用户id");
// }
// long userId = Long.parseLong(params.get("userId").toString());
//
// MallMemberUser memberUser = mallMemberUserService.selectMallMemberUserById(userId);
// if (memberUser == null) {
// return AjaxResult.error("用户信息异常!!!");
// }
//
// String question = params.get("question").toString();
// //通过参数获取一个Message
// Message message = new Message("user",question);
// //请求参数
// ChatRequestMessage requestBody = new ChatRequestMessage();
// if(redisTemplate.hasKey("ChatWith" + memberUser.getId())){
// String json = redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).get().toString();
// //System.out.println("json:"+json);
// requestBody = JSONUtil.toBean(json, ChatRequestMessage.class);
// }
// //将新的问题添加到消息上下文
// requestBody.addMessage(message);
// String jsonStr = JSONUtil.toJsonStr(requestBody);
// //System.out.println("jsonStr:"+jsonStr);
// MediaType mediaType = MediaType.parse("application/json");
// RequestBody body = RequestBody.create(mediaType, jsonStr);
// Request request = new Request.Builder()
// .url(CHAT_URI+"?access_token="+getQianFanAccessToken())
// .method("POST", body)
// .addHeader("Content-Type", "application/json")
// .build();
// try{
// //logger.info("千帆AccessToken:{}",getQianFanAccessToken());
// Response response = client.newCall(request).execute();
// String responseJsonStr = response.body().string();
// logger.info("发送一次请求,询问问题:{}",question);
// ChatResponseMessage responseMessage = JSONUtil.toBean(responseJsonStr, ChatResponseMessage.class);
// System.out.println("返回的响应结果为:"+responseJsonStr);
// String result = responseMessage.getResult();
// String answer = result.replaceAll("\n+", "\n");
// logger.info("{}",answer);
// Message assistant = new Message("assistant", answer);
// requestBody.addMessage(assistant);
// //redis 存储
// if(redisTemplate.hasKey("ChatWith" + memberUser.getId())){
// Long expire = redisTemplate.getExpire("ChatWith" + memberUser.getId());
// redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).set(JSONUtil.toJsonStr(requestBody), 30, TimeUnit.DAYS);
// }else{
// redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).set(JSONUtil.toJsonStr(requestBody), 30, TimeUnit.DAYS);
// }
// logger.info("存入redis:" +redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).get().toString());
// return AjaxResult.success(requestBody);
// }catch (Exception e){
// e.printStackTrace();
// return AjaxResult.error("对话失败!");
// }
//
// }
//
// /**对话 只返回最新内容
// *
// * @param params
// * @return
// * @throws IOException
// */
// @PostMapping("/newChat")
// @org.springframework.web.bind.annotation.ResponseBody
// public AjaxResult chatNew(@org.springframework.web.bind.annotation.RequestBody Map<String, Object> params) throws IOException {
// //对用户问题的判断
// if (!params.containsKey("question") || StringUtils.isEmpty(params.get("question").toString())) {
// return AjaxResult.error("缺少问题");
// }
// if (!params.containsKey("userId") || StringUtils.isEmpty(params.get("userId").toString())) {
// return AjaxResult.error("缺少用户id");
// }
// if (!params.containsKey("hasVoice") || ObjectUtils.isEmpty(Integer.valueOf(params.get("hasVoice").toString()))){
// return AjaxResult.error("缺少语音状态");
// }
// long userId = Long.parseLong(params.get("userId").toString());
// // 是否有语音0-没有,1-有
// Integer hasVoice = Integer.valueOf(params.get("hasVoice").toString());
//
// MallMemberUser memberUser = mallMemberUserService.selectMallMemberUserById(userId);
// if (memberUser == null) {
// return AjaxResult.error("用户信息异常!!!");
// }
//
// String question = params.get("question").toString();
// //通过参数获取一个Message
// Message message = new Message("user",question);
// // 创建存储用saveMessage
// SaveMessage saveMessage = new SaveMessage();
// saveMessage.setRole("user");
// saveMessage.setContent(question);
// saveMessage.setHasVoice(hasVoice);
// if (hasVoice == 1){
// saveMessage.setVoiceUrl(params.get("voiceUrl").toString());
// }
// //请求参数
// ChatRequestMessage requestBody = new ChatRequestMessage();
// // 创建存储类
// SaveChatRequestMessage saveChatRequestMessage = new SaveChatRequestMessage();
//
// // 查询是否有记录
// if(redisTemplate.hasKey("ChatWith" + memberUser.getId())){
// String json = redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).get().toString();
// //System.out.println("json:"+json);
// //requestBody = JSONUtil.toBean(json, ChatRequestMessage.class);
// saveChatRequestMessage = JSONUtil.toBean(json, SaveChatRequestMessage.class);
// // 记录信息复制到请求参数中
// BeanUtil.copyProperties(saveChatRequestMessage, requestBody);
// List<SaveMessage> saveMessageList = saveChatRequestMessage.getSaveMessageList();
// ArrayList<Message> list = new ArrayList<>();
// if (!saveMessageList.isEmpty()){
// for (SaveMessage saveMessageHistory : saveMessageList) {
// Message m = BeanUtil.copyProperties(saveMessageHistory, Message.class);
// list.add(m);
// }
// requestBody.setMessages(list);
// }
// }
// //将新的问题添加到消息上下文
// requestBody.addMessage(message);
// // 新信息添加保存
// saveChatRequestMessage.addSaveMessage(saveMessage);
//
// String jsonStr = JSONUtil.toJsonStr(requestBody);
// //System.out.println("jsonStr:"+jsonStr);
// MediaType mediaType = MediaType.parse("application/json");
// RequestBody body = RequestBody.create(mediaType, jsonStr);
// Request request = new Request.Builder()
// .url(CHAT_URI+"?access_token="+getQianFanAccessToken())
// .method("POST", body)
// .addHeader("Content-Type", "application/json")
// .build();
// try{
// //logger.info("千帆AccessToken:{}",getQianFanAccessToken());
// Response response = client.newCall(request).execute();
// String responseJsonStr = response.body().string();
// logger.info("发送一次请求,询问问题:{}",question);
// ChatResponseMessage responseMessage = JSONUtil.toBean(responseJsonStr, ChatResponseMessage.class);
// System.out.println("返回的响应结果为:"+responseJsonStr);
// String result = responseMessage.getResult();
// String answer = result.replaceAll("\n+", "\n");
// logger.info("{}",answer);
// Message assistant = new Message("assistant", answer);
// requestBody.addMessage(assistant);
//
// // 存储信息
// 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<SaveMessage> newChat = new ArrayList<>();
// newChat.add(saveMessage);
// newChat.add(saveAnswer);
// return AjaxResult.success(newChat);
// }catch (Exception e){
// e.printStackTrace();
// return AjaxResult.error("对话失败!");
// }
//
// }
//
// /**对话历史-近到远—分页
// *
// * @param userId 当前对话用户id
// * @return
// */
// @GetMapping("/getChatHistory")
// public AjaxResult getChatHistory(@RequestParam(defaultValue = "1") Integer pageNum,
// @RequestParam(defaultValue = "10") Integer pageSize,
// @NotNull(message = "Chat.getChatHistory.userId.isNull") Long userId){
// try {
// MallMemberUser memberUser = mallMemberUserService.selectMallMemberUserById(userId);
// if (memberUser == null) {
// return AjaxResult.error("用户信息异常!!!");
// }
// SaveChatRequestMessage requestBody = new SaveChatRequestMessage();
// List<SaveMessage> history = new ArrayList<>();
// //有历史消息
// if(redisTemplate.hasKey("ChatWith" + memberUser.getId())){
// String json = redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).get().toString();
// System.out.println("json:"+json);
// requestBody = JSONUtil.toBean(json, SaveChatRequestMessage.class);
// if(null != requestBody.getSaveMessageList() && requestBody.getSaveMessageList().size()>0){
// history = requestBody.getSaveMessageList();
// Collections.reverse(history);
// }
// }
//
// //Page page = new Page<>(pageNum,pageSize);
// ////为Page类中的total属性赋值
// //int total = history.size();
// //page.setTotal(total);
// ////计算当前需要显示的数据下标起始值
// //int startIndex = (pageNum - 1) * pageSize;
// //int endIndex = Math.min(startIndex + pageSize,total);
// ////从链表中截取需要显示的子链表,并加入到Page
// //page.addAll(history.subList(startIndex,endIndex));
// ////以Page创建PageInfo
// //PageInfo pageInfo = new PageInfo<>(page);
// //return AjaxResult.success().put("data",pageInfo);
//
// //java8 stream实现list分页
//
// List<SaveMessage> pageList = history.stream().sorted().skip((pageNum - 1) * pageSize)
// .limit(pageSize)
// .collect(Collectors.toList());
// PageInfo<SaveMessage> pageInfo = new PageInfo<SaveMessage>(pageList);
// //获取PageInfo其他参数
// pageInfo.setTotal(history.size());
//
// int endRow = pageInfo.getEndRow() == 0 ? 0 : (int)((pageNum - 1) * pageSize + pageInfo.getEndRow() + 1);
// pageInfo.setEndRow(endRow);
// boolean hasNextPage = history.size() <= pageSize * pageNum ? false : true;
// pageInfo.setHasNextPage(hasNextPage);
// boolean hasPreviousPage = pageNum == 1 ? false : true;
// pageInfo.setHasPreviousPage(hasPreviousPage);
// pageInfo.setIsFirstPage(!hasPreviousPage);
// boolean isLastPage = (history.size() > pageSize * (pageNum - 1) && history.size() <= pageSize * pageNum) ? true : false;
// pageInfo.setIsLastPage(isLastPage);
// int pages = history.size() % pageSize == 0 ? history.size() / pageSize : (history.size() / pageSize) + 1;
// pageInfo.setNavigateLastPage(pages);
// int[] navigatePageNums = new int[pages];
// for (int i = 1; i < pages; i++) {
// navigatePageNums[i - 1] = i;
// }
// pageInfo.setNavigatepageNums(navigatePageNums);
// int nextPage = pageNum < pages ? pageNum + 1 : 0;
// pageInfo.setNextPage(nextPage);
// pageInfo.setPageNum(pageNum);
// pageInfo.setPageSize(pageSize);
// pageInfo.setPages(pages);
// pageInfo.setPrePage(pageNum - 1);
// pageInfo.setSize(pageInfo.getList().size());
// int starRow = history.size() < pageSize * pageNum ? 1 + pageSize * (pageNum - 1) : 0;
// pageInfo.setStartRow(starRow);
// return AjaxResult.success().put("data", pageInfo);
//
// }catch (Exception e){
// return AjaxResult.error("获取对话历史异常!");
// }
// }
//
// /** 最后一页页数
// *
// * @param pageNum
// * @param pageSize
// * @param userId
// * @return
// */
// @GetMapping("/getLastNum")
// public AjaxResult getLastNum(@RequestParam(defaultValue = "1") Integer pageNum,
// @RequestParam(defaultValue = "10") Integer pageSize,
// @NotNull(message = "Chat.getChatHistory.userId.isNull") Long userId){
// try {
// MallMemberUser memberUser = mallMemberUserService.selectMallMemberUserById(userId);
// if (memberUser == null) {
// return AjaxResult.error("用户信息异常!!!");
// }
// SaveChatRequestMessage requestBody = new SaveChatRequestMessage();
// List<SaveMessage> history = new ArrayList<>();
// //有历史消息
// if(redisTemplate.hasKey("ChatWith" + memberUser.getId())){
// String json = redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).get().toString();
// System.out.println("json:"+json);
// requestBody = JSONUtil.toBean(json, SaveChatRequestMessage.class);
// if(null != requestBody.getSaveMessageList() && requestBody.getSaveMessageList().size()>0){
// history = requestBody.getSaveMessageList();
// }
// int total = history.size();
// int num = total/pageSize;
// int remain = total%pageSize;
// if(num == 0 && remain > 0){
// return AjaxResult.success().put("lastPage",1);
// } else if(num > 0 && remain > 0) {
// return AjaxResult.success().put("lastPage",num+1);
// }else if(num > 0 && remain == 0) {
// return AjaxResult.success().put("lastPage",num);
// }else{
// return AjaxResult.success().put("lastPage",0);
// }
// }else{
// return AjaxResult.success().put("lastPage",0);
// }
//
//
// }catch (Exception e){
// return AjaxResult.error("获取最后页数异常!");
// }
// }
//
//
// /**
// * 调用知识库
// */
// @PostMapping("/chatNew")
// @org.springframework.web.bind.annotation.ResponseBody
// public AjaxResult newChat(@org.springframework.web.bind.annotation.RequestBody Map<String, Object> params){
// //对用户问题的判断
// if (!params.containsKey("question") || StringUtils.isEmpty(params.get("question").toString())) {
// return AjaxResult.error("缺少问题");
// }
// if (!params.containsKey("userId") || StringUtils.isEmpty(params.get("userId").toString())) {
// return AjaxResult.error("缺少用户id");
// }
// if (!params.containsKey("hasVoice") || ObjectUtils.isEmpty(Integer.valueOf(params.get("hasVoice").toString()))){
// return AjaxResult.error("缺少语音状态");
// }
// long userId = Long.parseLong(params.get("userId").toString());
// // 是否有语音0-没有,1-有
// Integer hasVoice = Integer.valueOf(params.get("hasVoice").toString());
//
// MallMemberUser memberUser = mallMemberUserService.selectMallMemberUserById(userId);
// if (memberUser == null) {
// return AjaxResult.error("用户信息异常!!!");
// }
//
// String question = params.get("question").toString();
// //通过参数获取一个Message
// Message message = new Message("user",question);
// // 创建存储用saveMessage
// SaveMessage saveMessage = new SaveMessage();
// saveMessage.setRole("user");
// saveMessage.setContent(question);
// saveMessage.setHasVoice(hasVoice);
// if (hasVoice == 1){
// saveMessage.setVoiceUrl(params.get("voiceUrl").toString());
// }
//
// com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject();
// jsonObject.put("query", question);
// List<String> plugins = new ArrayList<>();
// plugins.add("uuid-zhishiku");
// //plugins.add("uuid-weatherforecast");
// //jsonObject.put("plugins", plugins);
// //jsonObject.put("verbose", false);
//
//
// // 创建存储类
// SaveChatRequestMessage saveChatRequestMessage = new SaveChatRequestMessage();
// ArrayList<Message> historyList = new ArrayList<>();
// // 查询是否有记录
// if(redisTemplate.hasKey("ChatWith" + memberUser.getId())){
// String json = redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).get().toString();
// saveChatRequestMessage = JSONUtil.toBean(json, SaveChatRequestMessage.class);
// // 记录信息复制到请求参数中
// List<SaveMessage> saveMessageList = saveChatRequestMessage.getSaveMessageList();
//
// if (!saveMessageList.isEmpty()){
// List<SaveMessage> shortList = new ArrayList<>();
// int size = saveMessageList.size();
// if ( size >= 2){
// shortList.add(saveMessageList.get(size - 2));
// shortList.add(saveMessageList.get(size - 1));
// for (SaveMessage saveMessageHistory : shortList) {
// Message m = BeanUtil.copyProperties(saveMessageHistory, Message.class);
// historyList.add(m);
// }
// }
//
// }
// }
// //将新的问题添加到消息上下文
// //jsonObject.put("history", historyList);
// // 新信息添加保存
// saveChatRequestMessage.addSaveMessage(saveMessage);
//
// String jsonStr = jsonObject.toJSONString();
// 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())
// .build();
// try{
// logger.info("千帆AccessToken:{}",getQianFanAccessToken());
// Response response = client.newCall(request).execute();
// String responseJsonStr = response.body().string();
//
// 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);
// }else{
// redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).set(JSONUtil.toJsonStr(saveChatRequestMessage), 30, TimeUnit.DAYS);
// }
// logger.info("存入redis:" +redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).get().toString());
// List<SaveMessage> newChat = new ArrayList<>();
// newChat.add(saveMessage);
// newChat.add(saveAnswer);
//
// return AjaxResult.success(newChat);
// }else{
// logger.error("对话返回结果为空");
// return AjaxResult.error("对话失败!");
// }
//
// }catch (Exception e){
// e.printStackTrace();
// return AjaxResult.error("对话失败!");
// }
//
// }
//
// }
package com.ruoyi.web.controller.api;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.pagehelper.PageInfo;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.mall.domain.Bo.SaveChatRequestMessage;
import com.ruoyi.mall.domain.Bo.SaveMessage;
import com.ruoyi.mall.domain.Chat.*;
import com.ruoyi.mall.domain.MallMemberUser;
import com.ruoyi.mall.service.IMallMemberUserService;
import okhttp3.RequestBody;
import okhttp3.*;
import org.apache.commons.lang3.ObjectUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.constraints.NotNull;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
* @ClassName 智能对话接口
* @Description 智能对话接口
* @Author LHY
* @Date 2023/10/18
* @Version 1.0
**/
@RestController
@RequestMapping("/api/chat")
public class ApiChatNewController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Resource
private RedisTemplate redisTemplate;
@Resource
private IMallMemberUserService mallMemberUserService;
@Value("${baidu.appId}")
private String APP_ID;
@Value("${baidu.appKey}")
private String APP_KEY;
// 读取超时为60s
private static final long READ_TIMEOUT = 60000;
// 写入超时为60s
private static final long WRITE_TIMEOUT = 60000;
// 连接超时为60s
private static final long CONNECT_TIMEOUT = 60000;
private static final long CALL_TIMEOUT = 60000;
private static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder()
// 设置调用超时时间
.callTimeout(CALL_TIMEOUT, TimeUnit.MILLISECONDS)
// 设置读取超时时间
.readTimeout(READ_TIMEOUT, TimeUnit.MILLISECONDS)
// 设置写超时时间
.writeTimeout(WRITE_TIMEOUT, TimeUnit.MILLISECONDS)
// 设置连接超时时间
.connectTimeout(CONNECT_TIMEOUT, TimeUnit.MILLISECONDS)
.build();
private static final ObjectMapper objectMapper = new ObjectMapper();
// 本次对话ID
private String conversation_id;
/**对话历史-近到远—分页
*
* @param userId 当前对话用户id
* @return
*/
@GetMapping("/getChatHistory")
public AjaxResult getChatHistory(@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize,
@NotNull(message = "Chat.getChatHistory.userId.isNull") Long userId){
try {
MallMemberUser memberUser = mallMemberUserService.selectMallMemberUserById(userId);
if (memberUser == null) {
return AjaxResult.error("用户信息异常!!!");
}
SaveChatRequestMessage requestBody = new SaveChatRequestMessage();
List<SaveMessage> history = new ArrayList<>();
//有历史消息
if(redisTemplate.hasKey("ChatWith" + memberUser.getId())){
String json = redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).get().toString();
System.out.println("json:"+json);
requestBody = JSONUtil.toBean(json, SaveChatRequestMessage.class);
if(null != requestBody.getSaveMessageList() && requestBody.getSaveMessageList().size()>0){
history = requestBody.getSaveMessageList();
Collections.reverse(history);
}
}
List<SaveMessage> pageList = history.stream().sorted().skip((pageNum - 1) * pageSize)
.limit(pageSize)
.collect(Collectors.toList());
PageInfo<SaveMessage> pageInfo = new PageInfo<SaveMessage>(pageList);
//获取PageInfo其他参数
pageInfo.setTotal(history.size());
int endRow = pageInfo.getEndRow() == 0 ? 0 : (int)((pageNum - 1) * pageSize + pageInfo.getEndRow() + 1);
pageInfo.setEndRow(endRow);
boolean hasNextPage = history.size() <= pageSize * pageNum ? false : true;
pageInfo.setHasNextPage(hasNextPage);
boolean hasPreviousPage = pageNum == 1 ? false : true;
pageInfo.setHasPreviousPage(hasPreviousPage);
pageInfo.setIsFirstPage(!hasPreviousPage);
boolean isLastPage = (history.size() > pageSize * (pageNum - 1) && history.size() <= pageSize * pageNum) ? true : false;
pageInfo.setIsLastPage(isLastPage);
int pages = history.size() % pageSize == 0 ? history.size() / pageSize : (history.size() / pageSize) + 1;
pageInfo.setNavigateLastPage(pages);
int[] navigatePageNums = new int[pages];
for (int i = 1; i < pages; i++) {
navigatePageNums[i - 1] = i;
}
pageInfo.setNavigatepageNums(navigatePageNums);
int nextPage = pageNum < pages ? pageNum + 1 : 0;
pageInfo.setNextPage(nextPage);
pageInfo.setPageNum(pageNum);
pageInfo.setPageSize(pageSize);
pageInfo.setPages(pages);
pageInfo.setPrePage(pageNum - 1);
pageInfo.setSize(pageInfo.getList().size());
int starRow = history.size() < pageSize * pageNum ? 1 + pageSize * (pageNum - 1) : 0;
pageInfo.setStartRow(starRow);
return AjaxResult.success().put("data", pageInfo);
}catch (Exception e){
return AjaxResult.error("获取对话历史异常!");
}
}
/**
* 调用知识库
*/
@PostMapping("/chatNew")
@org.springframework.web.bind.annotation.ResponseBody
public AjaxResult newChat(@org.springframework.web.bind.annotation.RequestBody Map<String, Object> params){
//对用户问题的判断
if (!params.containsKey("question") || StringUtils.isEmpty(params.get("question").toString())) {
return AjaxResult.error("缺少问题");
}
if (!params.containsKey("userId") || StringUtils.isEmpty(params.get("userId").toString())) {
return AjaxResult.error("缺少用户id");
}
if (!params.containsKey("hasVoice") || ObjectUtils.isEmpty(Integer.valueOf(params.get("hasVoice").toString()))){
return AjaxResult.error("缺少语音状态");
}
long userId = Long.parseLong(params.get("userId").toString());
// 是否有语音0-没有,1-有
Integer hasVoice = Integer.valueOf(params.get("hasVoice").toString());
MallMemberUser memberUser = mallMemberUserService.selectMallMemberUserById(userId);
if (memberUser == null) {
return AjaxResult.error("用户信息异常!!!");
}
String question = params.get("question").toString();
// 创建存储用saveMessage
SaveMessage saveMessage = new SaveMessage();
saveMessage.setRole("user");
saveMessage.setContent(question);
saveMessage.setHasVoice(hasVoice);
if (hasVoice == 1){
saveMessage.setVoiceUrl(params.get("voiceUrl").toString());
}
com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject();
jsonObject.put("query", question);
List<String> plugins = new ArrayList<>();
plugins.add("uuid-zhishiku");
//plugins.add("uuid-weatherforecast");
//jsonObject.put("plugins", plugins);
//jsonObject.put("verbose", false);
// 创建存储类
SaveChatRequestMessage saveChatRequestMessage = new SaveChatRequestMessage();
ArrayList<Message> historyList = new ArrayList<>();
// 查询是否有记录
if(redisTemplate.hasKey("ChatWith" + memberUser.getId())){
String json = redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).get().toString();
saveChatRequestMessage = JSONUtil.toBean(json, SaveChatRequestMessage.class);
// 记录信息复制到请求参数中
List<SaveMessage> saveMessageList = saveChatRequestMessage.getSaveMessageList();
if (!saveMessageList.isEmpty()){
List<SaveMessage> shortList = new ArrayList<>();
int size = saveMessageList.size();
if ( size >= 2){
shortList.add(saveMessageList.get(size - 2));
shortList.add(saveMessageList.get(size - 1));
for (SaveMessage saveMessageHistory : shortList) {
Message m = BeanUtil.copyProperties(saveMessageHistory, Message.class);
historyList.add(m);
}
}
}
}
//将新的问题添加到消息上下文
jsonObject.put("history", historyList);
// 新信息添加保存
saveChatRequestMessage.addSaveMessage(saveMessage);
try {
BaiduAppResponse qaq = qaq(question,memberUser);
if (StringUtils.isNotBlank(qaq.getAnswer())) {
Message assistant = new Message("assistant", qaq.getAnswer());
// // 存储信息
SaveMessage saveAnswer = BeanUtil.copyProperties(assistant, SaveMessage.class);
saveAnswer.setHasVoice(hasVoice);
saveChatRequestMessage.addSaveMessage(saveAnswer);
// redis 存储
if (redisTemplate.hasKey("ChatWith" + memberUser.getId())) {
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<SaveMessage> newChat = new ArrayList<>();
newChat.add(saveMessage);
newChat.add(saveAnswer);
return AjaxResult.success(newChat);
} else {
logger.error("对话返回结果为空");
return AjaxResult.error("对话失败!");
}
} catch (Exception e) {
e.printStackTrace();
return AjaxResult.error("对话失败!");
}
}
/**
* 提问且获取消息
*/
public BaiduAppResponse qaq(String question,MallMemberUser memberUser) throws Exception {
// 没有创建回话则创建。
if (conversation_id == null || "".equals(conversation_id)) {
createConversation(memberUser.getId());
}
// 提问
logger.info("提问千帆App:" + question);
MediaType mediaType = MediaType.parse("application/json");
// 消息体
String json = objectMapper.writeValueAsString(new BaiduAppRequest(APP_ID, question, conversation_id));
RequestBody body = RequestBody.create(mediaType, json);
// 请求
Request request = new Request.Builder()
.url("https://qianfan.baidubce.com/v2/app/conversation/runs")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.addHeader("X-Appbuilder-Authorization", "Bearer " + APP_KEY)
.build();
Response response = HTTP_CLIENT.newCall(request).execute();
// 获取消息
String res = response.body().string();
logger.info("HTTP请求千帆App回复:" + res);
BaiduAppResponse baiduAppResponse = objectMapper.readValue(res, BaiduAppResponse.class);
logger.info("千帆App回复对象:" + JSONUtil.toJsonStr(baiduAppResponse));
logger.info("千帆App回复:" + baiduAppResponse.getAnswer());
return baiduAppResponse;
}
/**
* 创建和百度千帆AppBuilder的对话
*/
private void createConversation(Long userId) throws IOException {
Object object = redisTemplate.boundValueOps("conversation_id_" + userId).get();
if (ObjectUtils.isNotEmpty(object)){
conversation_id = object.toString();
}else {
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"app_id\":\"" + APP_ID + "\"}");
Request request = new Request.Builder()
.url("https://qianfan.baidubce.com/v2/app/conversation")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.addHeader("X-Appbuilder-Authorization", "Bearer " + APP_KEY)
.build();
Response response = HTTP_CLIENT.newCall(request).execute();
String res = response.body().string();
logger.info("百度千帆AppBuilder 创建对话响应:" + res);
conversation_id = objectMapper.readTree(res).get("conversation_id").asText();
}
redisTemplate.boundValueOps("conversation_id_" + userId).set(conversation_id, 1, TimeUnit.HOURS);
}
}
......@@ -6,30 +6,22 @@ import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.mall.domain.*;
import com.ruoyi.mall.domain.Bo.CheckOutReportBo;
import com.ruoyi.mall.domain.Bo.CheckingOutParamBo;
import com.ruoyi.mall.domain.MallMemberUser;
import com.ruoyi.mall.domain.MemberReportIntelligence;
import com.ruoyi.mall.domain.ReportDraft;
import com.ruoyi.mall.domain.ReportIntelligence;
import com.ruoyi.mall.domain.Vo.*;
import com.ruoyi.mall.mapper.MallAcceptPlanMapper;
import com.ruoyi.mall.mapper.MallAcceptRateSettingMapper;
import com.ruoyi.mall.mapper.MallMemberUserMapper;
import com.ruoyi.mall.mapper.MallSchoolTagMapper;
import com.ruoyi.mall.service.*;
import com.ruoyi.mall.service.impl.MallCountMethodServiceImpl;
import com.sun.org.apache.xpath.internal.operations.Bool;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.security.core.parameters.P;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/**志愿填报 自主选择*/
......@@ -136,7 +128,7 @@ public class ApiCheckingOutController {
new Thread(new Runnable() {
@Override
public void run() {
mallMemberUserService.updateRate(mallMemberUser.getId(), mallMemberUser.getCultureScore(), mallMemberUser.getMajorScore());
mallMemberUserService.updateRate(mallMemberUser.getId(), mallMemberUser.getCultureScore(), mallMemberUser.getMajorScore(), mallMemberUser.getSubjectType());
}
}).start();
}
......
......@@ -506,8 +506,8 @@ public class ApiMemberController {
if (params.containsKey("userId") && StringUtils.isNotBlank(params.get("userId").toString())) {
long userId = Long.parseLong(params.get("userId").toString());
MallMemberUser mallMemberUser = memberUserService.selectMallMemberUserById(userId);
if (mallMemberUser != null && mallMemberUser.getIndexUserId() != 0 && mallMemberUser.getIndexUserId() != null) {
MallMemberUser topUser = memberUserService.selectMallMemberUserById(mallMemberUser.getIndexUserId());
if (mallMemberUser != null && (mallMemberUser.getIntroUser() != null && mallMemberUser.getIntroUser() != 0) || (mallMemberUser.getIndexUserId() != null && mallMemberUser.getIndexUserId() > 0)) {
MallMemberUser topUser = memberUserService.selectMallMemberUserById(mallMemberUser.getIntroUser() != null ? mallMemberUser.getIntroUser() : mallMemberUser.getIndexUserId());
if (topUser != null && topUser.getIndexPrice().compareTo(new BigDecimal(0)) > 0) {
userPrice = String.valueOf(topUser.getIndexPrice());
}
......
......@@ -7,9 +7,9 @@ spring:
# 主库数据源
master:
# 本地数据源
# url: jdbc:mysql://rm-hp3340490n5mw72tcto.mysql.huhehaote.rds.aliyuncs.com:3306/yikaozhiyuan_test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
# username: yikaozhiyuan
# password: KxappNYy7dQUzuterEncvBt@Pf
# url: jdbc:mysql://localhost:3306/yikaozhiyuan_20250623?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
# username: root
# password: 123456
# 正式数据源
url: jdbc:mysql://bj-cynosdbmysql-grp-oppabofo.sql.tencentcdb.com:29687/yikaozhiyuan?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
username: root
......
......@@ -142,3 +142,7 @@ qiNiu:
secretKey: tWJjsaYPBBACuyw8CfaF9h2BRUziuje_zwrz4GyE
bucketName: xiaoniu666666
baseUrl: https://image.xnszz.com/
baidu:
appId: 3c3927bd-2722-41eb-8363-7539177f4914
appKey: bce-v3/ALTAK-ZqT2bHLCdP4vVlnMk0d0s/67e7275c383eb772c85bffb939158f19e112f49f
\ No newline at end of file
......@@ -52,7 +52,7 @@ public class ImgUpload {
if (StringUtils.isBlank(path)) {
path = "IMG";
}
return auth.uploadToken(bucketname, null, 3600, new StringMap().put("saveKey", path + "$(etag)$(ext)"));
return auth.uploadToken(bucketname, null, 3600, new StringMap().put("saveKey", "$(etag)$(ext)" + path));
}
public String upload(byte[] data, String fileType) throws IOException {
......
......@@ -178,35 +178,35 @@ public class RandomUtil extends Random {
super(seed);
}
public int[] nextInt(int n, int size) {
if (size > n) {
size = n;
}
Set set = new LinkedHashSet();
for (int i = 0; i < size; i++) {
while (true) {
Integer value = new Integer(nextInt(n));
if (!set.contains(value)) {
set.add(value);
break;
}
}
}
int[] array = new int[set.size()];
Iterator itr = set.iterator();
for (int i = 0; i < array.length; i++) {
array[i] = ((Integer)itr.next()).intValue();
}
return array;
}
// public int[] nextInt(int n, int size) {
// if (size > n) {
// size = n;
// }
//
// Set set = new LinkedHashSet();
//
// for (int i = 0; i < size; i++) {
// while (true) {
// Integer value = new Integer(nextInt(n));
//
// if (!set.contains(value)) {
// set.add(value);
//
// break;
// }
// }
// }
//
// int[] array = new int[set.size()];
//
// Iterator itr = set.iterator();
//
// for (int i = 0; i < array.length; i++) {
// array[i] = (Integer) itr.next();
// }
//
// return array;
// }
public void randomize(char[] array) {
int length = array.length;
......
package com.ruoyi.common.weixin.utils;
import cn.hutool.core.util.IdUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.redis.RedisCache;
......@@ -13,7 +14,6 @@ import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.BufferedInputStream;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
......@@ -140,13 +140,13 @@ public class WeiXinUtils {
* @return 图片链接
*/
public String getQRCode(Long memberUserId, String key){
String qrCodeUrl = "";
String resultUrl = "";
try {
//获取token
String accessToken = this.getAccessToken();
String codeUrl = "https://api.weixin.qq.com/wxa/getwxacode?access_token="+ accessToken;
String path = weiXinConfig.getWxPath()+memberUserId;
//post参数
String path = weiXinConfig.getWxPath()+memberUserId;
JSONObject jsonObject = new JSONObject();
jsonObject.put("path", path);
Map<String, Object> lineColor = new HashMap<>();
......@@ -172,14 +172,54 @@ public class WeiXinUtils {
//获取数据
BufferedInputStream bis = new BufferedInputStream(httpUrlConnection.getInputStream());
//文件上传,返回小程序码url
qrCodeUrl = new ImgUpload().streamUpload(bis, key);
resultUrl = new ImgUpload().streamUpload(bis, IdUtil.getSnowflakeNextIdStr()+"_"+key);
} catch (Exception e) {
e.printStackTrace();
}
return qrCodeUrl;
return resultUrl;
}
// public String getQRCode(Long memberUserId, String key){
// String qrCodeUrl = "";
// try {
// //获取token
// String accessToken = this.getAccessToken();
// String codeUrl = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+ accessToken;
// String path = weiXinConfig.getWxPath()+memberUserId;
// //post参数
// JSONObject jsonObject = new JSONObject();
// jsonObject.put("path", path);
// Map<String, Object> lineColor = new HashMap<>();
// lineColor.put("r", 4);
// lineColor.put("g", 157);
// lineColor.put("b", 150);
// jsonObject.put("line_color", lineColor);
// String env_version = "release";// 正式版为 "release",体验版为 "trial",开发版为 "develop"
// jsonObject.put("env_version", env_version);
// String params = jsonObject.toString();
//
// URL url = new URL(codeUrl);
// HttpURLConnection httpUrlConnection = (HttpURLConnection) url.openConnection();
// // 提交模式
// httpUrlConnection.setRequestMethod("POST");
// // 发送POST请求必须设置如下两行
// httpUrlConnection.setDoOutput(true);
// httpUrlConnection.setDoInput(true);
// // 获取URLConnection对象对应的输出流
// PrintWriter printWriter = new PrintWriter(httpUrlConnection.getOutputStream());
// printWriter.write(params);
// printWriter.flush();
// //获取数据
// BufferedInputStream bis = new BufferedInputStream(httpUrlConnection.getInputStream());
// //文件上传,返回小程序码url
// qrCodeUrl = new ImgUpload().streamUpload(bis, key);
//
// } catch (Exception e) {
// e.printStackTrace();
// }
// return qrCodeUrl;
// }
/**
* 获取不限制的小程序码
*
......
......@@ -22,7 +22,13 @@
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
package com.ruoyi.mall.domain.Bo;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import java.math.BigDecimal;
import java.util.Arrays;
/**
* 学校对象 mall_school
*
* @author lsm
* @date 2023-10-18
*/
public class MallSchoolExcelBo
{
private static final long serialVersionUID = 1L;
@Excel(name = "批次")
private String batchName;
@Excel(name = "院校代码")
private String schoolNumber;
@Excel(name = "院校名称")
private String schoolName;
@Excel(name = "专业")
private String majorName;
@Excel(name = "一级专业分类")
private String majorName1;
@Excel(name = "二级专业分类")
private String majorName2;
@Excel(name = "招生计划人数")
private String acceptNum;
@Excel(name = "录取原则")
private String ruleStr;
@Excel(name = "参考分")
private String reference;
@Excel(name = "录取最低分")
private String acceptLowest;
@Excel(name = "录取前提")
private String acceptPremise;
@Excel(name = "年份")
private String acceptYear;
@Excel(name = "文化分数线")
private String cultureLowest;
@Excel(name = "联考分数线")
private String majorLowest;
@Excel(name = "学科",readConverterExp = "0=文科,1=理科")
private String subjectType;
@Excel(name = "学费")
private String schoolPrice;
public String getBatchName() {
return batchName;
}
public void setBatchName(String batchName) {
this.batchName = batchName;
}
public String getSchoolNumber() {
return schoolNumber;
}
public void setSchoolNumber(String schoolNumber) {
this.schoolNumber = schoolNumber;
}
public String getSchoolName() {
return schoolName;
}
public void setSchoolName(String schoolName) {
this.schoolName = schoolName;
}
public String getMajorName() {
return majorName;
}
public void setMajorName(String majorName) {
this.majorName = majorName;
}
public String getMajorName1() {
return majorName1;
}
public void setMajorName1(String majorName1) {
this.majorName1 = majorName1;
}
public String getMajorName2() {
return majorName2;
}
public void setMajorName2(String majorName2) {
this.majorName2 = majorName2;
}
public String getAcceptNum() {
return acceptNum;
}
public void setAcceptNum(String acceptNum) {
this.acceptNum = acceptNum;
}
public String getRuleStr() {
return ruleStr;
}
public void setRuleStr(String ruleStr) {
this.ruleStr = ruleStr;
}
public String getReference() {
return reference;
}
public void setReference(String reference) {
this.reference = reference;
}
public String getAcceptLowest() {
return acceptLowest;
}
public void setAcceptLowest(String acceptLowest) {
this.acceptLowest = acceptLowest;
}
public String getAcceptPremise() {
return acceptPremise;
}
public void setAcceptPremise(String acceptPremise) {
this.acceptPremise = acceptPremise;
}
public String getAcceptYear() {
return acceptYear;
}
public void setAcceptYear(String acceptYear) {
this.acceptYear = acceptYear;
}
public String getCultureLowest() {
return cultureLowest;
}
public void setCultureLowest(String cultureLowest) {
this.cultureLowest = cultureLowest;
}
public String getMajorLowest() {
return majorLowest;
}
public void setMajorLowest(String majorLowest) {
this.majorLowest = majorLowest;
}
public String getSubjectType() {
return subjectType;
}
public void setSubjectType(String subjectType) {
this.subjectType = subjectType;
}
public String getSchoolPrice() {
return schoolPrice;
}
public void setSchoolPrice(String schoolPrice) {
this.schoolPrice = schoolPrice;
}
@Override
public String toString() {
return "MallSchoolExcelBo{" +
"batchName='" + batchName + '\'' +
", schoolNumber='" + schoolNumber + '\'' +
", schoolName='" + schoolName + '\'' +
", majorName='" + majorName + '\'' +
", majorName1='" + majorName1 + '\'' +
", majorName2='" + majorName2 + '\'' +
", acceptNum='" + acceptNum + '\'' +
", ruleStr='" + ruleStr + '\'' +
", reference='" + reference + '\'' +
", acceptLowest='" + acceptLowest + '\'' +
", acceptPremise='" + acceptPremise + '\'' +
", acceptYear='" + acceptYear + '\'' +
", cultureLowest='" + cultureLowest + '\'' +
", majorLowest='" + majorLowest + '\'' +
", subjectType='" + subjectType + '\'' +
", schoolPrice='" + schoolPrice + '\'' +
'}';
}
}
package com.ruoyi.mall.domain.Bo;
import com.ruoyi.common.annotation.Excel;
import sun.awt.image.PixelConverter;
import java.io.Serializable;
import java.math.BigDecimal;
......
......@@ -21,11 +21,9 @@ public class SchoolMajorLinkBO {
@Excel(name = "专业名称")
private String majorName;
@Excel(name="批次")
@Excel(name = "批次")
private String batchName;
@Excel(name = "专业一级分类")
private String parentMajorClass;
......@@ -40,14 +38,6 @@ public class SchoolMajorLinkBO {
this.linkId = linkId;
}
public String getBatchName() {
return batchName;
}
public void setBatchName(String batchName) {
this.batchName = batchName;
}
public String getSchoolName() {
return schoolName;
}
......@@ -64,6 +54,14 @@ public class SchoolMajorLinkBO {
this.majorName = majorName;
}
public String getBatchName() {
return batchName;
}
public void setBatchName(String batchName) {
this.batchName = batchName;
}
public String getParentMajorClass() {
return parentMajorClass;
}
......
......@@ -30,9 +30,15 @@ public class ZhuankeBO implements Serializable {
@Excel(name = "录取原则")
private String ruleStr;
@Excel(name = "23年录取最低分")
@Excel(name="参考分")
private BigDecimal reference;
@Excel(name = "录取最低分")
private BigDecimal acceptLowest;
@Excel(name = "年份")
private String acceptYear;
@Excel(name = "学科")
private String subjectType;
......@@ -88,12 +94,12 @@ public class ZhuankeBO implements Serializable {
this.ruleStr = ruleStr;
}
public String getSubjectType() {
return subjectType;
public BigDecimal getReference() {
return reference;
}
public void setSubjectType(String subjectType) {
this.subjectType = subjectType;
public void setReference(BigDecimal reference) {
this.reference = reference;
}
public BigDecimal getAcceptLowest() {
......@@ -104,6 +110,22 @@ public class ZhuankeBO implements Serializable {
this.acceptLowest = acceptLowest;
}
public String getAcceptYear() {
return acceptYear;
}
public void setAcceptYear(String acceptYear) {
this.acceptYear = acceptYear;
}
public String getSubjectType() {
return subjectType;
}
public void setSubjectType(String subjectType) {
this.subjectType = subjectType;
}
public BigDecimal getPrice() {
return price;
}
......
package com.ruoyi.mall.domain.Chat;
import lombok.Data;
/**
* 请求体 用于请求百度千帆
*/
public class BaiduAppRequest {
private String app_id;
private String query;
private boolean stream;
private String conversation_id;
public BaiduAppRequest(String app_id, String query, String conversation_id) {
this.app_id = app_id;
this.query = query;
this.conversation_id = conversation_id;
}
public String getApp_id() {
return app_id;
}
public void setApp_id(String app_id) {
this.app_id = app_id;
}
public String getQuery() {
return query;
}
public void setQuery(String query) {
this.query = query;
}
public boolean isStream() {
return stream;
}
public void setStream(boolean stream) {
this.stream = stream;
}
public String getConversation_id() {
return conversation_id;
}
public void setConversation_id(String conversation_id) {
this.conversation_id = conversation_id;
}
@Override
public String toString() {
return "BaiduAppRequest{" +
"app_id='" + app_id + '\'' +
", query='" + query + '\'' +
", stream=" + stream +
", conversation_id='" + conversation_id + '\'' +
'}';
}
}
package com.ruoyi.mall.domain.Chat;
import lombok.Data;
import java.util.List;
/**
* 响应体 接收消息用
*/
public class BaiduAppResponse {
private String request_id;
private String date;
private String answer;
private String conversation_id;
private String message_id;
private Boolean is_completion;
private List<Object> content;
public String getRequest_id() {
return request_id;
}
public void setRequest_id(String request_id) {
this.request_id = request_id;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getAnswer() {
return answer;
}
public void setAnswer(String answer) {
this.answer = answer;
}
public String getConversation_id() {
return conversation_id;
}
public void setConversation_id(String conversation_id) {
this.conversation_id = conversation_id;
}
public String getMessage_id() {
return message_id;
}
public void setMessage_id(String message_id) {
this.message_id = message_id;
}
public Boolean getIs_completion() {
return is_completion;
}
public void setIs_completion(Boolean is_completion) {
this.is_completion = is_completion;
}
public List<Object> getContent() {
return content;
}
public void setContent(List<Object> content) {
this.content = content;
}
@Override
public String toString() {
return "BaiduAppResponse{" +
"request_id='" + request_id + '\'' +
", date='" + date + '\'' +
", answer='" + answer + '\'' +
", conversation_id='" + conversation_id + '\'' +
", message_id='" + message_id + '\'' +
", is_completion=" + is_completion +
", content=" + content +
'}';
}
}
......@@ -21,7 +21,7 @@ public class MallSchool extends BaseEntity
private static final long serialVersionUID = 1L;
/** 学校主键ID */
@Excel(name = "学校主键ID")
// @Excel(name = "学校主键ID")
private Long schoolId;
/** 学校名 */
......@@ -47,6 +47,13 @@ public class MallSchool extends BaseEntity
@Excel(name = "学校编号")
private String schoolNumber;
/** 办学层次id */
private Long configLevelId;
/** 办学层次 */
@Excel(name = "办学层次")
private String configLevelName;
/** 学校类型ID */
// @Excel(name = "学校类型ID")
private Long configTypeId;
......@@ -56,7 +63,7 @@ public class MallSchool extends BaseEntity
private String configTypeName;
/** 办学机构:0-公办,1-民办,3-中外合作办学,4其他 */
// @Excel(name = "办学机构:0-公办,1-民办,3-中外合作办学,4其他")
@Excel(name = "办学机构", readConverterExp = "0=公办,1=民办,3=中外合作办学,4=其他")
private String schoolInstitution;
/** 主管部门(教育部、各地市) */
......@@ -186,11 +193,6 @@ public class MallSchool extends BaseEntity
/** 批次id数组 */
private Long[] batchList;
/** 办学层次id */
private Long configLevelId;
/** 办学层次 */
private String configLevelName;
/** 推荐度id */
private Long suggestId;
......
......@@ -13,6 +13,9 @@ public class SchoolMajorAcceptRecordVO implements Serializable {
/** 专业录取数据id */
private Long schoolAcceptId;
/** 专业代码 */
private String majorCode;
/** 专业名称 */
private String majorName;
......@@ -49,54 +52,6 @@ public class SchoolMajorAcceptRecordVO implements Serializable {
/** 录取率 */
private String acceptRate;
public String getAcceptRate() {
return acceptRate;
}
public void setAcceptRate(String acceptRate) {
this.acceptRate = acceptRate;
}
public Long getLinkId() {
return linkId;
}
public void setLinkId(Long linkId) {
this.linkId = linkId;
}
public Long getSchoolId() {
return schoolId;
}
public void setSchoolId(Long schoolId) {
this.schoolId = schoolId;
}
public BigDecimal getReference() {
return reference;
}
public void setReference(BigDecimal reference) {
this.reference = reference;
}
public Integer getIsReference() {
return isReference;
}
public void setIsReference(Integer isReference) {
this.isReference = isReference;
}
public String getMajorGroup() {
return majorGroup;
}
public void setMajorGroup(String majorGroup) {
this.majorGroup = majorGroup;
}
public Long getSchoolAcceptId() {
return schoolAcceptId;
}
......@@ -105,6 +60,14 @@ public class SchoolMajorAcceptRecordVO implements Serializable {
this.schoolAcceptId = schoolAcceptId;
}
public String getMajorCode() {
return majorCode;
}
public void setMajorCode(String majorCode) {
this.majorCode = majorCode;
}
public String getMajorName() {
return majorName;
}
......@@ -153,16 +116,71 @@ public class SchoolMajorAcceptRecordVO implements Serializable {
this.acceptRuleStr = acceptRuleStr;
}
public String getMajorGroup() {
return majorGroup;
}
public void setMajorGroup(String majorGroup) {
this.majorGroup = majorGroup;
}
public BigDecimal getReference() {
return reference;
}
public void setReference(BigDecimal reference) {
this.reference = reference;
}
public Integer getIsReference() {
return isReference;
}
public void setIsReference(Integer isReference) {
this.isReference = isReference;
}
public Long getSchoolId() {
return schoolId;
}
public void setSchoolId(Long schoolId) {
this.schoolId = schoolId;
}
public Long getLinkId() {
return linkId;
}
public void setLinkId(Long linkId) {
this.linkId = linkId;
}
public String getAcceptRate() {
return acceptRate;
}
public void setAcceptRate(String acceptRate) {
this.acceptRate = acceptRate;
}
@Override
public String toString() {
return "SchoolMajorAcceptRecordVO{" +
"schoolAcceptId=" + schoolAcceptId +
", majorCode='" + majorCode + '\'' +
", majorName='" + majorName + '\'' +
", acceptNum=" + acceptNum +
", acceptLowest=" + acceptLowest +
", acceptYear='" + acceptYear + '\'' +
", acceptRuleId=" + acceptRuleId +
", acceptRuleStr='" + acceptRuleStr + '\'' +
", majorGroup='" + majorGroup + '\'' +
", reference=" + reference +
", isReference=" + isReference +
", schoolId=" + schoolId +
", linkId=" + linkId +
", acceptRate='" + acceptRate + '\'' +
'}';
}
}
......@@ -48,7 +48,7 @@ public interface MallAcceptPlanMapper
public String selectMaxYear();
public MallAcceptPlan selectPlan(@Param("schoolId")Long schoolId,
public List<MallAcceptPlan> selectPlan(@Param("schoolId")Long schoolId,
@Param("batchId")Long batchId,
@Param("planYear")String planYear,
@Param("subjectType")Integer subjectType,
......@@ -159,4 +159,5 @@ public interface MallAcceptPlanMapper
* @return
*/
public int batchUpdate(@Param("list")List<MallAcceptPlan> list);
public int insertByList(@Param("list")List<MallAcceptPlan> list);
}
......@@ -30,6 +30,13 @@ public interface MallAcceptRuleMapper
*/
public MallAcceptRule selectMallAcceptRuleByAcceptRuleStr(@Param("ruleStr")String ruleStr);
/**
* 录取字符串查询
* @param ruleStr 字符串
* @return
*/
public List<MallAcceptRule> selectMallAcceptRuleByAcceptRuleStr2(@Param("ruleStr")String ruleStr);
/**
* 录取原则
* @return
......
......@@ -32,7 +32,7 @@ public interface MallSchoolAcceptMapper
* @return
*/
public MallSchoolAccept selectBySchoolIdAndLinkId(@Param("schoolId")Long schoolId,
public List<MallSchoolAccept> selectBySchoolIdAndLinkId(@Param("schoolId")Long schoolId,
@Param("batchId")Long batchId,
@Param("linkId")Long linkId,
@Param("acceptYear")String acceptYear,
......@@ -77,6 +77,7 @@ public interface MallSchoolAcceptMapper
* @return 结果
*/
public int deleteMallSchoolAcceptBySchoolAcceptIds(Long[] schoolAcceptIds);
public int insertByList(List<MallSchoolAccept> schoolAcceptIds);
/**
* 专业查询近三年录取记录
......
......@@ -23,6 +23,7 @@ public interface MallSchoolLevelMapper
public MallSchoolLevel selectMallSchoolLevelBySchoolId(@Param("schoolId") Long schoolId);
public List<MallSchoolLevel> selectMallSchoolLevelBySchoolIds(@Param("schoolId") List<Long> schoolIds);
/**
* 查询学校办学层次列表
......
......@@ -160,6 +160,7 @@ public interface MallSchoolMapper
/**志愿自主选择 获取学校信息*/
List<SchoolMajorVO> schoolListInfoForReport(@Param("sIds") List<Long> sIds);
public List<MallSchool> selectAllSchoolNames(@Param("schoolNames")List<String> schoolNames);
/**
* 志愿自主选择 ,分页查询
......@@ -320,6 +321,7 @@ public interface MallSchoolMapper
*/
public List<Long> selectAllSchoolIds(@Param("batchId")Long batchId);
/**
* 招生稳定学校
* @param batchId
......
......@@ -57,7 +57,7 @@ public interface IMallMemberUserService
public int deleteMallMemberUserByIds(Long[] ids);
public void updateRate(Long userId, Integer cultureScore, Integer majorScore);
public void updateRate(Long userId, Integer cultureScore, Integer majorScore, String subjectType);
/**
* 删除用户会员信息
......
......@@ -4,6 +4,7 @@ import com.github.pagehelper.Page;
import com.github.pagehelper.PageInfo;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.mall.domain.Bo.CheckingOutParamBo;
import com.ruoyi.mall.domain.Bo.MallSchoolExcelBo;
import com.ruoyi.mall.domain.Bo.MatchSchoolBO;
import com.ruoyi.mall.domain.MallSchool;
import com.ruoyi.mall.domain.MallSchoolBatchLink;
......@@ -342,4 +343,6 @@ public interface IMallSchoolService
*/
public MallSchool selectMallSchoolBySysUserId(Long sysUserId);
String importTestSchoolRecord(List<MallSchoolExcelBo> list, boolean updateSupport);
}
package com.ruoyi.mall.service.impl;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.mall.domain.BusinessBulletin;
import com.ruoyi.mall.domain.Vo.BusinessBulletinResponse;
import com.ruoyi.mall.domain.Vo.BusinessBulletinVo;
import jdk.nashorn.internal.ir.annotations.Reference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.mall.mapper.BusinessBulletinMapper;
import com.ruoyi.mall.domain.BusinessBulletin;
import com.ruoyi.mall.service.IBusinessBulletinService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* 公告Service业务层处理
*
*
* @author ruoyi
* @date 2023-10-25
*/
@Service
public class BusinessBulletinServiceImpl implements IBusinessBulletinService
public class BusinessBulletinServiceImpl implements IBusinessBulletinService
{
@Resource
private BusinessBulletinMapper businessBulletinMapper;
......@@ -57,7 +53,7 @@ public class BusinessBulletinServiceImpl implements IBusinessBulletinService
}
/**
* 查询公告
*
*
* @param bulletinId 公告主键
* @return 公告
*/
......@@ -69,7 +65,7 @@ public class BusinessBulletinServiceImpl implements IBusinessBulletinService
/**
* 查询公告列表
*
*
* @param businessBulletin 公告
* @return 公告
*/
......@@ -81,7 +77,7 @@ public class BusinessBulletinServiceImpl implements IBusinessBulletinService
/**
* 新增公告
*
*
* @param businessBulletin 公告
* @return 结果
*/
......@@ -94,7 +90,7 @@ public class BusinessBulletinServiceImpl implements IBusinessBulletinService
/**
* 修改公告
*
*
* @param businessBulletin 公告
* @return 结果
*/
......@@ -107,7 +103,7 @@ public class BusinessBulletinServiceImpl implements IBusinessBulletinService
/**
* 批量删除公告
*
*
* @param bulletinIds 需要删除的公告主键
* @return 结果
*/
......@@ -119,7 +115,7 @@ public class BusinessBulletinServiceImpl implements IBusinessBulletinService
/**
* 删除公告信息
*
*
* @param bulletinId 公告主键
* @return 结果
*/
......
......@@ -740,14 +740,32 @@ public class CheckingOutServiceImpl implements CheckingOutService {
r.put("rateType", -2);
}
}else{
// 本科
mallSchoolAccept = mallSchoolAcceptMapper.selectMinReferenceBySchoolId(s.getSchoolId(), bo.getBatchId(), subjectType);
if(ObjectUtils.isNotEmpty(mallSchoolAccept)){
r = mallCountMethodService.getAcceptRateForReport(mallSchoolAccept.getReference(), mallSchoolAccept.getAcceptRuleId(), cultureScore, majorScore);
}else{
}else {
r.put("acceptRate", 0);
r.put("rateType", -2);
}
// boolean flag = false;
// // 选科:0-文科,1-理科
// if (subjectType.equals("0") && cultureScore >= 331 && majorScore >= 193) {
// flag = true;
// }else if (subjectType.equals("1") && cultureScore >= 328 && majorScore >= 193){
// flag = true;
// }
// 本科
// mallSchoolAccept = mallSchoolAcceptMapper.selectMinReferenceBySchoolId(s.getSchoolId(), bo.getBatchId(), subjectType);
// if(flag && ObjectUtils.isNotEmpty(mallSchoolAccept)){
// r = mallCountMethodService.getAcceptRateForReport(mallSchoolAccept.getReference(), mallSchoolAccept.getAcceptRuleId(), cultureScore, majorScore);
// }else {
// r.put("acceptRate", 0);
// r.put("rateType", -2);
// }
}
......
package com.ruoyi.mall.service.impl;
import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.mall.domain.ContrastRecord;
import com.ruoyi.mall.domain.Vo.ContrastRecordVo;
import com.ruoyi.mall.mapper.MallSchoolTagMapper;
import jdk.nashorn.internal.ir.annotations.Reference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.mall.mapper.ContrastRecordMapper;
import com.ruoyi.mall.domain.ContrastRecord;
import com.ruoyi.mall.mapper.MallSchoolTagMapper;
import com.ruoyi.mall.service.IContrastRecordService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* 添加对比记录Service业务层处理
*
*
* @author ruoyi
* @date 2023-10-27
*/
@Service
public class ContrastRecordServiceImpl implements IContrastRecordService
public class ContrastRecordServiceImpl implements IContrastRecordService
{
@Resource
private ContrastRecordMapper contrastRecordMapper;
......@@ -29,7 +27,7 @@ public class ContrastRecordServiceImpl implements IContrastRecordService
private MallSchoolTagMapper mallSchoolTagMapper;
/**
* 查询添加对比记录
*
*
* @param recordId 添加对比记录主键
* @return 添加对比记录
*/
......@@ -41,7 +39,7 @@ public class ContrastRecordServiceImpl implements IContrastRecordService
/**
* 查询添加对比记录列表
*
*
* @param contrastRecord 添加对比记录
* @return 添加对比记录
*/
......@@ -72,7 +70,7 @@ public class ContrastRecordServiceImpl implements IContrastRecordService
/**
* 新增添加对比记录
*
*
* @param contrastRecord 添加对比记录
* @return 结果
*/
......@@ -85,7 +83,7 @@ public class ContrastRecordServiceImpl implements IContrastRecordService
/**
* 修改添加对比记录
*
*
* @param contrastRecord 添加对比记录
* @return 结果
*/
......@@ -98,7 +96,7 @@ public class ContrastRecordServiceImpl implements IContrastRecordService
/**
* 批量删除添加对比记录
*
*
* @param recordIds 需要删除的添加对比记录主键
* @return 结果
*/
......@@ -110,7 +108,7 @@ public class ContrastRecordServiceImpl implements IContrastRecordService
/**
* 删除添加对比记录信息
*
*
* @param recordId 添加对比记录主键
* @return 结果
*/
......
package com.ruoyi.mall.service.impl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.mall.domain.*;
import com.ruoyi.mall.domain.Bo.CheckingOutParamBo;
import com.ruoyi.mall.domain.Bo.SchoolMajorLinkBO;
import com.ruoyi.mall.domain.*;
import com.ruoyi.mall.domain.Vo.MajorItemVo;
import com.ruoyi.mall.mapper.*;
import jdk.nashorn.internal.ir.IfNode;
import com.ruoyi.mall.service.IMallLinkMajorSchoolService;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.mall.service.IMallLinkMajorSchoolService;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* 专业与学校关联Service业务层处理
......
......@@ -141,7 +141,9 @@ public class MallMemberUserServiceImpl implements IMallMemberUserService
@Transactional(rollbackFor = Exception.class)
public int updateMallMemberUser(MallMemberUser mallMemberUser)
{
if (StringUtils.isNotBlank(mallMemberUser.getSubjectType()) && ObjectUtils.isNotEmpty(mallMemberUser.getCultureScore()) && ObjectUtils.isNotEmpty(mallMemberUser.getMajorScore())){
if (StringUtils.isNotBlank(mallMemberUser.getSubjectType())
&& null != mallMemberUser.getCultureScore()
&& null != mallMemberUser.getMajorScore()){
String newSubjectType = mallMemberUser.getSubjectType(); // 新学科
Integer newCultureScore = mallMemberUser.getCultureScore(); // 新文化分
Integer newMajorScore = mallMemberUser.getMajorScore(); // 新专业分
......@@ -161,7 +163,7 @@ public class MallMemberUserServiceImpl implements IMallMemberUserService
@Override
public void run() {
updateRate(mallMemberUser.getId(), newCultureScore, newMajorScore);
updateRate(mallMemberUser.getId(), newCultureScore, newMajorScore, newSubjectType);
}
}).start();
}
......@@ -174,7 +176,7 @@ public class MallMemberUserServiceImpl implements IMallMemberUserService
@Override
public void updateRate(Long userId, Integer cultureScore, Integer majorScore)
public void updateRate(Long userId, Integer cultureScore, Integer majorScore, String subjectType)
{
// 计算学生各种录取率下的成绩
List<MallAcceptRule> rules = acceptRuleMapper.selectNewAcceptRule();
......@@ -1046,15 +1048,15 @@ public class MallMemberUserServiceImpl implements IMallMemberUserService
sysUser.setPassword(SecurityUtils.encryptPassword(password));
sysUserMapper.updateUser(sysUser);
}
if (StringUtils.isBlank(memberUser.getIndexCode())) {
String qrCode = "";
// 小程序码
Long schoolId = memberUser.getId();
String key = schoolId + ".png";
qrCode = weiXinUtils.getSchoolQRCode(schoolId, key);
updateMemberUser.setIndexCode(qrCode);
}
/**
* 重新生成二维码
*/
String qrCode = "";
// 小程序码
Long userId = memberUser.getId();
String key = userId + ".png";
qrCode = weiXinUtils.getQRCode(userId, key);
updateMemberUser.setIndexCode(qrCode);
mallMemberUserMapper.updateMallMemberUserInfo(updateMemberUser);
return AjaxResult.success();
......
......@@ -804,10 +804,10 @@ public class MallSchoolAcceptServiceImpl implements IMallSchoolAcceptService {
@Override
@Transactional(rollbackFor = Exception.class)
public String importAcceptData(List<NewAcceptBO> list) {
String afterYear = "2023";
// String afterYear = "2023";
// 重置去年数据为旧数据
mallSchoolAcceptMapper.resetAfterData(afterYear);
mallSchoolAcceptMapper.resetAfterRecordData(afterYear);
// mallSchoolAcceptMapper.resetAfterData(afterYear);
// mallSchoolAcceptMapper.resetAfterRecordData(afterYear);
// 删除24年录取记录
mallSchoolAcceptRecordMapper.deleteRecord();
......@@ -840,55 +840,54 @@ public class MallSchoolAcceptServiceImpl implements IMallSchoolAcceptService {
String ruleStr = replaceOther(newAcceptBO.getRuleStr()); // 录取原则
BigDecimal reference = newAcceptBO.getReference(); // 参考分
String acceptYear = "2024"; // 年份
String acceptYear = newAcceptBO.getAcceptYear(); // 年份
String subjectType = newAcceptBO.getSubjectType().contains("") ? "0" : "1"; // 学科
String subjectType = newAcceptBO.getSubjectType().contains("") ? "0" : "1"; // 学科
if (StringUtils.isBlank(batchName)){
//return "第" + index + "行缺少批次名称";
sb.append("第" + index + "行缺少批次名称;");
errorDataBO.setMsg("第" + index + "行缺少批次名称");
sb.append("第【" +index + "】行学校【"+schoolName+"】缺少批次名称;").append(System.lineSeparator());
errorDataBO.setMsg("第" +index + "行学校【"+schoolName+"】行缺少批次名称");
errorList.add(errorDataBO);
continue;
}
if (StringUtils.isBlank(schoolName)){
//return "第" + index + "行缺少学校名称数据";
sb.append("第" + index + "行缺少学校名称数据;");
errorDataBO.setMsg("第" + index + "行缺少学校名称数据");
sb.append("第【" +index + "】行学校【"+schoolName+"】缺少学校名称数据;").append(System.lineSeparator());
errorDataBO.setMsg("第" +index + "行学校【"+schoolName+"】行缺少学校名称数据");
errorList.add(errorDataBO);
continue;
}
if (StringUtils.isBlank(majorNameStr)){
//return "第" + index + "行缺少专业名称";
sb.append("第" + index + "行缺少专业名称");
errorDataBO.setMsg("第" + index + "行缺少专业名称");
sb.append("第【" +index + "】行学校【"+schoolName+"】缺少专业名称").append(System.lineSeparator());
errorDataBO.setMsg("第" +index + "行学校【"+schoolName+"】行缺少专业名称");
errorList.add(errorDataBO);
continue;
}
if (StringUtils.isBlank(ruleStr)){
//return "第" + index + "行缺少录取原则";
sb.append("第" + index + "行缺少录取原则;");
errorDataBO.setMsg("第" + index + "行缺少录取原则");
errorList.add(errorDataBO);
continue;
}
if (ObjectUtils.isEmpty(reference)){
//return "第" + index + "行缺少参考分";
sb.append("第" + index + "行缺少参考分;");
errorDataBO.setMsg("第" + index + "行缺少参考分");
sb.append("第【" +index + "】行学校【"+schoolName+"】缺少录取原则;").append(System.lineSeparator());
errorDataBO.setMsg("第" +index + "行学校【"+schoolName+"】行缺少录取原则");
errorList.add(errorDataBO);
continue;
}
// if (ObjectUtils.isEmpty(reference)){
// sb.append("第【" +index + "】行学校【"+schoolName+"】缺少参考分;").append(System.lineSeparator());
// errorDataBO.setMsg("第" +index + "行学校【"+schoolName+"】行缺少参考分");
// errorList.add(errorDataBO);
// continue;
// }
if (StringUtils.isBlank(acceptYear)){
sb.append("第" + index + "行缺少年份;");
errorDataBO.setMsg("第" + index + "行缺少年份;");
sb.append("第【" +index + "】行学校【"+schoolName+"】缺少年份;").append(System.lineSeparator());
errorDataBO.setMsg("第" +index + "行学校【"+schoolName+"】行缺少年份;");
errorList.add(errorDataBO);
continue;
}
if (StringUtils.isBlank(subjectType)){
sb.append("第" + index + "行缺少学科分类;") ;
errorDataBO.setMsg("第" + index + "行缺少学科分类;");
sb.append("第【" +index + "】行学校【"+schoolName+"】缺少学科分类;").append(System.lineSeparator());
errorDataBO.setMsg("第" +index + "行学校【"+schoolName+"】行缺少学科分类;");
errorList.add(errorDataBO);
continue;
}
......@@ -906,10 +905,10 @@ public class MallSchoolAcceptServiceImpl implements IMallSchoolAcceptService {
//return "第" + index + "行批次不存在,请先添加批次或批次名称不正确";
}
// 查询学校
List<MallSchool> collect = schoolList.stream().filter(item -> item.getSchoolName().equals(replaceOther(newAcceptBO.getSchoolName()))).collect(Collectors.toList());
List<MallSchool> collect = schoolList.stream().filter(item -> replaceOther(item.getSchoolName()).equals(schoolName)).collect(Collectors.toList());
if (ObjectUtils.isEmpty(collect)){
sb.append("第" + index + "学校不存在或学校名称错误:"+ schoolName + ";");
errorDataBO.setMsg("第" + index + "学校不存在或学校名称错误:");
sb.append("第【" +index + "】行学校【"+schoolName+"】不存在或学校名称错误").append(System.lineSeparator());
errorDataBO.setMsg("第" +index + "行学校【"+schoolName+"】不存在或学校名称错误:");
errorList.add(errorDataBO);
continue;
//return "第" + index + "学校不存在或学校名称错误:"+ schoolName;
......@@ -928,8 +927,8 @@ public class MallSchoolAcceptServiceImpl implements IMallSchoolAcceptService {
BigDecimal cultureLowest = BigDecimal.ZERO ; // 文化分数线
if (ObjectUtils.isEmpty(newAcceptBO.getCultureLowest())){
sb.append("第" +index + "行缺少文化分数线;");
errorDataBO.setMsg("第" +index + "缺少文化分数线");
sb.append("第【" +index + "】行学校【"+schoolName+"】缺少文化分数线;").append(System.lineSeparator());
errorDataBO.setMsg("第" +index + "行学校【"+schoolName+"】缺少文化分数线");
errorList.add(errorDataBO);
continue;
//return "缺少文化分数线" + index;
......@@ -940,8 +939,8 @@ public class MallSchoolAcceptServiceImpl implements IMallSchoolAcceptService {
BigDecimal majorLowest = new BigDecimal("0") ; // 专业分数线
if (ObjectUtils.isEmpty(newAcceptBO.getMajorLowest())){
//majorLowest = new BigDecimal("216");
sb.append("第" +index + "行缺少联考分数线;");
errorDataBO.setMsg("第" +index + "缺少联考分数线");
sb.append("第【" +index + "】行学校【"+schoolName+"】缺少联考分数线;").append(System.lineSeparator());
errorDataBO.setMsg("第" +index + "行学校【"+schoolName+"】缺少联考分数线");
errorList.add(errorDataBO);
continue;
//return "缺少文化分数线" + index;
......@@ -981,8 +980,8 @@ public class MallSchoolAcceptServiceImpl implements IMallSchoolAcceptService {
// twoIds.append(collect2.get(0).getMajorId()).append(",");
//}
if (ObjectUtils.isEmpty(linkMajorSchool)){
sb.append("第" + index + "专业未录入;");
errorDataBO.setMsg("第" +index + "专业未录入或名称错误");
sb.append("第【" +index + "】行学校【"+schoolName+"】【"+majorNameStr+"】专业未录入;").append(System.lineSeparator());
errorDataBO.setMsg("第" +index + "行学校【"+schoolName+"】专业未录入或名称错误");
errorList.add(errorDataBO);
continue;
//return "专业未录入" + index + "-" + schoolName + "-" + majorNameStr;
......@@ -1009,20 +1008,20 @@ public class MallSchoolAcceptServiceImpl implements IMallSchoolAcceptService {
}
// 查询录取原则
MallAcceptRule acceptRule = mallAcceptRuleMapper.selectMallAcceptRuleByAcceptRuleStr(ruleStr);
List<MallAcceptRule> acceptRule = mallAcceptRuleMapper.selectMallAcceptRuleByAcceptRuleStr2(ruleStr);
Long acceptRuleId = 0L;
if (ObjectUtils.isEmpty(acceptRule)){
sb.append("第" + index + "录取原则不存在或录入错误;");
errorDataBO.setMsg("第" +index + "录取原则不存在或录入错误");
if (acceptRule.isEmpty()){
sb.append("第【" +index + "】行学校【"+schoolName+"】录取原则【"+ruleStr+"】不存在或录入错误;").append(System.lineSeparator());
errorDataBO.setMsg("第" +index + "行学校【"+schoolName+"】录取原则不存在或录入错误");
errorList.add(errorDataBO);
continue;
}else{
acceptRuleId = acceptRule.getAcceptRuleId();
acceptRuleId = acceptRule.get(0).getAcceptRuleId();
}
// 查询是否已导入数据
MallSchoolAccept schoolAccept = mallSchoolAcceptMapper.selectBySchoolIdAndLinkId(school.getSchoolId(), mallBatch.getBatchId(), linkId, acceptYear, subjectType);
if (ObjectUtils.isEmpty(schoolAccept)){
List<MallSchoolAccept> schoolAcceptList = mallSchoolAcceptMapper.selectBySchoolIdAndLinkId(school.getSchoolId(), mallBatch.getBatchId(), linkId, acceptYear, subjectType);
if (schoolAcceptList.isEmpty()){
// 生成新专业录取数据
MallSchoolAccept mallSchoolAccept = new MallSchoolAccept();
mallSchoolAccept.setSchoolId(school.getSchoolId());
......@@ -1049,7 +1048,7 @@ public class MallSchoolAcceptServiceImpl implements IMallSchoolAcceptService {
mallAcceptPlan.setBatchId(mallBatch.getBatchId());
mallAcceptPlan.setLinkId(linkId);
mallAcceptPlan.setPlanYear(acceptYear);
mallAcceptPlan.setSubjectType(subjectType.equals("0") ? 0 : 1);
mallAcceptPlan.setSubjectType(Integer.valueOf(subjectType));
mallAcceptPlan.setAcceptNum(acceptNum);
mallAcceptPlan.setSchoolPrice(schoolPrice);
mallAcceptPlan.setAcceptRuleId(acceptRuleId);
......@@ -1076,6 +1075,7 @@ public class MallSchoolAcceptServiceImpl implements IMallSchoolAcceptService {
}else{
b++;
// 修改数据
MallSchoolAccept schoolAccept = schoolAcceptList.get(0);
// 生成新专业录取数据
schoolAccept.setAcceptNum(acceptNum);
schoolAccept.setAcceptLowest(acceptLowest);
......@@ -1086,9 +1086,9 @@ public class MallSchoolAcceptServiceImpl implements IMallSchoolAcceptService {
mallSchoolAcceptMapper.updateMallSchoolAccept(schoolAccept);
// 修改招生计划
MallAcceptPlan plan = mallAcceptPlanMapper.selectPlan(school.getSchoolId(), mallBatch.getBatchId(), acceptYear, Integer.valueOf(subjectType), linkId);
if (ObjectUtils.isNotEmpty(plan)){
List<MallAcceptPlan> mallAcceptPlanList = mallAcceptPlanMapper.selectPlan(school.getSchoolId(), mallBatch.getBatchId(), acceptYear, Integer.valueOf(subjectType), linkId);
if (!mallAcceptPlanList.isEmpty()){
MallAcceptPlan plan = mallAcceptPlanList.get(0);
plan.setAcceptNum(acceptNum);
plan.setSchoolPrice(schoolPrice);
plan.setAcceptRuleId(acceptRuleId);
......@@ -1112,7 +1112,6 @@ public class MallSchoolAcceptServiceImpl implements IMallSchoolAcceptService {
record.setCreateAt(DateUtils.getTime());
record.setDelFlag("0");
mallSchoolAcceptRecordMapper.insertMallSchoolAcceptRecord(record);
}
successNum++;
......@@ -1169,18 +1168,18 @@ public class MallSchoolAcceptServiceImpl implements IMallSchoolAcceptService {
//要插入数据库的 院校录取数据
//List<MallSchoolAcceptRecord> schoolAcceptRecordList = new ArrayList<>();
List<MallSchool> schoolList = mallSchoolMapper.selectMallSchoolList(null);
for (ZhuankeBO zhuankeBO : list) {
int index = list.indexOf(zhuankeBO) + 2;
try{
String batchName = "专科";
String batchName = replaceOther(zhuankeBO.getBatchName());
String schoolNumber = replaceOther(zhuankeBO.getSchoolNumber()); // 代码 去空格回车等
String schoolName = replaceOther(zhuankeBO.getSchoolName()); // 学校名称
String majorName = replaceOther(zhuankeBO.getMajorName()); // 专业名
String ruleStr = "文化*0.067+联考*0.1667"; // 录取原则
String acceptYear = "2024"; // 年份
String subjectType = replaceOther(zhuankeBO.getSubjectType()).contains("") ? "0" : "1"; // 学科
String ruleStr = replaceOther(zhuankeBO.getRuleStr()); // 录取原则
String acceptYear = zhuankeBO.getAcceptYear(); // 年份
String subjectType = replaceOther(zhuankeBO.getSubjectType()).contains("") ? "0" : "1"; // 学科
if (StringUtils.isBlank(batchName)){
return "第" + index + "行缺少批次名称";
......@@ -1214,42 +1213,44 @@ public class MallSchoolAcceptServiceImpl implements IMallSchoolAcceptService {
return "第" + index + "行批次不存在,请先添加批次或批次名称不正确";
}
// 查询学校
MallSchool mallSchool = mallSchoolMapper.selectMallSchoolBySchoolName(schoolName);
if (ObjectUtils.isEmpty(mallSchool)){
MallSchool newSchool = new MallSchool();
newSchool.setSchoolName(schoolName);
newSchool.setSchoolNumber(schoolNumber);
newSchool.setDelFlag("0");
int i = mallSchoolMapper.insertMallSchool(newSchool);
schoolId = newSchool.getSchoolId();
List<MallSchool> collect = schoolList.stream().filter(item -> replaceOther(item.getSchoolName()).equals(schoolName)).collect(Collectors.toList());
// if (ObjectUtils.isEmpty(collect)){
// sb.append("第【").append(index).append("】行学校【").append(schoolName).append("】不存在或学校名称错误").append(System.lineSeparator());
// continue;
// }
if (ObjectUtils.isNotEmpty(collect)){
// 已有学校
schoolId = collect.get(0).getSchoolId();
// 查询是否有专科批次
MallSchoolBatchLink schoolBatchLink = mallSchoolBatchLinkMapper.selectSchoolBatchLinkBySchoolIdAndBatchId(schoolId, 4L);
if (ObjectUtils.isEmpty(schoolBatchLink)){
// 批次关联
MallSchoolBatchLink batchLink = new MallSchoolBatchLink();
batchLink.setSchoolId(schoolId);
batchLink.setBatchId(4L);
batchLink.setBatchName("专科");
batchLink.setBatchName(batchName);
batchLink.setCreateAt(DateUtils.getTime());
batchLink.setDelFlag("0");
mallSchoolBatchLinkMapper.insertMallSchoolBatchLink(batchLink);
}else{
// 已有学校
schoolId = mallSchool.getSchoolId();
// 查询是否有专科批次
MallSchoolBatchLink schoolBatchLink = mallSchoolBatchLinkMapper.selectSchoolBatchLinkBySchoolIdAndBatchId(schoolId, 4L);
if (ObjectUtils.isEmpty(schoolBatchLink)){
// 批次关联
MallSchoolBatchLink batchLink = new MallSchoolBatchLink();
batchLink.setSchoolId(schoolId);
batchLink.setBatchId(4L);
batchLink.setBatchName("专科");
batchLink.setCreateAt(DateUtils.getTime());
batchLink.setDelFlag("0");
mallSchoolBatchLinkMapper.insertMallSchoolBatchLink(batchLink);
}
}
}else {
MallSchool newSchool = new MallSchool();
newSchool.setSchoolName(schoolName);
newSchool.setSchoolNumber(schoolNumber);
newSchool.setDelFlag("0");
int i = mallSchoolMapper.insertMallSchool(newSchool);
schoolId = newSchool.getSchoolId();
schoolList.add(newSchool);
// 批次关联
MallSchoolBatchLink batchLink = new MallSchoolBatchLink();
batchLink.setSchoolId(schoolId);
batchLink.setBatchId(4L);
batchLink.setBatchName(batchName);
batchLink.setCreateAt(DateUtils.getTime());
batchLink.setDelFlag("0");
mallSchoolBatchLinkMapper.insertMallSchoolBatchLink(batchLink);
}
BigDecimal acceptLowest = zhuankeBO.getAcceptLowest(); // 最低分
......@@ -1260,7 +1261,6 @@ public class MallSchoolAcceptServiceImpl implements IMallSchoolAcceptService {
Long linkId = 0L;
if (ObjectUtils.isEmpty(linkMajorSchool)){
// 专业不存在新增
MallLinkMajorSchool newLink = new MallLinkMajorSchool();
newLink.setSchoolId(schoolId);
......@@ -1277,10 +1277,9 @@ public class MallSchoolAcceptServiceImpl implements IMallSchoolAcceptService {
// 查询录取原则
MallAcceptRule acceptRule = mallAcceptRuleMapper.selectRuleStr(ruleStr);
// 查询是否已导入数据
MallSchoolAccept schoolAccept = mallSchoolAcceptMapper.selectBySchoolIdAndLinkId(schoolId, 4L, linkId, acceptYear, subjectType);
if (ObjectUtils.isEmpty(schoolAccept)){
List<MallSchoolAccept> schoolAcceptList = mallSchoolAcceptMapper.selectBySchoolIdAndLinkId(schoolId, 4L, linkId, acceptYear, subjectType);
if (schoolAcceptList.isEmpty()){
// 生成新专业录取数据
MallSchoolAccept mallSchoolAccept = new MallSchoolAccept();
mallSchoolAccept.setSchoolId(schoolId);
......@@ -1544,6 +1543,7 @@ public class MallSchoolAcceptServiceImpl implements IMallSchoolAcceptService {
List<MallLinkMajorSchool> updateLinkList = new ArrayList<>();
List<MallLinkMajorSchool> insertLinkList = new ArrayList<>();
List<MallSchool> schoolList = mallSchoolMapper.selectMallSchoolList(null);
// 学校批次关联
List<MallSchoolBatchLink> insertSchoolBatchList = new ArrayList<>();
......@@ -1556,7 +1556,7 @@ public class MallSchoolAcceptServiceImpl implements IMallSchoolAcceptService {
message = "数据不全,对应行数:" + (list.indexOf(bo) + 1);
return message;
}
bo.setBatchName("本科");
// bo.setBatchName("本科");
String schoolName = bo.getSchoolName().replaceAll("\\s*","");
String batchName = bo.getBatchName().replaceAll("\\s*","");
String majorName = bo.getMajorName().replaceAll("\\s*","");
......@@ -1564,10 +1564,10 @@ public class MallSchoolAcceptServiceImpl implements IMallSchoolAcceptService {
String majorClass = bo.getMajorClass().replaceAll("\\s*","").replaceAll(",", ",").replaceAll("、", ",");
// 查询学校
MallSchool mallSchool = mallSchoolMapper.selectMallSchoolBySchoolName(schoolName);
if (ObjectUtils.isEmpty(mallSchool)){
return "学校信息不存在,行数: " + (list.indexOf(bo) + 1);
List<MallSchool> mallSchoolList = schoolList.stream().filter(item -> replaceOther(item.getSchoolName()).equals(schoolName)).collect(Collectors.toList());
if (ObjectUtils.isEmpty(mallSchoolList)){
// return "学校信息不存在【"+schoolName+"】,行数: " + (list.indexOf(bo) + 1);
continue;
}
// 对应批次
List<BatchVO> batchCollect = batchList.stream().filter(item -> item.getBatchName().equals(batchName)).collect(Collectors.toList());
......@@ -1580,72 +1580,86 @@ public class MallSchoolAcceptServiceImpl implements IMallSchoolAcceptService {
String[] split = majorClass.split(",");
StringBuilder twoClassIds = new StringBuilder();
for (String s : split) {
List<MallMajorClass> collect2 = classList.stream().filter(item -> item.getMajorName().equals(s) && !item.getParentId().equals(0L)).collect(Collectors.toList());
if (collect2.isEmpty()){
message = "未查询到二级专业分类:" + s + ",对应行数: " + (list.indexOf(bo) + 1);
return message;
}
twoClassIds.append(collect2.get(0).getMajorId()).append(",");
}
if (ObjectUtils.isNotEmpty(bo.getLinkId())){
// 已有专业关联
List<MallLinkMajorSchool> collect = oldList.stream().filter(item -> item.getLinkId().equals(bo.getLinkId())).collect(Collectors.toList());
MallLinkMajorSchool oldLink = collect.get(0);
oldLink.setMajorName(majorName); // 专业名称(可能更新)
//oldLink.setParentMajorId(collect1.get(0).getMajorId());// 一级分类id
oldLink.setMajorId(twoClassIds.toString()); // 二级分类id
oldLink.setUpdateAt(DateUtils.getTime());
oldLink.setTwoClassName(majorClass);
updateLinkList.add(oldLink);
}else{
// for (String s : split) {
// List<MallMajorClass> collect2 = classList.stream().filter(item -> item.getMajorName().equals(s) && !item.getParentId().equals(0L)).collect(Collectors.toList());
// if (collect2.isEmpty()){
// message = "未查询到二级专业分类:" + s + ",对应行数: " + (list.indexOf(bo) + 1);
// return message;
// }
// twoClassIds.append(collect2.get(0).getMajorId()).append(",");
// }
if (oldList.stream().noneMatch(item -> item.getSchoolName().equals(schoolName) && item.getMajorName().equals(majorName))) {
// 新增专业
MallLinkMajorSchool newLink = new MallLinkMajorSchool();
// 查询学校id
newLink.setSchoolId(mallSchool.getSchoolId());
newLink.setSchoolId(mallSchoolList.get(0).getSchoolId());
newLink.setSchoolName(schoolName);
newLink.setMajorName(majorName);
//newLink.setParentMajorId(collect1.get(0).getMajorId()); // 一级分类
newLink.setMajorId(twoClassIds.toString()); //二级分类
// newLink.setMajorId(twoClassIds.toString()); //二级分类
newLink.setType("2");
newLink.setCreateAt(DateUtils.getTime());
newLink.setTwoClassName(majorClass);
insertLinkList.add(newLink);
mallLinkMajorSchoolMapper.insertMallLinkMajorSchool(newLink);
oldList.add(newLink);
}
// if (ObjectUtils.isNotEmpty(bo.getLinkId())){
//
// // 已有专业关联
// List<MallLinkMajorSchool> collect = oldList.stream().filter(item -> item.getLinkId().equals(bo.getLinkId())).collect(Collectors.toList());
//
// MallLinkMajorSchool oldLink = collect.get(0);
// oldLink.setMajorName(majorName); // 专业名称(可能更新)
// //oldLink.setParentMajorId(collect1.get(0).getMajorId());// 一级分类id
//// oldLink.setMajorId(twoClassIds.toString()); // 二级分类id
// oldLink.setUpdateAt(DateUtils.getTime());
// oldLink.setTwoClassName(majorClass);
// updateLinkList.add(oldLink);
// }else{
// // 新增专业
// MallLinkMajorSchool newLink = new MallLinkMajorSchool();
// // 查询学校id
//
// newLink.setSchoolId(mallSchoolList.get(0).getSchoolId());
// newLink.setSchoolName(schoolName);
// newLink.setMajorName(majorName);
// //newLink.setParentMajorId(collect1.get(0).getMajorId()); // 一级分类
//// newLink.setMajorId(twoClassIds.toString()); //二级分类
// newLink.setType("2");
// newLink.setCreateAt(DateUtils.getTime());
// newLink.setTwoClassName(majorClass);
// insertLinkList.add(newLink);
// }
// 学校批次关联
MallSchoolBatchLink schoolBatchLink = mallSchoolBatchLinkMapper.selectSchoolBatchLinkBySchoolIdAndBatchId(mallSchool.getSchoolId(), batchCollect.get(0).getBatchId());
MallSchoolBatchLink schoolBatchLink = mallSchoolBatchLinkMapper.selectSchoolBatchLinkBySchoolIdAndBatchId(mallSchoolList.get(0).getSchoolId(), batchCollect.get(0).getBatchId());
if (ObjectUtils.isEmpty(schoolBatchLink)){
List<MallSchoolBatchLink> collect = insertSchoolBatchList.stream().filter(item -> item.getSchoolId().equals(mallSchool.getSchoolId()) && item.getBatchId().equals(batchCollect.get(0).getBatchId())).collect(Collectors.toList());
List<MallSchoolBatchLink> collect = insertSchoolBatchList.stream().filter(item -> item.getSchoolId().equals(mallSchoolList.get(0).getSchoolId()) && item.getBatchId().equals(batchCollect.get(0).getBatchId())).collect(Collectors.toList());
if (collect.isEmpty()){
// 未加入集合,新增
MallSchoolBatchLink newSchoolBatchLink = new MallSchoolBatchLink();
newSchoolBatchLink.setSchoolId(mallSchool.getSchoolId());
newSchoolBatchLink.setSchoolId(mallSchoolList.get(0).getSchoolId());
newSchoolBatchLink.setBatchId(batchCollect.get(0).getBatchId());
newSchoolBatchLink.setBatchName(batchCollect.get(0).getBatchName());
newSchoolBatchLink.setCreateAt(DateUtils.getTime());
newSchoolBatchLink.setDelFlag("0");
insertSchoolBatchList.add(newSchoolBatchLink);
mallSchoolBatchLinkMapper.insertMallSchoolBatchLink(newSchoolBatchLink);
// insertSchoolBatchList.add(newSchoolBatchLink);
}
}
}
// 批量新增或修改
if (!insertSchoolBatchList.isEmpty()){
mallSchoolBatchLinkMapper.batchInsert(insertSchoolBatchList);
}
if (!insertLinkList.isEmpty()){
mallLinkMajorSchoolMapper.batchInsert(insertLinkList);
}
if (!updateLinkList.isEmpty()){
mallLinkMajorSchoolMapper.batchUpdate(updateLinkList);
}
// if (!insertSchoolBatchList.isEmpty()){
// mallSchoolBatchLinkMapper.batchInsert(insertSchoolBatchList);
// }
//
// if (!insertLinkList.isEmpty()){
// mallLinkMajorSchoolMapper.batchInsert(insertLinkList);
// }
// if (!updateLinkList.isEmpty()){
// mallLinkMajorSchoolMapper.batchUpdate(updateLinkList);
// }
return "success";
......
package com.ruoyi.mall.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.collection.ListUtil;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
......@@ -13,6 +15,7 @@ import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.weixin.utils.WeiXinUtils;
import com.ruoyi.mall.domain.*;
import com.ruoyi.mall.domain.Bo.CheckingOutParamBo;
import com.ruoyi.mall.domain.Bo.MallSchoolExcelBo;
import com.ruoyi.mall.domain.Bo.MatchSchoolBO;
import com.ruoyi.mall.domain.Vo.*;
import com.ruoyi.mall.mapper.*;
......@@ -28,6 +31,8 @@ import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.mapper.SysUserRoleMapper;
import com.ruoyi.system.service.ISysUserService;
import org.apache.commons.lang3.ObjectUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.core.parameters.P;
import org.springframework.stereotype.Service;
......@@ -48,93 +53,65 @@ import java.util.stream.Stream;
*/
@Service
public class MallSchoolServiceImpl implements IMallSchoolService {
private static final Logger log = LoggerFactory.getLogger(MallSchoolServiceImpl.class);
@Resource
private MallSchoolMapper mallSchoolMapper;
@Resource
private MallFacultyInfoMapper mallFacultyInfoMapper;
@Resource
private MallMajorClassMapper mallMajorClassMapper;
@Resource
private MallSchoolIntroduceMapper mallSchoolIntroduceMapper;
@Resource
private MallSchoolSceneryMapper mallSchoolSceneryMapper;
@Resource
private MallSchoolTagMapper mallSchoolTagMapper;
@Resource
private MallSchoolAcceptRecordMapper mallSchoolAcceptRecordMapper;
@Resource
private MallSchoolAcceptMapper mallSchoolAcceptMapper;
@Resource
private MallSchoolAppraiseMapper mallSchoolAppraiseMapper;
@Resource
private MallSchoolAcceptRulesMapper mallSchoolAcceptRulesMapper;
@Resource
private MallAcceptPlanMapper mallAcceptPlanMapper;
@Resource
private MallLinkMajorSchoolMapper mallLinkMajorSchoolMapper;
@Resource
private MallBatchMapper mallBatchMapper;
@Resource
private MallConfigLevelMapper mallConfigLevelMapper;
@Resource
private MallCountMethodServiceImpl mallCountMethodService;
@Resource
private MallMemberUserMapper mallMemberUserMapper;
@Resource
private IMallMemberCollectSchoolService mallMemberCollectSchoolService;
@Resource
private MallAcceptRateSettingMapper mallAcceptRateSettingMapper;
@Resource
private MallMemberTargetSchoolMapper mallMemberTargetSchoolMapper;
@Resource
private IContrastRecordService contrastRecordService;
@Resource
private SetRegionMapper setRegionMapper;
@Resource
private MallConfigTypeMapper mallConfigTypeMapper;
@Resource
private ContrastRecordMapper contrastRecordMapper;
@Resource
private MallSchoolMasterRecordMapper mallSchoolMasterRecordMapper;
@Resource
private MallSchoolBatchLinkMapper mallSchoolBatchLinkMapper;
@Resource
private MallSchoolLevelMapper mallSchoolLevelMapper;
@Resource
private MallSubjectClassMapper mallSubjectClassMapper;
@Resource
private MallAcceptRuleMapper mallAcceptRuleMapper;
@Resource
private MallExamDataMapper mallExamDataMapper;
@Resource
private WeiXinUtils weiXinUtils;
@Resource
......@@ -142,6 +119,110 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
@Resource
private SysUserRoleMapper sysUserRoleMapper;
@Override
public String importTestSchoolRecord(List<MallSchoolExcelBo> list, boolean updateSupport) {
if (StringUtils.isNull(list) || list.size() == 0) {
throw new ServiceException("导入院校数据不能为空!");
}
int successNum = 0;
int failureNum = 0;
Map<String, List<MallSchoolExcelBo>> collect = list.stream().collect(Collectors.groupingBy(MallSchoolExcelBo::getSchoolName));
List<MallSchool> mallSchools = mallSchoolMapper.selectAllSchoolNames(ListUtil.toList(collect.keySet()));
if (CollectionUtil.isNotEmpty(mallSchools)) {
StringBuilder successMsg = new StringBuilder();
StringBuilder failureMsg = new StringBuilder();
Map<String, MallSchool> mallSchoolMap = mallSchools.stream().collect(Collectors.toMap(MallSchool::getSchoolName, e -> e));
List<BatchVO> batchVOS = mallBatchMapper.selectAllBatchList();
Map<String, Long> stringLongMap = batchVOS.stream().collect(Collectors.toMap(BatchVO::getBatchName, BatchVO::getBatchId));
List<MallMajorClass> mallMajorClasses = mallMajorClassMapper.selectAllMajorList();
Map<Long, List<MallMajorClass>> listMap = mallMajorClasses.stream().collect(Collectors.groupingBy(MallMajorClass::getParentId));
List<MallMajorClass> majorClasses = listMap.get(0);
List<MallLinkMajorSchool> mallLinkMajorSchools = mallLinkMajorSchoolMapper.selectAllList();
Map<Long, MallLinkMajorSchool> majorSchoolMap =
mallLinkMajorSchools.stream().collect(Collectors.toMap(MallLinkMajorSchool::getSchoolId, e -> e));
List<MallAcceptRule> mallAcceptRules = mallAcceptRuleMapper.selectMallAcceptRuleList(new MallAcceptRule());
Map<Integer, List<MallAcceptRule>> mallAcceptRuleMap =
mallAcceptRules.stream().collect(Collectors.groupingBy(MallAcceptRule::getRuleClass));
List<MallSchoolAcceptRecord> mallSchoolAcceptRecordList = new ArrayList<>();
List<MallAcceptPlan> mallAcceptPlans = new ArrayList<>();
List<MallSchoolAccept> mallSchoolAccepts = new ArrayList<>();
for (String s : collect.keySet()) {
MallSchool mallSchool = mallSchoolMap.get(s);
for (MallSchoolExcelBo mallSchoolExcelBo : collect.get(s)) {
try {
List<MallAcceptRule> mallAcceptRule = mallAcceptRuleMap.get(Integer.valueOf(mallSchoolExcelBo.getSubjectType()));
MallAcceptRule mallAcceptRule1 = mallAcceptRule.stream().filter(item ->
item.getRuleStr().equals(mallSchoolExcelBo.getRuleStr())).findFirst().orElse(null);
MallSchoolAcceptRecord mallSchoolAcceptRecord = new MallSchoolAcceptRecord();
mallSchoolAcceptRecord.setSchoolId(mallSchool.getSchoolId());
mallSchoolAcceptRecord.setBatchId(stringLongMap.get(mallSchoolExcelBo.getBatchName()));
mallSchoolAcceptRecord.setAcceptNum(Integer.valueOf(mallSchoolExcelBo.getAcceptNum()));
mallSchoolAcceptRecord.setAcceptYear(mallSchoolExcelBo.getAcceptYear());
mallSchoolAcceptRecord.setAcceptLowest(new BigDecimal(mallSchoolExcelBo.getAcceptLowest()));
mallSchoolAcceptRecord.setCultureLowest(new BigDecimal(mallSchoolExcelBo.getCultureLowest()));
mallSchoolAcceptRecord.setMajorLowest(new BigDecimal(mallSchoolExcelBo.getMajorLowest()));
mallSchoolAcceptRecord.setSubjectType(mallSchoolExcelBo.getSubjectType());
mallSchoolAcceptRecord.setAcceptRuleId(mallAcceptRule1.getAcceptRuleId());
mallSchoolAcceptRecord.setCreateAt(DateUtils.dateTimeNow(DateUtils.YYYY_MM_DD_HH_MM_SS));
mallSchoolAcceptRecord.setUpdateAt(DateUtils.dateTimeNow(DateUtils.YYYY_MM_DD_HH_MM_SS));
mallSchoolAcceptRecordList.add(mallSchoolAcceptRecord);
MallMajorClass mallMajorClass = majorClasses.stream().filter(item ->
item.getMajorName().equals(mallSchoolExcelBo.getMajorName1())).findFirst().orElse(null);
MallAcceptPlan mallAcceptPlan = new MallAcceptPlan();
mallAcceptPlan.setSchoolId(mallSchool.getSchoolId());
mallAcceptPlan.setBatchId(stringLongMap.get(mallSchoolExcelBo.getBatchName()));
mallAcceptPlan.setMajorId(mallMajorClass.getMajorId());
mallAcceptPlan.setPlanYear(mallSchoolExcelBo.getAcceptYear());
mallAcceptPlan.setAcceptRuleId(mallAcceptRule1.getAcceptRuleId());
mallAcceptPlan.setSubjectType(Integer.valueOf(mallSchoolExcelBo.getSubjectType()));
mallAcceptPlan.setAcceptNum(Integer.valueOf(mallSchoolExcelBo.getAcceptNum()));
mallAcceptPlan.setAcceptLowest(new BigDecimal(mallSchoolExcelBo.getAcceptLowest()));
mallAcceptPlan.setSchoolPrice(new BigDecimal(mallSchoolExcelBo.getSchoolPrice()));
mallAcceptPlan.setLinkId(majorSchoolMap.get(mallSchool.getSchoolId()).getLinkId());
mallAcceptPlan.setCreateAt(DateUtils.dateTimeNow(DateUtils.YYYY_MM_DD_HH_MM_SS));
mallAcceptPlan.setUpdateAt(DateUtils.dateTimeNow(DateUtils.YYYY_MM_DD_HH_MM_SS));
mallAcceptPlans.add(mallAcceptPlan);
MallSchoolAccept mallSchoolAccept = new MallSchoolAccept();
mallSchoolAccept.setSchoolId(mallSchool.getSchoolId());
mallSchoolAccept.setBatchId(stringLongMap.get(mallSchoolExcelBo.getBatchName()));
mallSchoolAccept.setMajorId(mallMajorClass.getMajorId());
mallSchoolAccept.setAcceptRuleId(mallAcceptRule1.getAcceptRuleId());
mallSchoolAccept.setAcceptNum(Integer.valueOf(mallSchoolExcelBo.getAcceptNum()));
mallSchoolAccept.setAcceptLowest(new BigDecimal(mallSchoolExcelBo.getAcceptLowest()));
mallSchoolAccept.setAcceptYear(mallSchoolExcelBo.getAcceptYear());
mallSchoolAccept.setSubjectType(mallSchoolExcelBo.getSubjectType());
mallSchoolAccept.setLinkId(majorSchoolMap.get(mallSchool.getSchoolId()).getLinkId());
mallSchoolAccept.setReference(new BigDecimal(mallSchoolExcelBo.getReference()));
mallSchoolAccept.setIsReference(1);
mallSchoolAccept.setCreateAt(DateUtils.dateTimeNow(DateUtils.YYYY_MM_DD_HH_MM_SS));
mallSchoolAccept.setUpdateAt(DateUtils.dateTimeNow(DateUtils.YYYY_MM_DD_HH_MM_SS));
mallSchoolAccepts.add(mallSchoolAccept);
successNum++;
successMsg.append("<br/>" + successNum + "学校数据:" + mallSchoolExcelBo.getSchoolName() + " 导入成功");
} catch (Exception e) {
failureNum++;
String msg = "<br/>" + failureNum + "学校数据:" + mallSchoolExcelBo.getSchoolName() + " 导入失败:";
failureMsg.append(msg + e.getMessage());
log.error(msg, e);
}
}
}
mallSchoolAcceptRecordMapper.insertByList(mallSchoolAcceptRecordList);
mallAcceptPlanMapper.insertByList(mallAcceptPlans);
mallSchoolAcceptMapper.insertByList(mallSchoolAccepts);
if (failureNum > 0) {
failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
throw new ServiceException(failureMsg.toString());
} else {
successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
}
return successMsg.toString();
}
return "未查询到学校数据";
}
/**
* 查询学校
*
......@@ -152,7 +233,7 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
public MallSchool selectMallSchoolBySchoolId(Long schoolId) {
MallSchool mallSchool = mallSchoolMapper.selectMallSchoolBySchoolId(schoolId);
if (ObjectUtils.isNotEmpty(mallSchool)){
if (ObjectUtils.isNotEmpty(mallSchool)) {
// 学校批次查询
List<Long> list = mallSchoolBatchLinkMapper.selectMallSchoolBatchLinkBySchoolId(mallSchool.getSchoolId());
Long[] Longs = list.toArray(new Long[list.size()]);
......@@ -160,7 +241,7 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
// 查询层次
MallSchoolLevel mallSchoolLevel = mallSchoolLevelMapper.selectMallSchoolLevelBySchoolId(schoolId);
if(ObjectUtils.isNotEmpty(mallSchoolLevel)){
if (ObjectUtils.isNotEmpty(mallSchoolLevel)) {
mallSchool.setConfigLevelId(mallSchoolLevel.getConfigLevelId());
mallSchool.setConfigLevelName(mallSchoolLevel.getConfigLevelName());
}
......@@ -190,16 +271,28 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
@Override
public List<MallSchool> selectMallSchoolListForExcel(MallSchool mallSchool) {
List<MallSchool> list = mallSchoolMapper.selectMallSchoolList(mallSchool);
if (!list.isEmpty()){
for (MallSchool school : list) {
// 查询层次
MallSchoolLevel mallSchoolLevel = mallSchoolLevelMapper.selectMallSchoolLevelBySchoolId(school.getSchoolId());
if(ObjectUtils.isNotEmpty(mallSchoolLevel)){
school.setConfigLevelId(mallSchoolLevel.getConfigLevelId());
school.setConfigLevelName(mallSchoolLevel.getConfigLevelName());
}
}
}
// if (!list.isEmpty()){
// List<MallSchoolLevel> mallSchoolLevels = mallSchoolLevelMapper.selectMallSchoolLevelBySchoolIds(
// list.stream().map(MallSchool::getSchoolId).collect(Collectors.toList()));
// if (CollectionUtil.isNotEmpty(mallSchoolLevels)){
// Map<Long, MallSchoolLevel> collect = mallSchoolLevels.stream().collect(Collectors.toMap(MallSchoolLevel::getSchoolId, e -> e));
// list.stream().peek(l -> {
// MallSchoolLevel mallSchoolLevel = collect.get(l.getSchoolId());
// if (ObjectUtils.isNotEmpty(mallSchoolLevel)){
// l.setConfigLevelId(mallSchoolLevel.getConfigLevelId());
// l.setConfigLevelName(mallSchoolLevel.getConfigLevelName());
// }
// }).collect(Collectors.toList());
// }
// // for (MallSchool school : list) {
// // // 查询层次
// // MallSchoolLevel mallSchoolLevel = mallSchoolLevelMapper.selectMallSchoolLevelBySchoolId(school.getSchoolId());
// // if(ObjectUtils.isNotEmpty(mallSchoolLevel)){
// // school.setConfigLevelId(mallSchoolLevel.getConfigLevelId());
// // school.setConfigLevelName(mallSchoolLevel.getConfigLevelName());
// // }
// // }
// }
return list;
}
......@@ -237,7 +330,7 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
// 批次学校关联
Long[] batchList = mallSchool.getBatchList();
if (batchList.length > 0){
if (batchList.length > 0) {
for (Long l : batchList) {
// 批次查询
MallBatch mallBatch = mallBatchMapper.selectMallBatchByBatchId(l);
......@@ -296,12 +389,12 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
// 批次学校关联
Long[] batchList = mallSchool.getBatchList();
if (batchList.length > 0){
if (batchList.length > 0) {
// 删除不许要的批次
mallSchoolBatchLinkMapper.deleteSchoolBatchBySchoolId(mallSchool.getSchoolId());
for (Long l : batchList) {
MallSchoolBatchLink link = mallSchoolBatchLinkMapper.selectSchoolBatchLinkBySchoolIdAndBatchId(mallSchool.getSchoolId(), Long.valueOf(l));
if (ObjectUtils.isEmpty(link)){
if (ObjectUtils.isEmpty(link)) {
// 新增
MallBatch mallBatch = mallBatchMapper.selectMallBatchByBatchId(Long.valueOf(l));
MallSchoolBatchLink mallSchoolBatchLink = new MallSchoolBatchLink();
......@@ -319,7 +412,7 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
Long configLevelId = mallSchool.getConfigLevelId();
MallSchoolLevel schoolLevel = mallSchoolLevelMapper.selectMallSchoolLevelBySchoolId(mallSchool.getSchoolId());
MallConfigLevel mallConfigLevel = mallConfigLevelMapper.selectMallConfigLevelByConfigLevelId(configLevelId);
if (ObjectUtils.isNotEmpty(schoolLevel)){
if (ObjectUtils.isNotEmpty(schoolLevel)) {
// 查询层次列表
schoolLevel.setConfigLevelId(configLevelId);
schoolLevel.setConfigLevelName(mallConfigLevel.getConfigLevelName());
......@@ -335,7 +428,6 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
}
MallConfigType mallConfigType = mallConfigTypeMapper.selectMallConfigTypeByConfigTypeId(mallSchool.getConfigTypeId());
mallSchool.setConfigTypeName(mallConfigType.getConfigTypeName());
return mallSchoolMapper.updateMallSchool(mallSchool);
......@@ -386,7 +478,7 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
Integer pageNum,
Integer pageSize) {
PageHelper.startPage(pageNum, pageSize);
List<SchoolVO> schoolList = mallSchoolMapper.selectSchoolList(schoolName, batchId, configLevelId, configTypeId, provinceId, cityId, null,null);
List<SchoolVO> schoolList = mallSchoolMapper.selectSchoolList(schoolName, batchId, configLevelId, configTypeId, provinceId, cityId, null, null);
if (schoolList.size() > 0) {
for (SchoolVO schoolVO : schoolList) {
......@@ -403,34 +495,35 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
/**
* 大学对比学校列表
* @param schoolName 学校名称
* @param batchId 批次id
*
* @param schoolName 学校名称
* @param batchId 批次id
* @param configLevelId 层次id
* @param configTypeId 学校类型id
* @param provinceId 省份id
* @param cityId 城市id
* @param pageNum 页码
* @param pageSize 每页个数
* @param configTypeId 学校类型id
* @param provinceId 省份id
* @param cityId 城市id
* @param pageNum 页码
* @param pageSize 每页个数
* @return 结果
*/
@Override
public AjaxResult selectMatchSchoolList(String schoolName,
Long batchId,
Long configLevelId,
Long configTypeId,
Long provinceId,
Long cityId,
Long id,
Integer pageNum,
Integer pageSize) {
Long batchId,
Long configLevelId,
Long configTypeId,
Long provinceId,
Long cityId,
Long id,
Integer pageNum,
Integer pageSize) {
// 查询用户成绩
MallMemberUser mallMemberUser = mallMemberUserMapper.selectMallMemberUserById(id);
if (ObjectUtils.isEmpty(mallMemberUser.getMajorScore()) || ObjectUtils.isEmpty(mallMemberUser.getCultureScore())){
if (ObjectUtils.isEmpty(mallMemberUser.getMajorScore()) || ObjectUtils.isEmpty(mallMemberUser.getCultureScore())) {
return AjaxResult.error("请先录入成绩");
}
Integer majorScore = mallMemberUser.getMajorScore();
Integer cultureScore = mallMemberUser.getCultureScore();
//选科:0-文科,1-理科
// 选科:0-文科,1-理科
String subjectType = mallMemberUser.getSubjectType();
PageHelper.startPage(pageNum, pageSize);
......@@ -438,15 +531,15 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
if (schoolList.size() > 0) {
for (SchoolVO schoolVO : schoolList) {
//查询该学校 该批次 学生是否已添加
// 查询该学校 该批次 学生是否已添加
ContrastRecord contrastRecord = new ContrastRecord();
contrastRecord.setBatchId(batchId);
contrastRecord.setUserId(id);
contrastRecord.setSchoolId(schoolVO.getSchoolId());
List<ContrastRecord> contrastRecords = contrastRecordService.selectContrastRecordList(contrastRecord);
if(null != contrastRecords && contrastRecords.size()>0){//已添加
if (null != contrastRecords && contrastRecords.size() > 0) {// 已添加
schoolVO.setRecordType("1");
}else{//未添加
} else {// 未添加
schoolVO.setRecordType("0");
}
// 查询标签列表
......@@ -456,8 +549,8 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
}
//// 学校录取率
//Map<String, Object> result = mallCountMethodService.getAcceptRate(subjectType, schoolVO.getSchoolId(), batchId, cultureScore, majorScore);
//if (!result.isEmpty() && new BigDecimal(result.get("acceptRate").toString()).compareTo(BigDecimal.ZERO) > 0 ){
// Map<String, Object> result = mallCountMethodService.getAcceptRate(subjectType, schoolVO.getSchoolId(), batchId, cultureScore, majorScore);
// if (!result.isEmpty() && new BigDecimal(result.get("acceptRate").toString()).compareTo(BigDecimal.ZERO) > 0 ){
// schoolVO.setAcceptRate(new BigDecimal(result.get("acceptRate").toString()));
// schoolVO.setShowAcceptRate(schoolVO.getAcceptRate() + "%");
// schoolVO.setRateType((Integer)result.get("rateType"));
......@@ -472,8 +565,8 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
* 学校概述
*
* @param schoolId 学校id
* @param batchId 批次id
* @param id 用户id
* @param batchId 批次id
* @param id 用户id
* @return 结果
*/
@Override
......@@ -506,9 +599,9 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
// 是否加入对比
List<Long> longs = contrastRecordMapper.selectSchoolContrastStatus(id, schoolId, batchId);
if (longs.isEmpty()){
if (longs.isEmpty()) {
schoolVO.setRecordType("0");
}else{
} else {
schoolVO.setRecordType("1");
schoolVO.setRecordId(longs.get(0));
}
......@@ -544,16 +637,17 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
/**
* 学校录取数据
* @param schoolId 学校id
* @param batchId 批次id
*
* @param schoolId 学校id
* @param batchId 批次id
* @return 结果
*/
@Override
public AjaxResult selectSchoolRecord( Long schoolId, Long batchId, Long id) {
public AjaxResult selectSchoolRecord(Long schoolId, Long batchId, Long id) {
// 查询用户信息
MallMemberUser mallMemberUser = mallMemberUserMapper.selectMallMemberUserById(id);
if (StringUtils.isBlank(mallMemberUser.getSubjectType())){
if (StringUtils.isBlank(mallMemberUser.getSubjectType())) {
return AjaxResult.error("请先完善学科信息");
}
......@@ -562,32 +656,32 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
List<SchoolAcceptRecordVO> recordList = mallSchoolAcceptRecordMapper.selectAcceptRecordList(schoolId, batchId, subjectType);
// 专业录取数据
List<SchoolMajorAcceptRecordVO> majorRecordList = mallSchoolAcceptMapper.selectSchoolMajorRecordList(schoolId, batchId , subjectType);
List<SchoolMajorAcceptRecordVO> majorRecordList = mallSchoolAcceptMapper.selectSchoolMajorRecordList(schoolId, batchId, subjectType);
// 有参考分的计算录取率
for (SchoolMajorAcceptRecordVO schoolMajorAcceptRecordVO : majorRecordList) {
if (batchId == 4L){
if (batchId == 4L) {
// 专科
if (schoolMajorAcceptRecordVO.getAcceptLowest() != null ){
if ( mallMemberUser.getCultureScore() != null && mallMemberUser.getMajorScore() != null){
if (schoolMajorAcceptRecordVO.getAcceptLowest() != null) {
if (mallMemberUser.getCultureScore() != null && mallMemberUser.getMajorScore() != null) {
Map<String, Object> resultRate = mallCountMethodService.zhuankegetAcceptRateForReport(schoolMajorAcceptRecordVO.getAcceptLowest(), schoolMajorAcceptRecordVO.getAcceptRuleId(), mallMemberUser.getCultureScore(), mallMemberUser.getMajorScore());
schoolMajorAcceptRecordVO.setAcceptRate(resultRate.get("acceptRate") + "%");
}else{
} else {
schoolMajorAcceptRecordVO.setAcceptRate("0");
}
}
}else{
} else {
// 本科
if (schoolMajorAcceptRecordVO.getIsReference() != null &&schoolMajorAcceptRecordVO.getIsReference().equals(1)){
if (schoolMajorAcceptRecordVO.getIsReference() != null && schoolMajorAcceptRecordVO.getIsReference().equals(1)) {
if ( mallMemberUser.getCultureScore() != null && mallMemberUser.getMajorScore() != null){
if (mallMemberUser.getCultureScore() != null && mallMemberUser.getMajorScore() != null) {
Map<String, Object> resultRate = mallCountMethodService.getAcceptRateForReport(schoolMajorAcceptRecordVO.getReference(), schoolMajorAcceptRecordVO.getAcceptRuleId(), mallMemberUser.getCultureScore(), mallMemberUser.getMajorScore());
schoolMajorAcceptRecordVO.setAcceptRate(resultRate.get("acceptRate") + "%");
}else{
} else {
schoolMajorAcceptRecordVO.setAcceptRate("0");
}
......@@ -606,7 +700,7 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
for (String sortedYear : sortedYears) {
Integer isReference = 0;
List<SchoolMajorAcceptRecordVO> collect1 = majorRecordList.stream().filter(item -> item.getAcceptYear().equals(sortedYear)).collect(Collectors.toList());
if (collect1.get(0).getIsReference() != null && collect1.get(0).getIsReference() == 1 && sortedYears.indexOf(sortedYear) == 0){
if (collect1.get(0).getIsReference() != null && collect1.get(0).getIsReference() == 1 && sortedYears.indexOf(sortedYear) == 0) {
isReference = 1;
}
SchoolMajorAcceptGroupVO schoolMajorAcceptGroup = new SchoolMajorAcceptGroupVO();
......@@ -618,7 +712,7 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
.collect(Collectors.toList());
// 录取原则分组划前端横线
if (subList.size() > 0){
if (subList.size() > 0) {
List<List<SchoolMajorAcceptRecordVO>> list = new ArrayList<>();
Map<String, List<SchoolMajorAcceptRecordVO>> listMap = subList.stream().collect(Collectors.groupingBy(SchoolMajorAcceptRecordVO::getAcceptRuleStr));
for (String s : listMap.keySet()) {
......@@ -639,6 +733,7 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
/**
* 我的综合分
*
* @param schoolId
* @param batchId
* @param id
......@@ -650,10 +745,10 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
MallMemberUser mallMemberUser = mallMemberUserMapper.selectMallMemberUserById(id);
BigDecimal totalScore = BigDecimal.ZERO;
// 专业录取数据
Long ruleId = mallSchoolAcceptMapper.selectNewAccept(schoolId, batchId , mallMemberUser.getSubjectType());
if (null != ruleId && null != mallMemberUser.getCultureScore() && null != mallMemberUser.getMajorScore()){
Long ruleId = mallSchoolAcceptMapper.selectNewAccept(schoolId, batchId, mallMemberUser.getSubjectType());
if (null != ruleId && null != mallMemberUser.getCultureScore() && null != mallMemberUser.getMajorScore()) {
// 计算综合分
totalScore = mallCountMethodService.getTotalScore(mallMemberUser.getCultureScore(), mallMemberUser.getMajorScore(), ruleId);
totalScore = mallCountMethodService.getTotalScore(mallMemberUser.getCultureScore(), mallMemberUser.getMajorScore(), ruleId);
}
Map<String, Object> map = new HashMap<>();
map.put("score", totalScore);
......@@ -662,6 +757,7 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
/**
* 院校录取数据详情
*
* @param schoolAcceptRecordId 数据id
* @return 结果
*/
......@@ -672,6 +768,7 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
/**
* 学校评估列表
*
* @param schoolId 学校id
* @return 结果
*/
......@@ -682,6 +779,7 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
/**
* 学校招生简章
*
* @param schoolId 学校id
* @return 结果
*/
......@@ -697,7 +795,7 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
// 用户信息
MallMemberUser mallMemberUser = mallMemberUserMapper.selectMallMemberUserById(id);
if (StringUtils.isBlank(mallMemberUser.getSubjectType())){
if (StringUtils.isBlank(mallMemberUser.getSubjectType())) {
return AjaxResult.error("请先完善用户学科信息");
}
String subjectType = mallMemberUser.getSubjectType();
......@@ -705,33 +803,33 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
// 招生计划
List<SchoolAcceptPlanVO> planList = mallAcceptPlanMapper.selectAcceptPlanList(schoolId, batchId, subjectType);
//for (SchoolAcceptPlanVO schoolAcceptPlanVO : planList) {
//// 投档公式
//Long acceptRuleId = schoolAcceptPlanVO.getAcceptRuleId();
//String countMethodStr = mallCountMethodService.getCountMethodStr(acceptRuleId);
//schoolAcceptPlanVO.setAcceptRuleStr(countMethodStr);
//// 专业名称处理
//Long majorId = schoolAcceptPlanVO.getMajorId();
//List<String> list = mallLinkMajorSchoolMapper.selectSchoolMajorByParentId(schoolId, majorId);
//if (list.size() > 0){
// StringBuilder sb = new StringBuilder();
// for (String s : list) {
// sb.append(s).append(",");
// }
// String str = sb.toString();
// String result = str.substring(0, str.length() - 1);
// schoolAcceptPlanVO.setMajorStr(schoolAcceptPlanVO.getMajorName() + "(" + result + ")");
//}else{
// schoolAcceptPlanVO.setMajorStr(schoolAcceptPlanVO.getMajorName());
//}
// for (SchoolAcceptPlanVO schoolAcceptPlanVO : planList) {
//// 投档公式
// Long acceptRuleId = schoolAcceptPlanVO.getAcceptRuleId();
// String countMethodStr = mallCountMethodService.getCountMethodStr(acceptRuleId);
// schoolAcceptPlanVO.setAcceptRuleStr(countMethodStr);
//// 专业名称处理
// Long majorId = schoolAcceptPlanVO.getMajorId();
// List<String> list = mallLinkMajorSchoolMapper.selectSchoolMajorByParentId(schoolId, majorId);
// if (list.size() > 0){
// StringBuilder sb = new StringBuilder();
// for (String s : list) {
// sb.append(s).append(",");
// }
// String str = sb.toString();
// String result = str.substring(0, str.length() - 1);
// schoolAcceptPlanVO.setMajorStr(schoolAcceptPlanVO.getMajorName() + "(" + result + ")");
//}else{
// schoolAcceptPlanVO.setMajorStr(schoolAcceptPlanVO.getMajorName());
//}
//}
List<SchoolAcceptPlanGroupVO> groupList = new ArrayList<>();
if (planList.size() > 0){
if (planList.size() > 0) {
Map<String, List<SchoolAcceptPlanVO>> collect = planList.stream().collect(Collectors.groupingBy(SchoolAcceptPlanVO::getPlanYear));
Set<String> planYears = collect.keySet();
......@@ -751,18 +849,18 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
// 更新时间
String updateRange = "";
Map<String, String> map = mallAcceptPlanMapper.selectUpdateTime(schoolId, batchId);
if (ObjectUtils.isNotEmpty(map)){
if (ObjectUtils.isNotEmpty(map)) {
String startTime = map.get("startTime");
String endTime = map.get("endTime");
String start = DateUtils.format(DateUtils.parseDate(startTime), "M-dd");
String end = DateUtils.format(DateUtils.parseDate(endTime), "M-dd");
if (start.equals(end)){
if (start.equals(end)) {
updateRange = start;
}else{
if (end == null){
} else {
if (end == null) {
updateRange = start;
}else{
} else {
updateRange = start + "~" + end;
}
......@@ -780,8 +878,9 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
/**
* 3个层次院校列表
*
* @param configLevelId 层次id
* @param batchId 批次id
* @param batchId 批次id
* @return 结果
*/
@Override
......@@ -791,24 +890,24 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
Long higherLevelId = null;
Long lowerLevelId = null;
if (!(allLevelList.size() > 0)){
if (!(allLevelList.size() > 0)) {
return AjaxResult.error("层次信息异常");
}
List<SchoolLevelVO> collect = allLevelList.stream().filter(item -> item.getConfigLevelId().equals(configLevelId)).collect(Collectors.toList());
if (!(collect.size() > 0)){
if (!(collect.size() > 0)) {
return AjaxResult.error("当前层次不存在");
}
SchoolLevelVO schoolLevelVO = collect.get(0);
int i = allLevelList.indexOf(schoolLevelVO);
if (allLevelList.size() > 1){
if (allLevelList.size() > 1) {
if (i == 0){
if (i == 0) {
lowerLevelId = allLevelList.get(i + 1).getConfigLevelId();
}else if (i == allLevelList.size()-1){
} else if (i == allLevelList.size() - 1) {
higherLevelId = allLevelList.get(i - 1).getConfigLevelId();
}else{
} else {
higherLevelId = allLevelList.get(i - 1).getConfigLevelId();
lowerLevelId = allLevelList.get(i + 1).getConfigLevelId();
}
......@@ -823,29 +922,29 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
Map<String, Object> lowerMap = new HashMap<>();
MallMemberUser mallMemberUser = mallMemberUserMapper.selectMallMemberUserById(id);
if (StringUtils.isBlank(mallMemberUser.getSubjectType())){
if (StringUtils.isBlank(mallMemberUser.getSubjectType())) {
return AjaxResult.error("请先完善学科信息");
}
String subjectType = mallMemberUser.getSubjectType();
// 高一层次
if (!ObjectUtils.isEmpty(higherLevelId)){
higherLevelList = this.selectLevelSchoolList(higherLevelId, batchId, schoolId, subjectType);
if (!ObjectUtils.isEmpty(higherLevelId)) {
higherLevelList = this.selectLevelSchoolList(higherLevelId, batchId, schoolId, subjectType);
higherMap.put("higherLevelId", higherLevelId);
higherMap.put("higherLevelList", higherLevelList);
}
// 同一层次
if (!ObjectUtils.isEmpty(configLevelId)){
sameLevelList = this.selectLevelSchoolList(configLevelId, batchId, schoolId, subjectType);
sameMap.put("sameLevelId", configLevelId);
sameMap.put("sameLevelList", sameLevelList);
if (!ObjectUtils.isEmpty(configLevelId)) {
sameLevelList = this.selectLevelSchoolList(configLevelId, batchId, schoolId, subjectType);
sameMap.put("sameLevelId", configLevelId);
sameMap.put("sameLevelList", sameLevelList);
}
// 低一层次
if (!ObjectUtils.isEmpty(lowerLevelId)){
lowerLevelList = this.selectLevelSchoolList(lowerLevelId, batchId, schoolId, subjectType);
lowerMap.put("lowerLevelId", lowerLevelId);
lowerMap.put("lowerLevelList", lowerLevelList);
if (!ObjectUtils.isEmpty(lowerLevelId)) {
lowerLevelList = this.selectLevelSchoolList(lowerLevelId, batchId, schoolId, subjectType);
lowerMap.put("lowerLevelId", lowerLevelId);
lowerMap.put("lowerLevelList", lowerLevelList);
}
Map<String, Object> result = new HashMap<>();
......@@ -859,16 +958,17 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
/**
* 查询当前层次学校列表
*
* @param configLevelId 层次id
* @param batchId 批次id
* @param batchId 批次id
* @return
*/
public List<SchoolVO> selectLevelSchoolList(Long configLevelId, Long batchId, Long schoolId, String subjectType){
public List<SchoolVO> selectLevelSchoolList(Long configLevelId, Long batchId, Long schoolId, String subjectType) {
// 查询该层次下学校列表
PageHelper.startPage(1, 3);
List<SchoolVO> schoolList = mallSchoolMapper.selectSchoolListByLevelId( batchId, configLevelId , schoolId, subjectType);
List<SchoolVO> schoolList = mallSchoolMapper.selectSchoolListByLevelId(batchId, configLevelId, schoolId, subjectType);
if (schoolList.size() > 0){
if (schoolList.size() > 0) {
for (SchoolVO schoolVO : schoolList) {
if (StringUtils.isNotBlank(schoolVO.getTags())) {
// 查询标签列表
......@@ -884,21 +984,23 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
/**
* 层级院校列表
*
* @param configLevelId 层级id
* @param batchId 批次id
* @param pageNum 页码
* @param pageSize 每页个数
* @param batchId 批次id
* @param pageNum 页码
* @param pageSize 每页个数
* @return
*/
@Override
public PageInfo<SchoolVO> selectSchoolListByLevelId(Long configLevelId, Long batchId, Long schoolId, Long id, Integer pageNum, Integer pageSize) {
public PageInfo<SchoolVO> selectSchoolListByLevelId(Long configLevelId, Long batchId, Long schoolId, Long
id, Integer pageNum, Integer pageSize) {
// 查询用户信息
MallMemberUser mallMemberUser = mallMemberUserMapper.selectMallMemberUserById(id);
PageHelper.startPage(pageNum, pageSize);
List<SchoolVO> schoolVOS = mallSchoolMapper.selectSchoolListByLevelId(batchId, configLevelId, schoolId, mallMemberUser.getSubjectType() );
List<SchoolVO> schoolVOS = mallSchoolMapper.selectSchoolListByLevelId(batchId, configLevelId, schoolId, mallMemberUser.getSubjectType());
if (schoolVOS.size() > 0){
if (schoolVOS.size() > 0) {
for (SchoolVO schoolVO : schoolVOS) {
if (StringUtils.isNotBlank(schoolVO.getTags())) {
// 查询标签列表
......@@ -912,19 +1014,21 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
/**
* 联考成绩分析
*
* @param schoolId 学校id
* @param batchId 批次id
* @param id 用户id
* @param pageNum 页码
* @param batchId 批次id
* @param id 用户id
* @param pageNum 页码
* @param pageSize 每页个数
* @return 结果
*/
@Override
public AjaxResult selectUnionTestAnalysisList(Long schoolId, Long batchId, Long id, Integer pageNum, Integer pageSize) {
public AjaxResult selectUnionTestAnalysisList(Long schoolId, Long batchId, Long id, Integer pageNum, Integer
pageSize) {
// 查询用户成绩
MallMemberUser mallMemberUser = mallMemberUserMapper.selectMallMemberUserById(id);
if (StringUtils.isBlank(mallMemberUser.getSubjectType())){
if (StringUtils.isBlank(mallMemberUser.getSubjectType())) {
return AjaxResult.error("请先完善用户学科信息");
}
......@@ -932,20 +1036,20 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
PageHelper.startPage(pageNum, pageSize);
List<UnionTestAnalysisVO> list = mallSchoolAcceptRecordMapper.selectUnionTestAnalysisList(schoolId, batchId, mallMemberUser.getSubjectType());
if (list.size() > 0){
if (list.size() > 0) {
for (UnionTestAnalysisVO unionTestAnalysisVO : list) {
// 计算所需文化分
Integer majorScore = mallMemberUser.getMajorScore();
BigDecimal acceptLowest = unionTestAnalysisVO.getAcceptLowest();
BigDecimal cultureLowest = unionTestAnalysisVO.getCultureLowest();
if (ObjectUtils.isNotEmpty(majorScore) && ObjectUtils.isNotEmpty(acceptLowest) ){
if (ObjectUtils.isNotEmpty(majorScore) && ObjectUtils.isNotEmpty(acceptLowest)) {
Long acceptRuleId = unionTestAnalysisVO.getAcceptRuleId();
MallAcceptRule mallAcceptRule = mallAcceptRuleMapper.selectMallAcceptRuleByAcceptRuleId(acceptRuleId);
BigDecimal needCultureScore = null;
// 如果录取原则没有文化分,则需要文化分为过线文化分
if (!mallAcceptRule.getRuleStr().contains("文化")){
if (!mallAcceptRule.getRuleStr().contains("文化")) {
needCultureScore = cultureLowest;
}else{
} else {
needCultureScore = mallCountMethodService.getNeedCultureScore(majorScore, acceptLowest, acceptRuleId);
}
unionTestAnalysisVO.setNeedCultureScore(needCultureScore);
......@@ -960,19 +1064,21 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
/**
* 综合成绩分析
*
* @param schoolId 学校id
* @param batchId 批次id
* @param id 用户id
* @param pageNum 页码
* @param batchId 批次id
* @param id 用户id
* @param pageNum 页码
* @param pageSize 每页个数
* @return 结果
*/
@Override
public AjaxResult selectUserScoreAnalysisList(Long schoolId, Long batchId, Long id, Integer pageNum, Integer pageSize) {
public AjaxResult selectUserScoreAnalysisList(Long schoolId, Long batchId, Long id, Integer pageNum, Integer
pageSize) {
// 用户录取信息
MallMemberUser mallMemberUser = mallMemberUserMapper.selectMallMemberUserById(id);
if (StringUtils.isBlank(mallMemberUser.getSubjectType())){
if (StringUtils.isBlank(mallMemberUser.getSubjectType())) {
return AjaxResult.error("请先完善用户学科信息");
}
String subjectType = mallMemberUser.getSubjectType();
......@@ -980,9 +1086,9 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
PageHelper.startPage(pageNum, pageSize);
List<UserScoreAnalysisVO> list = mallSchoolAcceptRecordMapper.selectUserScoreAnalysisList(schoolId, batchId, subjectType);
if(ObjectUtils.isNotEmpty(mallMemberUser.getCultureScore()) && ObjectUtils.isNotEmpty(mallMemberUser.getMajorScore())){
if (ObjectUtils.isNotEmpty(mallMemberUser.getCultureScore()) && ObjectUtils.isNotEmpty(mallMemberUser.getMajorScore())) {
// 计算综合分
if (!list.isEmpty()){
if (!list.isEmpty()) {
for (UserScoreAnalysisVO userScoreAnalysisVO : list) {
BigDecimal totalScore = mallCountMethodService.getTotalScore(mallMemberUser.getCultureScore(), mallMemberUser.getMajorScore(), userScoreAnalysisVO.getAcceptRuleId());
userScoreAnalysisVO.setMyScore(totalScore);
......@@ -1000,6 +1106,7 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
/**
* 智能匹配大学
*
* @param matchSchoolBO 匹配参数
* @return 结果
*/
......@@ -1011,9 +1118,9 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
Long subjectId = matchSchoolBO.getSubjectId();
// 查询学科
//MallSubjectClass mallSubjectClass = mallSubjectClassMapper.selectMallSubjectClassBySubjectId(subjectId);
//String subjectType = "文科".equals(mallSubjectClass.getSubjectName()) || "文".equals(mallSubjectClass.getSubjectName())? "0" : "1";
String subjectType = subjectId == 1L? "0" : "1";
// MallSubjectClass mallSubjectClass = mallSubjectClassMapper.selectMallSubjectClassBySubjectId(subjectId);
// String subjectType = "文科".equals(mallSubjectClass.getSubjectName()) || "文".equals(mallSubjectClass.getSubjectName())? "0" : "1";
String subjectType = subjectId == 1L ? "0" : "1";
// 查询批次大学列表
List<SchoolVO> schoolVOS = mallSchoolMapper.selectSchoolList(null, batchId, null, null, null, null, null, subjectType);
......@@ -1031,10 +1138,20 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
List<SchoolVO> list1 = new ArrayList<>();
List<SchoolVO> list2 = new ArrayList<>();
List<SchoolVO> list3 = new ArrayList<>();
if (!schoolVOS.isEmpty()){
//List<MallSchoolTag> allTag = mallSchoolTagMapper.selectTagList();
if (!schoolVOS.isEmpty()) {
// List<MallSchoolTag> allTag = mallSchoolTagMapper.selectTagList();
// 学校录取率计算
try {
boolean flag = false;
if (subjectType.equals("0") && majorScore >= 193 && cultureScore >= 331){
flag = true;
}else if (subjectType.equals("1") && majorScore >= 193 && cultureScore >= 328){
flag = true;
}
boolean finalFlag = flag;
CountDownLatch countDownLatch = new CountDownLatch(schoolVOS.size());
for (SchoolVO schoolVO : schoolVOS) {
......@@ -1043,33 +1160,36 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
public void run() {
MallSchoolAccept mallSchoolAccept = new MallSchoolAccept();
Map<String, Object> result = new HashMap<>();
if(batchId == 4L){
if (batchId == 4L) {
// 专科
System.out.println("========" + Thread.currentThread().getName() + schoolVO.getSchoolId());
mallSchoolAccept = mallSchoolAcceptMapper.selectZhuankeAcceptBySchoolId(schoolVO.getSchoolId(), batchId, subjectType);
// 计算专科
if (ObjectUtils.isNotEmpty(mallSchoolAccept)){
result = mallCountMethodService.zhuankegetAcceptRateForReport(mallSchoolAccept.getAcceptLowest(), mallSchoolAccept.getAcceptRuleId(), cultureScore, majorScore);
}else {
if (ObjectUtils.isNotEmpty(mallSchoolAccept)) {
result = mallCountMethodService.zhuankegetAcceptRateForReport(mallSchoolAccept.getAcceptLowest(), mallSchoolAccept.getAcceptRuleId(), cultureScore, majorScore);
} else {
result.put("acceptRate", BigDecimal.ZERO);
result.put("rateType", -2);
}
}else{
} else if (finalFlag){
// 本科
mallSchoolAccept = mallSchoolAcceptMapper.selectMinReferenceBySchoolId(schoolVO.getSchoolId(), batchId, subjectType);
// 计算
if (ObjectUtils.isNotEmpty(mallSchoolAccept)){
result = mallCountMethodService.getAcceptRateForReport(mallSchoolAccept.getReference(), mallSchoolAccept.getAcceptRuleId(), cultureScore, majorScore);
}else {
if (ObjectUtils.isNotEmpty(mallSchoolAccept)) {
result = mallCountMethodService.getAcceptRateForReport(mallSchoolAccept.getReference(), mallSchoolAccept.getAcceptRuleId(), cultureScore, majorScore);
} else {
result.put("acceptRate", "0");
result.put("rateType", -2);
}
}else {
result.put("acceptRate", "0");
result.put("rateType", -2);
}
schoolVO.setAcceptRate(new BigDecimal(result.get("acceptRate").toString()));
schoolVO.setShowAcceptRate(schoolVO.getAcceptRate() + "%");
schoolVO.setRateType((Integer)result.get("rateType"));
schoolVO.setRateType((Integer) result.get("rateType"));
// 查询标签列表
if (StringUtils.isNotBlank(schoolVO.getTags())) {
......@@ -1078,14 +1198,14 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
schoolVO.setTagList(list);
}
Integer rateType = schoolVO.getRateType();
if ( ObjectUtils.isNotEmpty(rateType) ){
if (rateType == 0){
if (ObjectUtils.isNotEmpty(rateType)) {
if (rateType == 0) {
list0.add(schoolVO);
}else if (rateType == 1){
} else if (rateType == 1) {
list1.add(schoolVO);
}else if (rateType == 2){
} else if (rateType == 2) {
list2.add(schoolVO);
}else if (rateType == 3){
} else if (rateType == 3) {
list3.add(schoolVO);
}
}
......@@ -1095,30 +1215,30 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
}
countDownLatch.await();
}catch (Exception e){
} catch (Exception e) {
throw new ServiceException();
}
if (!list0.isEmpty()){
if (!list0.isEmpty()) {
list0.sort(Comparator.comparing(SchoolVO::getAcceptRate).reversed());
}
if (!list1.isEmpty()){
if (!list1.isEmpty()) {
list1.sort(Comparator.comparing(SchoolVO::getAcceptRate).reversed());
}
if (!list2.isEmpty()){
if (!list2.isEmpty()) {
Collections.sort(list2, (a,b)->{
return b.getAcceptRate().compareTo(a.getAcceptRate()) ;
Collections.sort(list2, (a, b) -> {
return b.getAcceptRate().compareTo(a.getAcceptRate());
});
}
if (!list3.isEmpty()){
Collections.sort(list3, (a,b)->{
if (a != null && b != null){
return a.getAcceptRate().compareTo(b.getAcceptRate()) ;
if (!list3.isEmpty()) {
Collections.sort(list3, (a, b) -> {
if (a != null && b != null) {
return a.getAcceptRate().compareTo(b.getAcceptRate());
}
return 0;
});
......@@ -1127,36 +1247,36 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
// 可冒险
result0.put("rateType", 0);
result0.put("num", list0.size());
if (list0.size() <= 3){
if (list0.size() <= 3) {
result0.put("list", list0);
}else {
result0.put("list", list0.subList(0,3));
} else {
result0.put("list", list0.subList(0, 3));
}
// 搏一搏
result1.put("rateType", 1);
result1.put("num", list1.size());
if (list1.size() <= 3){
if (list1.size() <= 3) {
result1.put("list", list1);
}else{
} else {
result1.put("list", list1.subList(0, 3));
}
// 较稳妥
result2.put("rateType", 2);
result2.put("num", list2.size());
if (list2.size() <= 3){
if (list2.size() <= 3) {
result2.put("list", list2);
}else{
} else {
result2.put("list", list2.subList(0, 3));
}
// 可保底
result3.put("rateType", 3);
result3.put("num", list3.size());
if (list3.size() <= 3){
if (list3.size() <= 3) {
result3.put("list", list3);
}else{
} else {
result3.put("list", list3.subList(0, 3));
}
......@@ -1164,7 +1284,7 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
resultList.add(result1);
resultList.add(result2);
resultList.add(result3);
if (result0.size() == 0 && result1.size() == 1 && result2.size() == 2 && result3.size() == 3){
if (result0.size() == 0 && result1.size() == 1 && result2.size() == 2 && result3.size() == 3) {
resultList = Arrays.asList();
}
}
......@@ -1173,46 +1293,47 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
/**
* 根据录取概率分组标记查询学校列表
* @param rateType 类型(0-可冒险,1-搏一搏,2-较稳妥,3-可保底)
* @param id 用户id
* @param batchId 批次id
*
* @param rateType 类型(0-可冒险,1-搏一搏,2-较稳妥,3-可保底)
* @param id 用户id
* @param batchId 批次id
* @param cultureScore 文化分
* @param majorScore 文化分
* @param pageNum 页码
* @param pageSize 每页个数
* @param majorScore 文化分
* @param pageNum 页码
* @param pageSize 每页个数
* @return 结果
*/
@Override
public List<SchoolVO> matchSchoolListByType(Integer rateType,
Long id,
Long batchId,
Integer cultureScore,
Integer majorScore,
Integer pageNum,
Integer pageSize,
Integer subjectId) {
Long id,
Long batchId,
Integer cultureScore,
Integer majorScore,
Integer pageNum,
Integer pageSize,
Integer subjectId) {
// 查询录取率设定表
//List<MallAcceptRateSetting> rateSettings = mallAcceptRateSettingMapper.selectRateSettingList();
// List<MallAcceptRateSetting> rateSettings = mallAcceptRateSettingMapper.selectRateSettingList();
// 查询批次大学列表
List<SchoolVO> schoolVOS = mallSchoolMapper.selectSchoolList(null, batchId, null, null, null, null, null,null);
List<SchoolVO> schoolVOS = mallSchoolMapper.selectSchoolList(null, batchId, null, null, null, null, null, null);
List<Map<String, Object>> resultList = new ArrayList<>();
// 用户成绩查询
MallMemberUser mallMemberUser = mallMemberUserMapper.selectMallMemberUserById(id);
StringBuilder stringBuilder = new StringBuilder();
if (null != subjectId ){
stringBuilder.append(subjectId == 1? "0": "1");
}else{
if (null != subjectId) {
stringBuilder.append(subjectId == 1 ? "0" : "1");
} else {
stringBuilder.append(mallMemberUser.getSubjectType());
}
String subjectType = stringBuilder.toString();
List<SchoolVO> list = new ArrayList<>();
if (!schoolVOS.isEmpty()){
if (!schoolVOS.isEmpty()) {
// 学校录取率计算
try {
CountDownLatch countDownLatch = new CountDownLatch(schoolVOS.size());
......@@ -1224,33 +1345,32 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
// 查询学校最低专业录取分
Map<String, Object> result = new HashMap<>();
MallSchoolAccept mallSchoolAccept = new MallSchoolAccept();
if(batchId == 4L){
if (batchId == 4L) {
// 专科
mallSchoolAccept = mallSchoolAcceptMapper.selectZhuankeAcceptBySchoolId(schoolVO.getSchoolId(), batchId, subjectType);
// 计算专科
if (ObjectUtils.isNotEmpty(mallSchoolAccept)){
result = mallCountMethodService.zhuankegetAcceptRateForReport(mallSchoolAccept.getAcceptLowest(), mallSchoolAccept.getAcceptRuleId(), cultureScore, majorScore);
}else {
if (ObjectUtils.isNotEmpty(mallSchoolAccept)) {
result = mallCountMethodService.zhuankegetAcceptRateForReport(mallSchoolAccept.getAcceptLowest(), mallSchoolAccept.getAcceptRuleId(), cultureScore, majorScore);
} else {
result.put("acceptRate", BigDecimal.ZERO);
result.put("rateType", -2);
}
}else{
mallSchoolAccept = mallSchoolAcceptMapper.selectMinReferenceBySchoolId(schoolVO.getSchoolId(), batchId, subjectType);
if (ObjectUtils.isNotEmpty(mallSchoolAccept)){
result = mallCountMethodService.getAcceptRateForReport(mallSchoolAccept.getReference(), mallSchoolAccept.getAcceptRuleId(), cultureScore, majorScore);
} else {
mallSchoolAccept = mallSchoolAcceptMapper.selectMinReferenceBySchoolId(schoolVO.getSchoolId(), batchId, subjectType);
if (ObjectUtils.isNotEmpty(mallSchoolAccept)) {
result = mallCountMethodService.getAcceptRateForReport(mallSchoolAccept.getReference(), mallSchoolAccept.getAcceptRuleId(), cultureScore, majorScore);
}else{
} else {
result.put("acceptRate", 0);
result.put("rateType", -2);
}
}
if (!result.isEmpty() && new BigDecimal(result.get("acceptRate").toString()).compareTo(BigDecimal.ZERO) > 0 ){
if (!result.isEmpty() && new BigDecimal(result.get("acceptRate").toString()).compareTo(BigDecimal.ZERO) > 0) {
schoolVO.setAcceptRate(new BigDecimal(result.get("acceptRate").toString()));
schoolVO.setShowAcceptRate(schoolVO.getAcceptRate() + "%");
schoolVO.setRateType((Integer)result.get("rateType"));
schoolVO.setRateType((Integer) result.get("rateType"));
}
if (StringUtils.isNotBlank(schoolVO.getTags())) {
......@@ -1264,14 +1384,14 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
}
countDownLatch.await();
}catch (Exception e){
} catch (Exception e) {
throw new ServiceException();
}
// 选择类型
list = schoolVOS.stream().filter(item -> item.getRateType()!=null && item.getRateType().equals(rateType)).collect(Collectors.toList());
list = schoolVOS.stream().filter(item -> item.getRateType() != null && item.getRateType().equals(rateType)).collect(Collectors.toList());
if (!list.isEmpty()){
if (!list.isEmpty()) {
list.sort(Comparator.comparing(SchoolVO::getAcceptRate).reversed());
}
......@@ -1281,35 +1401,37 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
/**
* 升学规划- 我的目标
* @param id 用户id
* @param batchId 批次id
*
* @param id 用户id
* @param batchId 批次id
* @param schoolName 学校名称
* @param majorId 专业id
* @param majorId 专业id
* @return 结果
*/
@Override
public PageInfo<SchoolVO> enterPlanTargetList(Long id, Long batchId, String schoolName, Long majorId, Integer pageNum, Integer pageSize) {
public PageInfo<SchoolVO> enterPlanTargetList(Long id, Long batchId, String schoolName, Long majorId, Integer
pageNum, Integer pageSize) {
// 用户信息
MallMemberUser mallMemberUser = mallMemberUserMapper.selectMallMemberUserById(id);
List<SchoolVO> schoolList = new ArrayList<>();
if (ObjectUtils.isNotEmpty(mallMemberUser.getCultureScore()) && ObjectUtils.isNotEmpty(mallMemberUser.getMajorScore())){
if (ObjectUtils.isNotEmpty(mallMemberUser.getCultureScore()) && ObjectUtils.isNotEmpty(mallMemberUser.getMajorScore())) {
String subjectType = mallMemberUser.getSubjectType();
// 录取率设定信息
//List<MallAcceptRateSetting> settingList = mallAcceptRateSettingMapper.selectRateSettingList();
// List<MallAcceptRateSetting> settingList = mallAcceptRateSettingMapper.selectRateSettingList();
// 我的目标学校
PageHelper.startPage(pageNum, pageSize);
// 专业名称
String twoClassName = "";
if (majorId != null){
if (majorId != null) {
MallMajorClass majorClass = mallMajorClassMapper.selectMallMajorClassByMajorId(majorId);
twoClassName = majorClass.getMajorName();
}
schoolList = mallMemberTargetSchoolMapper.selectTargetSchoolListByUserId(id, batchId, schoolName, twoClassName, subjectType);
if (!schoolList.isEmpty()){
if (!schoolList.isEmpty()) {
for (SchoolVO schoolVO : schoolList) {
// 目标学校状态
......@@ -1325,25 +1447,25 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
// 查询学校最低专业录取分
Map<String, Object> result = new HashMap<>();
MallSchoolAccept mallSchoolAccept = mallSchoolAcceptMapper.selectMinReferenceBySchoolId(schoolVO.getSchoolId(), batchId, subjectType);
if (ObjectUtils.isNotEmpty(mallSchoolAccept)){
result = mallCountMethodService.getAcceptRateForReport(mallSchoolAccept.getReference(), mallSchoolAccept.getAcceptRuleId(), mallMemberUser.getCultureScore(), mallMemberUser.getMajorScore());
}else{
if (ObjectUtils.isNotEmpty(mallSchoolAccept)) {
result = mallCountMethodService.getAcceptRateForReport(mallSchoolAccept.getReference(), mallSchoolAccept.getAcceptRuleId(), mallMemberUser.getCultureScore(), mallMemberUser.getMajorScore());
} else {
result.put("acceptRate", new BigDecimal("1"));
result.put("rateType", -2);
}
if (!result.isEmpty() && new BigDecimal(result.get("acceptRate").toString()).compareTo(BigDecimal.ZERO) > 0 ){
if (!result.isEmpty() && new BigDecimal(result.get("acceptRate").toString()).compareTo(BigDecimal.ZERO) > 0) {
schoolVO.setAcceptRate(new BigDecimal(result.get("acceptRate").toString()));
schoolVO.setShowAcceptRate(schoolVO.getAcceptRate() + "%");
schoolVO.setRateType((Integer)result.get("rateType"));
}else{//录取率为0
schoolVO.setRateType((Integer) result.get("rateType"));
} else {// 录取率为0
schoolVO.setAcceptRate(BigDecimal.ZERO);
schoolVO.setShowAcceptRate(schoolVO.getAcceptRate().toPlainString() + "%");
schoolVO.setRateType((Integer)result.get("rateType"));
schoolVO.setRateType((Integer) result.get("rateType"));
}
if (schoolVO.getRateType() == 2 || schoolVO.getRateType() == 3){
if (schoolVO.getRateType() == 2 || schoolVO.getRateType() == 3) {
// 较安全
schoolVO.setWarnStatus(1);
}else{
} else {
schoolVO.setWarnStatus(0);
}
}
......@@ -1358,15 +1480,17 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
/**
* 升学规划分类查询学校列表
*
* @param rateType 类型
* @param id 用户id
* @param batchId 批次id
* @param pageNum 页码
* @param id 用户id
* @param batchId 批次id
* @param pageNum 页码
* @param pageSize 每页个数
* @return 结果
*/
@Override
public AjaxResult enterPlanSchoolListByType(Integer rateType, Long id, Long batchId, String schoolName, Long majorId, Integer pageNum, Integer pageSize) {
public AjaxResult enterPlanSchoolListByType(Integer rateType, Long id, Long batchId, String schoolName, Long
majorId, Integer pageNum, Integer pageSize) {
// 选择类型
List<SchoolVO> collect = new ArrayList<>();
......@@ -1376,24 +1500,23 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
// 查询用户分
MallMemberUser mallMemberUser = mallMemberUserMapper.selectMallMemberUserById(id);
if (ObjectUtils.isEmpty(mallMemberUser)){
if (ObjectUtils.isEmpty(mallMemberUser)) {
return AjaxResult.error("用户信息异常");
}
if(ObjectUtils.isNotEmpty(mallMemberUser.getCultureScore()) && ObjectUtils.isNotEmpty(mallMemberUser.getMajorScore())){
if (ObjectUtils.isNotEmpty(mallMemberUser.getCultureScore()) && ObjectUtils.isNotEmpty(mallMemberUser.getMajorScore())) {
// 文化分和专业分
Integer cultureScore = mallMemberUser.getCultureScore();
Integer majorScore = mallMemberUser.getMajorScore();
String subjectType = mallMemberUser.getSubjectType();
// 查询录取控制线
List<MallExamData> lineList = mallExamDataMapper.selectLineList();
// 查询二级分类
String twoClassName = "";
if (majorId != null){
if (majorId != null) {
MallMajorClass majorClass = mallMajorClassMapper.selectMallMajorClassByMajorId(majorId);
twoClassName = majorClass.getMajorName();
}
......@@ -1401,8 +1524,8 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
// 查询批次大学列表
List<SchoolVO> schoolVOS = mallSchoolMapper.selectSchoolList(schoolName, batchId, null, null, null, null, twoClassName, subjectType);
if (!schoolVOS.isEmpty()){
try{
if (!schoolVOS.isEmpty()) {
try {
CountDownLatch countDownLatch = new CountDownLatch(schoolVOS.size());
// 学校录取率计算
......@@ -1413,22 +1536,22 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
Map<String, Object> result = new HashMap<>();
MallSchoolAccept mallSchoolAccept = new MallSchoolAccept();
// 学校录取专业最低分
if (batchId == 4L){
if (batchId == 4L) {
// 专科
mallSchoolAccept = mallSchoolAcceptMapper.selectZhuankeAcceptBySchoolId(schoolVO.getSchoolId(), batchId, subjectType);
// 计算专科
if (ObjectUtils.isNotEmpty(mallSchoolAccept)){
result = mallCountMethodService.zhuankegetAcceptRateForReport(mallSchoolAccept.getAcceptLowest(), mallSchoolAccept.getAcceptRuleId(), cultureScore, majorScore);
}else {
if (ObjectUtils.isNotEmpty(mallSchoolAccept)) {
result = mallCountMethodService.zhuankegetAcceptRateForReport(mallSchoolAccept.getAcceptLowest(), mallSchoolAccept.getAcceptRuleId(), cultureScore, majorScore);
} else {
result.put("acceptRate", BigDecimal.ZERO);
result.put("rateType", -2);
}
}else{
} else {
// 本科
mallSchoolAccept = mallSchoolAcceptMapper.selectMinReferenceBySchoolId(schoolVO.getSchoolId(), batchId, subjectType);
if (ObjectUtils.isNotEmpty(mallSchoolAccept)){
result = mallCountMethodService.getAcceptRateForReport(mallSchoolAccept.getReference() != null?mallSchoolAccept.getReference() : new BigDecimal("500") , mallSchoolAccept.getAcceptRuleId(), mallMemberUser.getCultureScore(), mallMemberUser.getMajorScore());
}else{
mallSchoolAccept = mallSchoolAcceptMapper.selectMinReferenceBySchoolId(schoolVO.getSchoolId(), batchId, subjectType);
if (ObjectUtils.isNotEmpty(mallSchoolAccept)) {
result = mallCountMethodService.getAcceptRateForReport(mallSchoolAccept.getReference() != null ? mallSchoolAccept.getReference() : new BigDecimal("500"), mallSchoolAccept.getAcceptRuleId(), mallMemberUser.getCultureScore(), mallMemberUser.getMajorScore());
} else {
result.put("acceptRate", BigDecimal.ZERO);
result.put("rateType", -2);
}
......@@ -1436,7 +1559,7 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
schoolVO.setAcceptRate(new BigDecimal(result.get("acceptRate").toString()));
schoolVO.setShowAcceptRate(schoolVO.getAcceptRate() + "%");
schoolVO.setRateType((Integer)result.get("rateType"));
schoolVO.setRateType((Integer) result.get("rateType"));
if (StringUtils.isNotBlank(schoolVO.getTags())) {
// 查询标签列表
......@@ -1449,45 +1572,45 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
}
countDownLatch.await();
}catch (Exception e){
} catch (Exception e) {
e.printStackTrace();
throw new ServiceException();
}
if(rateType == -1){
if (rateType == -1) {
collect = schoolVOS;
}else{
collect = schoolVOS.stream().filter(item -> item.getRateType()!=null && item.getRateType().equals(rateType)).collect(Collectors.toList());
} else {
collect = schoolVOS.stream().filter(item -> item.getRateType() != null && item.getRateType().equals(rateType)).collect(Collectors.toList());
}
// 排序并处理分页
if (!collect.isEmpty()){
if (!collect.isEmpty()) {
// 排序
if (rateType == 3){
collect.sort(Comparator.comparing(SchoolVO:: getAcceptRate));
if (rateType == 3) {
collect.sort(Comparator.comparing(SchoolVO::getAcceptRate));
}else if (rateType == -1){
collect.sort(Comparator.comparing(SchoolVO:: getSchoolId));
} else if (rateType == -1) {
collect.sort(Comparator.comparing(SchoolVO::getSchoolId));
}else{
collect.sort(Comparator.comparing(SchoolVO:: getAcceptRate).reversed());
} else {
collect.sort(Comparator.comparing(SchoolVO::getAcceptRate).reversed());
}
}
}
}
//java8 stream实现list分页
// java8 stream实现list分页
List<SchoolVO> pageList = collect.stream().sorted().skip((long) (pageNum - 1) * pageSize)
.limit(pageSize)
.collect(Collectors.toList());
PageInfo<SchoolVO> pageInfo = new PageInfo<SchoolVO>(pageList);
//获取PageInfo其他参数
// 获取PageInfo其他参数
pageInfo.setTotal(collect.size());
int endRow = pageInfo.getEndRow() == 0 ? 0 : (int)((pageNum - 1) * pageSize + pageInfo.getEndRow() + 1);
int endRow = pageInfo.getEndRow() == 0 ? 0 : (int) ((pageNum - 1) * pageSize + pageInfo.getEndRow() + 1);
pageInfo.setEndRow(endRow);
boolean hasNextPage = collect.size() <= pageSize * pageNum ? false : true;
pageInfo.setHasNextPage(hasNextPage);
......@@ -1514,13 +1637,18 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
pageInfo.setStartRow(starRow);
return AjaxResult.success(pageInfo);
}
/**志愿自主选择 筛选学校*/
/**
* 志愿自主选择 筛选学校
*/
@Override
public List<Long> getAstrictSchoolIds(CheckingOutParamBo bo) {
return mallSchoolMapper.selectSchoolByParams(bo);
}
/**志愿自主选择 获取学校信息*/
/**
* 志愿自主选择 获取学校信息
*/
@Override
public List<SchoolMajorVO> schoolListInfoForReport(List<Long> sIds) {
return mallSchoolMapper.schoolListInfoForReport(sIds);
......@@ -1528,22 +1656,24 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
/**
* 保研率学校列表
* @param schoolName 学校名
* @param batchId 批次id
*
* @param schoolName 学校名
* @param batchId 批次id
* @param configLevelId 层次id
* @param configTypeId 办学类型id
* @param provinceId 省份
* @param cityId 城市
* @param pageNum 页码
* @param pageSize 每页个数
* @param configTypeId 办学类型id
* @param provinceId 省份
* @param cityId 城市
* @param pageNum 页码
* @param pageSize 每页个数
* @return 结果
*/
@Override
public PageInfo<SchoolVO> selectSchoolListForMaster(String schoolName, Long batchId, Long configLevelId, Long configTypeId, Long provinceId, Long cityId, Integer pageNum, Integer pageSize) {
public PageInfo<SchoolVO> selectSchoolListForMaster(String schoolName, Long batchId, Long configLevelId, Long
configTypeId, Long provinceId, Long cityId, Integer pageNum, Integer pageSize) {
PageHelper.startPage(pageNum, pageSize);
List<SchoolVO> schoolList = mallSchoolMapper.selectSchoolListForMaster(schoolName, batchId, configLevelId, configTypeId, provinceId, cityId);
if (!schoolList.isEmpty()){
if (!schoolList.isEmpty()) {
for (SchoolVO schoolVO : schoolList) {
if (StringUtils.isNotBlank(schoolVO.getTags())) {
// 查询标签列表
......@@ -1562,13 +1692,14 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
/**
* 专业开设学校
* @param schoolName 学校名称
* @param batchId 批次id
*
* @param schoolName 学校名称
* @param batchId 批次id
* @param configLevelId 层次id
* @param configTypeId 类型id
* @param provinceId 省份id
* @param cityId 城市id
* @param type 类型(0-强校,1-硕士点)
* @param configTypeId 类型id
* @param provinceId 省份id
* @param cityId 城市id
* @param type 类型(0-强校,1-硕士点)
* @return 结果
*/
@Override
......@@ -1584,7 +1715,7 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
Integer pageSize) {
PageHelper.startPage(pageNum, pageSize);
List<SchoolVO> list = mallSchoolMapper.selectSchoolListByMajorId(schoolName, batchId, configLevelId, configTypeId, provinceId, cityId, type, majorId);
if (!list.isEmpty()){
if (!list.isEmpty()) {
for (SchoolVO schoolVO : list) {
if (StringUtils.isNotBlank(schoolVO.getTags())) {
// 查询标签列表
......@@ -1599,7 +1730,8 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
/**
* 修改学校重复数据
* @param schoolId 保留的学校ID
*
* @param schoolId 保留的学校ID
* @param deleteSchoolId 删除的学校ID
* @return 结果
*/
......@@ -1695,7 +1827,7 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
String qrCode = "";
// 小程序码
Long schoolId = mallSchool.getSchoolId();
String key = schoolId + ".png";
String key = schoolId + ".png";
qrCode = weiXinUtils.getSchoolQRCode(schoolId, key);
updateSchool.setQrCode(qrCode);
}
......@@ -1714,4 +1846,5 @@ public class MallSchoolServiceImpl implements IMallSchoolService {
public MallSchool selectMallSchoolBySysUserId(Long sysUserId) {
return mallSchoolMapper.selectMallSchoolBySysUserId(sysUserId);
}
}
......@@ -456,7 +456,7 @@ public class MemberReportIntelligenceServiceImpl implements IMemberReportIntelli
int d = kbd.size();
//Collections.shuffle(jwt);
int remain = 35-finalCollect.size();
int remain = 64-finalCollect.size();
if(remain >= d){
finalCollect.addAll(kbd);
......@@ -549,7 +549,7 @@ public class MemberReportIntelligenceServiceImpl implements IMemberReportIntelli
}
}else{
if(c>=10){
finalCollect.addAll(targetList.subList(0,10));
finalCollect.addAll(targetList.subList(0,16));
}else{
finalCollect.addAll(targetList);
}
......
......@@ -149,7 +149,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="selectPlan" resultType="MallAcceptPlan">
<select id="selectPlan" resultType="com.ruoyi.mall.domain.MallAcceptPlan">
select accept_plan_id acceptPlanId,
school_id schoolId,
batch_id batchId,
......@@ -169,6 +169,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and plan_year = #{planYear}
and subject_type = #{subjectType}
and link_id = #{linkId} and del_flag = '0'
order by create_at desc
</select>
<select id="selectSchoolPrice" parameterType="Long" resultType="MallAcceptPlan">
......@@ -411,4 +412,30 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</foreach>
</update>
<insert id="insertByList" >
INSERT INTO mall_accept_plan (
school_id,batch_id,plan_year,major_id,subject_type,accept_num,
school_price,accept_rule_id,little_score_limit,sort,
create_at,update_at,del_flag,link_id
) VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.schoolId},
#{item.batchId},
#{item.planYear},
#{item.majorId},
#{item.subjectType},
#{item.acceptNum},
#{item.schoolPrice},
#{item.acceptRuleId},
#{item.littleScoreLimit},
#{item.sort},
#{item.createAt},
#{item.updateAt},
#{item.delFlag},
#{item.linkId}
)
</foreach>
</insert>
</mapper>
......@@ -55,6 +55,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and del_flag = '0'
</select>
<select id="selectMallAcceptRuleByAcceptRuleStr2" resultMap="MallAcceptRuleResult">
<include refid="selectMallAcceptRuleVo"/>
where rule_str = #{ruleStr}
and del_flag = '0'
order by create_at desc
</select>
<select id="selectNewAcceptRule" resultMap="MallAcceptRuleResult">
<include refid="selectMallAcceptRuleVo"/>
where is_new = 1
......
......@@ -43,6 +43,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
ms.school_name schoolName,
mar.rule_str ruleStr,
mb.batch_name batchName,
ml.major_code majorCode,
ml.major_name majorName,
msa.subject_type subjectType,
msa.reference reference,
......@@ -97,7 +98,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where school_accept_id = #{schoolAcceptId}
</select>
<select id="selectBySchoolIdAndLinkId" resultType="MallSchoolAccept">
<select id="selectBySchoolIdAndLinkId" resultType="com.ruoyi.mall.domain.MallSchoolAccept">
select msa.school_accept_id schoolAcceptId,
msa.school_id schoolId,
msa.major_id majorId,
......@@ -120,6 +121,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and link_id = #{linkId}
and accept_year = #{acceptYear}
and subject_type = #{subjectType}
order by create_at desc
</select>
<insert id="insertMallSchoolAccept" parameterType="MallSchoolAccept" useGeneratedKeys="true" keyProperty="schoolAcceptId">
......@@ -159,6 +161,44 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="linkId != null ">#{linkId},</if>
</trim>
</insert>
<insert id="insertByList">
insert into mall_school_accept(
school_id,
major_id,
batch_id,
accept_num,
accept_lowest,
accept_year,
accept_rule_id,
send_rule_id,
create_at,
update_at,
del_flag,
subject_type,
reference,
is_reference,
link_id
) VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.schoolId},
#{item.majorId},
#{item.batchId},
#{item.acceptNum},
#{item.acceptLowest},
#{item.acceptYear},
#{item.acceptRuleId},
#{item.sendRuleId},
#{item.createAt},
#{item.updateAt},
#{item.delFlag},
#{item.subjectType},
#{item.reference},
#{item.isReference},
#{item.linkId},
)
</foreach>
</insert>
<update id="updateMallSchoolAccept" parameterType="MallSchoolAccept">
update mall_school_accept
......@@ -226,8 +266,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where del_flag = '0' and is_reference = 1
</select>
<select id="selectSchoolMajorRecordList" resultType="SchoolMajorAcceptRecordVO">
<select id="selectSchoolMajorRecordList" resultType="com.ruoyi.mall.domain.Vo.SchoolMajorAcceptRecordVO">
select msa.school_accept_id schoolAcceptId,
mlms.major_code majorCode,
mlms.major_name majorName,
msa.accept_num acceptNum,
msa.accept_lowest acceptLowest,
......
......@@ -284,7 +284,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and del_flag = '0'
and subject_type = #{subjectType}
and accept_lowest is not null
and accept_year not in ('2024')
order by accept_year desc, accept_lowest asc limit 1000) temp
group by temp.acceptYear
order by temp.acceptYear desc
......
......@@ -78,6 +78,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and del_flag = '0'
</select>
<select id="selectMallSchoolLevelBySchoolIds" parameterType="string" resultType="MallSchoolLevel">
select msl.school_level_id schoolLevelId,
msl.school_id schoolId,
msl.config_level_id configLevelId,
msl.config_level_name configLevelName,
msl.sort sort,
msl.remarks remarks,
msl.create_at createAt,
msl.update_at updateAt,
msl.del_flag delFlag
from mall_school_level msl
where msl.school_id in
<foreach item="schoolId" collection="list" open="(" separator="," close=")">
#{schoolId}
</foreach>
and del_flag = '0'
</select>
<insert id="insertMallSchoolLevel" parameterType="MallSchoolLevel" useGeneratedKeys="true" keyProperty="schoolLevelId">
insert into mall_school_level
<trim prefix="(" suffix=")" suffixOverrides=",">
......
......@@ -54,6 +54,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="delFlag" column="del_flag" />
<result property="positionId" column="position_id" />
<result property="suggestId" column="suggest_id" />
<result property="configLevelId" column="config_level_id" />
<result property="configLevelName" column="config_level_name" />
<result property="isNewAccept" column="is_new_accept" />
<result property="hasNewLink" column="has_new_link" />
......@@ -64,6 +65,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="sysUserName" column="sys_user_name" />
<result property="sysUserPassword" column="sys_user_password" />
<result property="sysUserStatus" column="sys_user_status" />
</resultMap>
<sql id="selectMallSchoolVo">
......@@ -78,13 +80,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</sql>
<select id="selectMallSchoolList" parameterType="MallSchool" resultMap="MallSchoolResult">
select ms.school_id, ms.school_name, ms.school_icon, ms.background_image, ms.school_introduce, ms.school_introduce_short, ms.school_number, ms.config_type_id, ms.config_type_name, ms.school_institution, ms.competent_department, ms.province_id, ms.province_name, ms.city_id, ms.city_name, ms.area_id, ms.area_name, ms.address, ms.remarks, ms.tags, ms.school_web, ms.accept_phone, ms.school_mail, ms.school_birthday, ms.area_size, ms.male_ratio, ms.female_ratio, ms.postgraduate_ratio, ms.offer_ratio, ms.change_major_ratio,ms.masters_degree,ms.doctorate,ms.ace, ms.create_at, ms.update_at, ms.del_flag
,ms.masters_degree_detail ,ms.doctorate_detail ,ms.ranking, ms.position_id,
ms.suggest_id, ms.accept_premise, msl.config_level_name, ms.doctorate_type,
ms.masters_degree_type,ms.is_new_accept, ms.has_new_link, ms.is_change, ms.no_plan
, ms.qr_code, ms.sys_user_id
select ms.school_id, ms.school_name, ms.school_icon, ms.background_image, ms.school_introduce,
ms.school_introduce_short, ms.school_number, ms.config_type_id, ms.config_type_name,
ms.school_institution, ms.competent_department, ms.province_id, ms.province_name,
ms.city_id, ms.city_name, ms.area_id, ms.area_name, ms.address, ms.remarks,
ms.tags, ms.school_web, ms.accept_phone, ms.school_mail, ms.school_birthday,
ms.area_size, ms.male_ratio, ms.female_ratio, ms.postgraduate_ratio, ms.offer_ratio,
ms.change_major_ratio,ms.masters_degree,ms.doctorate,ms.ace, ms.create_at, ms.update_at, ms.del_flag,
ms.masters_degree_detail ,ms.doctorate_detail ,ms.ranking, ms.position_id,
ms.suggest_id, ms.accept_premise, msl.config_level_id ,msl.config_level_name, ms.doctorate_type,
ms.masters_degree_type,ms.is_new_accept, ms.has_new_link, ms.is_change, ms.no_plan,ms.qr_code, ms.sys_user_id
from mall_school ms
left join mall_school_level msl on msl.school_id = ms.school_id
left join mall_config_level msl on msl.config_level_id = ms.config_type_id
<where>
<if test="schoolName != null and schoolName != ''"> and ms.school_name like concat('%', #{schoolName}, '%')</if>
<if test="schoolIcon != null and schoolIcon != ''"> and ms.school_icon = #{schoolIcon}</if>
......@@ -120,6 +127,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="suggestId != null "> and ms.suggest_id = #{suggestId}</if>
<if test="configLevelId != null "> and msl.config_level_id = #{configLevelId}</if>
and ms.del_flag = '0'
# and msl.del_flag = '0'
</where>
order by ms.create_at asc, ms.school_number asc
</select>
......@@ -602,6 +610,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</where>
GROUP BY ms.school_id
</select>
<select id="selectAllSchoolNames" resultMap="MallSchoolResult">
<include refid="selectMallSchoolVo"/>
where del_flag = '0' and school_name in
<foreach collection="list" item="schoolNames" open="(" separator="," close=")">
#{schoolNames}
</foreach>
</select>
<!--自主选择模拟填报查询学校-->
<select id="selectRateSchoolList" resultType="com.ruoyi.mall.domain.Vo.SchoolMajorVO">
select
......
......@@ -60,7 +60,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
from tb_report_intelligence tri
LEFT JOIN mall_school ms on ms.school_id = tri.school_id and ms.del_flag = '0'
LEFT JOIN mall_link_major_school mlms on mlms.link_id = tri.major_id and mlms.school_id = tri.school_id and mlms.del_flag = '0'
LEFT JOIN mall_school_accept msa on msa.link_id = mlms.link_id and msa.is_reference = 1
LEFT JOIN mall_school_accept msa on msa.link_id = mlms.link_id AND msa.school_id = mlms.school_id and msa.is_reference = 1
left join mall_member_user mmu on mmu.id = tri.user_id
<where>
<if test="itemId != null "> and tri.item_id = #{itemId}</if>
......
......@@ -364,7 +364,7 @@
<!--小程序图数据-->
<el-dialog title="小程序图" :visible.sync="openMemberBanner" width="1000px" append-to-body>
<mall-member-banner :member-user-id="memberUserId" :key="memberUserId" />
<mall-member-banner :memberUserId="memberUserId" :key="memberUserId" />
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="diaCancel">确 定</el-button>
</div>
......@@ -424,6 +424,7 @@ export default {
title: "",
// 是否显示弹出层
open: false,
memberUserId: undefined,
// 查询参数
queryParams: {
pageNum: 1,
......
......@@ -118,6 +118,15 @@
v-hasPermi="['mall:mallSchool:export']"
>导出</el-button>
</el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="info"-->
<!-- plain-->
<!-- icon="el-icon-upload2"-->
<!-- size="mini"-->
<!-- @click="handleImport"-->
<!-- >导入</el-button>-->
<!-- </el-col>-->
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
......@@ -482,6 +491,35 @@
</div>
</el-dialog>
<!-- 导入对话框 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload
ref="upload"
:limit="1"
accept=".xlsx, .xls"
:headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport"
:disabled="upload.isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
:auto-upload="false"
drag
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<div class="el-upload__tip" slot="tip">
<el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据
</div>
<span>仅允许导入xls、xlsx格式文件。</span>
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFileForm">确 定</el-button>
<el-button @click="upload.open = false">取 消</el-button>
</div>
</el-dialog>
<!-- 添加或修改学校对话框 -->
<el-dialog :title="title" :visible.sync="openAddSchoolUser" width="600px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="110px">
......@@ -601,6 +639,7 @@ import MallSchoolAccept from "@/views/mall/mallSchoolAccept";
import MallLinkMajorSchool from "@/views/mall/mallLinkMajorSchool";
import {selectTagList} from "@/api/mall/mallSchoolTag";
import {selectLevelList} from "@/api/mall/mallConfigLevel";
import {getToken} from "@/utils/auth";
export default {
name: "MallSchool",
......@@ -673,6 +712,23 @@ export default {
// 是否显示弹出层
open: false,
openAddSchoolUser: false,
// 导入参数
upload: {
// 是否显示弹出层
open: false,
// 弹出层标题
title: "",
// 是否禁用上传
isUploading: false,
// 是否更新已经存在的数据
updateSupport: 0,
// 是否更新已经存在的数据
communityId: undefined,
// 设置上传的请求头部
headers: { Authorization: "Bearer " + getToken() },
// 上传的地址
url: process.env.VUE_APP_BASE_API + "mall/mallSchool/importData"
},
// 查询参数
queryParams: {
pageNum: 1,
......@@ -1137,7 +1193,28 @@ export default {
selectSuggestList().then(response=>{
this.suggestList = response.data
})
}
},
/** 导入按钮操作 */
handleImport() {
this.upload.title = "学校导入";
this.upload.open = true;
},
// 文件上传中处理
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true;
},
// 文件上传成功处理
handleFileSuccess(response, file, fileList) {
this.upload.open = false;
this.upload.isUploading = false;
this.$refs.upload.clearFiles();
this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
this.getList();
},
// 提交上传文件
submitFileForm() {
this.$refs.upload.submit();
},
}
};
</script>
......@@ -139,7 +139,7 @@
<el-input v-model="form.schoolName" placeholder="请输入学校名" />
</el-form-item>
<el-form-item label="批次" prop="batchId">
<el-select v-model="form.batchId" placeholder="请选择批次">
<el-select v-model="form.batchId" filterable placeholder="请选择批次">
<el-option
v-for="item in batchList"
:key="item.batchId"
......@@ -149,7 +149,7 @@
</el-select>
</el-form-item>
<el-form-item label="专业" prop="majorId">
<el-select v-model="form.majorId" placeholder="请选择专业">
<el-select v-model="form.majorId" filterable placeholder="请选择专业">
<el-option
v-for="item in majorList"
:key="item.majorId"
......@@ -182,7 +182,7 @@
</el-radio-group>
</el-form-item>
<el-form-item label="录取原则" prop="acceptRuleId">
<el-select v-model="form.acceptRuleId" >
<el-select v-model="form.acceptRuleId" filterable >
<el-option v-for="item in ruleList"
:value="item.acceptRuleId"
:key="item.acceptRuleId"
......