diff --git a/AutoSprout-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/AutoSprout-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java index ab47f8d..799fad4 100644 --- a/AutoSprout-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java +++ b/AutoSprout-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java @@ -132,10 +132,10 @@ public class SysLoginController * 微信登录 */ @PostMapping("/wxlogin") - public AjaxResult wxlogin(String mobileCode,String openid) { + public AjaxResult wxlogin(String mobileCode,String jsCode) { AjaxResult ajax = AjaxResult.success(); // 生成令牌 - String token = loginService.wxloing(mobileCode,openid); + String token = loginService.wxloing(mobileCode,jsCode); ajax.put(Constants.TOKEN, token); return ajax; } @@ -145,10 +145,10 @@ public class SysLoginController * 根据openid静默登录 */ @PostMapping("/loginByopenid") - public AjaxResult loginByopenid(String openid) { + public AjaxResult loginByopenid(String jsCode) { AjaxResult ajax = AjaxResult.success(); // 生成令牌 - String token = loginService.loginByopenid(openid); + String token = loginService.loginByopenid(jsCode); ajax.put(Constants.TOKEN, token); return ajax; } diff --git a/AutoSprout-admin/src/main/resources/application.yml b/AutoSprout-admin/src/main/resources/application.yml index 1e7847f..d24db6f 100644 --- a/AutoSprout-admin/src/main/resources/application.yml +++ b/AutoSprout-admin/src/main/resources/application.yml @@ -178,7 +178,7 @@ parameter: templateIdRegister: 1794931 wx: appid: wxa6d6dfbb59b630fd - appSecret: eb8eaca9843974cf464b3d5eda056514 + appSecret: 4bc943979cf573ec3237d15d3ef0ca93 # 阿里云短信 aliyun: accessKeyId: LTAI5tS7bUhRvjcTy4yJkagK diff --git a/AutoSprout-common/pom.xml b/AutoSprout-common/pom.xml index 49cfaeb..5b7a4ab 100644 --- a/AutoSprout-common/pom.xml +++ b/AutoSprout-common/pom.xml @@ -17,6 +17,13 @@ + + + cn.hutool + hutool-all + 4.5.7 + + com.belerweb diff --git a/AutoSprout-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/AutoSprout-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java index b50b25e..7ccf146 100644 --- a/AutoSprout-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java +++ b/AutoSprout-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java @@ -6,11 +6,15 @@ import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson2.JSONObject; import com.ruoyi.common.core.domain.entity.AsUser; import com.ruoyi.common.utils.http.HttpUtils; +import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.common.utils.wx.AccessTokenUtil; import com.ruoyi.common.utils.wx.vo.AccessToken; +import com.ruoyi.device.domain.vo.WeChatMiniAuthorizeVo; import com.ruoyi.device.service.IAsUserService; import me.chanjar.weixin.common.error.WxErrorException; import org.apache.commons.lang3.ObjectUtils; @@ -259,7 +263,9 @@ public class SysLoginService /** * 微信登录 */ - public String wxloing(String mobileCode,String openid) { + public String wxloing(String mobileCode,String jsCode) { + //根据jsCode换取openid + String openId = getOpenId(jsCode); String url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token="; String phoneNumber = null; AsUser user = null; @@ -286,7 +292,7 @@ public class SysLoginService asUser.setPhonenumber(phoneNumber); asUser.setLoginIp(IpUtils.getIpAddr()); asUser.setLoginDate(DateUtils.getNowDate()); - asUser.setWxopenid(openid); + asUser.setWxopenid(openId); asUser.setCreateTime(DateUtils.getNowDate()); int i = asUserService.insertUser(asUser); user = asUser; @@ -318,8 +324,10 @@ public class SysLoginService /** * 根据openid静默登录 */ - public String loginByopenid(String openid) { - AsUser user = asUserService.selectUserByWxopenid(openid); + public String loginByopenid(String jsCode) { + //根据jsCode换取openid + String openId = getOpenId(jsCode); + AsUser user = asUserService.selectUserByWxopenid(openId); if(ObjectUtils.isEmpty(user)){ throw new ServiceException("未查询到用户信息"); } @@ -347,5 +355,19 @@ public class SysLoginService return tokenService.createToken(loginUser); } + private String getOpenId(String jsCode) { + //根据jsCode换取openid + String appId = SpringUtils.getRequiredProperty("wx.appid"); + String secret = SpringUtils.getRequiredProperty("wx.appSecret"); + String url = StrUtil.format("https://api.weixin.qq.com/sns/jscode2session?appid={}&secret={}&js_code={}&grant_type=authorization_code", appId, secret, jsCode); + String s = HttpUtils.sendGet(url); + WeChatMiniAuthorizeVo authorizeVo = JSONObject.parseObject(s, WeChatMiniAuthorizeVo.class); + if (StringUtils.isEmpty(s) ) { + throw new ServiceException("微信平台接口异常,没任何数据返回!"); + } + String openId = authorizeVo.getOpenid(); + return openId; + } + } diff --git a/AutoSprout-watering/src/main/java/com/ruoyi/device/app/AppController.java b/AutoSprout-watering/src/main/java/com/ruoyi/device/app/AppController.java index e2330c6..bddfa2a 100644 --- a/AutoSprout-watering/src/main/java/com/ruoyi/device/app/AppController.java +++ b/AutoSprout-watering/src/main/java/com/ruoyi/device/app/AppController.java @@ -324,10 +324,10 @@ public class AppController extends BaseController * 配网成功 */ @Log(title = "配网成功", businessType = BusinessType.UPDATE) - @PostMapping("/network/{deviceId}") - public AjaxResult settingNetwork(@PathVariable Long deviceId) + @PostMapping("/network/{mac}") + public AjaxResult settingNetwork(@PathVariable String mac) { - return toAjax(asDeviceService.settingNetwork(deviceId)); + return toAjax(asDeviceService.settingNetwork(mac)); } /** diff --git a/AutoSprout-watering/src/main/java/com/ruoyi/device/domain/vo/WeChatMiniAuthorizeVo.java b/AutoSprout-watering/src/main/java/com/ruoyi/device/domain/vo/WeChatMiniAuthorizeVo.java new file mode 100644 index 0000000..c2d41f6 --- /dev/null +++ b/AutoSprout-watering/src/main/java/com/ruoyi/device/domain/vo/WeChatMiniAuthorizeVo.java @@ -0,0 +1,28 @@ +package com.ruoyi.device.domain.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 微信小程序用户授权返回数据 + + */ +@Data +@Accessors(chain = true) +public class WeChatMiniAuthorizeVo implements Serializable { + + private static final long serialVersionUID=1L; + + private String session_key; + + private String openid; + + private String unionid; + + private String errcode; + + private String errmsg; +} diff --git a/AutoSprout-watering/src/main/java/com/ruoyi/device/mapper/AsDeviceMapper.java b/AutoSprout-watering/src/main/java/com/ruoyi/device/mapper/AsDeviceMapper.java index dc12c3e..7671896 100644 --- a/AutoSprout-watering/src/main/java/com/ruoyi/device/mapper/AsDeviceMapper.java +++ b/AutoSprout-watering/src/main/java/com/ruoyi/device/mapper/AsDeviceMapper.java @@ -54,6 +54,15 @@ public interface AsDeviceMapper extends BaseMapper */ public int updateAsDevice(AsDevice asDevice); + + /** + * 修改设备列表 + * + * @param asDevice 设备列表 + * @return 结果 + */ + public int updateAsDeviceByMac(AsDevice asDevice); + /** * 删除设备列表 * diff --git a/AutoSprout-watering/src/main/java/com/ruoyi/device/service/IAsDeviceService.java b/AutoSprout-watering/src/main/java/com/ruoyi/device/service/IAsDeviceService.java index f5f796f..6b53f15 100644 --- a/AutoSprout-watering/src/main/java/com/ruoyi/device/service/IAsDeviceService.java +++ b/AutoSprout-watering/src/main/java/com/ruoyi/device/service/IAsDeviceService.java @@ -90,10 +90,10 @@ public interface IAsDeviceService /** * 配网成功 * - * @param deviceId 设备id + * @param mac 设备id * @return 结果 */ - Boolean settingNetwork(Long deviceId); + Boolean settingNetwork(String mac); /** * 根据mac号查询设备是否被绑定 diff --git a/AutoSprout-watering/src/main/java/com/ruoyi/device/service/impl/AsDeviceServiceImpl.java b/AutoSprout-watering/src/main/java/com/ruoyi/device/service/impl/AsDeviceServiceImpl.java index 9a04941..6af4100 100644 --- a/AutoSprout-watering/src/main/java/com/ruoyi/device/service/impl/AsDeviceServiceImpl.java +++ b/AutoSprout-watering/src/main/java/com/ruoyi/device/service/impl/AsDeviceServiceImpl.java @@ -442,11 +442,12 @@ public class AsDeviceServiceImpl extends ServiceImpl i throw new ServiceException("该设备已经被删除"); } if(ObjectUtils.isNotEmpty(device.getUserId()) && "1".equals(device.getIsNetwork())){ - throw new ServiceException("该设备已经绑定用户,请先解绑!"); + throw new ServiceException("该设备已经绑定用户,请先!"); } device.setUserId(asDevice.getUserId()); int i = asDeviceMapper.updateAsDevice(device); if(i>0){ + toggleDevice(asDevice.getUserId(), device.getDeviceId()); return true; }else{ return false; @@ -461,21 +462,33 @@ public class AsDeviceServiceImpl extends ServiceImpl i */ @Override public int logicallyDelete(AsDevice device) { - return asDeviceMapper.updateAsDevice(device); + Long deviceId = device.getDeviceId(); + AsDevice device2 = asDeviceMapper.selectAsDeviceByDeviceId(deviceId); + int i = asDeviceMapper.updateAsDevice(device); + //解绑成功后,该用户如果有其他的设备则随便找一个默认的 + if(i>0){ + List asDevices = asDeviceMapper.selectAsDeviceList(AsDevice.builder().userId(device2.getUserId()).build()); + if(asDevices.size()>0){ + AsDevice device1 = asDevices.get(0); + device1.setIsDefault("1"); + asDeviceMapper.updateAsDevice(device1); + } + } + return i; } /** * 配网成功 * - * @param deviceId 设备id + * @param mac mac * @return 结果 */ @Override - public Boolean settingNetwork(Long deviceId) { + public Boolean settingNetwork(String mac) { AsDevice device = new AsDevice(); - device.setDeviceId(deviceId); + device.setMac(mac); device.setIsNetwork("1"); - int i = asDeviceMapper.updateAsDevice(device); + int i = asDeviceMapper.updateAsDeviceByMac(device); return i>0; } diff --git a/AutoSprout-watering/src/main/resources/mapper/device/AsDeviceMapper.xml b/AutoSprout-watering/src/main/resources/mapper/device/AsDeviceMapper.xml index 089cedf..a60191e 100644 --- a/AutoSprout-watering/src/main/resources/mapper/device/AsDeviceMapper.xml +++ b/AutoSprout-watering/src/main/resources/mapper/device/AsDeviceMapper.xml @@ -182,6 +182,45 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where device_id = #{deviceId} + + update as_device + + picture = #{picture}, + device_name = #{deviceName}, + classify_id = #{classifyId}, + classify_name = #{classifyName}, + model_id = #{modelId}, + model = #{model}, + activation_time = #{activationTime}, + online_status = #{onlineStatus}, + user_id = #{userId}, + user_name = #{userName}, + nick_name = #{nickName}, + regular_watering = #{regularWatering}, + soil_moisture_open = #{soilMoistureOpen}, + soil_moisture_close = #{soilMoistureClose}, + water_intensity = #{waterIntensity}, + pulse_mode = #{pulseMode}, + pulse_mode_param = #{pulseModeParam}, + screen_rest_time = #{screenRestTime}, + version = #{version}, + version_id = #{versionId}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + remark = #{remark}, + regular_watering_json = #{regularWateringJson}, + soil_moisture = #{soilMoisture}, + water_intensity_switch = #{waterIntensitySwitch}, + status = #{status}, + is_network = #{isNetwork}, + is_default = #{isDefault}, + mode_str = #{modeStr} + + where mac = #{mac} + + delete from as_device where device_id = #{deviceId} diff --git a/AutoSprout-watering/src/main/resources/mapper/user/AsUserMapper.xml b/AutoSprout-watering/src/main/resources/mapper/user/AsUserMapper.xml index 234ccba..ee6b8b9 100644 --- a/AutoSprout-watering/src/main/resources/mapper/user/AsUserMapper.xml +++ b/AutoSprout-watering/src/main/resources/mapper/user/AsUserMapper.xml @@ -118,6 +118,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" email, avatar, phonenumber, + wxopenid, sex, password, status, @@ -131,6 +132,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{email}, #{avatar}, #{phonenumber}, + #{wxopenid}, #{sex}, #{password}, #{status}, @@ -147,6 +149,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" nick_name = #{nickName}, email = #{email}, phonenumber = #{phonenumber}, + wxopenid = #{wxopenid}, sex = #{sex}, avatar = #{avatar}, password = #{password},