ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/query/ChangeUserQuery.java
New file @@ -0,0 +1,15 @@ package com.ruoyi.system.api.query; import com.ruoyi.common.core.web.page.BasePage; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "用户选择列表Query") public class ChangeUserQuery extends BasePage { @ApiModelProperty(value = "用户名称") private String nickName; } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
@@ -16,6 +16,7 @@ import com.ruoyi.other.api.domain.TUserSite; import com.ruoyi.other.api.feignClient.RoleSiteClient; import com.ruoyi.other.api.feignClient.UserSiteClient; import com.ruoyi.system.api.query.ChangeUserQuery; import com.ruoyi.system.domain.dto.IndexDto; import com.ruoyi.system.domain.vo.UserRoleVO; import com.ruoyi.system.api.model.*; @@ -110,6 +111,15 @@ } /** * 获取用户选择列表 */ @PostMapping("/getChangeUserList") @ApiOperation(value = "获取用户选择列表", tags = {"管理后台-获取用户选择列表"}) public AjaxResult<PageInfo<SysUser>> getChangeUserList(@RequestBody ChangeUserQuery query) { return AjaxResult.success(userService.getChangeUserList(query)); } /** * 新增用户 */ @Log(title = "用户管理", businessType = BusinessType.INSERT) ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.system.api.query.ChangeUserQuery; import com.ruoyi.system.query.GetSysUserList; import org.apache.ibatis.annotations.Param; import com.ruoyi.system.api.domain.SysUser; @@ -139,4 +140,12 @@ List<Long> getSysUserFromPhone(@Param("phoneNumber") String phoneNumber); void deleteSysUser(@Param("userIds") ArrayList<Integer> userIds); /** * 获取用户选择列表 * @param pageInfo * @param query * @return */ List<SysUser> getChangeUserList(@Param("pageInfo")PageInfo<SysUser> pageInfo,@Param("query") ChangeUserQuery query); } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.query.ChangeUserQuery; import com.ruoyi.system.query.GetSysUserList; /** @@ -218,4 +219,10 @@ void deleteSysUser(ArrayList<Integer> userIds); /** * 获取用户选择列表 * @param query * @return */ PageInfo<SysUser> getChangeUserList(ChangeUserQuery query); } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -15,6 +15,7 @@ import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.other.api.feignClient.RoleSiteClient; import com.ruoyi.other.api.feignClient.UserSiteClient; import com.ruoyi.system.api.query.ChangeUserQuery; import com.ruoyi.system.domain.SysPost; import com.ruoyi.system.domain.SysUserPost; import com.ruoyi.system.domain.SysUserRole; @@ -609,4 +610,11 @@ this.baseMapper.deleteSysUser(userIds); } @Override public PageInfo<SysUser> getChangeUserList(ChangeUserQuery query) { PageInfo<SysUser> pageInfo = new PageInfo<>(query.getPageCurr(), query.getPageSize()); List<SysUser> list = this.baseMapper.getChangeUserList(pageInfo, query); return pageInfo.setRecords(list); } } ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -155,8 +155,23 @@ <select id="getSysUserFromPhone" resultType="java.lang.Long"> select user_id from sys_user where phonenumber =#{phoneNumber} </select> <select id="getChangeUserList" resultType="com.ruoyi.system.api.domain.SysUser"> select user_id AS userId, nick_name AS nickName, create_time AS createTime, remark AS remark from sys_user <where> <if test="query.nickName != null and query.nickName != ''"> AND nick_name LIKE concat('%',#{query.nickName},'%') </if> AND del_flag = '0' </where> ORDER BY create_time DESC </select> <insert id="insertUser" parameterType="com.ruoyi.system.api.domain.SysUser" useGeneratedKeys="true" keyProperty="userId"> <insert id="insertUser" parameterType="com.ruoyi.system.api.domain.SysUser" useGeneratedKeys="true" keyProperty="userId"> insert into sys_user( <if test="userId != null and userId != 0">user_id,</if> <if test="deptId != null and deptId != 0">dept_id,</if> ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/ali/Constant/AliConstant.java
@@ -6,5 +6,8 @@ * 支付宝配置 */ public static final String GRANT_TYPE = "authorization_code"; /** * 获取token接口地址 */ public static final String LOGIN_SERVER_URL = "https://openapi.alipay.com/gateway.do"; } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/ali/tools/AliAppletTools.java
@@ -1,6 +1,14 @@ package com.ruoyi.account.ali.tools; import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.AlipayConfig; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.request.AlipaySystemOauthTokenRequest; import com.alipay.api.request.AlipayUserUserinfoShareRequest; import com.alipay.api.response.AlipaySystemOauthTokenResponse; import com.alipay.api.response.AlipayUserUserinfoShareResponse; import com.ruoyi.account.ali.Constant.AliConstant; import com.ruoyi.account.ali.model.AliProperties; import lombok.extern.slf4j.Slf4j; @@ -13,8 +21,14 @@ @Slf4j public class AliAppletTools { private static final String SERVER_URL = "https://openapi.alipay.com/gateway.do"; //设置连接池中的最大可缓存的空闲连接数 private static final Integer MaxIdleConnections = 5; //连接超时,单位:毫秒,默认3000 private static final Integer ConnectTimeout = 3000; //读取超时,单位:毫秒,默认15000 private static final Integer ReadTimeout = 15000; //空闲连接存活时间,单位:毫秒,默认10000L private static final Long KeepAliveDuration = 10000L; private AliProperties aliProperties; public AliAppletTools(AliProperties aliProperties) { @@ -22,15 +36,57 @@ } /** * 支付宝小程序授权登录接口 * @param code * @return */ public AlipaySystemOauthTokenResponse login(String code) { try { // 初始化SDK AlipayClient alipayClient = new DefaultAlipayClient(new AliAppletTools(aliProperties).getAlipayConfig(AliConstant.LOGIN_SERVER_URL)); // 构造请求参数以调用接口 AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest(); // 设置授权码 request.setCode(code); // 设置授权方式 request.setGrantType(AliConstant.GRANT_TYPE); return alipayClient.execute(request); } catch (AlipayApiException e) { throw new RuntimeException(e); } } /** * 支付宝小程序授权获取手机号 * @return */ public AlipayUserUserinfoShareResponse getUserInfo(String accessToken) { try { // 初始化SDK AlipayClient alipayClient = new DefaultAlipayClient(new AliAppletTools(aliProperties).getAlipayConfig(AliConstant.LOGIN_SERVER_URL)); //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.user.userinfo.share AlipayUserUserinfoShareRequest request = new AlipayUserUserinfoShareRequest(); //授权类接口执行API调用时需要带上accessToken return alipayClient.execute(request,accessToken); } catch (AlipayApiException e) { throw new RuntimeException(e); } } /** * 初始化支付宝配置 * @return */ public AlipayConfig getAlipayConfig() { public AlipayConfig getAlipayConfig(String serverUrl) { AlipayConfig alipayConfig = new AlipayConfig(); alipayConfig.setServerUrl(SERVER_URL); alipayConfig.setServerUrl(serverUrl); alipayConfig.setAppId(aliProperties.getAppId()); alipayConfig.setPrivateKey(aliProperties.getPrivateKey()); alipayConfig.setAlipayPublicKey(aliProperties.getAlipayPublicKey()); alipayConfig.setMaxIdleConnections(MaxIdleConnections); alipayConfig.setConnectTimeout(ConnectTimeout); alipayConfig.setReadTimeout(ReadTimeout); alipayConfig.setKeepAliveDuration(KeepAliveDuration); return alipayConfig; } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AliLoginController.java
@@ -7,6 +7,7 @@ import com.alipay.api.diagnosis.DiagnosisUtils; import com.alipay.api.request.AlipaySystemOauthTokenRequest; import com.alipay.api.response.AlipaySystemOauthTokenResponse; import com.alipay.api.response.AlipayUserUserinfoShareResponse; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.account.ali.Constant.AliConstant; @@ -48,44 +49,23 @@ private AliProperties aliProperties; @Autowired private TAppUserService appUserService; @Autowired private TokenService tokenService; @ApiOperation(value = "通过code获得openid",tags = {"支付宝小程序登录"}) @GetMapping("/openIdByJsCode") public AjaxResult<Map<String, Object>> openIdByJsCode(@RequestParam(name = "code")@ApiParam(value = "code", required = true) String code) throws AlipayApiException { public AjaxResult<Map<String, Object>> openIdByJsCode(@RequestParam(name = "code")@ApiParam(value = "code", required = true) String code){ log.info("<<<<<<<<换取openid开始<<<<<<<<:{}", code); // 初始化SDK AlipayClient alipayClient = new DefaultAlipayClient(new AliAppletTools(aliProperties).getAlipayConfig()); // 构造请求参数以调用接口 AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest(); // 设置授权码 request.setCode(code); // 设置授权方式 request.setGrantType(AliConstant.GRANT_TYPE); AlipaySystemOauthTokenResponse response = alipayClient.execute(request); TAppUser appUser = null; // 登录 AlipaySystemOauthTokenResponse response = new AliAppletTools(aliProperties).login(code); if (response.isSuccess()) { String openId = response.getOpenId(); appUser = appUserService.getOne(Wrappers.lambdaQuery(TAppUser.class).eq(TAppUser::getAliOpenid, openId).last("limit 1")); if (Objects.isNull(appUser)) { appUser = new TAppUser(); appUser.setWxOpenid(openId); appUserService.save(appUser); } log.info("支付宝小程序登录调用成功"); // 获取用户信息 AlipayUserUserinfoShareResponse userInfo = new AliAppletTools(aliProperties).getUserInfo(response.getAccessToken()); log.info("获取支付宝用户信息:{}", userInfo); // 用户信息封装 return AjaxResult.ok(appUserService.aliLogin(response,userInfo)); } else { String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(response); log.warn("诊断结果:{}",diagnosisUrl); throw new ServiceException("支付宝小程序登录失败"); } LoginUserApplet loginUserApplet = new LoginUserApplet(); if(ObjectUtils.isNotNull(appUser)){ loginUserApplet.setUserId(appUser.getId()); } HashMap<String, Object> tokenInfos = new HashMap<>(); tokenInfos.put("token",tokenService.createTokenApplet(loginUserApplet)); tokenInfos.put("info",loginUserApplet); return AjaxResult.ok(tokenInfos); } } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java
@@ -71,7 +71,7 @@ public AjaxResult<List<TAppUserCar>> carList() { // todo 用户id List<TAppUserCar> appUserId = appUserCarService.list(new QueryWrapper<TAppUserCar>() .eq("app_user_id",tokenService.getLoginUserApplet().getUserid() )); .eq("app_user_id",tokenService.getLoginUserApplet().getUserId())); return AjaxResult.ok(appUserId); } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WxLoginController.java
@@ -62,6 +62,6 @@ } AppletUserDecodeData appletUserDecodeData = WxUtils.encryptedData(data.getEncryptedData(), sessionKey, data.getIv()); appletUserDecodeData.setOpenId(openid); return AjaxResult.ok(appUserService.login(appletUserDecodeData)); return AjaxResult.ok(appUserService.wxLogin(appletUserDecodeData)); } } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/TAppUserService.java
@@ -1,5 +1,7 @@ package com.ruoyi.account.service; import com.alipay.api.response.AlipaySystemOauthTokenResponse; import com.alipay.api.response.AlipayUserUserinfoShareResponse; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.account.api.model.TAppUser; import com.ruoyi.account.wx.pojo.AppletUserDecodeData; @@ -21,6 +23,19 @@ * @param appletUserDecodeData * @return */ Map<String, Object> login(AppletUserDecodeData appletUserDecodeData); Map<String, Object> wxLogin(AppletUserDecodeData appletUserDecodeData); /** * 支付宝小程序登录用户封装 * @param userInfo * @return */ Map<String, Object> aliLogin(AlipaySystemOauthTokenResponse response,AlipayUserUserinfoShareResponse userInfo); /** * 封装用户信息和token * @param appUser * @return */ Map<String, Object> getUserInfo(TAppUser appUser); } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppUserServiceImpl.java
@@ -1,5 +1,7 @@ package com.ruoyi.account.service.impl; import com.alipay.api.response.AlipaySystemOauthTokenResponse; import com.alipay.api.response.AlipayUserUserinfoShareResponse; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -32,27 +34,22 @@ @Autowired private TokenService tokenService; @Override public Map<String, Object> login(AppletUserDecodeData appletUserDecodeData) { public Map<String, Object> wxLogin(AppletUserDecodeData appletUserDecodeData) { // 通过手机号查询用户,是否已存在手动导入用户 TAppUser appUser = this.getOne(Wrappers.lambdaQuery(TAppUser.class) .eq(TAppUser::getPhone, appletUserDecodeData.getPhoneNumber()) .isNull(TAppUser::getWxOpenid) .last("LIMIT 1")); LambdaQueryWrapper<TAppUser> wrapper = Wrappers.lambdaQuery(TAppUser.class) .eq(TAppUser::getWxOpenid, appletUserDecodeData.getOpenId()); if(Objects.isNull(appUser)){ // 先使用openId和当前手机号进行查询 wrapper.eq(TAppUser::getPhone, appletUserDecodeData.getPhoneNumber()) .last("LIMIT 1"); appUser = this.getOne(wrapper); appUser = this.getOne(Wrappers.lambdaQuery(TAppUser.class) .eq(TAppUser::getWxOpenid, appletUserDecodeData.getOpenId()) .eq(TAppUser::getPhone, appletUserDecodeData.getPhoneNumber()) .last("LIMIT 1")); if(Objects.isNull(appUser)){ appUser = new TAppUser(); appUser.setPhone(appletUserDecodeData.getPhoneNumber()); } }else { wrapper.last("LIMIT 1"); // 删除小程序原有授权用户 this.remove(wrapper); } appUser.setAvatar(appletUserDecodeData.getAvatarUrl()); appUser.setCity(appletUserDecodeData.getCity()); @@ -60,6 +57,38 @@ appUser.setProvince(appletUserDecodeData.getProvince()); appUser.setWxOpenid(appletUserDecodeData.getOpenId()); this.saveOrUpdate(appUser); return this.getUserInfo(appUser); } @Override public Map<String, Object> aliLogin(AlipaySystemOauthTokenResponse response, AlipayUserUserinfoShareResponse userInfo) { // 通过手机号查询用户,是否已存在手动导入用户 TAppUser appUser = this.getOne(Wrappers.lambdaQuery(TAppUser.class) .eq(TAppUser::getPhone, userInfo.getMobile()) .isNull(TAppUser::getAliOpenid) .last("LIMIT 1")); if(Objects.isNull(appUser)){ // 先使用openId和当前手机号进行查询 appUser = this.getOne(Wrappers.lambdaQuery(TAppUser.class) .eq(TAppUser::getAliOpenid, response.getOpenId()) .eq(TAppUser::getPhone, userInfo.getMobile()) .last("LIMIT 1")); if(Objects.isNull(appUser)){ appUser = new TAppUser(); appUser.setPhone(userInfo.getMobile()); } } appUser.setAvatar(userInfo.getAvatar()); appUser.setCity(userInfo.getCity()); appUser.setName(userInfo.getNickName()); appUser.setProvince(userInfo.getProvince()); appUser.setAliOpenid(response.getOpenId()); this.saveOrUpdate(appUser); return this.getUserInfo(appUser); } @Override public Map<String, Object> getUserInfo(TAppUser appUser) { LoginUserApplet loginUserApplet = new LoginUserApplet(); if(ObjectUtils.isNotNull(appUser)){ loginUserApplet.setUserId(appUser.getId()); ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/wx/tools/JsonUtils.java
File was deleted ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/wx/tools/WxAppletTools.java
@@ -58,12 +58,6 @@ private RestTemplate wxRestTemplate; private WxCacheTemplate<String> wxCacheTemplate; public WxAppletTools(RestTemplate wxRestTemplate, WeixinProperties wxConfig, WxCaffineCache wxCacheTemplate) { this.wxRestTemplate = wxRestTemplate; this.wxCacheTemplate = wxCacheTemplate; this.wxConfig = wxConfig; } public WxAppletTools(RestTemplate wxRestTemplate, WeixinProperties wxConfig) { this.wxRestTemplate = wxRestTemplate; this.wxConfig = wxConfig; ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/wx/tools/WxCaffineCache.java
File was deleted ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml
@@ -30,8 +30,9 @@ FROM t_accounting_strategy <where> <if test="query.name != null and query.name != ''"> AND `name` LIKE concat('%',#{query.name}, '%') AND `name` LIKE concat('%',#{query.name}, '%') </if> AND site_id IS NULL AND del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} </where> ORDER BY create_time DESC ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -47,7 +47,7 @@ @PostMapping(value = "/getCar") public R<Long> getCar() { List<TChargingOrder> list = chargingOrderService.list(new LambdaQueryWrapper<TChargingOrder>() .eq(TChargingOrder::getAppUserId, tokenService.getLoginUserApplet().getUserid()) .eq(TChargingOrder::getAppUserId, tokenService.getLoginUserApplet().getUserId()) .isNotNull(TChargingOrder::getAppUserCarId)); if (!list.isEmpty()){ // 最近使用的车辆id