diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java b/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java index d6b9fdc..4f624cb 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java @@ -80,6 +80,12 @@ public class ShiroConfig { } 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/login","anon");//小程序登录 @@ -94,7 +100,7 @@ public class ShiroConfig { //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/schoolInfo","anon");//前台-学校详情 filterChainDefinitionMap.put("/yx/yxMajor/list","anon");//前台-查专业 diff --git a/jeecg-module-system/jeecg-system-biz/pom.xml b/jeecg-module-system/jeecg-system-biz/pom.xml index 73b3aa4..0242e61 100644 --- a/jeecg-module-system/jeecg-system-biz/pom.xml +++ b/jeecg-module-system/jeecg-system-biz/pom.xml @@ -9,7 +9,8 @@ 4.0.0 jeecg-system-biz - + + org.jeecgframework.boot diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/controller/MiniUserController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/controller/MiniUserController.java index c4b010b..3ca822e 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/controller/MiniUserController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/controller/MiniUserController.java @@ -249,6 +249,11 @@ public class MiniUserController { obj.put("sessionKey", "sessionKey"); obj.put("userInfo", loginUser); obj.put("loginState", "not"); + //判断是不是 二维码登录 + if (StringUtils.isNotBlank(wxModel.getUuid())) { + //更改二维码登录状态 + redisUtil.set("WX_QRCODE_SCENE_"+ wxModel.getUuid(),""); + } return Result.OK(obj); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/wx/constant/WeiXinConstant.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/wx/constant/WeiXinConstant.java new file mode 100644 index 0000000..7532a32 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/wx/constant/WeiXinConstant.java @@ -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"; + +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/wx/model/WxPayV3Bean.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/wx/model/WeXinConfig.java similarity index 95% rename from jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/wx/model/WxPayV3Bean.java rename to jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/wx/model/WeXinConfig.java index 697e4f8..f063d70 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/wx/model/WxPayV3Bean.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/wx/model/WeXinConfig.java @@ -14,7 +14,7 @@ import org.springframework.stereotype.Component; @ConfigurationProperties(prefix = "wx") @Data @ToString -public class WxPayV3Bean { +public class WeXinConfig { private String appId; diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/wx/model/WxModel.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/wx/model/WxModel.java index 49f65e1..1bb3ead 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/wx/model/WxModel.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/wx/model/WxModel.java @@ -15,4 +15,6 @@ public class WxModel implements Serializable { public String iv; public String openId; + + private String uuid; } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/wx/util/WeXinUtil.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/wx/util/WeXinUtil.java new file mode 100644 index 0000000..c9ef1d7 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/wx/util/WeXinUtil.java @@ -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 + * 官方文档 + * 参考网站 + * 二维码生成: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 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"); + } +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/controller/ArtRecommendMajorController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/controller/ArtRecommendMajorController.java index fec71cb..5cb5916 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/controller/ArtRecommendMajorController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/controller/ArtRecommendMajorController.java @@ -81,7 +81,7 @@ public class ArtRecommendMajorController { yxSchoolMajorLambdaQueryWrapper.eq(StringUtils.isNotBlank(queryCalculateInvestmentVO.getCategory()), YxSchoolMajor::getCategory, queryCalculateInvestmentVO.getCategory()); yxSchoolMajorLambdaQueryWrapper.eq(StringUtils.isNotBlank(queryCalculateInvestmentVO.getProfessionalCategory()), YxSchoolMajor::getMajorType, queryCalculateInvestmentVO.getProfessionalCategory()); - + yxSchoolMajorLambdaQueryWrapper.orderByDesc(YxSchoolMajor::getRulesEnrollProbabilitySx); List calculateInvestmentDTOList = new ArrayList<>(); Map rulesEnrollProbabilityMap=new HashMap<>(); rulesEnrollProbabilityMap.put("专过文排","专过文排"); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/controller/WebMajorController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/controller/WebMajorController.java index 89c9f43..830e854 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/controller/WebMajorController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/controller/WebMajorController.java @@ -78,4 +78,10 @@ public class WebMajorController { return Result.OK(zylList); } } + + @ApiOperation(value = "获取院校的专业信息") + @GetMapping(value = "/schoolMajorList") + public Result schoolMajorList(QueryRecommendMajorVO queryRecommendMajorVO) { + return Result.OK(webMajorService.schoolMajorList(queryRecommendMajorVO)); + } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/controller/WebSchoolController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/controller/WebSchoolController.java new file mode 100644 index 0000000..489bfd6 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/controller/WebSchoolController.java @@ -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 lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(YxSchoolDoubleFirstPlan::getSchoolId,schoolId); + lambdaQueryWrapper.select(YxSchoolDoubleFirstPlan::getSchoolName, + YxSchoolDoubleFirstPlan::getMajorCode, + YxSchoolDoubleFirstPlan::getLevel, + YxSchoolDoubleFirstPlan::getTrack, + YxSchoolDoubleFirstPlan::getMajorName); + List yxSchoolDoubleFirstPlanList = yxSchoolDoubleFirstPlanService.list(lambdaQueryWrapper); + List gjjList = yxSchoolDoubleFirstPlanList.stream().filter(l -> "国家级".equals(l.getLevel())).collect(Collectors.toList()); + List 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 list = null; + try { + if (redisUtil.hasKey(key)) { + list = JSONArray.parseArray((String) redisUtil.get(key),YxSubjectEvaluation.class); + }else{ + LambdaQueryWrapper 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); + } +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/controller/WebUserController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/controller/WebUserController.java index 716e99a..a13a7b5 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/controller/WebUserController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/controller/WebUserController.java @@ -4,6 +4,8 @@ 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.RedisUtil; +import org.jeecg.modules.mini.wx.model.WeXinConfig; import org.jeecg.modules.system.model.SysLoginModel; import org.jeecg.modules.web.service.WebUserService; import org.springframework.web.bind.annotation.*; @@ -21,9 +23,17 @@ import javax.annotation.Resource; public class WebUserController { @Resource private WebUserService webUserService; + @Resource + private WeXinConfig weXinConfig; + @Resource + private RedisUtil redisUtil; + @RequestMapping(value = "/login/passwd", method = RequestMethod.POST) @ApiOperation(value = "手机号密码登录") public Result loginPasswd(@RequestBody SysLoginModel sysLoginModel){ return webUserService.loginPasswd(sysLoginModel); } + + + } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/controller/WeiXinController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/controller/WeiXinController.java new file mode 100644 index 0000000..7eb0fe3 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/controller/WeiXinController.java @@ -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; + + + /** + *
+     * 获取小程序码
+     * 
+ */ + @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 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 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(); + } +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/dto/RecommendMajorDTO.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/dto/RecommendMajorDTO.java index adc3ad5..5eca316 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/dto/RecommendMajorDTO.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/dto/RecommendMajorDTO.java @@ -1,6 +1,7 @@ package org.jeecg.modules.web.dto; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -19,6 +20,7 @@ import java.util.Set; */ @Data @ApiModel(value = "学院专业列表对象") +@JsonInclude(JsonInclude.Include.NON_NULL) public class RecommendMajorDTO implements Serializable { private String id; @ApiModelProperty(value = "录取概率") @@ -44,7 +46,6 @@ public class RecommendMajorDTO implements Serializable { private String majorName; @ApiModelProperty(value = "专业编码") private String majorCode; - @JsonIgnore @ApiModelProperty(value = "专业类型") private String majorType; @JsonIgnore @@ -79,6 +80,7 @@ public class RecommendMajorDTO implements Serializable { private String probabilityOperator; @ApiModelProperty(value = "学年制") private Integer studyYear=0; + private Integer semester; @ApiModelProperty(value = "历年录取数据") private List historyList; @ApiModelProperty(value = "历年录取数据") @@ -143,4 +145,9 @@ public class RecommendMajorDTO implements Serializable { */ @ApiModelProperty(value = "考试类型(统考/校考)") private String kslx; + + @ApiModelProperty(value = "学科分类") + private String xkfl; + @ApiModelProperty(value = "专业类") + private String zyl; } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/service/WebMajorService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/service/WebMajorService.java index 0c5e826..380be8c 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/service/WebMajorService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/service/WebMajorService.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; import net.sf.json.JSON; import org.apache.commons.collections.CollectionUtils; 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.vo.QueryRecommendMajorVO; import org.jeecg.modules.yx.mapper.YxMajorMapper; @@ -42,4 +43,13 @@ public class WebMajorService { } return jsonObjectList; } + + /** + * 网页端-院校开设专业 + * @param queryRecommendMajorVO + * @return + */ + public List schoolMajorList(QueryRecommendMajorVO queryRecommendMajorVO){ + return yxMajorMapper.webSchoolMajorList(queryRecommendMajorVO); + } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/dto/YxSchoolMajorDTO.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/dto/YxSchoolMajorDTO.java index 6166501..fab812f 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/dto/YxSchoolMajorDTO.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/dto/YxSchoolMajorDTO.java @@ -33,9 +33,10 @@ public class YxSchoolMajorDTO implements Serializable { @ApiModelProperty(value = "学校代码") private java.lang.String schoolCode; /**专业代码*/ - @Excel(name = "专业代码", width = 15) @ApiModelProperty(value = "专业代码") private java.lang.String majorCode; + @ApiModelProperty(value = "专业类别") + private String majorType; /**专业名称*/ @Excel(name = "专业名称", width = 15) @ApiModelProperty(value = "专业名称") @@ -98,11 +99,5 @@ public class YxSchoolMajorDTO implements Serializable { private String semester; @ApiModelProperty(value = "学制(中文)") private String semesterName; - @ApiModelProperty(value = "所属一级学科") - private String firstLevelDiscipline; - @ApiModelProperty(value = "学科门类") - private String subjectCategory; - @ApiModelProperty(value = "专业类别") - private String professionalCategory; } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/mapper/YxMajorMapper.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/mapper/YxMajorMapper.java index 3435ea7..9dcdaf3 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/mapper/YxMajorMapper.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/mapper/YxMajorMapper.java @@ -3,6 +3,7 @@ package org.jeecg.modules.yx.mapper; import java.util.List; 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.vo.QueryRecommendMajorVO; import org.jeecg.modules.yx.entity.YxMajor; @@ -17,4 +18,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; public interface YxMajorMapper extends BaseMapper { List webMajorList(@Param("q") QueryRecommendMajorVO queryRecommendMajorVO); + + List webSchoolMajorList(@Param("q") QueryRecommendMajorVO queryRecommendMajorVO); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/mapper/xml/YxMajorMapper.xml b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/mapper/xml/YxMajorMapper.xml index a8b8f67..0a3455b 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/mapper/xml/YxMajorMapper.xml +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/mapper/xml/YxMajorMapper.xml @@ -25,4 +25,25 @@ + diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/mapper/xml/YxSchoolMajorMapper.xml b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/mapper/xml/YxSchoolMajorMapper.xml index c9a3b15..064031d 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/mapper/xml/YxSchoolMajorMapper.xml +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/mapper/xml/YxSchoolMajorMapper.xml @@ -12,9 +12,7 @@ s.institution_type as institutionType, s.school_icon as schoolIcon, m.major_desc as majorRemarks, - m.semester as studyYear, - m.first_level_discipline as firstLevelDiscipline, - + sm.semester as studyYear, sm.limitation, sm.major_name, sm.major_type, @@ -41,13 +39,11 @@ sm.kslx, sm.plan_num as planNum 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 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_first_level_disciplines fld ON fld.id = m.first_level_discipline WHERE 1=1 - /*sm.rules_enroll_probability is not null*/ AND (s.school_name like concat('%',#{queryvo.schoolName},'%') or sc.schooL_code like concat('%',#{queryvo.schoolName},'%') or sm.major_name like concat('%',#{queryvo.schoolName},'%')) @@ -172,10 +168,9 @@ s.province as province, s.school_nature as propertyName, s.institution_type as institutionType, - sm.major_name, m.major_desc as majorRemarks, - m.semester as studyYear, + sm.semester as studyYear, sm.major_code, sm.tuition as studyCost FROM yx_school_major sm @@ -195,15 +190,11 @@