From b9e4089523cf977656ddb308e78f97e78d42ea01 Mon Sep 17 00:00:00 2001 From: sunyuchao Date: Wed, 22 Jul 2020 16:10:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=AC=E4=BC=97=E5=8F=B7=E7=99=BB=E9=99=86?= =?UTF-8?q?=E6=95=B4=E4=BD=93=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/epmet/constant/PaConstant.java | 8 ++ .../java/com/epmet/dao/PaUserVisitedDao.java | 11 +- .../java/com/epmet/dao/PaUserWechatDao.java | 4 +- .../epmet/service/PaUserWechatService.java | 2 +- .../service/impl/PaCustomerServiceImpl.java | 101 +++++++++++++----- .../epmet/service/impl/PaUserServiceImpl.java | 39 ++++--- .../service/impl/PaUserWechatServiceImpl.java | 2 +- .../resources/mapper/PaUserVisitedDao.xml | 16 +++ 8 files changed, 135 insertions(+), 48 deletions(-) diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/constant/PaConstant.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/constant/PaConstant.java index cbed19f1c2..4651738fd4 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/constant/PaConstant.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/constant/PaConstant.java @@ -22,6 +22,14 @@ public interface PaConstant { * 保存用户访问记录数据失败 */ String SAVE_VISITED_EXCEPTION = "保存用户访问记录数据失败"; + /** + * 保存用户数据失败 + */ + String SAVE_USER_EXCEPTION = "保存用户数据失败"; + /** + * 保存用户微信基本数据失败 + */ + String SAVE_WECHAT_EXCEPTION = "保存用户微信信息失败"; /** * 组织级别对应的key、name diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/PaUserVisitedDao.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/PaUserVisitedDao.java index d1910601c7..943bb0a132 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/PaUserVisitedDao.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/PaUserVisitedDao.java @@ -18,8 +18,10 @@ package com.epmet.dao; import com.epmet.commons.mybatis.dao.BaseDao; +import com.epmet.dto.PaUserVisitedDTO; import com.epmet.entity.PaUserVisitedEntity; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; /** * 公众号登陆记录表 @@ -29,5 +31,12 @@ import org.apache.ibatis.annotations.Mapper; */ @Mapper public interface PaUserVisitedDao extends BaseDao { - + + /** + * @param openId + * @return + * @Author sun + * @Description 根据openId查询登陆访问记录数据,按时间倒序 + **/ + PaUserVisitedDTO selectByOpenId(@Param("openId") String openId); } \ No newline at end of file diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/PaUserWechatDao.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/PaUserWechatDao.java index 8d3f6a6351..78d08c42dc 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/PaUserWechatDao.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/PaUserWechatDao.java @@ -23,6 +23,8 @@ import com.epmet.entity.PaUserWechatEntity; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.List; + /** * 公众号用户信息 * @@ -38,7 +40,7 @@ public interface PaUserWechatDao extends BaseDao { * @Author sun * @Description 根据openId查询user_wechat表信息 **/ - PaUserWechatDTO selectWechatByOpenId(@Param("openId") String openId); + List selectWechatByOpenId(@Param("openId") String openId); /** * @param dto diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PaUserWechatService.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PaUserWechatService.java index 31c520d793..bc873038ac 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PaUserWechatService.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/PaUserWechatService.java @@ -99,5 +99,5 @@ public interface PaUserWechatService extends BaseService { * @Author sun * @Description 根据openId查询user_wechat表信息 **/ - PaUserWechatDTO getWechatByOpenId(String openId); + List getWechatByOpenId(String openId); } \ No newline at end of file diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaCustomerServiceImpl.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaCustomerServiceImpl.java index 63290cfb9f..e19b00a3d3 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaCustomerServiceImpl.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaCustomerServiceImpl.java @@ -155,13 +155,7 @@ public class PaCustomerServiceImpl extends BaseServiceImpl userList = paUserDao.selectUserByPhone(formDTO.getPhone()); - if (null != userList && userList.size() > NumConstant.ZERO) { - throw new RenException(PaConstant.PHONE_EXCEPTION); - } - - //2.校验验证码是否正确 + //0.校验验证码是否正确 String smsCodeKey = RedisKeys.getLoginSmsCodeKey(LoginConstant.APP_PUBLIC, LoginConstant.CLIENT_MP, formDTO.getPhone()); String rightSmsCode = (String) redisUtils.get(smsCodeKey); if (!formDTO.getSmsCode().equals(rightSmsCode)) { @@ -169,31 +163,80 @@ public class PaCustomerServiceImpl extends BaseServiceImpl userList = paUserDao.selectUserByPhone(formDTO.getPhone()); + if (null != userList && userList.size() > NumConstant.ZERO) { + throw new RenException(PaConstant.PHONE_EXCEPTION); } - //2.访问记录表新增数据 - PaUserWechatDTO dto = new PaUserWechatDTO(); - dto.setUserId(formDTO.getUserId()); - PaUserWechatEntity wechatEntity = paUserWechatDao.selectWechatByUserId(dto); - if (null == wechatEntity) { - throw new RenException(PaConstant.SELECT_WECHAT_EXCEPTION); - } - PaUserVisitedEntity visitedEntity = new PaUserVisitedEntity(); - visitedEntity.setUserId(formDTO.getUserId()); - visitedEntity.setWxOpenId(wechatEntity.getWxOpenId()); - visitedEntity.setOpenId(wechatEntity.getWxOpenId()); - visitedEntity.setPhone(formDTO.getPhone()); - if (paUserVisitedDao.insert(visitedEntity) < NumConstant.ONE) { - throw new RenException(PaConstant.SAVE_VISITED_EXCEPTION); + //2.根据token中的userId查询pa_user表数据,根据手机号是否为空判断后续是新增还是更新user数据 + PaUserEntity paUserEntity = paUserDao.selectById(formDTO.getUserId()); + + //3.手机号不为空说明是同一个微信用户用第二个手机号注册,手机为空说明当前微信用户用第一个手机号注册 + if(null != paUserEntity.getPhone() && StringUtils.isNotBlank(paUserEntity.getPhone())){ + //手机号不为空说明是同一个微信用户用第二个手机号注册,新增user和user_wechat表数据 + //3-1.user表新增数据 + PaUserEntity userEntity = new PaUserEntity(); + userEntity.setPhone(formDTO.getPhone()); + userEntity.setRealName(formDTO.getSurName()); + userEntity.setGender(formDTO.getGender().toString()); + if (paUserDao.insert(userEntity) < NumConstant.ONE) { + throw new RenException(PaConstant.SAVE_USER_EXCEPTION); + } + + //3-2.根据token中的userId查询用户的微信信息 + PaUserWechatDTO dto = new PaUserWechatDTO(); + dto.setUserId(formDTO.getUserId()); + PaUserWechatEntity wechatEntity = paUserWechatDao.selectWechatByUserId(dto); + if (null == wechatEntity) { + throw new RenException(PaConstant.SELECT_WECHAT_EXCEPTION); + } + + //3-3.新增用户微信信息 + wechatEntity.setUserId(userEntity.getId()); + if (paUserWechatDao.insert(wechatEntity) < NumConstant.ONE) { + throw new RenException(PaConstant.SAVE_WECHAT_EXCEPTION); + } + + //3-4.访问记录表新增数据 + PaUserVisitedEntity visitedEntity = new PaUserVisitedEntity(); + visitedEntity.setUserId(userEntity.getId()); + visitedEntity.setWxOpenId(wechatEntity.getWxOpenId()); + visitedEntity.setOpenId(wechatEntity.getWxOpenId()); + visitedEntity.setPhone(formDTO.getPhone()); + if (paUserVisitedDao.insert(visitedEntity) < NumConstant.ONE) { + throw new RenException(PaConstant.SAVE_VISITED_EXCEPTION); + } + + }else { + //手机为空说明当前微信用户用第一个手机号注册,更新user表数据 + //3-1.pa_user表更新数据 + PaUserEntity userEntity = new PaUserEntity(); + userEntity.setId(formDTO.getUserId()); + userEntity.setPhone(formDTO.getPhone()); + userEntity.setRealName(formDTO.getSurName()); + userEntity.setGender(formDTO.getGender().toString()); + if (paUserDao.updateById(userEntity) < NumConstant.ONE) { + throw new RenException(PaConstant.UPDATE_USER_EXCEPTION); + } + + //3-2.访问记录表新增数据 + PaUserWechatDTO dto = new PaUserWechatDTO(); + dto.setUserId(formDTO.getUserId()); + PaUserWechatEntity wechatEntity = paUserWechatDao.selectWechatByUserId(dto); + if (null == wechatEntity) { + throw new RenException(PaConstant.SELECT_WECHAT_EXCEPTION); + } + PaUserVisitedEntity visitedEntity = new PaUserVisitedEntity(); + visitedEntity.setUserId(formDTO.getUserId()); + visitedEntity.setWxOpenId(wechatEntity.getWxOpenId()); + visitedEntity.setOpenId(wechatEntity.getWxOpenId()); + visitedEntity.setPhone(formDTO.getPhone()); + if (paUserVisitedDao.insert(visitedEntity) < NumConstant.ONE) { + throw new RenException(PaConstant.SAVE_VISITED_EXCEPTION); + } } + } /** diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaUserServiceImpl.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaUserServiceImpl.java index dfdb56af5f..680bf4fec4 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaUserServiceImpl.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaUserServiceImpl.java @@ -26,9 +26,11 @@ import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.constant.FieldConstant; import com.epmet.dao.PaCustomerDao; import com.epmet.dao.PaUserDao; +import com.epmet.dao.PaUserVisitedDao; import com.epmet.dao.PaUserWechatDao; import com.epmet.dto.PaCustomerDTO; import com.epmet.dto.PaUserDTO; +import com.epmet.dto.PaUserVisitedDTO; import com.epmet.dto.PaUserWechatDTO; import com.epmet.dto.result.CustomerUserResultDTO; import com.epmet.dto.result.SaveUserResultDTO; @@ -64,6 +66,8 @@ public class PaUserServiceImpl extends BaseServiceImpl private PaCustomerDao paCustomerDao; @Autowired private PaUserWechatDao paUserWechatDao; + @Autowired + private PaUserVisitedDao paUserVisitedDao; @Override public PageData page(Map params) { @@ -127,11 +131,11 @@ public class PaUserServiceImpl extends BaseServiceImpl @Transactional(rollbackFor = Exception.class) public SaveUserResultDTO saveUser(WxMpUser wxMpUser) { SaveUserResultDTO resultDTO = new SaveUserResultDTO(); - //1.根据openId查询user_wechat表是否存在用户信息 - PaUserWechatDTO wechatDTO = paUserWechatService.getWechatByOpenId(wxMpUser.getOpenId()); + //1.根据openId查询user_wechat表是否存在用户信息(user表和user_wechat表数据时多对多关系) + List wechatDTO = paUserWechatService.getWechatByOpenId(wxMpUser.getOpenId()); //2.不存在则新增用户信息,存在则更新user_wechat表信息 - if (null == wechatDTO || null == wechatDTO.getId()) { + if (null == wechatDTO || wechatDTO.size() < NumConstant.ONE) { //2.1、user表新增数据 PaUserEntity userEntity = new PaUserEntity(); baseDao.insert(userEntity); @@ -151,18 +155,23 @@ public class PaUserServiceImpl extends BaseServiceImpl resultDTO.setUserId(userEntity.getId()); } else { - //2.3、更新user_wechat表数据 - PaUserWechatEntity wechatEntity = ConvertUtils.sourceToTarget(wechatDTO, PaUserWechatEntity.class); - wechatEntity.setGender(wxMpUser.getSex().toString()); - wechatEntity.setNickname(wxMpUser.getNickname()); - wechatEntity.setHeadImgUrl(null == wxMpUser.getHeadImgUrl() ? "" : wxMpUser.getHeadImgUrl()); - wechatEntity.setCountry(null == wxMpUser.getCountry() ? "" : wxMpUser.getCountry()); - wechatEntity.setProvince(null == wxMpUser.getProvince() ? "" : wxMpUser.getProvince()); - wechatEntity.setCity(null == wxMpUser.getCity() ? "" : wxMpUser.getCity()); - wechatEntity.setLanguage(null == wxMpUser.getLanguage() ? "" : wxMpUser.getLanguage()); - paUserWechatService.updateById(wechatEntity); - - resultDTO.setUserId(wechatDTO.getUserId()); + //2.3、批量更新user_wechat表数据 + List wechatEntity = ConvertUtils.sourceToTarget(wechatDTO, PaUserWechatEntity.class); + for(PaUserWechatEntity entity : wechatEntity){ + entity.setGender(wxMpUser.getSex().toString()); + entity.setNickname(wxMpUser.getNickname()); + entity.setHeadImgUrl(null == wxMpUser.getHeadImgUrl() ? "" : wxMpUser.getHeadImgUrl()); + entity.setCountry(null == wxMpUser.getCountry() ? "" : wxMpUser.getCountry()); + entity.setProvince(null == wxMpUser.getProvince() ? "" : wxMpUser.getProvince()); + entity.setCity(null == wxMpUser.getCity() ? "" : wxMpUser.getCity()); + entity.setLanguage(null == wxMpUser.getLanguage() ? "" : wxMpUser.getLanguage()); + } + paUserWechatService.updateBatchById(wechatEntity); + + //2.4、根据openid查询用户登陆访问记录表数据,按登陆时间倒序 + PaUserVisitedDTO visitedDTO = paUserVisitedDao.selectByOpenId(wxMpUser.getOpenId()); + + resultDTO.setUserId(visitedDTO.getUserId()); } //3.返回userId diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaUserWechatServiceImpl.java b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaUserWechatServiceImpl.java index 9fb9089c5e..46726a9823 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaUserWechatServiceImpl.java +++ b/epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/PaUserWechatServiceImpl.java @@ -108,7 +108,7 @@ public class PaUserWechatServiceImpl extends BaseServiceImpl getWechatByOpenId(String openId) { return baseDao.selectWechatByOpenId(openId); } diff --git a/epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/PaUserVisitedDao.xml b/epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/PaUserVisitedDao.xml index 9023e43184..76a3d7fee6 100644 --- a/epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/PaUserVisitedDao.xml +++ b/epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/PaUserVisitedDao.xml @@ -3,5 +3,21 @@ + \ No newline at end of file