Jelajahi Sumber

看房 微信登录

by su 4 tahun lalu
induk
melakukan
a45b6a21da

+ 2 - 2
house-auth/src/main/java/com/ljq/house/auth/shiro/config/ShiroConfig.java

@@ -60,12 +60,12 @@ public class ShiroConfig {
         filterMap.put("user_jwt", new JwtFilter(LoginType.USER.toString()));
         shiroFilterFactoryBean.setFilters(filterMap);
         //<!-- 过滤链定义,从上向下顺序执行,一般将/**放在最为下边
-        filterChainDefinitionMap.put("/app/agency/add/customer", "app_jwt");
+//        filterChainDefinitionMap.put("/app/agency/add/customer", "app_jwt");
         filterChainDefinitionMap.put("/app/user/read/house/add", "app_jwt");
         filterChainDefinitionMap.put("/app/user/house/history/increase", "app_jwt");
         filterChainDefinitionMap.put("/app/user/focus/house/add", "app_jwt");
         filterChainDefinitionMap.put("/app/user/house/share/add", "app_jwt");
-        filterChainDefinitionMap.put("/app/agency/add/customer", "app_jwt");
+//        filterChainDefinitionMap.put("/app/agency/add/customer", "app_jwt");
         filterChainDefinitionMap.put("/app/user/focus/house/delete", "app_jwt");
         filterChainDefinitionMap.put("/admin/register", "anon");
         filterChainDefinitionMap.put("/admin/getMsgAuthCode", "anon");

+ 16 - 0
house-biz/src/main/java/com/ljq/house/biz/model/LoginVo.java

@@ -2,6 +2,7 @@ package com.ljq.house.biz.model;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ljq.house.biz.model.dto.WxUserInfoDto;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -42,6 +43,21 @@ public class LoginVo  implements Serializable {
     @ApiModelProperty(value="使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息",name="signature",example="dfsdfsfxxfdsfddfasdaffa")
     private String signature;
 
+    //不包括敏感信息的原始数据字符串,用于计算签名
+    @ApiModelProperty(value="用户id",name="rawData",example="dfsdfsfxxfdsfddfasdaffa")
+    @JsonProperty("user_id")
+    private String userId;
+
+    //不包括敏感信息的原始数据字符串,用于计算签名
+    @ApiModelProperty(value="经纪人id",name="rawData",example="dfsdfsfxxfdsfddfasdaffa")
+    @JsonProperty("agency_user_id")
+    private String agencyUserId;
+
+    //不包括敏感信息的原始数据字符串,用于计算签名
+    @ApiModelProperty(value="信息",name="rawData",example="dfsdfsfxxfdsfddfasdaffa")
+    @JsonProperty("userInfo")
+    private WxUserInfoDto wxUserInfoDto;
+
     @Override
     public String toString() {
         return "LoginVo{" +

+ 2 - 2
house-biz/src/main/java/com/ljq/house/biz/model/TmHouse.java

@@ -216,10 +216,10 @@ public class TmHouse extends BaseEntity implements Serializable {
     private String propertyNumber;
 
     @ApiModelProperty(value = "卧室数量")
-    private String bedroomAmount;
+    private Integer bedroomAmount;
 
     @ApiModelProperty(value = "浴室")
-    private String showerroomAmount;
+    private Integer showerroomAmount;
 
     @ApiModelProperty(value = "配套设施")
     private String ancillaryFacility;

+ 2 - 2
house-biz/src/main/resources/mapper/TmHouseMapper.xml

@@ -130,8 +130,8 @@
             <if test="tmHouse.reserve2 != null and tmHouse.reserve2.trim() != ''">`reserve2` = #{tmHouse.reserve2},</if>
 
             <if test="tmHouse.propertyNumber != null and tmHouse.propertyNumber.trim() != ''">property_number=#{tmHouse.propertyNumber},</if>
-            <if test="tmHouse.bedroomAmount != null and tmHouse.bedroomAmount.trim() != ''">bedroom_amount=#{tmHouse.bedroomAmount},</if>
-            <if test="tmHouse.showerroomAmount != null and tmHouse.showerroomAmount.trim() != ''">showerroom_amount=#{tmHouse.showerroomAmount},</if>
+            <if test="tmHouse.bedroomAmount != null">bedroom_amount=#{tmHouse.bedroomAmount},</if>
+            <if test="tmHouse.showerroomAmount != null">showerroom_amount=#{tmHouse.showerroomAmount},</if>
             <if test="tmHouse.buildingArea != null">building_area=#{tmHouse.buildingArea},</if>
             <if test="tmHouse.floorSpace != null">floor_space=#{tmHouse.floorSpace},</if>
             <if test="tmHouse.ancillaryFacility != null and tmHouse.ancillaryFacility.trim() != ''">ancillary_facility=#{tmHouse.ancillaryFacility},</if>

+ 1 - 0
house-common/src/main/java/com/ljq/house/common/enums/ResultCodeEnum.java

@@ -52,6 +52,7 @@ public enum ResultCodeEnum {
     D043(3046 , "微信二维码生成个数总和到达最大个数限制",true),
     D044(3047 , "获取微信二维码失败",true),
     D045(3048 , "该手机号已注册",true),
+    D046(3049 , "用户不存在",true),
 
 
     D100(3100 , "系统异常",true),

+ 32 - 1
house-common/src/main/java/com/ljq/house/common/service/AgencyService.java

@@ -4,10 +4,12 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ljq.house.biz.dao.TmAgencyDao;
 import com.ljq.house.biz.model.TmAgency;
 import com.ljq.house.biz.model.TmUser;
+import com.ljq.house.common.enums.IdStarterEnum;
+import com.ljq.house.common.utils.UUidGenerator;
 import lombok.extern.log4j.Log4j2;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.util.StringUtils;
 
 /**
  * @author abnerhou
@@ -33,4 +35,33 @@ public class AgencyService {
         queryWrapper.last("limit 1");
         return tmAgencyDao.selectOne(queryWrapper);
     }
+
+    public TmAgency addNewAgency(String phoneNum , String wxOpenId ,
+                             String name , String avatar){
+        TmAgency tmAgency = new TmAgency();
+        if(org.apache.commons.lang3.StringUtils.isNotBlank(phoneNum)){
+            tmAgency.setPhone(phoneNum);
+        }
+        if(org.apache.commons.lang3.StringUtils.isNotBlank(wxOpenId)){
+            tmAgency.setWxOpenId(wxOpenId);
+        }
+
+        if(org.apache.commons.lang3.StringUtils.isNotBlank(name)){
+            tmAgency.setName(name);
+        }else{
+            tmAgency.setName(phoneNum);
+        }
+        if(StringUtils.isNotBlank(avatar)){
+            tmAgency.setAvatar(avatar);
+        }
+        tmAgency.setEnable(1);
+        String agencyId =  UUidGenerator.generatorUuid(IdStarterEnum.USER.getStarter());
+        tmAgency.setAgencyId(agencyId);
+
+        int result = tmAgencyDao.insert(tmAgency);
+        if(result != 1){
+            log.info("新增用户数据失败:{}" , agencyId);
+        }
+        return tmAgency;
+    }
 }

+ 1 - 0
house-common/src/main/java/com/ljq/house/common/service/UserService.java

@@ -110,4 +110,5 @@ public class UserService {
     }
 
 
+
 }

TEMPAT SAMPAH
house-common/target/classes/com/ljq/house/common/enums/ResultCodeEnum.class


TEMPAT SAMPAH
house-common/target/classes/com/ljq/house/common/service/AgencyService.class


+ 59 - 10
house-web/src/main/java/com/ljq/house/app/controller/AppAgencyController.java

@@ -67,7 +67,11 @@ public class AppAgencyController {
     @ResponseBody
     public Result userLogin(@RequestBody @ApiParam(name="登录请求实体",value="传入json格式",required=true) LoginVo loginVo) {
 
-        if (!StringUtils.isNoneBlank(loginVo.getWxCode(), loginVo.getIv(), loginVo.getRawData(), loginVo.getEncryptedData())) {
+        if (!StringUtils.isNoneBlank(loginVo.getWxCode(), loginVo.getIv()
+                ,loginVo.getRawData()
+                ,loginVo.getEncryptedData()
+                ,loginVo.getWxUserInfoDto().getAvatarUrl()
+                ,loginVo.getWxUserInfoDto().getNickName())) {
             throw new CommonBaseException(ResultCodeEnum.D017);
         }
 
@@ -89,20 +93,12 @@ public class AppAgencyController {
         try {
             resultJson = WXCore.decrypt(wxOpenId, loginVo.getEncryptedData(), wxSessionKey, loginVo.getIv());
 
-            System.out.println("---------------------------------------------------------");
-            System.out.println(resultJson);
-            System.out.println("---------------------------------------------------------");
-
             log.info("微信返回的敏感数据json={}", resultJson.toJSONString());
             if (null == resultJson) {
                 throw new CommonBaseException(ResultCodeEnum.D101, "微信敏感数据Json解析失败");
             }
             wxUserInfoDto = JSONObject.parseObject(resultJson.toJSONString(), WxUserInfoDto.class);
 
-            System.out.println("---------------------------------------------------------");
-            System.out.println(wxUserInfoDto);
-            System.out.println("---------------------------------------------------------");
-
             if (null == wxUserInfoDto) {
                 throw new CommonBaseException(ResultCodeEnum.D101, "转换微信敏感数据dto失败");
             }
@@ -112,10 +108,14 @@ public class AppAgencyController {
             throw new CommonBaseException(ResultCodeEnum.D101);
         }
 
+        WxUserInfoDto wxUserInfoDtoTmp = loginVo.getWxUserInfoDto();
+        String avatarUrl = wxUserInfoDtoTmp.getAvatarUrl();
+        String nickName = wxUserInfoDtoTmp.getNickName();
+
         //先通过手机号获取用户表,查看用户是否已经存在
         TmAgency dbAgency = agencyService.getAgencyByPhone(wxUserInfoDto.getOpenId());
         if (null == dbAgency || 1 != dbAgency.getEnable()) {
-            throw new CommonBaseException(ResultCodeEnum.D029);
+            dbAgency = agencyService.addNewAgency("", wxOpenId, nickName, avatarUrl);
         }else{
             if(StringUtils.isBlank(dbAgency.getWxOpenId())){
                 UpdateWrapper<TmAgency> updateWrapper = new UpdateWrapper<>();
@@ -123,6 +123,8 @@ public class AppAgencyController {
                 updateWrapper.last("limit 1");
                 dbAgency.setLastModifyDatetime(new Date());
                 dbAgency.setWxOpenId(wxOpenId);
+                dbAgency.setName(nickName);
+                dbAgency.setAvatar(avatarUrl);
                 int update = tmAgencyDao.update(dbAgency , updateWrapper);
                 if(update != 1){
                     log.error("更新经纪人:{}的微信openid失败" ,dbAgency.getAgencyUserId());
@@ -146,6 +148,52 @@ public class AppAgencyController {
         return Result.success(jsonObject);
     }
 
+    @ApiOperation(value = "获取手机号")
+    @RequestMapping(value = "/getPhoneNum", method = RequestMethod.POST)
+    @ResponseBody
+    public Result getPhone(@RequestBody @ApiParam(name="登录请求实体",value="传入json格式",required=true) LoginVo loginVo) {
+
+        if (!StringUtils.isNoneBlank(loginVo.getWxCode(), loginVo.getIv(), loginVo.getPhoneNum())) {
+            throw new CommonBaseException(ResultCodeEnum.D017);
+        }
+        Map<String, Object> wxResult =  WxOpUtils.tryLoginWx(loginVo.getWxCode() , agencyWxAppId, agencyWxAppSecret);
+        String wxSessionKey = (String) wxResult.get(WxOpUtils.SESSION_KEY);
+        String wxOpenId = (String) wxResult.get(WxOpUtils.WX_OPEN_ID_KEY);
+        String decryptPhoneNum = null;
+        WxUserInfoDto wxUserInfoDto = null;
+        try {
+            JSONObject resultJson = WXCore.decrypt(wxOpenId, loginVo.getPhoneNum(), wxSessionKey, loginVo.getIv());
+            decryptPhoneNum = null != resultJson ? resultJson.getString(CommonConstants.WxConstant.WX_PHONE_NUMBER) : "";
+            log.info("经纪人解密出来的手机号码为:{}", decryptPhoneNum);
+        }catch (Exception e) {
+            log.error("解密手机号出现异常:{}", e);
+            throw new CommonBaseException(ResultCodeEnum.D039);
+        }
+
+        //先通过手机号获取用户表,查看用户是否已经存在
+        TmAgency dbAgency = tmAgencyDao.selectTmAgencyById(loginVo.getAgencyUserId());
+        if (null == dbAgency || 1 != dbAgency.getEnable()) {
+            throw new CommonBaseException(ResultCodeEnum.D029);
+        }else{
+            if(StringUtils.isBlank(dbAgency.getWxOpenId())){
+                UpdateWrapper<TmAgency> updateWrapper = new UpdateWrapper<>();
+                updateWrapper.eq("agency_user_id" ,dbAgency.getAgencyUserId());
+                updateWrapper.last("limit 1");
+                dbAgency.setLastModifyDatetime(new Date());
+                dbAgency.setWxOpenId(wxOpenId);
+                dbAgency.setPhone(decryptPhoneNum);
+                int update = tmAgencyDao.update(dbAgency , updateWrapper);
+                if(update != 1){
+                    log.error("更新经纪人:{}的微信openid失败" ,dbAgency.getAgencyUserId());
+                }
+            }
+        }
+
+        //返回用户信息和token给前端
+        com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject();
+        jsonObject.put("agency", dbAgency);
+        return Result.success(jsonObject);
+    }
 
     @ApiOperation(value = "根据经纪人ID拉取经纪人详情")
     @ApiImplicitParam(name = "agency_user_id", value = "经纪人唯一标识ID(32位)", paramType = "query", required = true, dataType = "String")
@@ -187,6 +235,7 @@ public class AppAgencyController {
         return Result.failure("新增客源失败");
     }
 
+
     @ApiOperation(value = "经纪人修改客源信息")
     @PostMapping(value = "/update/customer")
     @ResponseBody

+ 27 - 3
house-web/src/main/java/com/ljq/house/app/controller/AppTmHouseController.java

@@ -324,7 +324,6 @@ public class AppTmHouseController {
         queryWrapper.eq("relation.agency_user_id" , agencyUserId);
         queryWrapper.ne("relation.house_id" , houseId);
 
-
         IPage<TmHouse> iPage = null;
         IPage<Map<String , Object>> recPage = new Page<>();
 
@@ -485,6 +484,8 @@ public class AppTmHouseController {
             String priceRange = request.getParameter("price_s");
             Integer saleState = DataUtils.getInteger(request.getParameter("saleState"));
 
+            String bathRooms = request.getParameter("bathRooms");
+            String bathRoomRange = request.getParameter("bathRoom_s");
 
             if (StringUtils.isNotBlank(saleType)) {
                 queryWrapper.eq(tableAlias + "sale_type", saleType.trim());
@@ -493,7 +494,7 @@ public class AppTmHouseController {
             if (StringUtils.isNoneBlank(rooms)) {
                 Integer getRoom = DataUtils.getIntegerWithDefault(rooms , false);
                 if(null != getRoom){
-                    queryWrapper.eq(tableAlias +"rooms", getRoom);
+                    queryWrapper.eq(tableAlias +"bedroom_amount", getRoom);
                 }else{
                     log.info("非法的居室数:{}" , rooms);
                 }
@@ -505,7 +506,7 @@ public class AppTmHouseController {
                         Integer roomSmall = DataUtils.getInteger(roomRangeList[0]);
                         Integer roomBig = DataUtils.getInteger(roomRangeList[1]);
                         if(null != roomSmall && null != roomBig){
-                            queryWrapper.between(tableAlias +"rooms" , roomSmall , roomBig);
+                            queryWrapper.between(tableAlias +"bedroom_amount" , roomSmall , roomBig);
                         }
                     }else{
                         log.warn("非法的居室范围:{}",roomsRange);
@@ -513,6 +514,29 @@ public class AppTmHouseController {
                 }
             }
 
+            if (StringUtils.isNoneBlank(bathRooms)) {
+                Integer getRoom = DataUtils.getIntegerWithDefault(bathRooms , false);
+                if(null != getRoom){
+                    queryWrapper.eq(tableAlias +"showerroom_amount", getRoom);
+                }else{
+                    log.info("非法的浴室数:{}" , bathRooms);
+                }
+            }else{
+                //默认填了房间数,就按房间数走,没填,才查看是否上送了房间区间
+                if(StringUtils.isNotBlank(bathRoomRange)){
+                    String[] roomRangeList = bathRoomRange.split("#");
+                    if(null != roomRangeList && roomRangeList.length > 1){
+                        Integer roomSmall = DataUtils.getInteger(roomRangeList[0]);
+                        Integer roomBig = DataUtils.getInteger(roomRangeList[1]);
+                        if(null != roomSmall && null != roomBig){
+                            queryWrapper.between(tableAlias +"showerroom_amount" , roomSmall , roomBig);
+                        }
+                    }else{
+                        log.warn("非法的居室范围:{}",bathRoomRange);
+                    }
+                }
+            }
+
             if (StringUtils.isNoneBlank(price)) {
                 //前端上送的价钱都是以万级为单位,这里需要转换
                 BigDecimal getPrice = DataUtils.getBigDecimalObj(price);

+ 54 - 11
house-web/src/main/java/com/ljq/house/app/controller/AppTmUserController.java

@@ -7,6 +7,7 @@ import com.ljq.house.auth.utils.aes.WXCore;
 import com.ljq.house.biz.dao.*;
 import com.ljq.house.biz.model.*;
 import com.ljq.house.biz.model.dto.WxUserInfoDto;
+import com.ljq.house.common.constants.CommonConstants;
 import com.ljq.house.common.enums.HouseFocusStatusEnum;
 import com.ljq.house.common.enums.IdStarterEnum;
 import com.ljq.house.common.enums.ResultCodeEnum;
@@ -76,7 +77,10 @@ public class AppTmUserController {
     @ResponseBody
     public Result userLogin(@RequestBody @ApiParam(name="登录请求实体",value="传入json格式",required=true) LoginVo loginVo) {
 
-        if (!StringUtils.isNoneBlank(loginVo.getWxCode(), loginVo.getIv(), loginVo.getRawData(), loginVo.getEncryptedData())) {
+        if (!StringUtils.isNoneBlank(loginVo.getWxCode(), loginVo.getIv(),
+                loginVo.getRawData(), loginVo.getEncryptedData()
+                ,loginVo.getWxUserInfoDto().getAvatarUrl()
+                ,loginVo.getWxUserInfoDto().getNickName())) {
             throw new CommonBaseException(ResultCodeEnum.D017);
         }
 
@@ -98,20 +102,12 @@ public class AppTmUserController {
         try {
             resultJson = WXCore.decrypt(wxOpenId, loginVo.getEncryptedData(), wxSessionKey, loginVo.getIv());
 
-            System.out.println("---------------------------------------------------------");
-            System.out.println(resultJson);
-            System.out.println("---------------------------------------------------------");
-
             log.info("微信返回的敏感数据json={}", resultJson.toJSONString());
             if (null == resultJson) {
                 throw new CommonBaseException(ResultCodeEnum.D101, "微信敏感数据Json解析失败");
             }
             wxUserInfoDto = JSONObject.parseObject(resultJson.toJSONString(), WxUserInfoDto.class);
 
-            System.out.println("---------------------------------------------------------");
-            System.out.println(wxUserInfoDto);
-            System.out.println("---------------------------------------------------------");
-
             if (null == wxUserInfoDto) {
                 throw new CommonBaseException(ResultCodeEnum.D101, "转换微信敏感数据dto失败");
             }
@@ -121,11 +117,15 @@ public class AppTmUserController {
             throw new CommonBaseException(ResultCodeEnum.D101);
         }
 
+        WxUserInfoDto wxUserInfoDtoTmp = loginVo.getWxUserInfoDto();
+        String avatarUrl = wxUserInfoDtoTmp.getAvatarUrl();
+        String nickName = wxUserInfoDtoTmp.getNickName();
+
         //先通过wxOpenId获取用户表,查看用户是否已经存在
         //先通过手机号获取用户表,查看用户是否已经存在
         TmUser dbUser = userService.getUserByName(wxUserInfoDto.getNickName());
         if (null == dbUser) {
-            dbUser = userService.addNewUser("", wxOpenId, wxUserInfoDto.getNickName(), wxUserInfoDto.getAvatarUrl());
+            dbUser = userService.addNewUser("", wxOpenId, nickName, avatarUrl);
             log.info("新插入的用户id={}", (null != dbUser ? dbUser.getUserId() : ""));
             if (dbUser == null) {
                 log.info("新增用户失败");
@@ -136,10 +136,14 @@ public class AppTmUserController {
                     !StringUtils.equals(dbUser.getWxOpenId() , wxOpenId)){
                 log.info("openId,上送:{},数据库存:{}不一致" , wxOpenId , dbUser.getWxOpenId());
                 throw new CommonBaseException(ResultCodeEnum.D045);
+            }else{
+                dbUser.setName(nickName);
+                dbUser.setAvatar(avatarUrl);
+                dbUser.setWxOpenId(wxOpenId);
+                tmUserDao.update(dbUser);
             }
         }
 
-
         ImUser imUser = imService.getUserById(dbUser.getUserId());
         if(null == imUser){
             log.info("经纪人未创建im用户,新建im用户");
@@ -156,6 +160,45 @@ public class AppTmUserController {
         return Result.success(jsonObject);
     }
 
+    @ApiOperation(value = "获取手机号")
+    @RequestMapping(value = "/getPhoneNum", method = RequestMethod.POST)
+    @ResponseBody
+    public Result getPhone(@RequestBody @ApiParam(name="登录请求实体",value="传入json格式",required=true) LoginVo loginVo) {
+
+        if (!StringUtils.isNoneBlank(loginVo.getWxCode(), loginVo.getIv(), loginVo.getPhoneNum(),loginVo.getUserId())) {
+            throw new CommonBaseException(ResultCodeEnum.D017);
+        }
+        Map<String, Object> wxResult =  WxOpUtils.tryLoginWx(loginVo.getWxCode(), userWxAppId, userWxAppSecret);
+        String wxSessionKey = (String) wxResult.get(WxOpUtils.SESSION_KEY);
+        String wxOpenId = (String) wxResult.get(WxOpUtils.WX_OPEN_ID_KEY);
+        String decryptPhoneNum = null;
+        try {
+            JSONObject resultJson = WXCore.decrypt(wxOpenId, loginVo.getPhoneNum(), wxSessionKey, loginVo.getIv());
+            decryptPhoneNum = null != resultJson ? resultJson.getString(CommonConstants.WxConstant.WX_PHONE_NUMBER) : "";
+            log.info("用户解密出来的手机号码为:{}", decryptPhoneNum);
+        }catch (Exception e) {
+            log.error("解密手机号出现异常:{}", e);
+            throw new CommonBaseException(ResultCodeEnum.D039);
+        }
+
+        //先通过wxOpenId获取用户表,查看用户是否已经存在
+        //先通过手机号获取用户表,查看用户是否已经存在
+        TmUser dbUser = tmUserDao.selectTmUsers(loginVo.getUserId());
+        if (null == dbUser) {
+            throw new CommonBaseException(ResultCodeEnum.D046);
+        }else{
+            dbUser.setPhone(decryptPhoneNum);
+            tmUserDao.update(dbUser);
+        }
+
+        //返回用户信息和token给前端
+        com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject();
+
+        jsonObject.put("user", dbUser);
+
+        return Result.success(jsonObject);
+    }
+
     @ApiOperation(value = "修改用户")
     @PostMapping("/update")
     @ResponseBody

+ 1 - 1
house-web/src/main/resources/application.properties

@@ -1,2 +1,2 @@
-spring.profiles.active=test
+spring.profiles.active=dev
 #spring.profiles.active=dev

TEMPAT SAMPAH
house-web/target/classes/com/ljq/house/app/controller/AppTmHouseController.class