From 0d86203b4c2b8cc5a59e17ae2b687689339f8f4d Mon Sep 17 00:00:00 2001 From: zy_Java <654600784@qq.com> Date: Fri, 21 Jan 2022 14:18:19 +0800 Subject: [PATCH] =?UTF-8?q?20220121=E8=8E=B7=E5=8F=96=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .drone.yml | 8 +- pom.xml | 2 +- .../main/resources/mapper_dao/BusinessDao.xml | 3 +- .../ptos_tall/bean/dto/BusinessDto.java | 7 -- .../ptos_tall/service/BusinessService.java | 22 +++- .../tallsdk/api/ProjectController.java | 10 +- .../tallsdk/api/RoleController.java | 6 +- .../tallsdk/api/TaskController.java | 14 ++- .../ccsensptos/tallsdk/bean/dto/TokenDto.java | 28 +++-- .../ccsensptos/tallsdk/bean/vo/TokenVo.java | 2 +- .../tallsdk/service/ITallService.java | 12 +- .../com/ccsensptos/tallsdk/util/Constant.java | 7 +- .../ccsensptos/tallsdk/util/TokenUtil.java | 115 ++++++++++++++---- 13 files changed, 171 insertions(+), 65 deletions(-) diff --git a/.drone.yml b/.drone.yml index 03d5e07..8a88aa4 100644 --- a/.drone.yml +++ b/.drone.yml @@ -16,12 +16,18 @@ constants: - java -version - mvn clean package -Dmaven.test.skip=true - &SCP_TARGET /home/ptos_open/server - - &SCP_SOURCE ptos_open/target/*.jar + - &SCP_SOURCE + -ptos_open/target/*.jar + -ptos_tall/target/*.jar - &SCP_STRIP_DIR_LEVEL 2 - &SSH_CMDER - cd /home/ptos_open/server - pwd - ./open.sh > /dev/null 2> /dev/null & + - mv ptos_tall-0.0.1-SNAPSHOT.jar /home/ptos_tall/server + - cd /home/ptos_tall/server + - pwd + - ./ptos.sh > /dev/null 2> /dev/null & #- &NOTIFY_EMAIL weizezhao@ccsens.com - &NOTIFY_WECHATROBOT_WEBHOOK https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=b2b93e9a-128b-41d4-8dce-12004e3f48b9 diff --git a/pom.xml b/pom.xml index 98c8fa5..14c7ecf 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ ptos_diplomatist ptos_open tall_sdk - ptoszero + diff --git a/ptos_open/src/main/resources/mapper_dao/BusinessDao.xml b/ptos_open/src/main/resources/mapper_dao/BusinessDao.xml index 2dd4918..3cfb4db 100644 --- a/ptos_open/src/main/resources/mapper_dao/BusinessDao.xml +++ b/ptos_open/src/main/resources/mapper_dao/BusinessDao.xml @@ -58,10 +58,11 @@ p.js FROM t_open_business_plugin bp - LEFT JOIN t_open_plugin p on bp.plugin_id = p.id and p.rec_status = 0 + LEFT JOIN t_open_plugin p on bp.plugin_id = p.id LEFT JOIN t_open_plugin_img i on p.id = i.plugin_id and i.type = 0 and i.rec_status = 0 WHERE bp.business_id = #{businessId} and bp.rec_status = 0 + and p.rec_status = 0 \ No newline at end of file diff --git a/ptos_tall/src/main/java/com/ccsens/ptos_tall/bean/dto/BusinessDto.java b/ptos_tall/src/main/java/com/ccsens/ptos_tall/bean/dto/BusinessDto.java index e1262ab..6506846 100644 --- a/ptos_tall/src/main/java/com/ccsens/ptos_tall/bean/dto/BusinessDto.java +++ b/ptos_tall/src/main/java/com/ccsens/ptos_tall/bean/dto/BusinessDto.java @@ -17,13 +17,6 @@ public class BusinessDto { @ApiModelProperty("secret") private String secret; - public BusinessToken() { - } - - public BusinessToken(String appId, String secret) { - this.appId = appId; - this.secret = secret; - } } } diff --git a/ptos_tall/src/main/java/com/ccsens/ptos_tall/service/BusinessService.java b/ptos_tall/src/main/java/com/ccsens/ptos_tall/service/BusinessService.java index 0e5a659..eaa0c43 100644 --- a/ptos_tall/src/main/java/com/ccsens/ptos_tall/service/BusinessService.java +++ b/ptos_tall/src/main/java/com/ccsens/ptos_tall/service/BusinessService.java @@ -1,18 +1,36 @@ package com.ccsens.ptos_tall.service; +import cn.hutool.core.collection.CollectionUtil; import com.ccsens.ptos_tall.bean.dto.BusinessDto; +import com.ccsens.util.JwtUtil; +import com.ccsens.util.RedisKeyManager; +import com.ccsens.util.RedisUtil; +import com.ccsens.util.WebConstant; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; +import java.util.Map; + @Slf4j @Service @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class) public class BusinessService implements IBusinessService { + @Resource + private RedisUtil redisUtil; + @Override public String getAccessTokenByAppId(BusinessDto.BusinessToken params) { - - return null; + //生成accessToken + Map payLoads = CollectionUtil.newHashMap(); + payLoads.put("secret", params.getSecret()); + //生成过期时间 + long tokenExpired = 3600 * 1000L * 2; + //生成token并缓存 + String accessToken = JwtUtil.createJWT(params.getAppId() + "",payLoads, tokenExpired,WebConstant.JWT_ACCESS_TOKEN_SECERT); + redisUtil.set(RedisKeyManager.getTokenCachedKey(params.getAppId()), accessToken, tokenExpired / 1000); + return accessToken; } } diff --git a/tall_sdk/src/main/java/com/ccsensptos/tallsdk/api/ProjectController.java b/tall_sdk/src/main/java/com/ccsensptos/tallsdk/api/ProjectController.java index d4af918..6c59c12 100644 --- a/tall_sdk/src/main/java/com/ccsensptos/tallsdk/api/ProjectController.java +++ b/tall_sdk/src/main/java/com/ccsensptos/tallsdk/api/ProjectController.java @@ -1,5 +1,6 @@ package com.ccsensptos.tallsdk.api; +import com.ccsens.util.WebConstant; import com.ccsensptos.tallsdk.bean.dto.ProjectDto; import com.ccsensptos.tallsdk.service.ITallService; import com.ccsensptos.tallsdk.bean.vo.ProjectVo; @@ -16,6 +17,7 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import java.util.List; /** @@ -32,9 +34,9 @@ public class ProjectController { @ApiOperation(value = "日历页获取项目列表", notes = "") @RequestMapping(value = "/query", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) - public JsonResponse> queryProjectByUser(@ApiParam @Validated @RequestBody ProjectDto.QueryProjectDto params) throws Exception{ + public JsonResponse> queryProjectByUser(HttpServletRequest request,@ApiParam @Validated @RequestBody ProjectDto.QueryProjectDto params) throws Exception{ log.info("查询用户所有域下所有业务内的所有项目:{}",params); - List projectInfoList = tallService.queryProjectByUser(params); + List projectInfoList = tallService.queryProjectByUser(request.getHeader(WebConstant.HEADER_KEY_TOKEN),params); log.info("返回用户所有域下所有业务内的所有项目"); return JsonResponse.newInstance().ok(projectInfoList); } @@ -42,9 +44,9 @@ public class ProjectController { @ApiOperation(value = "导入Wbs", notes = "") @RequestMapping(value = "/wbs", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) - public JsonResponse queryProjectByUser(@ApiParam @Validated @RequestBody MultipartFile params) throws Exception{ + public JsonResponse queryProjectByUser(HttpServletRequest request,@ApiParam @Validated @RequestBody MultipartFile params) throws Exception{ log.info("导入Wbs:{}",params); - List projectInfoList = tallService.importWbs(params); + List projectInfoList = tallService.importWbs(request.getHeader(WebConstant.HEADER_KEY_TOKEN),params); log.info("导入Wbs"); return JsonResponse.newInstance().ok(projectInfoList); } diff --git a/tall_sdk/src/main/java/com/ccsensptos/tallsdk/api/RoleController.java b/tall_sdk/src/main/java/com/ccsensptos/tallsdk/api/RoleController.java index 43ebdeb..da062f9 100644 --- a/tall_sdk/src/main/java/com/ccsensptos/tallsdk/api/RoleController.java +++ b/tall_sdk/src/main/java/com/ccsensptos/tallsdk/api/RoleController.java @@ -1,5 +1,6 @@ package com.ccsensptos.tallsdk.api; +import com.ccsens.util.WebConstant; import com.ccsensptos.tallsdk.bean.dto.RoleDto; import com.ccsensptos.tallsdk.bean.vo.RoleVo; import com.ccsensptos.tallsdk.service.ITallService; @@ -15,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; /** * @author 逗 @@ -31,9 +33,9 @@ public class RoleController { @ApiOperation(value = "根据项目id查找角色", notes = "") @RequestMapping(value = "/show", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) - public JsonResponse queryByProjectId(@ApiParam @Validated @RequestBody RoleDto.QueryRoleById params) { + public JsonResponse queryByProjectId(HttpServletRequest request, @ApiParam @Validated @RequestBody RoleDto.QueryRoleById params) { log.info("根据项目id查找角色{}",params); - RoleVo.QueryRole queryRole = tallService.queryShowRole(params); + RoleVo.QueryRole queryRole = tallService.queryShowRole(request.getHeader(WebConstant.HEADER_KEY_TOKEN),params); log.info("项目id查找角色列表{}",queryRole); return JsonResponse.newInstance().ok(queryRole); } diff --git a/tall_sdk/src/main/java/com/ccsensptos/tallsdk/api/TaskController.java b/tall_sdk/src/main/java/com/ccsensptos/tallsdk/api/TaskController.java index d9813d6..879f7cc 100644 --- a/tall_sdk/src/main/java/com/ccsensptos/tallsdk/api/TaskController.java +++ b/tall_sdk/src/main/java/com/ccsensptos/tallsdk/api/TaskController.java @@ -1,5 +1,6 @@ package com.ccsensptos.tallsdk.api; +import com.ccsens.util.WebConstant; import com.ccsensptos.tallsdk.service.ITallService; import com.ccsensptos.tallsdk.bean.dto.TaskDto; import com.ccsensptos.tallsdk.bean.vo.TaskVo; @@ -15,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import java.util.List; /** @@ -32,24 +34,24 @@ public class TaskController { @ApiOperation(value = "查找永久日常任务", notes = "") @RequestMapping(value = "/permanent", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) - public JsonResponse> queryPermanentGlobalTask(@ApiParam @Validated @RequestBody TaskDto.QueryPermanentGlobalTask params) { - List queryTasks = tallService.queryPermanentGlobalTask(params); + public JsonResponse> queryPermanentGlobalTask(HttpServletRequest request,@ApiParam @Validated @RequestBody TaskDto.QueryPermanentGlobalTask params) { + List queryTasks = tallService.queryPermanentGlobalTask(request.getHeader(WebConstant.HEADER_KEY_TOKEN),params); return JsonResponse.newInstance().ok(queryTasks); } @ApiOperation(value = "查找带时间的日常任务", notes = "") @RequestMapping(value = "/global", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) - public JsonResponse> queryGlobalTask(@ApiParam @Validated @RequestBody TaskDto.QueryGlobalTask params) { - List queryTasks = tallService.queryGlobalTask(params); + public JsonResponse> queryGlobalTask(HttpServletRequest request,@ApiParam @Validated @RequestBody TaskDto.QueryGlobalTask params) { + List queryTasks = tallService.queryGlobalTask(request.getHeader(WebConstant.HEADER_KEY_TOKEN),params); return JsonResponse.newInstance().ok(queryTasks); } @ApiOperation(value = "查找定期任务", notes = "") @RequestMapping(value = "/regular", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) - public JsonResponse> queryRegularTask(@ApiParam @Validated @RequestBody TaskDto.QueryRegularTask params) { - List queryTasks = tallService.queryRegularTask(params); + public JsonResponse> queryRegularTask(HttpServletRequest request, @ApiParam @Validated @RequestBody TaskDto.QueryRegularTask params) { + List queryTasks = tallService.queryRegularTask(request.getHeader(WebConstant.HEADER_KEY_TOKEN),params); return JsonResponse.newInstance().ok(queryTasks); } } diff --git a/tall_sdk/src/main/java/com/ccsensptos/tallsdk/bean/dto/TokenDto.java b/tall_sdk/src/main/java/com/ccsensptos/tallsdk/bean/dto/TokenDto.java index cd73150..e6be7f0 100644 --- a/tall_sdk/src/main/java/com/ccsensptos/tallsdk/bean/dto/TokenDto.java +++ b/tall_sdk/src/main/java/com/ccsensptos/tallsdk/bean/dto/TokenDto.java @@ -1,5 +1,7 @@ package com.ccsensptos.tallsdk.bean.dto; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** @@ -9,20 +11,30 @@ import lombok.Data; public class TokenDto { -// @Data -// public static class GetAccessToken{ -// //"appId" -// private String appId; -// //"secret" -// private String secret; -// } - @Data public static class GetAccessToken{ //"appId" private String appId; //"secret" private String secret; + + public GetAccessToken(String appId, String secret) { + this.appId = appId; + this.secret = secret; + } + + public GetAccessToken() { + } + } + + @Data + public static class GetUserByToken{ + //"token") + private String token; + //"appId") + private String appId; + //"secret") + private String secret; } } diff --git a/tall_sdk/src/main/java/com/ccsensptos/tallsdk/bean/vo/TokenVo.java b/tall_sdk/src/main/java/com/ccsensptos/tallsdk/bean/vo/TokenVo.java index ba410d1..aa97c02 100644 --- a/tall_sdk/src/main/java/com/ccsensptos/tallsdk/bean/vo/TokenVo.java +++ b/tall_sdk/src/main/java/com/ccsensptos/tallsdk/bean/vo/TokenVo.java @@ -32,7 +32,7 @@ public class TokenVo { @Data public static class AccessToken{ //"accessToken" - private Long accessToken; + private String accessToken; //"存放时间" private Long time; } diff --git a/tall_sdk/src/main/java/com/ccsensptos/tallsdk/service/ITallService.java b/tall_sdk/src/main/java/com/ccsensptos/tallsdk/service/ITallService.java index 1b7b04d..13f311e 100644 --- a/tall_sdk/src/main/java/com/ccsensptos/tallsdk/service/ITallService.java +++ b/tall_sdk/src/main/java/com/ccsensptos/tallsdk/service/ITallService.java @@ -19,40 +19,40 @@ public interface ITallService { * @param param 开始结束时间 * @return 返回项目列表 */ - List queryProjectByUser(ProjectDto.QueryProjectDto param); + List queryProjectByUser(String token,ProjectDto.QueryProjectDto param); /** * 查询项目下的角色列表 * @param param 项目id * @return 返回角色列表 */ - RoleVo.QueryRole queryShowRole(RoleDto.QueryRoleById param); + RoleVo.QueryRole queryShowRole(String token,RoleDto.QueryRoleById param); /** * 查询没有时间的日常任务 * @param param 角色id等。。。 * @return 返回任务列表 */ - List queryPermanentGlobalTask(TaskDto.QueryPermanentGlobalTask param); + List queryPermanentGlobalTask(String token,TaskDto.QueryPermanentGlobalTask param); /** * 查询有时间的日常任务 * @param param 角色id和时间 * @return 返回任务列表 */ - List queryGlobalTask(TaskDto.QueryGlobalTask param); + List queryGlobalTask(String token,TaskDto.QueryGlobalTask param); /** * 查询定期任务 * @param param 角色id和时间 * @return 返回任务列表 */ - List queryRegularTask(TaskDto.QueryRegularTask param); + List queryRegularTask(String token,TaskDto.QueryRegularTask param); /** * 导入wbs * @param params wbs文件 * @return 返回项目信息 */ - List importWbs(MultipartFile params); + List importWbs(String token,MultipartFile params); } diff --git a/tall_sdk/src/main/java/com/ccsensptos/tallsdk/util/Constant.java b/tall_sdk/src/main/java/com/ccsensptos/tallsdk/util/Constant.java index bbb761a..f801b22 100644 --- a/tall_sdk/src/main/java/com/ccsensptos/tallsdk/util/Constant.java +++ b/tall_sdk/src/main/java/com/ccsensptos/tallsdk/util/Constant.java @@ -10,6 +10,11 @@ public class Constant { /**请求用户信息的接口路径*/ public static final String TALL_USER_TOKEN = "users/businessToken"; /**获取accessToken*/ - public static final String TALL_GET_ACCESS_TOKEN = "users/businessToken"; + public static final String TALL_GET_ACCESS_TOKEN = "business/accessToken"; + /**请求头--accessToken*/ + public static final String ACCESS_TOKEN = "accessToken"; + + /**token过期时间 100分钟*/ + public static final Long EXPIRATION_TIME = 60 * 1000L * 100; } diff --git a/tall_sdk/src/main/java/com/ccsensptos/tallsdk/util/TokenUtil.java b/tall_sdk/src/main/java/com/ccsensptos/tallsdk/util/TokenUtil.java index 34c77c7..5780816 100644 --- a/tall_sdk/src/main/java/com/ccsensptos/tallsdk/util/TokenUtil.java +++ b/tall_sdk/src/main/java/com/ccsensptos/tallsdk/util/TokenUtil.java @@ -1,24 +1,37 @@ package com.ccsensptos.tallsdk.util; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.ccsens.util.RedisUtil; +import com.ccsens.util.RestTemplateUtil; +import com.ccsensptos.tallsdk.bean.dto.TokenDto; import com.ccsensptos.tallsdk.bean.vo.TokenVo; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import javax.annotation.Resource; +import javax.servlet.http.HttpServlet; +import java.util.HashMap; import java.util.Map; /** * @author 逗 */ @Component +@Slf4j public class TokenUtil { - - public static final String REDIS_IS_OPEN = "1"; + /**缓存token或用户信息*/ + public static Map accessTokenMap = new HashMap<>(); public static String openRedis; - @Value("${spring.application.sdk-cache-redis:}") public void setApplication(String redis) { openRedis = redis; @@ -37,11 +50,9 @@ public class TokenUtil { /** * 通过AppId获取accessToken - * @param appId appId - * @param secret secret * @return 返回accessToken */ - public static String getAccessToken(String appId,String secret){ + public static String getAccessToken(String appId, String secret){ //查看业务是否开启redis缓存 // if(REDIS_IS_OPEN.equals(openRedis)){ // //redis开启则通过appId去redis内查询 @@ -55,26 +66,80 @@ public class TokenUtil { //调用tall的接口生成accessToken - - return null; + //查找map内的数据 + long now = System.currentTimeMillis(); + TokenVo.AccessToken accessToken = (TokenVo.AccessToken) accessTokenMap.get(appId); + if(ObjectUtil.isNotNull(accessToken)){ + if(accessToken.getTime() + Constant.EXPIRATION_TIME > now){ + return accessToken.getAccessToken(); + }else { + //如果过期,就删掉数据 + accessTokenMap.remove(appId); + } + } + //map内查不到,则去请求tall获取新的accessToken + String url = Constant.TALL_URL + Constant.TALL_GET_ACCESS_TOKEN; + TokenDto.GetAccessToken getAccessToken = new TokenDto.GetAccessToken(appId,secret); + log.info("调用接口:{}--{}", url, getAccessToken); + String postBody = RestTemplateUtil.postBody(url, getAccessToken); + JSONObject jsonObject = JSONObject.parseObject(postBody); + log.info("接口返回:{}", jsonObject); + //请求正确返回则,否则无操作 + Integer code = jsonObject.getInteger("code"); + if (code == null || code != 200) { + return null; + } + String data = jsonObject.getString("data"); + if(ObjectUtil.isNull(data)){ + return null; + } + TokenVo.AccessToken t = new TokenVo.AccessToken(); + t.setAccessToken(data); + t.setTime(System.currentTimeMillis()); + accessTokenMap.put(getAccessToken.getAppId(),t); + return data; } -// /** -// * 通过token获取用户信息 -// * @return 返回accessToken -// */ -// public static TokenVo.UserIdByToken getUserByToken(String token,){ -// //查看业务是否开启redis缓存 -//// if(REDIS_IS_OPEN.equals(openRedis)){ -//// //查询token是否存在 -//// util.redisUtil.get(token); -//// } -// //没开启redis则去map内查找,如果 -// -// //调用tall的接口生成查询项目信息 -//// TokenVo.UserIdByToken userIdByToken = -// -// return null; -// } + /** + * 通过token获取用户信息 + * @return 返回accessToken + */ + public static TokenVo.UserIdByToken getUserByToken(TokenDto.GetUserByToken getUserByToken){ + //查看业务是否开启redis缓存 +// if(REDIS_IS_OPEN.equals(openRedis)){ +// //查询token是否存在 +// util.redisUtil.get(token); +// } + //没开启redis则去map内查找,如果 + + //调用tall的接口生成查询项目信息 + + //发送请求 + String url = Constant.TALL_URL + Constant.TALL_USER_TOKEN; + log.info("调用接口:{}--{}", url, getUserByToken); + Map map = new HashMap<>(); + map.put(Constant.ACCESS_TOKEN,getAccessToken(getUserByToken.getAppId(),getUserByToken.getSecret())); + String postBody = RestTemplateUtil.postBodySpecialHeader(url, getUserByToken,map); + JSONObject jsonObject = JSONObject.parseObject(postBody); + log.info("接口返回:{}", jsonObject); + //请求正确返回则,否则无操作 + Integer code = jsonObject.getInteger("code"); + if (code == null || code != 200) { + return null; + } + String data = jsonObject.getString("data"); + if(ObjectUtil.isNull(data)){ + return null; + } + TokenVo.UserIdByToken userIdByToken; + try { + userIdByToken = JSON.parseObject(data,TokenVo.UserIdByToken.class); + }catch (Exception e){ + log.info("返回值转换失败"); + return null; + } + + return userIdByToken; + } }