From cf6eea4975635e3d196ca05abd73ed4997ef6471 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=B2=85?= <907037276@qq.com> Date: Mon, 3 Jul 2023 19:03:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=99=E5=B8=88=E7=AB=AF=E9=83=A8=E5=88=86?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 5 + .../config/security/JwtUser.java | 2 +- .../config/security/TokenProvider.java | 59 ++++++- .../controller/TrainingController.java | 82 ++++++++- .../forex/trading_trading/dto/TrainingBO.java | 11 +- .../service/MemberService.java | 14 +- .../service/TrainingService.java | 25 ++- .../trading_trading/util/CacheProvider.java | 50 ++++++ .../forex/trading_trading/util/HttpUtils.java | 33 ++++ .../forex/trading_trading/util/TzApi.java | 167 +++++++++++++++++- 10 files changed, 429 insertions(+), 19 deletions(-) create mode 100644 src/main/java/com/sztzjy/forex/trading_trading/util/CacheProvider.java diff --git a/pom.xml b/pom.xml index 3c60883..e52e779 100644 --- a/pom.xml +++ b/pom.xml @@ -144,6 +144,11 @@ httpclient 4.5.14 + + com.github.ben-manes.caffeine + caffeine + 2.9.3 + diff --git a/src/main/java/com/sztzjy/forex/trading_trading/config/security/JwtUser.java b/src/main/java/com/sztzjy/forex/trading_trading/config/security/JwtUser.java index afa368b..5245794 100644 --- a/src/main/java/com/sztzjy/forex/trading_trading/config/security/JwtUser.java +++ b/src/main/java/com/sztzjy/forex/trading_trading/config/security/JwtUser.java @@ -25,7 +25,7 @@ public class JwtUser implements UserDetails { private String className; private int majorId; private String majorName; - private String collegeId; + private int collegeId; private String collegeName; private List authorityCodes; diff --git a/src/main/java/com/sztzjy/forex/trading_trading/config/security/TokenProvider.java b/src/main/java/com/sztzjy/forex/trading_trading/config/security/TokenProvider.java index 4abe5a9..d2cd9af 100644 --- a/src/main/java/com/sztzjy/forex/trading_trading/config/security/TokenProvider.java +++ b/src/main/java/com/sztzjy/forex/trading_trading/config/security/TokenProvider.java @@ -8,10 +8,14 @@ import org.springframework.security.authentication.UsernamePasswordAuthenticatio import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import javax.servlet.http.HttpServletRequest; import java.security.Key; +import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; +import java.util.Base64; import java.util.Date; import java.util.List; @@ -23,6 +27,8 @@ public class TokenProvider { private final static String SECRET_ZHIYUN = "zy_wh_mnjy_fp76ckwuczzmb67w0a8x0"; + private final static String CURRENT_TO_ZHIYUN = "jVzvfoZU_eFN0CJcFARg0K6DlzTLa7oMWB7lV_y2s7bkv2Bem0281wEwlJp5afhsmM-Ynwvh3mAUTpwblGEz1A"; + /** * 解析jwtToken * @@ -66,7 +72,24 @@ public class TokenProvider { .claim("classId", jwtUser.getClassId()) .claim("schoolId", jwtUser.getSchoolId()) .claim("username", jwtUser.getUsername()) - .claim("authorityCodes",jwtUser.getAuthorityCodes()) + .claim("authorityCodes", jwtUser.getAuthorityCodes()) + .setIssuedAt(new Date(System.currentTimeMillis())) + .setExpiration(expiration) + .signWith(key, SignatureAlgorithm.HS512) + .compact(); + } + + public static String createZHIYUNToken(JwtUser jwtUser) { + Key key = Keys.hmacShaKeyFor(CURRENT_TO_ZHIYUN.getBytes()); + Date expiration = new Date(System.currentTimeMillis() + EXP_TIME); + return Jwts.builder() + .claim("userId", jwtUser.getUserId()) + .claim("roleId", jwtUser.getRoleId()) + .claim("name", jwtUser.getName()) + .claim("classId", jwtUser.getClassId()) + .claim("schoolId", jwtUser.getSchoolId()) + .claim("username", jwtUser.getUsername()) + .claim("majorId", jwtUser.getMajorId()) .setIssuedAt(new Date(System.currentTimeMillis())) .setExpiration(expiration) .signWith(key, SignatureAlgorithm.HS512) @@ -97,7 +120,7 @@ public class TokenProvider { jwtUser.setUsername(claims.get("name").toString()); return jwtUser; } catch (Exception e) { - throw new UnAuthorizedException("token解析失败"); + throw new UnAuthorizedException("token解析失败"); } } @@ -107,7 +130,36 @@ public class TokenProvider { // String prefix = "zy_wh_mnjy_"; // String generatedKey = generateKey(prefix); // System.out.println("Generated Key: " + generatedKey); - getJWTUserByZhiYun(null); +// getJWTUserByZhiYun(null); + + +//生成一个新的长度为512字节的随机密钥供智云平台解析token +// int keyLength = 512; // 根据您的要求进行调整 +// KeyGenerator keyGenerator; +// try { +// keyGenerator = KeyGenerator.getInstance("HmacSHA512"); +// keyGenerator.init(keyLength); +// SecretKey secretKey = keyGenerator.generateKey(); +// byte[] secretBytes = secretKey.getEncoded(); +// String secret = Base64.getUrlEncoder().withoutPadding().encodeToString(secretBytes); +// +// System.out.println("Generated Secret: " + secret); +// } catch (NoSuchAlgorithmException e) { +// e.printStackTrace(); +// } + + JwtUser user = new JwtUser(); + user.setUserId("486"); + user.setRoleId(3); + user.setUsername("tzt006"); + user.setSchoolId(1); + user.setSchoolName("天择大学"); + user.setCollegeId(1); + user.setCollegeName("演示学院"); + user.setMajorId(1); + user.setMajorName("产品演示专业"); + String token = createZHIYUNToken(user); + System.out.println(token); } public static String generateKey(String prefix) { @@ -126,6 +178,7 @@ public class TokenProvider { /** * 获取当前用户信息 + * * @param request request * @return JwtUser */ diff --git a/src/main/java/com/sztzjy/forex/trading_trading/controller/TrainingController.java b/src/main/java/com/sztzjy/forex/trading_trading/controller/TrainingController.java index b5e259b..9aca402 100644 --- a/src/main/java/com/sztzjy/forex/trading_trading/controller/TrainingController.java +++ b/src/main/java/com/sztzjy/forex/trading_trading/controller/TrainingController.java @@ -1,6 +1,7 @@ package com.sztzjy.forex.trading_trading.controller; +import cn.hutool.core.util.IdUtil; import com.github.pagehelper.Page; import com.github.pagehelper.PageInfo; import com.sztzjy.forex.trading_trading.annotation.Permission; @@ -8,22 +9,28 @@ import com.sztzjy.forex.trading_trading.annotation.aspect.PermissionType; import com.sztzjy.forex.trading_trading.config.security.JwtUser; import com.sztzjy.forex.trading_trading.config.security.TokenProvider; import com.sztzjy.forex.trading_trading.dto.TrainingBO; +import com.sztzjy.forex.trading_trading.entity.Member; import com.sztzjy.forex.trading_trading.entity.Training; +import com.sztzjy.forex.trading_trading.service.MemberService; import com.sztzjy.forex.trading_trading.service.TrainingService; import com.sztzjy.forex.trading_trading.util.ResultEntity; +import com.sztzjy.forex.trading_trading.util.TzApi; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; +import org.springframework.util.Assert; import org.springframework.web.bind.annotation.*; import org.w3c.dom.stylesheets.LinkStyle; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @Api(tags = "实训管理") @RestController @@ -32,6 +39,7 @@ import java.util.Map; public class TrainingController { private final TrainingService trainingService; + private final MemberService memberService; private final HttpServletRequest request; @@ -40,16 +48,29 @@ public class TrainingController { @PostMapping("create") public ResultEntity create(@RequestBody TrainingBO bo) { JwtUser currentUser = TokenProvider.getJWTUser(request); - trainingService.create(bo, currentUser); + Training training = trainingService.create(bo, currentUser); + List> maps; + if (bo.getMajorId() == null || bo.getMajorId() == 0) { + maps = TzApi.GetClassBySchoolIdForForeignExchangeTrading(currentUser); + } else { + maps = TzApi.GetClassByMajorIdForForeignExchangeTrading(currentUser, bo.getMajorId()); + } + String classIds = maps.stream() + .map(map -> String.valueOf(map.get("id"))) + .collect(Collectors.joining(",")); + List> studentInfos = TzApi.GetStudentInfoByClassIdForForeignExchangeTrading(classIds, currentUser); + List members = buildMembers(studentInfos, training); + if (members != null && members.size() > 0) memberService.insertAll(members); return new ResultEntity(HttpStatus.OK); } + @Permission(codes = PermissionType.TRAINING_MANAGEMENT_DEL) @ApiOperation("教师端----删除一条实训记录") @PostMapping("deleteById") public ResultEntity deleteById(@ApiParam("实训记录id") @RequestParam Integer trainingId) { trainingService.delete(trainingId); - + //TODO 同步删除member表数据 return new ResultEntity(HttpStatus.OK); } @@ -91,4 +112,61 @@ public class TrainingController { JwtUser currentUser = TokenProvider.getJWTUser(request); return new ResultEntity>>(HttpStatus.OK, trainingService.findTrainingNameList(currentUser)); } + + @Permission(codes = PermissionType.TRAINING_MANAGEMENT_ADD) + @ApiOperation("教师端----添加实训成员时用:获取班级列表") + @GetMapping("findClassNameList") + public ResultEntity>> findClassNameList(Integer majorId) { + JwtUser currentUser = TokenProvider.getJWTUser(request); + List> mapList; + if (majorId == null || majorId == 0) { + mapList = TzApi.GetClassBySchoolIdForForeignExchangeTrading(currentUser); + } else { + mapList = TzApi.GetClassByMajorIdForForeignExchangeTrading(currentUser, majorId); + } + return new ResultEntity>>(HttpStatus.OK, mapList); + } + + @Permission(codes = PermissionType.TRAINING_MANAGEMENT_ADD) + @ApiOperation("教师端----根据所选的班级获取学生列表(分页展示)") + @GetMapping("findStudentListByClassIds") + public ResultEntity>> findStudentListByClassIds(@ApiParam("页码") Integer index, + @ApiParam("页量") Integer size, + @ApiParam("班级id列表") @RequestParam List classIds) { + JwtUser currentUser = TokenProvider.getJWTUser(request); + return new ResultEntity>>(HttpStatus.OK, TzApi.PagedListStudentInfoByClassIdForForeignExchangeTrading(currentUser, String.join(",", classIds.toString()), index, size)); + } + + @Permission(codes = PermissionType.TRAINING_MANAGEMENT_ADD) + @ApiOperation("教师端----添加实训成员时用:根据学号或者学生名字获取用户信息") + @GetMapping("findStudentInfoByKeyword") + public ResultEntity>> findStudentInfoByKeyword(@ApiParam("关键字") @RequestParam String keyword) { + JwtUser currentUser = TokenProvider.getJWTUser(request); + return new ResultEntity>>(HttpStatus.OK, TzApi.GetStudentInfoByKeywordForForeignExchangeTrading(currentUser, keyword)); + } + + @Permission(codes = PermissionType.TRAINING_MANAGEMENT_ADD) + @ApiOperation("教师端----添加实训成员时用:获取专业列表下拉框") + @GetMapping("findMajorNameList") + public ResultEntity>> findMajorNameList() { + JwtUser currentUser = TokenProvider.getJWTUser(request); + return new ResultEntity>>(HttpStatus.OK, TzApi.GetMajorIdForForeignExchangeTrading(currentUser)); + } + + private List buildMembers(List> list, Training training) { + List members = new ArrayList<>(); + if (list != null && list.size() > 0) { + Member member = new Member(); + member.setMemberId(IdUtil.simpleUUID()); + member.setName(String.valueOf(list.get(0).get("name"))); + member.setTrainingId(training.getTrainingId()); + member.setSchoolId(training.getCreateSchoolId()); + member.setClassGrade(String.valueOf(list.get(0).get("className"))); + member.setMajor(String.valueOf(list.get(0).get("majorName"))); + member.setStudentNumber(String.valueOf(list.get(0).get("studentNo"))); + members.add(member); + } + return members; + } + } diff --git a/src/main/java/com/sztzjy/forex/trading_trading/dto/TrainingBO.java b/src/main/java/com/sztzjy/forex/trading_trading/dto/TrainingBO.java index 4132f8d..975430d 100644 --- a/src/main/java/com/sztzjy/forex/trading_trading/dto/TrainingBO.java +++ b/src/main/java/com/sztzjy/forex/trading_trading/dto/TrainingBO.java @@ -10,6 +10,7 @@ import lombok.Setter; import org.springframework.data.annotation.Transient; import java.util.Date; +import java.util.List; @Data @Getter @@ -24,17 +25,15 @@ public class TrainingBO { @ApiModelProperty("实训结束时间") private Date endTime; - @ApiModelProperty("创建人") - private String createBy; - - @ApiModelProperty("创建学校") - private String createSchool; - @ApiModelProperty("实训名称") private String trainingName; @ApiModelProperty("参加实训人数") @JsonIgnore private Integer peopleCount; + @ApiModelProperty("实训专业") + private Integer majorId; + @ApiModelProperty("实训班级") + private List classId; } diff --git a/src/main/java/com/sztzjy/forex/trading_trading/service/MemberService.java b/src/main/java/com/sztzjy/forex/trading_trading/service/MemberService.java index d7c945a..53d2474 100644 --- a/src/main/java/com/sztzjy/forex/trading_trading/service/MemberService.java +++ b/src/main/java/com/sztzjy/forex/trading_trading/service/MemberService.java @@ -9,11 +9,11 @@ import org.springframework.stereotype.Service; import java.util.List; @Service -public class MemberService { +public class MemberService { @Autowired MemberMapper memberMapper; - public Member getMemberByMemberIdAndTrainingId(String memberId,String trainingId){ + public Member getMemberByMemberIdAndTrainingId(String memberId, String trainingId) { MemberExample example = new MemberExample(); MemberExample.Criteria criteria = example.createCriteria(); criteria.andMemberIdEqualTo(memberId); @@ -22,12 +22,18 @@ public class MemberService { return members.get(0); } - public void updateByPrimaryKey(Member member){ + public void updateByPrimaryKey(Member member) { memberMapper.updateByPrimaryKey(member); } - public Member selectByPrimaryKey(String memberId){ + public Member selectByPrimaryKey(String memberId) { Member member = memberMapper.selectByPrimaryKey(memberId); return member; } + + public void insertAll(List members) { + for (Member member : members) { + memberMapper.insert(member); + } + } } diff --git a/src/main/java/com/sztzjy/forex/trading_trading/service/TrainingService.java b/src/main/java/com/sztzjy/forex/trading_trading/service/TrainingService.java index 526bf1a..0f9c95c 100644 --- a/src/main/java/com/sztzjy/forex/trading_trading/service/TrainingService.java +++ b/src/main/java/com/sztzjy/forex/trading_trading/service/TrainingService.java @@ -1,21 +1,26 @@ package com.sztzjy.forex.trading_trading.service; +import cn.hutool.core.util.IdUtil; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.sztzjy.forex.trading_trading.config.security.JwtUser; import com.sztzjy.forex.trading_trading.dto.TrainingBO; +import com.sztzjy.forex.trading_trading.entity.Member; import com.sztzjy.forex.trading_trading.entity.Training; import com.sztzjy.forex.trading_trading.entity.TrainingExample; import com.sztzjy.forex.trading_trading.mappers.TrainingMapper; +import com.sztzjy.forex.trading_trading.util.TzApi; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.Assert; import org.springframework.util.StringUtils; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @Service public class TrainingService { @@ -24,13 +29,31 @@ public class TrainingService { private TrainingMapper trainingMapper; - public void create(TrainingBO bo, JwtUser currentUser) { + public Training create(TrainingBO bo, JwtUser currentUser) { //TODO 待完成通过学校id或者班级id到智云平台获取学生信息并将参与实训学生信息添加到member表中 if (checkTrainingName(bo.getTrainingName(), null)) { throw new RuntimeException("实训名称已存在"); } Training training = Training.buildTraining(bo, currentUser); + trainingMapper.insertSelective(training); + return training; + } + + private List buildMembers(List> list, Training training) { + List members = new ArrayList<>(); + if (list != null && list.size() > 0) { + Member member = new Member(); + member.setMemberId(IdUtil.simpleUUID()); + member.setName(String.valueOf(list.get(0).get("name"))); + member.setTrainingId(training.getTrainingId()); + member.setSchoolId(training.getCreateSchoolId()); + member.setClassGrade(String.valueOf(list.get(0).get("className"))); + member.setMajor(String.valueOf(list.get(0).get("majorName"))); + member.setStudentNumber(String.valueOf(list.get(0).get("studentNo"))); + members.add(member); + } + return members; } diff --git a/src/main/java/com/sztzjy/forex/trading_trading/util/CacheProvider.java b/src/main/java/com/sztzjy/forex/trading_trading/util/CacheProvider.java new file mode 100644 index 0000000..ca6e1db --- /dev/null +++ b/src/main/java/com/sztzjy/forex/trading_trading/util/CacheProvider.java @@ -0,0 +1,50 @@ +package com.sztzjy.forex.trading_trading.util; + +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.Caffeine; + +import java.util.concurrent.TimeUnit; +import java.util.function.Function; + +/** + * 咖啡因提供的缓存工具类 + * + */ +public class CacheProvider { + private Cache cache = null; + public CacheProvider(Integer expire, Integer maxSize) { + /** + * 基于时间的移除:expireAfterAccess(long, TimeUnit) 根据某个键值对最后一次访问之后多少时间后移除 + *         expireAfterWrite(long, TimeUnit) 根据某个键值对被创建或值被替换后多少时间移除 + */ + if(cache==null){ + cache = Caffeine.newBuilder() + .expireAfterWrite(expire, TimeUnit.SECONDS) + .maximumSize(maxSize) + .build(); + } + } + + public long getSize(){ + return cache.estimatedSize(); + } + + public void put(String key,String value){ + cache.put(key, value); + } + public void put(String key,Object value){ + cache.put(key, value); + } + + public Object get(String key){ + return cache.getIfPresent(key); + } + + public Object get(String key,Function fc){ + return cache.get(key,fc); + } + + public void remove(String key){ + cache.invalidate(key); + } +} diff --git a/src/main/java/com/sztzjy/forex/trading_trading/util/HttpUtils.java b/src/main/java/com/sztzjy/forex/trading_trading/util/HttpUtils.java index 3fd2c2f..e759a7f 100644 --- a/src/main/java/com/sztzjy/forex/trading_trading/util/HttpUtils.java +++ b/src/main/java/com/sztzjy/forex/trading_trading/util/HttpUtils.java @@ -94,4 +94,37 @@ public class HttpUtils { } return null; } + + + // 发送GET请求 携带Token + public static String sendGet(String url, String token) throws IOException { + HttpURLConnection connection = null; + BufferedReader reader = null; + StringBuilder response = new StringBuilder(); + + try { + URL requestUrl = new URL(url); + connection = (HttpURLConnection) requestUrl.openConnection(); + connection.setRequestMethod("GET"); + + // 添加token到请求头部 + connection.setRequestProperty("Authorization", "Bearer " + token); + + reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); + String line; + while ((line = reader.readLine()) != null) { + response.append(line); + } + } finally { + if (reader != null) { + reader.close(); + } + if (connection != null) { + connection.disconnect(); + } + } + + return response.toString(); + } + } diff --git a/src/main/java/com/sztzjy/forex/trading_trading/util/TzApi.java b/src/main/java/com/sztzjy/forex/trading_trading/util/TzApi.java index 42ac729..0dd8959 100644 --- a/src/main/java/com/sztzjy/forex/trading_trading/util/TzApi.java +++ b/src/main/java/com/sztzjy/forex/trading_trading/util/TzApi.java @@ -1,20 +1,43 @@ package com.sztzjy.forex.trading_trading.util; +import cn.hutool.json.JSONArray; +import com.fasterxml.jackson.core.type.TypeReference; import cn.hutool.http.HttpStatus; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.pagehelper.PageInfo; import com.nimbusds.jose.shaded.gson.JsonObject; import com.sztzjy.forex.trading_trading.config.security.JwtUser; +import com.sztzjy.forex.trading_trading.config.security.TokenProvider; +import org.springframework.util.StringUtils; +import java.io.IOException; import java.net.URLEncoder; +import java.util.*; public class TzApi { private final static String API_URL = "http://Cloud.sztzjy.com"; - private final static String LOGIN_URL = API_URL + "/Account/FireignExchangeTradingLogin"; + private final static String LOGIN_URL = API_URL + "/Account/ForeignExchangeTradingLogin"; + + private final static String GET_CLASS = API_URL + "/Account/GetClassBySchoolIdForForeignExchangeTrading"; + + private final static String GET_MAJOR = API_URL + "/Account/GetMajorIdForForeignExchangeTrading"; + + private final static String GET_CLASS_BY_MAJOR = API_URL + "/Account/GetClassByMajorIdForForeignExchangeTrading"; + + private final static String GET_STUDENT_BY_ClALL = API_URL + "/Account/GetStudentInfoByClassIdForForeignExchangeTrading"; + + private final static String GET_STUDENT_BY_KEYWORD = API_URL + "/Account/GetStudentInfoByKeywordForForeignExchangeTrading"; + private final static String PAGE_STUDENT_BY_KEYWORD = API_URL + "/Account/PagedListStudentInfoByClassIdForForeignExchangeTrading"; + + // 智云接口调用token加入缓存,默认1小时过期 + private static CacheProvider cacheProvider = new CacheProvider(2400, 6000); public static JwtUser foreignExchangeTradingLogin(String userName, String password) { @@ -34,7 +57,7 @@ public class TzApi { JSONObject jsonObject = object.getJSONObject("respString"); JSONObject resultObject = jsonObject.getJSONObject("result"); int code = resultObject.getInt("code"); - if(code!= HttpStatus.HTTP_OK){ + if (code != HttpStatus.HTTP_OK) { throw new IllegalArgumentException("登录失败"); } JSONObject dataObject = resultObject.getJSONObject("data"); @@ -45,6 +68,12 @@ public class TzApi { user.setRoleId(dataObject.getInt("roleId")); user.setSchoolId(dataObject.getInt("schoolId")); user.setClassId(dataObject.getInt("classId")); + user.setMajorId(dataObject.getInt("majorId")); + user.setClassName(dataObject.getStr("className")); + user.setMajorName(dataObject.getStr("majorName")); + user.setSchoolName(dataObject.getStr("schoolName")); + user.setCollegeId(dataObject.getInt("collegeId")); + user.setCollegeName(dataObject.getStr("collegeName")); user.setUsername(userName); user.setPassword(password); return user; @@ -54,4 +83,138 @@ public class TzApi { return null; } + public static List> GetClassBySchoolIdForForeignExchangeTrading(JwtUser user) { + String token = getToken(user); + String url = GET_CLASS; + return getDataFromApi(url, token); + } + + public static List> GetMajorIdForForeignExchangeTrading(JwtUser user) { + String token = getToken(user); + String url = GET_MAJOR; + return getDataFromApi(url, token); + } + + public static List> GetClassByMajorIdForForeignExchangeTrading(JwtUser user, int majorId) { + String token = getToken(user); + String url = GET_CLASS_BY_MAJOR + "?majorId=" + majorId; + return getDataFromApi(url, token); + } + + public static List> GetStudentInfoByClassIdForForeignExchangeTrading(String classIds, JwtUser user) { + String token = getToken(user); + String url = GET_STUDENT_BY_ClALL + "?classList=" + classIds; + return getDataFromApi(url, token); + } + + public static List> GetStudentInfoByKeywordForForeignExchangeTrading(JwtUser user, String keyword) { + String token = getToken(user); + String url = GET_STUDENT_BY_KEYWORD + "?keyword=" + keyword; + return getDataFromApi(url, token); + } + + public static PageInfo> PagedListStudentInfoByClassIdForForeignExchangeTrading(JwtUser user, String classIds, int page, int size) { + String token = getToken(user); + String url = PAGE_STUDENT_BY_KEYWORD + "?classList=" + classIds + "&page=" + page + "&size=" + size; + return getPageDataFromApi(url, token); + } + + + public static List> getDataFromApi(String url, String token) { + List> dataList = new ArrayList<>(); + try { + String responseBody = HttpUtils.sendGet(url, token); + + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode jsonNode = objectMapper.readTree(responseBody); + + JsonNode resultNode = jsonNode.get("result"); + JsonNode dataNode = resultNode.get("data"); + if (dataNode.isArray()) { + for (JsonNode node : dataNode) { + Map dataMap = new HashMap<>(); + dataMap.put("id", node.get("id").asText()); + dataMap.put("name", node.get("name").asText()); + + dataList.add(dataMap); + } + } + + } catch (Exception e) { + throw new IllegalArgumentException("获取数据异常"); + } + return dataList; + } + + + public static PageInfo> getPageDataFromApi(String url, String token) { + PageInfo pageInfo = new PageInfo(); + try { + String responseBody = HttpUtils.sendGet(url, token); + + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode jsonNode = objectMapper.readTree(responseBody); + + JsonNode resultNode = jsonNode.get("result"); + JsonNode dataNode = resultNode.get("data"); + if (dataNode != null) { + pageInfo.setPages(resultNode.get("totalPages").asInt()); + pageInfo.setHasPreviousPage(resultNode.get("hasPreviousPage").asBoolean()); + pageInfo.setHasNextPage(resultNode.get("hasNextPage").asBoolean()); + pageInfo.setTotal(resultNode.get("totalCount").asInt()); + JsonNode retNode = dataNode.get("data"); + List> dataList = new ArrayList<>(); + if(retNode.isArray()){ + for(JsonNode node: retNode){ + Map dataMap = new HashMap<>(); + dataMap.put("id", node.get("id").asText()); + dataMap.put("name", node.get("name").asText()); + dataMap.put("studentNo", node.get("studentNo").asText()); + dataMap.put("className", node.get("className").asText()); + dataMap.put("majorName", node.get("majorName").asText()); + dataList.add(dataMap); + } + } + + pageInfo.setList(dataList); + } + + + } catch (Exception e) { + throw new IllegalArgumentException("获取数据异常"); + } + return pageInfo; + } + + private static String getToken(JwtUser user) { + try { + String access_token; + + access_token = (String) cacheProvider.get(user.getUserId() + user.getUsername()); + if (StringUtils.hasText(access_token)) { + System.out.println("-------->>> 从缓存中获取 access_token【成功】"); + } else { + access_token = TokenProvider.createZHIYUNToken(user); + cacheProvider.put(user.getUserId() + user.getUsername(), access_token); + System.out.println("-------->>> 从远程获取 access_token【成功】"); + } + return access_token; + } catch (Exception e) { + throw new IllegalArgumentException(e.getMessage()); + } + } + + public static void main(String[] args) { + JwtUser user = new JwtUser(); + user.setUserId("486"); + user.setRoleId(3); + user.setUsername("tzt006"); + user.setSchoolId(1); + user.setSchoolName("天择大学"); + user.setCollegeId(1); + user.setCollegeName("演示学院"); + user.setMajorId(1); + user.setMajorName("产品演示专业"); + PagedListStudentInfoByClassIdForForeignExchangeTrading(user, "7", 1, 10); + } }