parent
53d363bf39
commit
ee0f575485
|
|
@ -80,6 +80,12 @@ public class ShiroConfig {
|
||||||
}
|
}
|
||||||
|
|
||||||
filterChainDefinitionMap.put("/web/user/login/**","anon");//前台页面登录
|
filterChainDefinitionMap.put("/web/user/login/**","anon");//前台页面登录
|
||||||
|
filterChainDefinitionMap.put("/web/user/getQRStatus/**","anon");//前台查询redis中当前小程序码的状态
|
||||||
|
filterChainDefinitionMap.put("/wx/getQRCode/**","anon");//前台获取微信登录码
|
||||||
|
filterChainDefinitionMap.put("/wx/user/cancelQrCode/**","anon");//取消微信二维码登录
|
||||||
|
filterChainDefinitionMap.put("/wx/user/updateQrCodeStatus/**","anon");//
|
||||||
|
filterChainDefinitionMap.put("/wx/user/getQrCodeStatus/**","anon");//
|
||||||
|
|
||||||
|
|
||||||
filterChainDefinitionMap.put("/mini/user/phoneLogin","anon");//小程序手机号登录
|
filterChainDefinitionMap.put("/mini/user/phoneLogin","anon");//小程序手机号登录
|
||||||
filterChainDefinitionMap.put("/mini/user/login","anon");//小程序登录
|
filterChainDefinitionMap.put("/mini/user/login","anon");//小程序登录
|
||||||
|
|
@ -94,7 +100,7 @@ public class ShiroConfig {
|
||||||
|
|
||||||
//filterChainDefinitionMap.put("/art/recommendMajor/testCultural","anon");//文化分测算
|
//filterChainDefinitionMap.put("/art/recommendMajor/testCultural","anon");//文化分测算
|
||||||
//学校
|
//学校
|
||||||
filterChainDefinitionMap.put("/art/school/hotList","anon");//前台-热门学校
|
filterChainDefinitionMap.put("/web/school/hotList","anon");//前台-热门学校
|
||||||
filterChainDefinitionMap.put("/art/school/search","anon");//前台-找大学
|
filterChainDefinitionMap.put("/art/school/search","anon");//前台-找大学
|
||||||
filterChainDefinitionMap.put("/art/school/schoolInfo","anon");//前台-学校详情
|
filterChainDefinitionMap.put("/art/school/schoolInfo","anon");//前台-学校详情
|
||||||
filterChainDefinitionMap.put("/yx/yxMajor/list","anon");//前台-查专业
|
filterChainDefinitionMap.put("/yx/yxMajor/list","anon");//前台-查专业
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,8 @@
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<artifactId>jeecg-system-biz</artifactId>
|
<artifactId>jeecg-system-biz</artifactId>
|
||||||
|
<properties>
|
||||||
|
</properties>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jeecgframework.boot</groupId>
|
<groupId>org.jeecgframework.boot</groupId>
|
||||||
|
|
|
||||||
|
|
@ -249,6 +249,11 @@ public class MiniUserController {
|
||||||
obj.put("sessionKey", "sessionKey");
|
obj.put("sessionKey", "sessionKey");
|
||||||
obj.put("userInfo", loginUser);
|
obj.put("userInfo", loginUser);
|
||||||
obj.put("loginState", "not");
|
obj.put("loginState", "not");
|
||||||
|
//判断是不是 二维码登录
|
||||||
|
if (StringUtils.isNotBlank(wxModel.getUuid())) {
|
||||||
|
//更改二维码登录状态
|
||||||
|
redisUtil.set("WX_QRCODE_SCENE_"+ wxModel.getUuid(),"");
|
||||||
|
}
|
||||||
return Result.OK(obj);
|
return Result.OK(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
package org.jeecg.modules.mini.wx.constant;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ZhouWenTao
|
||||||
|
* @create 2024-05-06-21:14
|
||||||
|
*/
|
||||||
|
public class WeiXinConstant {
|
||||||
|
/**
|
||||||
|
* 微信二维码CODE的key
|
||||||
|
*/
|
||||||
|
public static final String QR_CODE_KEY = "WX_QRCODE_SCENE_";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 微信二维码未被扫描
|
||||||
|
*/
|
||||||
|
public static final String WX_QRCODE_NOT_SCAN_STATUS = "WX_QRCODE_NOT_SCAN";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 微信二维码被扫描
|
||||||
|
*/
|
||||||
|
public static final String WX_QRCODE_SCAN_STATUS = "WX_QRCODE_SCAN";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -14,7 +14,7 @@ import org.springframework.stereotype.Component;
|
||||||
@ConfigurationProperties(prefix = "wx")
|
@ConfigurationProperties(prefix = "wx")
|
||||||
@Data
|
@Data
|
||||||
@ToString
|
@ToString
|
||||||
public class WxPayV3Bean {
|
public class WeXinConfig {
|
||||||
|
|
||||||
private String appId;
|
private String appId;
|
||||||
|
|
||||||
|
|
@ -15,4 +15,6 @@ public class WxModel implements Serializable {
|
||||||
public String iv;
|
public String iv;
|
||||||
|
|
||||||
public String openId;
|
public String openId;
|
||||||
|
|
||||||
|
private String uuid;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,111 @@
|
||||||
|
package org.jeecg.modules.mini.wx.util;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.xkcoding.http.HttpUtil;
|
||||||
|
import org.apache.commons.codec.binary.Base64;
|
||||||
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
import org.apache.http.HttpResponse;
|
||||||
|
import org.apache.http.client.methods.HttpPost;
|
||||||
|
import org.apache.http.entity.StringEntity;
|
||||||
|
import org.apache.http.impl.client.CloseableHttpClient;
|
||||||
|
import org.apache.http.impl.client.HttpClientBuilder;
|
||||||
|
import org.jeecg.common.util.RestUtil;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
/**
|
||||||
|
* @author zwt13703
|
||||||
|
* <a href="https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183">官方文档</a>
|
||||||
|
* 参考网站
|
||||||
|
* 二维码生成:https://blog.csdn.net/Architect_CSDN/article/details/98874379
|
||||||
|
* 二维码登录:https://blog.csdn.net/weixin_45089791/article/details/126341589
|
||||||
|
* @create 2024-05-06-17:24
|
||||||
|
*/
|
||||||
|
public class WeXinUtil {
|
||||||
|
//获取微信小程序 accessToken地址
|
||||||
|
private final static String GET_ACCESS_TOKEN_URL="https://api.weixin.qq.com/cgi-bin/token";
|
||||||
|
//带参数有限个数小程序码接口地址
|
||||||
|
// private final static String GET_WXACODE_URL="https://api.weixin.qq.com/wxa/getwxacode";
|
||||||
|
private final static String GET_WXACODE_URL="https://api.weixin.qq.com/wxa/getwxacodeunlimit";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取access-token
|
||||||
|
* @param grantType client_credential
|
||||||
|
* @param appid 小程序appid,微信公众平台注册小程序时自动生成的
|
||||||
|
* @param secret 小程序secret,微信公众平台注册小程序时自动生成的
|
||||||
|
*/
|
||||||
|
public static String getAccessToken(String appid,String secret,String grantType){
|
||||||
|
if (StringUtils.isBlank(grantType)) {
|
||||||
|
grantType = "client_credential";
|
||||||
|
}
|
||||||
|
String access_token = null;
|
||||||
|
String tokenUrl = GET_ACCESS_TOKEN_URL+"?grant_type="+ grantType+"&appid="+ appid + "&secret="+ secret;
|
||||||
|
//使用http get请求发送. 请自定义你们的代码嗷
|
||||||
|
JSONObject jsons = RestUtil.get(tokenUrl);
|
||||||
|
String expires_in = jsons.getString("expires_in");
|
||||||
|
if(StringUtils.isNotEmpty(expires_in)&&Integer.parseInt(expires_in)==7200){
|
||||||
|
//ok
|
||||||
|
access_token = jsons.getString("access_token");
|
||||||
|
}else{
|
||||||
|
System.out.println("出错获取token失败!");
|
||||||
|
}
|
||||||
|
return access_token;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 带参数有限个数小程序码接口
|
||||||
|
* @param accessToken accessToken
|
||||||
|
* @param path 跳转小程序后的路径
|
||||||
|
* @param width 二维码的宽度
|
||||||
|
*/
|
||||||
|
public static String getWxACode(String accessToken, String path, String width){
|
||||||
|
byte[] release=null;
|
||||||
|
if (StringUtils.isBlank(path)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (StringUtils.isBlank(width)) {
|
||||||
|
width = "430";
|
||||||
|
}
|
||||||
|
//拼接路径
|
||||||
|
String url = GET_WXACODE_URL + "?access_token=" + accessToken;
|
||||||
|
JSONObject jsonParam = new JSONObject();
|
||||||
|
jsonParam.put("scene", "id=1");
|
||||||
|
jsonParam.put("page", path);
|
||||||
|
jsonParam.put("width", Integer.parseInt(width));
|
||||||
|
jsonParam.put("auto_color", false);
|
||||||
|
Map<String,Object> line_color = new HashMap<>();
|
||||||
|
line_color.put("r", 0);
|
||||||
|
line_color.put("g", 0);
|
||||||
|
line_color.put("b", 0);
|
||||||
|
jsonParam.put("line_color", line_color);
|
||||||
|
//发送http post 请求,获取图片流
|
||||||
|
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
|
||||||
|
HttpPost httpPost = new HttpPost(url);
|
||||||
|
try {
|
||||||
|
StringEntity entity = new StringEntity(JSONObject.toJSONString(jsonParam));
|
||||||
|
entity.setContentType("image/png");
|
||||||
|
httpPost.setEntity(entity);
|
||||||
|
HttpResponse response = httpClient.execute(httpPost);
|
||||||
|
try (InputStream inputStream = response.getEntity().getContent();
|
||||||
|
ByteArrayOutputStream out = new ByteArrayOutputStream()) {
|
||||||
|
byte[] buffer = new byte[1024];
|
||||||
|
int len = -1;
|
||||||
|
while ((len = inputStream.read(buffer)) != -1) {
|
||||||
|
out.write(buffer, 0, len);
|
||||||
|
}
|
||||||
|
release = out.toByteArray();
|
||||||
|
return Base64.encodeBase64String(release);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("获取微信小程序二维码出错:"+e.getMessage());
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
getWxACode("80_WOwnMgHpt70AdOLDjhrpOengYBT_nozQ_rIcgc4FmbtI64swoBxj19_7iOO7wm-vM9-lDEThsv934LodtsvVuaB2CxbWaX9oFdeAElSvBV6rbCWljXh29zG6EAwZCMiAAACFP",
|
||||||
|
"pages/zyb/login","430");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -81,7 +81,7 @@ public class ArtRecommendMajorController {
|
||||||
|
|
||||||
yxSchoolMajorLambdaQueryWrapper.eq(StringUtils.isNotBlank(queryCalculateInvestmentVO.getCategory()), YxSchoolMajor::getCategory, queryCalculateInvestmentVO.getCategory());
|
yxSchoolMajorLambdaQueryWrapper.eq(StringUtils.isNotBlank(queryCalculateInvestmentVO.getCategory()), YxSchoolMajor::getCategory, queryCalculateInvestmentVO.getCategory());
|
||||||
yxSchoolMajorLambdaQueryWrapper.eq(StringUtils.isNotBlank(queryCalculateInvestmentVO.getProfessionalCategory()), YxSchoolMajor::getMajorType, queryCalculateInvestmentVO.getProfessionalCategory());
|
yxSchoolMajorLambdaQueryWrapper.eq(StringUtils.isNotBlank(queryCalculateInvestmentVO.getProfessionalCategory()), YxSchoolMajor::getMajorType, queryCalculateInvestmentVO.getProfessionalCategory());
|
||||||
|
yxSchoolMajorLambdaQueryWrapper.orderByDesc(YxSchoolMajor::getRulesEnrollProbabilitySx);
|
||||||
List<ArtCalculateInvestmentDTO> calculateInvestmentDTOList = new ArrayList<>();
|
List<ArtCalculateInvestmentDTO> calculateInvestmentDTOList = new ArrayList<>();
|
||||||
Map<String,String> rulesEnrollProbabilityMap=new HashMap<>();
|
Map<String,String> rulesEnrollProbabilityMap=new HashMap<>();
|
||||||
rulesEnrollProbabilityMap.put("专过文排","专过文排");
|
rulesEnrollProbabilityMap.put("专过文排","专过文排");
|
||||||
|
|
|
||||||
|
|
@ -78,4 +78,10 @@ public class WebMajorController {
|
||||||
return Result.OK(zylList);
|
return Result.OK(zylList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApiOperation(value = "获取院校的专业信息")
|
||||||
|
@GetMapping(value = "/schoolMajorList")
|
||||||
|
public Result<?> schoolMajorList(QueryRecommendMajorVO queryRecommendMajorVO) {
|
||||||
|
return Result.OK(webMajorService.schoolMajorList(queryRecommendMajorVO));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,126 @@
|
||||||
|
package org.jeecg.modules.web.controller;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.jeecg.common.api.vo.Result;
|
||||||
|
import org.jeecg.common.util.AssertUtils;
|
||||||
|
import org.jeecg.common.util.RedisUtil;
|
||||||
|
import org.jeecg.modules.mini.service.MiniSchoolService;
|
||||||
|
import org.jeecg.modules.web.vo.QueryRecommendMajorVO;
|
||||||
|
import org.jeecg.modules.yx.entity.YxSchoolDoubleFirstPlan;
|
||||||
|
import org.jeecg.modules.yx.entity.YxSubjectEvaluation;
|
||||||
|
import org.jeecg.modules.yx.service.IYxSchoolDoubleFirstPlanService;
|
||||||
|
import org.jeecg.modules.yx.service.IYxSchoolService;
|
||||||
|
import org.jeecg.modules.yx.service.IYxSubjectEvaluationService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description 小程序端 院校接口
|
||||||
|
* @Author ZhouWenTao
|
||||||
|
* @Date 2023/11/14 10:03
|
||||||
|
*/
|
||||||
|
@Api(tags="前台-院校接口")
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/web/school")
|
||||||
|
@Slf4j
|
||||||
|
public class WebSchoolController {
|
||||||
|
@Autowired
|
||||||
|
private IYxSchoolService yxSchoolService;
|
||||||
|
@Autowired
|
||||||
|
private MiniSchoolService miniSchoolService;
|
||||||
|
@Autowired
|
||||||
|
private IYxSchoolDoubleFirstPlanService yxSchoolDoubleFirstPlanService;
|
||||||
|
@Autowired
|
||||||
|
private IYxSubjectEvaluationService yxSubjectEvaluationService;
|
||||||
|
@Resource
|
||||||
|
private RedisUtil redisUtil;
|
||||||
|
@ApiOperation(value = "学校详情")
|
||||||
|
@GetMapping("/schoolInfo")
|
||||||
|
public Result<?> schoolInfo(QueryRecommendMajorVO queryRecommendMajorVO){
|
||||||
|
String schoolCode = queryRecommendMajorVO.getSchoolCode();
|
||||||
|
return Result.OK(miniSchoolService.getMiniSchoolInfoBySchoolCode(schoolCode));
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation(value = "搜索学校")
|
||||||
|
@GetMapping("/search")
|
||||||
|
public Result<?> search(QueryRecommendMajorVO queryRecommendMajorVO){
|
||||||
|
return Result.OK(yxSchoolService.miniSchoolSearch(queryRecommendMajorVO));
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation(value = "热门院校")
|
||||||
|
@GetMapping(value = "/hotList")
|
||||||
|
public Result<?> hotList(){
|
||||||
|
return Result.OK(yxSchoolService.hotList());
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation(value = "学校双万计划信息")
|
||||||
|
@GetMapping(value = "/doubleFirstPlan")
|
||||||
|
public Result<?> doubleFirstPlan(QueryRecommendMajorVO queryRecommendMajorVO){
|
||||||
|
String schoolId = queryRecommendMajorVO.getSchoolId();
|
||||||
|
AssertUtils.notNull(schoolId,"请选择院校");
|
||||||
|
String key = "school:doubleFirstPlan:schoolId_"+schoolId;
|
||||||
|
String json = null;
|
||||||
|
JSONObject jsonObject = null;
|
||||||
|
if (redisUtil.hasKey(key)) {
|
||||||
|
jsonObject = JSONObject.parseObject((String) redisUtil.get(key));
|
||||||
|
}else{
|
||||||
|
LambdaQueryWrapper<YxSchoolDoubleFirstPlan> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
lambdaQueryWrapper.eq(YxSchoolDoubleFirstPlan::getSchoolId,schoolId);
|
||||||
|
lambdaQueryWrapper.select(YxSchoolDoubleFirstPlan::getSchoolName,
|
||||||
|
YxSchoolDoubleFirstPlan::getMajorCode,
|
||||||
|
YxSchoolDoubleFirstPlan::getLevel,
|
||||||
|
YxSchoolDoubleFirstPlan::getTrack,
|
||||||
|
YxSchoolDoubleFirstPlan::getMajorName);
|
||||||
|
List<YxSchoolDoubleFirstPlan> yxSchoolDoubleFirstPlanList = yxSchoolDoubleFirstPlanService.list(lambdaQueryWrapper);
|
||||||
|
List<YxSchoolDoubleFirstPlan> gjjList = yxSchoolDoubleFirstPlanList.stream().filter(l -> "国家级".equals(l.getLevel())).collect(Collectors.toList());
|
||||||
|
List<YxSchoolDoubleFirstPlan> sjList = yxSchoolDoubleFirstPlanList.stream().filter(l -> "省级".equals(l.getLevel())).collect(Collectors.toList());
|
||||||
|
jsonObject = new JSONObject();
|
||||||
|
jsonObject.put("gjjList",gjjList);
|
||||||
|
jsonObject.put("sjList",sjList);
|
||||||
|
json = jsonObject.toJSONString();
|
||||||
|
redisUtil.set(key,json,300);
|
||||||
|
}
|
||||||
|
return Result.OK(jsonObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation(value = "学校第四轮学科评估")
|
||||||
|
@GetMapping(value = "/subjectEvaluation")
|
||||||
|
public Result<?> subjectEvaluation(QueryRecommendMajorVO queryRecommendMajorVO){
|
||||||
|
String schoolId = queryRecommendMajorVO.getSchoolId();
|
||||||
|
AssertUtils.notNull(schoolId,"请选择院校");
|
||||||
|
String key = "school:subjectEvaluation:schoolId_"+schoolId;
|
||||||
|
String json = null;
|
||||||
|
List<YxSubjectEvaluation> list = null;
|
||||||
|
try {
|
||||||
|
if (redisUtil.hasKey(key)) {
|
||||||
|
list = JSONArray.parseArray((String) redisUtil.get(key),YxSubjectEvaluation.class);
|
||||||
|
}else{
|
||||||
|
LambdaQueryWrapper<YxSubjectEvaluation> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
lambdaQueryWrapper.eq(YxSubjectEvaluation::getSchoolId,schoolId);
|
||||||
|
lambdaQueryWrapper.select(YxSubjectEvaluation::getSchoolName,
|
||||||
|
YxSubjectEvaluation::getSubjectCode,
|
||||||
|
YxSubjectEvaluation::getSubjectName,
|
||||||
|
YxSubjectEvaluation::getEvaluationResult,
|
||||||
|
YxSubjectEvaluation::getEvaluationType);
|
||||||
|
list = yxSubjectEvaluationService.list(lambdaQueryWrapper);
|
||||||
|
json = JSONArray.toJSONString(list);
|
||||||
|
redisUtil.set(key,json,300);
|
||||||
|
}
|
||||||
|
}catch (Exception e){
|
||||||
|
log.error(e.getMessage());
|
||||||
|
return Result.error("异常,请联系管理员");
|
||||||
|
}
|
||||||
|
return Result.OK(list);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -4,6 +4,8 @@ import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.jeecg.common.api.vo.Result;
|
import org.jeecg.common.api.vo.Result;
|
||||||
|
import org.jeecg.common.util.RedisUtil;
|
||||||
|
import org.jeecg.modules.mini.wx.model.WeXinConfig;
|
||||||
import org.jeecg.modules.system.model.SysLoginModel;
|
import org.jeecg.modules.system.model.SysLoginModel;
|
||||||
import org.jeecg.modules.web.service.WebUserService;
|
import org.jeecg.modules.web.service.WebUserService;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
@ -21,9 +23,17 @@ import javax.annotation.Resource;
|
||||||
public class WebUserController {
|
public class WebUserController {
|
||||||
@Resource
|
@Resource
|
||||||
private WebUserService webUserService;
|
private WebUserService webUserService;
|
||||||
|
@Resource
|
||||||
|
private WeXinConfig weXinConfig;
|
||||||
|
@Resource
|
||||||
|
private RedisUtil redisUtil;
|
||||||
|
|
||||||
@RequestMapping(value = "/login/passwd", method = RequestMethod.POST)
|
@RequestMapping(value = "/login/passwd", method = RequestMethod.POST)
|
||||||
@ApiOperation(value = "手机号密码登录")
|
@ApiOperation(value = "手机号密码登录")
|
||||||
public Result<?> loginPasswd(@RequestBody SysLoginModel sysLoginModel){
|
public Result<?> loginPasswd(@RequestBody SysLoginModel sysLoginModel){
|
||||||
return webUserService.loginPasswd(sysLoginModel);
|
return webUserService.loginPasswd(sysLoginModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,107 @@
|
||||||
|
package org.jeecg.modules.web.controller;
|
||||||
|
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.jeecg.common.api.vo.Result;
|
||||||
|
import org.jeecg.common.util.RedisUtil;
|
||||||
|
import org.jeecg.modules.mini.wx.constant.WeiXinConstant;
|
||||||
|
import org.jeecg.modules.mini.wx.model.WeXinConfig;
|
||||||
|
import org.jeecg.modules.mini.wx.util.WeXinUtil;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ZhouWenTao
|
||||||
|
* @create 2024-04-17-15:22
|
||||||
|
*/
|
||||||
|
@RequestMapping("/wx")
|
||||||
|
@RestController
|
||||||
|
@Api(tags = "微信相关接口")
|
||||||
|
@Slf4j
|
||||||
|
public class WeiXinController {
|
||||||
|
@Resource
|
||||||
|
private WeXinConfig weXinConfig;
|
||||||
|
@Resource
|
||||||
|
private RedisUtil redisUtil;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 获取小程序码
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@GetMapping("/getQRCode")
|
||||||
|
public Result<?> getQRCode() {
|
||||||
|
try {
|
||||||
|
//先获取accessToken
|
||||||
|
String accessToken = WeXinUtil.getAccessToken(weXinConfig.getAppId(), weXinConfig.getAppSecret(), null);
|
||||||
|
//生成一个uuid,用于标识是否扫描成功 存入redis
|
||||||
|
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
|
||||||
|
String key = WeiXinConstant.QR_CODE_KEY + uuid;
|
||||||
|
redisUtil.set(key,WeiXinConstant.WX_QRCODE_NOT_SCAN_STATUS, 180);//3分钟
|
||||||
|
String qrCodeImg = WeXinUtil.getWxACode(accessToken, "pages/zyb/qrcodeLogin", "64");
|
||||||
|
HashMap<String, Object> map = new HashMap<>();
|
||||||
|
map.put("scene", uuid);
|
||||||
|
map.put("img", "data:image/jpeg;base64," + qrCodeImg);
|
||||||
|
return Result.OK(map);
|
||||||
|
}catch (Exception e){
|
||||||
|
return Result.error("出现错误,请联系管理员,"+e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取微信二维状态
|
||||||
|
*/
|
||||||
|
@GetMapping("/user/getQrCodeStatus/{uuid}")
|
||||||
|
public Result<?> getQrCodeStatus(@PathVariable String uuid) {
|
||||||
|
String key = WeiXinConstant.QR_CODE_KEY + uuid;
|
||||||
|
String value = (String) redisUtil.get(key);
|
||||||
|
HashMap<String, String> map = new HashMap<>();
|
||||||
|
if (StringUtils.isNotEmpty(value) && value.startsWith("WX_QRCODE_SUCCESS")) {
|
||||||
|
//二维码已经扫描通过,获取登录信息
|
||||||
|
String openId = value.split("-")[1];
|
||||||
|
//String token = tokenService.createToken(openId);
|
||||||
|
//map.put("qr_state", WxConstant.QR_STATUS_SUCCESS);
|
||||||
|
map.put("qr_state", "SUCCESS");
|
||||||
|
map.put("token", "1");
|
||||||
|
} else if (StringUtils.isNotEmpty(value) && value.startsWith("WX_QRCODE_SCAN")) {
|
||||||
|
//二维码被扫描但未验证
|
||||||
|
map.put("qr_state", "SCAN");
|
||||||
|
//success.put(AjaxResult.DATA_TAG, map);
|
||||||
|
}else if(StringUtils.isNotBlank(value) && value.startsWith("WX_QRCODE_NOT_SCAN")){
|
||||||
|
//二维码未被扫描
|
||||||
|
map.put("qr_state", "NOT_SCAN");
|
||||||
|
} else {
|
||||||
|
//二维码失效了
|
||||||
|
map.put("qr_state", "NULL");
|
||||||
|
//map.put(WxConstant.QR_STATUS, WxConstant.WX_QRCODE_EXPIRED);
|
||||||
|
//success.put(AjaxResult.DATA_TAG, map);
|
||||||
|
}
|
||||||
|
return Result.OK(map);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更改二维码状态
|
||||||
|
*/
|
||||||
|
@GetMapping("/user/updateQrCodeStatus/{uuid}")
|
||||||
|
public Result<?> updateQrCodeStatus(@PathVariable String uuid) {
|
||||||
|
//已经扫描
|
||||||
|
String key = WeiXinConstant.QR_CODE_KEY + uuid;
|
||||||
|
redisUtil.set(key,"WX_QRCODE_SCAN",1800);
|
||||||
|
return Result.OK();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 取消二维码登录
|
||||||
|
*/
|
||||||
|
@GetMapping("/user/cancelQrCode/{uuid}")
|
||||||
|
public Result<?> cancelQrCode(@PathVariable String uuid) {
|
||||||
|
String key = WeiXinConstant.QR_CODE_KEY + uuid;
|
||||||
|
redisUtil.del(key);
|
||||||
|
return Result.OK();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package org.jeecg.modules.web.dto;
|
package org.jeecg.modules.web.dto;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
@ -19,6 +20,7 @@ import java.util.Set;
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@ApiModel(value = "学院专业列表对象")
|
@ApiModel(value = "学院专业列表对象")
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||||
public class RecommendMajorDTO implements Serializable {
|
public class RecommendMajorDTO implements Serializable {
|
||||||
private String id;
|
private String id;
|
||||||
@ApiModelProperty(value = "录取概率")
|
@ApiModelProperty(value = "录取概率")
|
||||||
|
|
@ -44,7 +46,6 @@ public class RecommendMajorDTO implements Serializable {
|
||||||
private String majorName;
|
private String majorName;
|
||||||
@ApiModelProperty(value = "专业编码")
|
@ApiModelProperty(value = "专业编码")
|
||||||
private String majorCode;
|
private String majorCode;
|
||||||
@JsonIgnore
|
|
||||||
@ApiModelProperty(value = "专业类型")
|
@ApiModelProperty(value = "专业类型")
|
||||||
private String majorType;
|
private String majorType;
|
||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
|
|
@ -79,6 +80,7 @@ public class RecommendMajorDTO implements Serializable {
|
||||||
private String probabilityOperator;
|
private String probabilityOperator;
|
||||||
@ApiModelProperty(value = "学年制")
|
@ApiModelProperty(value = "学年制")
|
||||||
private Integer studyYear=0;
|
private Integer studyYear=0;
|
||||||
|
private Integer semester;
|
||||||
@ApiModelProperty(value = "历年录取数据")
|
@ApiModelProperty(value = "历年录取数据")
|
||||||
private List<RecommendHistoryMajorDTO> historyList;
|
private List<RecommendHistoryMajorDTO> historyList;
|
||||||
@ApiModelProperty(value = "历年录取数据")
|
@ApiModelProperty(value = "历年录取数据")
|
||||||
|
|
@ -143,4 +145,9 @@ public class RecommendMajorDTO implements Serializable {
|
||||||
*/
|
*/
|
||||||
@ApiModelProperty(value = "考试类型(统考/校考)")
|
@ApiModelProperty(value = "考试类型(统考/校考)")
|
||||||
private String kslx;
|
private String kslx;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "学科分类")
|
||||||
|
private String xkfl;
|
||||||
|
@ApiModelProperty(value = "专业类")
|
||||||
|
private String zyl;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
|
||||||
import net.sf.json.JSON;
|
import net.sf.json.JSON;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
import org.jeecg.modules.web.dto.RecommendMajorDTO;
|
||||||
import org.jeecg.modules.web.dto.WebMajorDTO;
|
import org.jeecg.modules.web.dto.WebMajorDTO;
|
||||||
import org.jeecg.modules.web.vo.QueryRecommendMajorVO;
|
import org.jeecg.modules.web.vo.QueryRecommendMajorVO;
|
||||||
import org.jeecg.modules.yx.mapper.YxMajorMapper;
|
import org.jeecg.modules.yx.mapper.YxMajorMapper;
|
||||||
|
|
@ -42,4 +43,13 @@ public class WebMajorService {
|
||||||
}
|
}
|
||||||
return jsonObjectList;
|
return jsonObjectList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 网页端-院校开设专业
|
||||||
|
* @param queryRecommendMajorVO
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public List<RecommendMajorDTO> schoolMajorList(QueryRecommendMajorVO queryRecommendMajorVO){
|
||||||
|
return yxMajorMapper.webSchoolMajorList(queryRecommendMajorVO);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,9 +33,10 @@ public class YxSchoolMajorDTO implements Serializable {
|
||||||
@ApiModelProperty(value = "学校代码")
|
@ApiModelProperty(value = "学校代码")
|
||||||
private java.lang.String schoolCode;
|
private java.lang.String schoolCode;
|
||||||
/**专业代码*/
|
/**专业代码*/
|
||||||
@Excel(name = "专业代码", width = 15)
|
|
||||||
@ApiModelProperty(value = "专业代码")
|
@ApiModelProperty(value = "专业代码")
|
||||||
private java.lang.String majorCode;
|
private java.lang.String majorCode;
|
||||||
|
@ApiModelProperty(value = "专业类别")
|
||||||
|
private String majorType;
|
||||||
/**专业名称*/
|
/**专业名称*/
|
||||||
@Excel(name = "专业名称", width = 15)
|
@Excel(name = "专业名称", width = 15)
|
||||||
@ApiModelProperty(value = "专业名称")
|
@ApiModelProperty(value = "专业名称")
|
||||||
|
|
@ -98,11 +99,5 @@ public class YxSchoolMajorDTO implements Serializable {
|
||||||
private String semester;
|
private String semester;
|
||||||
@ApiModelProperty(value = "学制(中文)")
|
@ApiModelProperty(value = "学制(中文)")
|
||||||
private String semesterName;
|
private String semesterName;
|
||||||
@ApiModelProperty(value = "所属一级学科")
|
|
||||||
private String firstLevelDiscipline;
|
|
||||||
@ApiModelProperty(value = "学科门类")
|
|
||||||
private String subjectCategory;
|
|
||||||
@ApiModelProperty(value = "专业类别")
|
|
||||||
private String professionalCategory;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package org.jeecg.modules.yx.mapper;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.jeecg.modules.web.dto.RecommendMajorDTO;
|
||||||
import org.jeecg.modules.web.dto.WebMajorDTO;
|
import org.jeecg.modules.web.dto.WebMajorDTO;
|
||||||
import org.jeecg.modules.web.vo.QueryRecommendMajorVO;
|
import org.jeecg.modules.web.vo.QueryRecommendMajorVO;
|
||||||
import org.jeecg.modules.yx.entity.YxMajor;
|
import org.jeecg.modules.yx.entity.YxMajor;
|
||||||
|
|
@ -17,4 +18,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
public interface YxMajorMapper extends BaseMapper<YxMajor> {
|
public interface YxMajorMapper extends BaseMapper<YxMajor> {
|
||||||
|
|
||||||
List<WebMajorDTO> webMajorList(@Param("q") QueryRecommendMajorVO queryRecommendMajorVO);
|
List<WebMajorDTO> webMajorList(@Param("q") QueryRecommendMajorVO queryRecommendMajorVO);
|
||||||
|
|
||||||
|
List<RecommendMajorDTO> webSchoolMajorList(@Param("q") QueryRecommendMajorVO queryRecommendMajorVO);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,4 +25,25 @@
|
||||||
</if>
|
</if>
|
||||||
</where>
|
</where>
|
||||||
</select>
|
</select>
|
||||||
|
<select id="webSchoolMajorList" resultType="org.jeecg.modules.web.dto.RecommendMajorDTO">
|
||||||
|
SELECT
|
||||||
|
sm.major_name,sm.major_code,sm.major_type,sm.enrollment_code,sm.batch,m.semester,
|
||||||
|
m.xkfl,m.zyl
|
||||||
|
FROM yx_school_major sm
|
||||||
|
LEFT JOIN yx_major m ON m.major_code = sm.major_code
|
||||||
|
<where>
|
||||||
|
<if test="q.majorName!=null and q.majorName!=''">
|
||||||
|
sm.major_name like concat('%',#{q.majorName},'%')
|
||||||
|
</if>
|
||||||
|
<if test="q.schoolCode!=null and q.schoolCode!=''">
|
||||||
|
sm.school_code = #{q.schoolCode}
|
||||||
|
</if>
|
||||||
|
<if test="q.majorType!=null and q.majorType!=''">
|
||||||
|
AND sm.major_type = #{q.majorType}
|
||||||
|
</if>
|
||||||
|
<if test="q.cognitioPolyclinic!=null and q.cognitioPolyclinic!=''">
|
||||||
|
AND sm.category = #{q.cognitioPolyclinic}
|
||||||
|
</if>
|
||||||
|
</where>
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
|
||||||
|
|
@ -12,9 +12,7 @@
|
||||||
s.institution_type as institutionType,
|
s.institution_type as institutionType,
|
||||||
s.school_icon as schoolIcon,
|
s.school_icon as schoolIcon,
|
||||||
m.major_desc as majorRemarks,
|
m.major_desc as majorRemarks,
|
||||||
m.semester as studyYear,
|
sm.semester as studyYear,
|
||||||
m.first_level_discipline as firstLevelDiscipline,
|
|
||||||
|
|
||||||
sm.limitation,
|
sm.limitation,
|
||||||
sm.major_name,
|
sm.major_name,
|
||||||
sm.major_type,
|
sm.major_type,
|
||||||
|
|
@ -41,13 +39,11 @@
|
||||||
sm.kslx,
|
sm.kslx,
|
||||||
sm.plan_num as planNum
|
sm.plan_num as planNum
|
||||||
FROM yx_school_major sm
|
FROM yx_school_major sm
|
||||||
LEFT JOIN ( SELECT major_code,major_desc,semester,first_level_discipline FROM yx_major GROUP BY major_code ORDER
|
LEFT JOIN ( SELECT major_code,major_desc FROM yx_major GROUP BY major_code ORDER
|
||||||
BY major_desc ) m ON m.major_code = sm.major_code
|
BY major_desc ) m ON m.major_code = sm.major_code
|
||||||
LEFT JOIN (SELECT school_id,school_code FROM yx_school_child group by school_code) sc ON sc.school_code = sm.school_code
|
LEFT JOIN (SELECT school_id,school_code FROM yx_school_child group by school_code) sc ON sc.school_code = sm.school_code
|
||||||
LEFT JOIN yx_school s ON s.id = sc.school_id
|
LEFT JOIN yx_school s ON s.id = sc.school_id
|
||||||
LEFT JOIn yx_first_level_disciplines fld ON fld.id = m.first_level_discipline
|
|
||||||
WHERE 1=1
|
WHERE 1=1
|
||||||
/*sm.rules_enroll_probability is not null*/
|
|
||||||
<if test="queryvo.schoolName!=null and queryvo.schoolName!=''">
|
<if test="queryvo.schoolName!=null and queryvo.schoolName!=''">
|
||||||
AND (s.school_name like concat('%',#{queryvo.schoolName},'%') or sc.schooL_code like concat('%',#{queryvo.schoolName},'%') or sm.major_name like
|
AND (s.school_name like concat('%',#{queryvo.schoolName},'%') or sc.schooL_code like concat('%',#{queryvo.schoolName},'%') or sm.major_name like
|
||||||
concat('%',#{queryvo.schoolName},'%'))
|
concat('%',#{queryvo.schoolName},'%'))
|
||||||
|
|
@ -172,10 +168,9 @@
|
||||||
s.province as province,
|
s.province as province,
|
||||||
s.school_nature as propertyName,
|
s.school_nature as propertyName,
|
||||||
s.institution_type as institutionType,
|
s.institution_type as institutionType,
|
||||||
|
|
||||||
sm.major_name,
|
sm.major_name,
|
||||||
m.major_desc as majorRemarks,
|
m.major_desc as majorRemarks,
|
||||||
m.semester as studyYear,
|
sm.semester as studyYear,
|
||||||
sm.major_code,
|
sm.major_code,
|
||||||
sm.tuition as studyCost
|
sm.tuition as studyCost
|
||||||
FROM yx_school_major sm
|
FROM yx_school_major sm
|
||||||
|
|
@ -195,15 +190,11 @@
|
||||||
</if>
|
</if>
|
||||||
</select>
|
</select>
|
||||||
<select id="dtoPage" resultType="org.jeecg.modules.yx.dto.YxSchoolMajorDTO">
|
<select id="dtoPage" resultType="org.jeecg.modules.yx.dto.YxSchoolMajorDTO">
|
||||||
SELECT sm.*,
|
SELECT
|
||||||
m.semester as semester,
|
sm.*,
|
||||||
m.educational_level as educationalLevel,
|
m.educational_level AS educationalLevel
|
||||||
fld.disciplines_name as professionalCategory,
|
|
||||||
di.item_text as subjectCategory
|
|
||||||
FROM yx_school_major sm
|
FROM yx_school_major sm
|
||||||
LEFT JOIN yx_major m ON m.major_code = sm.major_code
|
LEFT JOIN yx_major m ON m.major_code = sm.major_code
|
||||||
LEFT JOIN yx_first_level_disciplines fld ON fld.id = m.first_level_discipline
|
|
||||||
LEFT JOIN sys_dict_item di ON di.dict_id = '1693215348670623746' AND di.item_value = fld.categories_type
|
|
||||||
WHERE 1=1
|
WHERE 1=1
|
||||||
<if test="queryvo.schoolCode!=null and queryvo.schoolCode!=''">
|
<if test="queryvo.schoolCode!=null and queryvo.schoolCode!=''">
|
||||||
AND sm.school_code like concat('%',#{queryvo.schoolCode},'%')
|
AND sm.school_code like concat('%',#{queryvo.schoolCode},'%')
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue