ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginUserApplet.java
New file @@ -0,0 +1,51 @@ package com.ruoyi.system.api.model; import lombok.Data; import java.io.Serializable; /** * 用户信息 小程序登录使用 * * @author 无关风月 */ @Data public class LoginUserApplet implements Serializable { private static final long serialVersionUID = 1L; /** * 用户唯一标识 */ private String token; /** * 用户姓名 */ private String name; /** * 用户名id */ private Integer userid; /** * 用户名 */ private String phone; /** * 登录时间 */ private Long loginTime; /** * 过期时间 */ private Long expireTime; /** * 登录IP地址 */ private String ipaddr; } ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java
@@ -36,6 +36,10 @@ * 用户标识 */ public static final String USER_KEY = "user_key"; /** * 小程序登录用户标识 */ public static final String USER_APPLET_KEY = "user_applet_key"; /** * 登录用户 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/JwtUtils.java
@@ -64,6 +64,17 @@ } /** * 小程序根据令牌获取用户标识 * * @param token 令牌 * @return 用户ID */ public static String getUserKeyApplet(String token) { Claims claims = parseToken(token); return getValue(claims, SecurityConstants.USER_APPLET_KEY); } /** * 根据令牌获取用户ID * * @param token 令牌 @@ -75,6 +86,7 @@ return getValue(claims, SecurityConstants.DETAILS_USER_ID); } /** * 根据身份信息获取用户ID * ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
@@ -4,6 +4,8 @@ import java.util.Map; import java.util.concurrent.TimeUnit; import javax.servlet.http.HttpServletRequest; import com.ruoyi.system.api.model.LoginUserApplet; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.ruoyi.common.core.constant.CacheConstants; @@ -64,7 +66,53 @@ rspMap.put("expires_in", expireTime); return rspMap; } /** * 创建小程序令牌 */ public Map<String, Object> createTokenApplet(LoginUserApplet loginUser) { String token = IdUtils.fastUUID(); Integer userId = loginUser.getUserid(); String name = loginUser.getName(); loginUser.setToken(token); loginUser.setIpaddr(IpUtils.getIpAddr()); refreshToken1(loginUser); // Jwt存储信息 Map<String, Object> claimsMap = new HashMap<String, Object>(); claimsMap.put(SecurityConstants.USER_APPLET_KEY, token); claimsMap.put(SecurityConstants.DETAILS_USER_ID, userId); claimsMap.put(SecurityConstants.DETAILS_USERNAME, name); // 接口返回信息 Map<String, Object> rspMap = new HashMap<String, Object>(); rspMap.put("access_token", JwtUtils.createToken(claimsMap)); rspMap.put("expires_in", expireTime); return rspMap; } public LoginUserApplet getLoginUserApplet() { return getLoginUserAppletToken(ServletUtils.getRequest()); } public LoginUserApplet getLoginUserAppletToken(HttpServletRequest request) { // 获取请求携带的令牌 String token = SecurityUtils.getToken(request); return getLoginUserApplet(token); } /** * 小程序 获取用户身份信息 * * @return 用户信息 */ public LoginUserApplet getLoginUserApplet(String token) { LoginUserApplet user = null; try { if (StringUtils.isNotEmpty(token)) { String userkey = JwtUtils.getUserKeyApplet(token); user = redisService.getCacheObject(getTokenKey(userkey)); return user; } } catch (Exception e) { e.printStackTrace(); } return user; } /** * 获取用户身份信息 * @@ -161,7 +209,13 @@ String userKey = getTokenKey(loginUser.getToken()); redisService.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES); } public void refreshToken1(LoginUserApplet dto) { dto.setLoginTime(System.currentTimeMillis()); dto.setExpireTime(dto.getLoginTime() + expireTime * MILLIS_MINUTE); // 根据uuid将loginUser缓存 String userKey = getTokenKey(dto.getToken()); redisService.setCacheObject(userKey, dto, expireTime, TimeUnit.MINUTES); } private String getTokenKey(String token) { return ACCESS_TOKEN + token; ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java
@@ -5,10 +5,13 @@ import com.ruoyi.account.api.dto.CouponListDto; import com.ruoyi.account.api.dto.GrantCouponDto; import com.ruoyi.account.api.model.TAppCoupon; import com.ruoyi.account.api.model.TAppUserCar; import com.ruoyi.account.api.query.ExchangeRecordGoodsQuery; import com.ruoyi.account.api.vo.CarListVO; import com.ruoyi.account.api.vo.CouponListVOVO; import com.ruoyi.account.api.vo.ExchangeRecordVO; import com.ruoyi.account.service.TAppCouponService; import com.ruoyi.account.service.TAppUserCarService; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.BasePage; @@ -43,6 +46,8 @@ @Autowired private OtherClient otherClient; @Autowired private TAppUserCarService appUserCarService; /** * 查询用户可用优惠券数量 * @param dto @@ -55,14 +60,16 @@ return AjaxResult.ok(res); } /** * * @param dto * 选择车辆列表 * @return */ @ApiOperation(value = "选择车辆列表", tags = {"小程序-扫一扫"}) @PostMapping(value = "/scan/carList") public AjaxResult<CouponListVOVO> carList(@RequestBody CouponListDto dto) { return AjaxResult.success(); public AjaxResult<List<TAppUserCar>> carList() { // todo 用户id List<TAppUserCar> appUserId = appUserCarService.list(new QueryWrapper<TAppUserCar>() .eq("app_user_id", 11)); return AjaxResult.ok(appUserId); } /** ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.chargingPile.api.dto.GetSiteListDTO; import com.ruoyi.chargingPile.api.feignClient.ParkingLotClient; import com.ruoyi.chargingPile.api.model.Site; @@ -16,10 +17,7 @@ import com.ruoyi.chargingPile.api.vo.SiteVO; import com.ruoyi.chargingPile.api.vo.TChargingPileVO; import com.ruoyi.chargingPile.domain.SiteMenu; import com.ruoyi.chargingPile.service.IPartnerService; import com.ruoyi.chargingPile.service.ISiteService; import com.ruoyi.chargingPile.service.TChargingGunService; import com.ruoyi.chargingPile.service.TChargingPileService; import com.ruoyi.chargingPile.service.*; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.GeodesyUtil; import com.ruoyi.common.core.web.domain.AjaxResult; @@ -69,6 +67,8 @@ @Resource private TChargingGunService chargingGunService; @Autowired private TParkingLotService parkingLotService; @@ -91,7 +91,6 @@ public AjaxResult<PageInfo<SiteVO>> pageList(@Validated @RequestBody SiteQuery query){ return AjaxResult.success(siteService.pageList(query)); } @ApiOperation(value = "获取站点详细信息", tags = {"小程序-站点管理-站点详情"}) @PostMapping("/getDetailById") public AjaxResult<SiteDetailVO> getDetailById(@Validated @RequestBody SiteDetailQuery query){ @@ -100,7 +99,8 @@ Map<String, Double> distance = GeodesyUtil.getDistance(query.getLat() + "," + query.getLon(), siteDetailVO.getLat() + "," + siteDetailVO.getLon()); siteDetailVO.setDistance(distance.get("WGS84")); // 查询绑定车牌提示文案 TParkingLot parkingLot = parkingLotClient.getLotBySiteId(query.getSiteId()).getData(); TParkingLot parkingLot = parkingLotService.getOne(Wrappers.lambdaQuery(TParkingLot.class) .eq(TParkingLot::getSiteId, query.getSiteId())); if(Objects.nonNull(parkingLot)){ siteDetailVO.setRemark(parkingLot.getRemark()); }