From 573c491b4a1ba60e12a5678a01c1546c0077c1ee Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期二, 30 七月 2019 09:07:42 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java | 744 ++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 603 insertions(+), 141 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java index 11ed9b4..9185a59 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java @@ -4,6 +4,7 @@ import java.io.FileWriter; import java.io.IOException; import java.math.BigDecimal; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -13,96 +14,100 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.yeshi.utils.JsonUtil; +import org.yeshi.utils.tencentcloud.COSManager; import com.google.gson.Gson; import com.qcloud.cos.model.COSObjectSummary; import com.qcloud.cos.model.ObjectListing; -import com.yeshi.fanli.dao.mybatis.AccountDetailsMapper; import com.yeshi.fanli.dao.mybatis.AccountMessageMapper; -import com.yeshi.fanli.dao.mybatis.BindingAccountMapper; -import com.yeshi.fanli.dao.mybatis.MoneyRecordMapper; -import com.yeshi.fanli.dao.mybatis.PidOrderMapper; -import com.yeshi.fanli.dao.mybatis.ThreeSaleMapper; import com.yeshi.fanli.dao.mybatis.UserConnectHistoryMapper; import com.yeshi.fanli.dao.mybatis.UserInfoMapper; -import com.yeshi.fanli.dao.mybatis.hongbao.HongBaoMapper; -import com.yeshi.fanli.dao.mybatis.order.OrderItemMapper; -import com.yeshi.fanli.dao.mybatis.order.OrderMapper; -import com.yeshi.fanli.entity.bus.user.AccountDetails; -import com.yeshi.fanli.entity.bus.user.AccountMessage; import com.yeshi.fanli.entity.bus.user.BindingAccount; -import com.yeshi.fanli.entity.bus.user.HongBao; +import com.yeshi.fanli.entity.bus.user.ForbiddenUserIdentifyCode; +import com.yeshi.fanli.entity.bus.user.ForbiddenUserIdentifyCode.ForbiddenUserIdentifyCodeTypeEnum; import com.yeshi.fanli.entity.bus.user.LoginResult; -import com.yeshi.fanli.entity.bus.user.MoneyRecord; -import com.yeshi.fanli.entity.bus.user.Order; -import com.yeshi.fanli.entity.bus.user.OrderItem; +import com.yeshi.fanli.entity.bus.user.SMSHistory; import com.yeshi.fanli.entity.bus.user.ThreeSale; +import com.yeshi.fanli.entity.bus.user.UserAccountBindingHistory; import com.yeshi.fanli.entity.bus.user.UserConnectHistory; +import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo; import com.yeshi.fanli.entity.bus.user.UserInfo; import com.yeshi.fanli.entity.bus.user.WeiXinUser; -import com.yeshi.fanli.entity.taobao.PidOrder; import com.yeshi.fanli.exception.UserAccountException; +import com.yeshi.fanli.exception.user.ForbiddenUserIdentifyCodeException; import com.yeshi.fanli.log.LogHelper; -import com.yeshi.fanli.service.inter.hongbao.HongBaoService; +import com.yeshi.fanli.service.inter.hongbao.ThreeSaleSerivce; import com.yeshi.fanli.service.inter.msg.UserAccountMsgNotificationService; +import com.yeshi.fanli.service.inter.user.BindingAccountService; +import com.yeshi.fanli.service.inter.user.ForbiddenUserIdentifyCodeService; import com.yeshi.fanli.service.inter.user.SpreadUserImgService; +import com.yeshi.fanli.service.inter.user.UserAccountBindingHistoryService; import com.yeshi.fanli.service.inter.user.UserAccountService; +import com.yeshi.fanli.service.inter.user.UserExtraTaoBaoInfoService; +import com.yeshi.fanli.service.inter.user.UserInfoDeleteRecordService; +import com.yeshi.fanli.service.inter.user.UserInfoExtraService; +import com.yeshi.fanli.service.inter.user.UserInfoService; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.FileUtil; +import com.yeshi.fanli.util.RedisManager; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.TimeUtil; -import com.yeshi.fanli.util.factory.AccountDetailsFactory; import com.yeshi.fanli.util.factory.msg.MsgAccountDetailFactory; import com.yeshi.fanli.util.wx.WXLoginUtil; import net.sf.json.JSONObject; - -import org.yeshi.utils.JsonUtil; -import org.yeshi.utils.tencentcloud.COSManager; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; +import redis.clients.jedis.Transaction; @Service public class UserAccountServiceImpl implements UserAccountService { @Resource + private RedisManager redisManager; + + @Resource private UserInfoMapper userInfoMapper; @Resource - private BindingAccountMapper bindingAccountMapper; + private UserInfoService userInfoService; + + @Resource + private BindingAccountService bindingAccountService; @Resource private UserConnectHistoryMapper userConnectHistoryMapper; @Resource - private AccountDetailsMapper accountDetailsMapper; - - @Resource - private HongBaoMapper hongBaoMapper; - - @Resource - private OrderMapper orderMapper; - - @Resource - private OrderItemMapper orderItemMapper; - - @Resource - private ThreeSaleMapper threeSaleMapper; - - @Resource - private PidOrderMapper pidOrderMapper; - - @Resource - private HongBaoService hongBaoService; + private ThreeSaleSerivce threeSaleSerivce; @Resource private AccountMessageMapper accountMessageMapper; - @Resource - private MoneyRecordMapper moneyRecordMapper; @Resource private SpreadUserImgService spreadUserImgService; @Resource private UserAccountMsgNotificationService userAccountMsgNotificationService; + + @Resource + private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService; + + @Resource + private ForbiddenUserIdentifyCodeService forbiddenUserIdentifyCodeService; + + @Resource + private UserInfoExtraService userInfoExtraService; + + @Resource + private UserAccountBindingHistoryService userAccountBindingHistoryService; + + @Resource + private UserInfoDeleteRecordService userInfoDeleteRecordService; + + @Resource + private JedisPool jedisPool; @Transactional @Override @@ -128,7 +133,20 @@ WeiXinUser weiXinUser = null; switch (loginType) { case 1:// 娣樺疂 + // 鍒ゆ柇娣樺疂鏄惁琚皝绂� + if (!StringUtil.isNullOrEmpty(tbUserInfo.getTaoBaoUid())) { + ForbiddenUserIdentifyCode identifyCode = forbiddenUserIdentifyCodeService.listByTypeAndIdentifyCode( + ForbiddenUserIdentifyCodeTypeEnum.taobaoUid, tbUserInfo.getTaoBaoUid()); + if (identifyCode != null && identifyCode.getEffective() != null && identifyCode.getEffective()) + throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, + Constant.FORBIDDEN_USER_REASON_DESC); + } userInfo = getUserInfoByTaoBaoOpenId(appId, tbUserInfo.getOpenid()); + // 鍒ゆ柇鐢ㄦ埛鏄惁琚垹闄� + if (userInfo != null && userInfo.getState() != null + && (userInfo.getState() == UserInfo.STATE_DELETE_OUT_OF_DATE + || userInfo.getState() == UserInfo.STATE_DELETE)) + userInfo = null; if (userInfo == null) {// 鍘熷厛鐨勮处鍙蜂笉瀛樺湪 userInfo = new UserInfo(); userInfo.setAppId(appId); @@ -160,12 +178,23 @@ if (weiXinUser == null) throw new UserAccountException(1001, "鏃犳硶鑾峰彇鍒板井淇′釜浜轰俊鎭�"); LogHelper.test("寰俊鎺堟潈鐢ㄦ埛淇℃伅锛�" + new Gson().toJson(weiXinUser)); + // 鍒ゆ柇寰俊unionid鏄惁琚皝绂� + ForbiddenUserIdentifyCode identifyCode = forbiddenUserIdentifyCodeService.listByTypeAndIdentifyCode( + ForbiddenUserIdentifyCodeTypeEnum.wxUnionId, weiXinUser.getUnionid()); + if (identifyCode != null && identifyCode.getEffective() != null && identifyCode.getEffective()) + throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC); + userInfo = getUserInfoByWXUnionId(appId, weiXinUser.getUnionid()); + // 鍒ゆ柇鐢ㄦ埛鏄惁琚垹闄� + if (userInfo != null && userInfo.getState() != null + && (userInfo.getState() == UserInfo.STATE_DELETE_OUT_OF_DATE + || userInfo.getState() == UserInfo.STATE_DELETE)) + userInfo = null; // 鐩存帴鐢ㄧ殑寰俊鐧诲綍 if (lastUser == null) { if (userInfo != null) { // 浣垮垎閿�鍏崇郴鐢熸晥 - threeSaleMapper.effectThreeSale(userInfo.getId()); + threeSaleSerivce.effective(userInfo); // 鏇存柊澶村儚涓庢樀绉� UserInfo updateUserInfo = new UserInfo(userInfo.getId()); updateUserInfo.setNickName(weiXinUser.getNickname()); @@ -241,7 +270,7 @@ session.removeAttribute("LAST_LOGIN_USER"); // 浣垮垎閿�鍏崇郴鐢熸晥 - threeSaleMapper.effectThreeSale(userInfo.getId()); + threeSaleSerivce.effective(userInfo); return new LoginResult(LoginResult.TYPE_NORMAL, userInfo); } else {// 涓や釜璐﹀彿鎷ユ湁涓嶅悓鐨刄ID @@ -255,7 +284,7 @@ result.setLessUser(lastUser); // 浣垮垎閿�鍏崇郴鐢熸晥 - threeSaleMapper.effectThreeSale(userInfo.getId()); + threeSaleSerivce.effective(userInfo); return result; } @@ -286,7 +315,19 @@ } } case 3:// 鎵嬫満鍙风爜 + // 鍒ゆ柇鎵嬫満鍙风爜鏄惁琚皝绂� + ForbiddenUserIdentifyCode identifyCode1 = forbiddenUserIdentifyCodeService + .listByTypeAndIdentifyCode(ForbiddenUserIdentifyCodeTypeEnum.phone, phone); + if (identifyCode1 != null && identifyCode1.getEffective() != null && identifyCode1.getEffective()) + throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC); + userInfo = getUserInfoByPhone(appId, phone); + // 鍒ゆ柇鐢ㄦ埛鏄惁琚垹闄� + if (userInfo != null && userInfo.getState() != null + && (userInfo.getState() == UserInfo.STATE_DELETE_OUT_OF_DATE + || userInfo.getState() == UserInfo.STATE_DELETE)) + userInfo = null; + if (userInfo == null) {// 鍘熷厛鐨勮处鍙蜂笉瀛樺湪 userInfo = new UserInfo(); userInfo.setAppId(appId); @@ -338,6 +379,12 @@ WeiXinUser weiXinUser = null; switch (loginType) { case 1:// 娣樺疂 + if (!StringUtil.isNullOrEmpty(tbUserInfo.getTaoBaoUid())) { + ForbiddenUserIdentifyCode identifyCode = forbiddenUserIdentifyCodeService.listByTypeAndIdentifyCode( + ForbiddenUserIdentifyCodeTypeEnum.taobaoUid, tbUserInfo.getTaoBaoUid()); + if (identifyCode != null && identifyCode.getEffective() != null && identifyCode.getEffective()) + throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC); + } userInfo = getUserInfoByTaoBaoOpenId(appId, tbUserInfo.getOpenid()); break; case 2:// 寰俊 @@ -345,12 +392,29 @@ weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code); if (weiXinUser == null) throw new UserAccountException(1001, "鏃犳硶鑾峰彇鍒板井淇′釜浜轰俊鎭�"); + + // 鍒ゆ柇鏄惁琚皝绂� + ForbiddenUserIdentifyCode identifyCode = forbiddenUserIdentifyCodeService + .listByTypeAndIdentifyCode(ForbiddenUserIdentifyCodeTypeEnum.phone, phone); + if (identifyCode != null && identifyCode.getEffective() != null && identifyCode.getEffective()) + throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC); + userInfo = getUserInfoByWXUnionId(appId, weiXinUser.getUnionid()); break; case 3:// 鎵嬫満鍙风爜 + // 鍒ゆ柇鏄惁琚皝绂� + ForbiddenUserIdentifyCode identifyCode1 = forbiddenUserIdentifyCodeService + .listByTypeAndIdentifyCode(ForbiddenUserIdentifyCodeTypeEnum.phone, phone); + if (identifyCode1 != null && identifyCode1.getEffective() != null && identifyCode1.getEffective()) + throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC); userInfo = getUserInfoByPhone(appId, phone); break; } + + // 鍒ゆ柇鐢ㄦ埛鏄惁琚垹闄� + if (userInfo != null && userInfo.getState() != null && (userInfo.getState() == UserInfo.STATE_DELETE_OUT_OF_DATE + || userInfo.getState() == UserInfo.STATE_DELETE)) + userInfo = null; if (userInfo != null) { UserInfo updateUserInfo = new UserInfo(userInfo.getId()); @@ -431,32 +495,21 @@ if (!StringUtil.isNullOrEmpty(mainUser.getPhone()) && !StringUtil.isNullOrEmpty(lessUser.getPhone())) throw new UserAccountException(9, "涓や釜璐﹀彿閮界粦瀹氫簡鎵嬫満鍙风爜锛岃瑙g粦鍏朵腑涓�涓�"); - if (lessUser.getMyHongBao().compareTo(new BigDecimal("20")) >= 0 - && mainUser.getMyHongBao().compareTo(new BigDecimal("20")) > 0) - throw new UserAccountException(10, String.format("璐︽埛ID:%s 鐨勮祫閲戣秴杩�20鍏冿紝涓轰繚璇佽祫閲戝畨鍏ㄨ鑱旂郴瀹㈡湇鎵撻��", lessUser.getId() + "")); + if (lessUser.getMyHongBao().compareTo(new BigDecimal("10")) >= 0 + && mainUser.getMyHongBao().compareTo(new BigDecimal("10")) > 0) + throw new UserAccountException(10, String.format("璐︽埛ID:%s 鐨勮祫閲戣秴杩�10鍏冿紝涓轰繚璇佽祫閲戝畨鍏ㄨ鑱旂郴瀹㈡湇鎵撻��", lessUser.getId() + "")); // 鍒ゅ畾鏄惁缁戝畾浜嗗悓涓�鏀粯瀹� - List<BindingAccount> mainUserAccountList = bindingAccountMapper.selectByUid(mainUser.getId()); - if (mainUserAccountList != null) - for (int i = 0; i < mainUserAccountList.size(); i++) { - if (mainUserAccountList.get(i).getType() == BindingAccount.TYPE_WXPAY) { - mainUserAccountList.remove(i); - i--; - } - } - List<BindingAccount> lessUserAccountList = bindingAccountMapper.selectByUid(lessUser.getId()); - if (lessUserAccountList != null) - for (int i = 0; i < lessUserAccountList.size(); i++) { - if (lessUserAccountList.get(i).getType() == BindingAccount.TYPE_WXPAY) { - lessUserAccountList.remove(i); - i--; - } - } + BindingAccount mainUserAccount = bindingAccountService.getBindingAccountByUidAndType(mainUser.getId(), + BindingAccount.TYPE_ALIPAY); + + BindingAccount lessUserAccount = bindingAccountService.getBindingAccountByUidAndType(lessUser.getId(), + BindingAccount.TYPE_ALIPAY); + // 鏈変笉鍚岀殑鏀粯瀹濊处鍙� boolean hasDiffrentAlipayAccount = false; - if (mainUserAccountList != null && mainUserAccountList.size() > 0 && lessUserAccountList != null - && lessUserAccountList.size() > 0) { - if (!mainUserAccountList.get(0).getAccount().equalsIgnoreCase(lessUserAccountList.get(0).getAccount())) + if (mainUserAccount != null && lessUserAccount != null) { + if (!mainUserAccount.getAccount().equalsIgnoreCase(lessUserAccount.getAccount())) hasDiffrentAlipayAccount = true; } @@ -496,52 +549,12 @@ userInfoMapper.connectUser(mainUser.getId(), lessUser.getId()); // 鏌ヨ鏄惁鏈夊浣欑殑鏂颁汉绾㈠寘 - List<HongBao> list = hongBaoMapper.selectByUidAndType(mainUser.getId(), HongBao.TYPE_XINREN); int subCount = 0; int addCount = 0; - for (HongBao hb : list) { - if (hb.getMoney().compareTo(new BigDecimal(0)) > 0) - addCount++; - if (hb.getMoney().compareTo(new BigDecimal(0)) < 0) - subCount++; - } - - // 鏈�2涓垨鑰�2涓互涓婄殑鏂颁汉绾㈠寘 - if (addCount - subCount > 1) { - // 鎵i櫎涓�涓柊浜虹孩鍖� - AccountDetails accountDetails = new AccountDetails(); - accountDetails.setCreateTime(TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); - accountDetails.setExtract(null); - accountDetails.setMoney("-" + list.get(1).getMoney().toString()); - accountDetails.setOrderItem(null); - accountDetails.setTitle(" 璐﹀彿鍚堝苟鎵i櫎閲嶅鏂颁汉绾㈠寘"); - accountDetails.setType(AccountDetailsFactory.TUIKUAN); - accountDetails.setUserInfo(mainUser); - accountDetailsMapper.insertSelective(accountDetails); - - AccountMessage accountMessage = new AccountMessage(); - accountMessage.setContent(" 璐﹀彿鍚堝苟鎵i櫎閲嶅鏂颁汉绾㈠寘" + list.get(1).getMoney().toString() + "鍏�"); - accountMessage.setCreateTime(System.currentTimeMillis()); - accountMessage.setIsOpen(false); - accountMessage.setSystemMsgId(0); - accountMessage.setTitle(" 璐﹀彿鍚堝苟鎵i櫎閲嶅鏂颁汉绾㈠寘"); - accountMessage.setUserInfo(mainUser); - accountMessageMapper.insertSelective(accountMessage); - - userInfoMapper.subHongBaoByUid(mainUser.getId(), list.get(1).getMoney()); - - HongBao hongBao = new HongBao(mainUser, new BigDecimal(0).subtract(list.get(1).getMoney()), null, - HongBao.TYPE_XINREN, HongBao.STATE_YILINGQU, System.currentTimeMillis(), System.currentTimeMillis(), - System.currentTimeMillis(), null, "璐﹀彿鍚堝苟鎵i櫎"); - - hongBaoMapper.insertSelective(hongBao); - - MoneyRecord moneyRecord = new MoneyRecord(mainUser, hongBao, list.get(1).getMoney(), "璐﹀彿鍚堝苟鎵i櫎閲嶅鏂颁汉绾㈠寘", "璐﹀彿鍚堝苟", - System.currentTimeMillis(), 2); - moneyRecordMapper.insertSelective(moneyRecord); - } userAccountMsgNotificationService.connectSuccess(mainUser.getId(), lessUser.getId()); + + userInfoDeleteRecordService.addDeleteRecord(lessUser.getId(), UserInfo.STATE_DELETE, "鍒犻櫎锛氳处鍙疯鎵撻�氬垹闄�"); } /** @@ -551,13 +564,26 @@ * @param unionId * @return */ + @Override public UserInfo getUserInfoByWXUnionId(String appId, String unionId) throws UserAccountException { if (StringUtil.isNullOrEmpty(appId)) throw new UserAccountException(1, "appId涓虹┖"); if (StringUtil.isNullOrEmpty(unionId)) throw new UserAccountException(2, "unionId涓虹┖"); - return userInfoMapper.getUserInfoByAppIdAndWXUnionId(appId, unionId); + List<UserInfo> list = userInfoMapper.listByAppIdAndWXUnionId(appId, unionId); + // 鍓旈櫎琚垹闄ゆ帀鐨勭敤鎴� + for (int i = 0; i < list.size(); i++) { + if (list.get(i).getState() == UserInfo.STATE_DELETE + || list.get(i).getState() == UserInfo.STATE_DELETE_OUT_OF_DATE) { + list.remove(i); + i--; + } + } + if (list.size() > 0) + return list.get(list.size() - 1); + else + return null; } /** @@ -572,7 +598,21 @@ throw new UserAccountException(1, "appId涓虹┖"); if (StringUtil.isNullOrEmpty(openId)) throw new UserAccountException(2, "openId涓虹┖"); - return userInfoMapper.getUserInfoByAppIdAndTaoBaoOpenId(appId, openId); + List<UserInfo> list = userInfoMapper.listByAppIdAndTaoBaoOpenId(appId, openId); + + // 鍓旈櫎琚垹闄ゆ帀鐨勭敤鎴� + for (int i = 0; i < list.size(); i++) { + if (list.get(i).getState() == UserInfo.STATE_DELETE + || list.get(i).getState() == UserInfo.STATE_DELETE_OUT_OF_DATE) { + list.remove(i); + i--; + } + } + if (list.size() > 0) + return list.get(list.size() - 1); + else + return null; + } /** @@ -587,7 +627,21 @@ throw new UserAccountException(1, "appId涓虹┖"); if (StringUtil.isNullOrEmpty(phone)) throw new UserAccountException(2, "phone涓虹┖"); - return userInfoMapper.getUserInfoByAppIdAndPhone(appId, phone); + List<UserInfo> list = userInfoMapper.listByAppIdAndPhone(appId, phone); + + // 鍓旈櫎琚垹闄ゆ帀鐨勭敤鎴� + for (int i = 0; i < list.size(); i++) { + if (list.get(i).getState() == UserInfo.STATE_DELETE + || list.get(i).getState() == UserInfo.STATE_DELETE_OUT_OF_DATE) { + list.remove(i); + i--; + } + } + if (list.size() > 0) + return list.get(list.size() - 1); + else + return null; + } private void updateLatestLoginTime(Long uid) { @@ -621,6 +675,7 @@ @Override public void addUser(UserInfo user) { + Long maxUid = userInfoMapper.getMaxUid(); if (maxUid == null) maxUid = 100000L; @@ -642,8 +697,12 @@ userInfoMapper.updateByPrimaryKeySelective(updateUserInfo); } - // 娣诲姞鏂颁汉绾㈠寘 - hongBaoService.setNewUserHongBaoMyBatis(user, 1); + try { + // 绗竴娆$櫥褰曟椂鍒涘缓鐢ㄦ埛棰濆淇℃伅 + userInfoExtraService.createUserInfoExtra(user.getId()); + } catch (Exception e) { + e.printStackTrace(); + } } @Override @@ -701,7 +760,7 @@ if (!StringUtil.isNullOrEmpty(user.getOpenid()) && !user.getOpenid().equalsIgnoreCase(tbOpenId)) throw new UserAccountException(5, "褰撳墠璐﹀彿宸茬粡缁戝畾浜嗘窐瀹濓紝璇峰厛瑙g粦"); - //缁戝畾鍚屼竴涓窐瀹濆彿 + // 缁戝畾鍚屼竴涓窐瀹濆彿 if (!StringUtil.isNullOrEmpty(user.getOpenid()) && user.getOpenid().equalsIgnoreCase(tbOpenId)) return; @@ -744,6 +803,8 @@ } userInfoMapper.updateByPrimaryKeySelective(update); + + userExtraTaoBaoInfoService.unBindUid(uid); userAccountMsgNotificationService.unBindingSuccess(uid, MsgAccountDetailFactory.TYPE_TB); } @@ -791,19 +852,10 @@ // 澶囦唤鐢ㄦ埛淇℃伅 UserInfo user = userInfoMapper.selectByPrimaryKey(uid); - // 澶囦唤璧勯噾鏄庣粏 - List<AccountDetails> accountDetailsList = accountDetailsMapper.selectByUid(uid); - // 澶囦唤绾㈠寘淇℃伅 - List<HongBao> hongBaoList = hongBaoMapper.selectByUid(uid); - // 澶囦唤璁㈠崟锛屽瓙璁㈠崟淇℃伅 - List<Order> orderList = orderMapper.selectByUid(uid); - List<OrderItem> orderItemList = orderItemMapper.selectByUid(uid); + // TODO 澶囦唤璧勯噾鏄庣粏 // 澶囦唤閭�璇峰叧绯� - List<ThreeSale> threeSaleList = threeSaleMapper.selectByUid(uid); - - // 澶囦唤鍒嗕韩璧� - List<PidOrder> pidOrderList = pidOrderMapper.selectByUid(uid); + List<ThreeSale> threeSaleList = new ArrayList<>(); FileWriter fw = null; try { @@ -813,23 +865,8 @@ fw.write("#UserInfo" + "\r\n"); fw.write(JsonUtil.getSimpleGsonWithDate().toJson(user) + "\r\n"); - fw.write("#AccountDetails" + "\r\n"); - fw.write(JsonUtil.getSimpleGsonWithDate().toJson(accountDetailsList) + "\r\n"); - - fw.write("#HongBao" + "\r\n"); - fw.write(JsonUtil.getSimpleGsonWithDate().toJson(hongBaoList) + "\r\n"); - - fw.write("#Order" + "\r\n"); - fw.write(JsonUtil.getSimpleGsonWithDate().toJson(orderList) + "\r\n"); - - fw.write("#OrderItem" + "\r\n"); - fw.write(JsonUtil.getSimpleGsonWithDate().toJson(orderItemList) + "\r\n"); - fw.write("#ThreeSale" + "\r\n"); fw.write(JsonUtil.getSimpleGsonWithDate().toJson(threeSaleList) + "\r\n"); - - fw.write("#PidOrder" + "\r\n"); - fw.write(JsonUtil.getSimpleGsonWithDate().toJson(pidOrderList) + "\r\n"); fw.close(); @@ -894,4 +931,429 @@ return user.getPortrait(); } + @Transactional + @Override + public UserInfo loginPhone(HttpServletRequest request, int loginType, String vcode, String phone, String appId) + throws UserAccountException { + + // 绌洪娓呯悊 + if (phone == null || phone.trim().length() == 0) { + throw new UserAccountException(1, "璇疯緭鍏ユ墜鏈哄彿鐮�"); + } + phone = phone.replaceAll(" ", ""); + + // 鑻规灉搴旂敤鍟嗗簵涓婄嚎娴嬭瘯鍙风爜 + if ("17316780233".equalsIgnoreCase(phone) && "2581".equalsIgnoreCase(vcode)) { + ; + } else { + + if (StringUtil.isNullOrEmpty(vcode)) { + throw new UserAccountException(1, "璇疯緭鍏ラ獙璇佺爜"); + } + + String oldVcode = redisManager.getSMSVCode(phone, SMSHistory.TYPE_LOGIN); + LogHelper.test("----------------------鐧诲綍楠岃瘉鐮侊細 " + oldVcode); + if (!Constant.IS_TEST) + if (StringUtil.isNullOrEmpty(oldVcode) || !oldVcode.equalsIgnoreCase(vcode)) { + throw new UserAccountException(1, "楠岃瘉鐮侀敊璇紝閲嶆柊杈撳叆"); + } else {// 楠岃瘉鐮佽緭鍏ユ纭� + redisManager.clearSMSVCode(phone, SMSHistory.TYPE_LOGIN); + } + } + + JSONObject logInfo = new JSONObject(); + logInfo.put("appId", appId); + logInfo.put("phone", phone); + logInfo.put("loginType", loginType); + LogHelper.lgoinInfo(logInfo.toString()); + + // 鍒ゆ柇鎵嬫満鍙风爜鏄惁琚皝绂� + ForbiddenUserIdentifyCode identifyCode1 = forbiddenUserIdentifyCodeService + .listByTypeAndIdentifyCode(ForbiddenUserIdentifyCodeTypeEnum.phone, phone); + if (identifyCode1 != null && identifyCode1.getEffective() != null && identifyCode1.getEffective()) { + throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC); + } + + // 娓呯┖闄愬埗 + redisManager.clearSMSFrequencyLimit(phone, SMSHistory.TYPE_LOGIN); + // 娓呯悊娆℃暟 + redisManager.removeCommonString("sendMSNLoginCount" + phone); + + // 閲囩敤redis浜嬪姟闃叉涓�涓墜鏈哄彿澶氭娉ㄥ唽闂 + String watchKey = StringUtil.Md5("REGISTER:" + phone); + Jedis jedis = jedisPool.getResource(); + try { + jedis.watch(watchKey); + if (jedis.get(watchKey) != null && Integer.parseInt(jedis.get(watchKey)) > 1) + throw new UserAccountException(10, "璇风◢鍚庡啀璇�"); + Transaction tran = jedis.multi(); + tran.incr(watchKey); + List<Object> exec = tran.exec(); + if (exec == null || exec.size() == 0) { + throw new UserAccountException(10, "璇风◢鍚庡啀璇�"); + } else { + + // 鏌ヨ鏄惁瀛樺湪璇ョ數璇濆巻鍙茬敤鎴� + UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByPhone(phone); + if (userInfo != null) { + // 鏇存柊璐︽埛鐧诲綍淇℃伅 + updateLonginInfo(userInfo, loginType, request); + } else { + userInfo = new UserInfo(); + userInfo.setAppId(appId); + userInfo.setNickName(Constant.systemCommonConfig.getDefaultNickName()); + userInfo.setPortrait(Constant.systemCommonConfig.getDefaultPortrait()); + userInfo.setPhone(phone); + userInfo.setLoginType(loginType); + userInfo.setState(UserInfo.STATE_NORMAL); + // 鍒涘缓鐢ㄦ埛 + addUser(userInfo); + + try { + // 绗竴娆$櫥褰曟椂鍒涘缓鐢ㄦ埛棰濆淇℃伅 + userInfoExtraService.createUserInfoExtra(userInfo.getId()); + } catch (Exception e) { + e.printStackTrace(); + } + } + + return userInfo; + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + jedis.del(watchKey); + jedis.unwatch(); + jedisPool.returnResource(jedis); + } + throw new UserAccountException(10, "璇风◢鍚庡啀璇�"); + } + + @Transactional + @Override + public UserInfo loginWinXin(HttpServletRequest request, int loginType, String code, String appId) + throws UserAccountException { + // 鏃ュ織淇℃伅 + JSONObject logInfo = new JSONObject(); + logInfo.put("appId", appId); + logInfo.put("code", code); + logInfo.put("loginType", loginType); + LogHelper.lgoinInfo(logInfo.toString()); + + // 閫氳繃Code鎹㈠彇淇℃伅 + WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code); + if (weiXinUser == null) { + throw new UserAccountException(1, "寰俊甯愬彿鎺堟潈澶辫触"); + } + LogHelper.test("寰俊鎺堟潈鐢ㄦ埛淇℃伅锛�" + new Gson().toJson(weiXinUser)); + + // 鍒ゆ柇寰俊unionid鏄惁琚皝绂� + ForbiddenUserIdentifyCode identifyCode = forbiddenUserIdentifyCodeService + .listByTypeAndIdentifyCode(ForbiddenUserIdentifyCodeTypeEnum.wxUnionId, weiXinUser.getUnionid()); + if (identifyCode != null && identifyCode.getEffective() != null && identifyCode.getEffective()) { + throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC); + } + + // 閲囩敤redis浜嬪姟闃叉涓�涓井淇″彿澶氭娉ㄥ唽闂 + String watchKey = StringUtil.Md5("REGISTER:" + weiXinUser.getUnionid()); + Jedis jedis = jedisPool.getResource(); + try { + jedis.watch(watchKey); + if (jedis.get(watchKey) != null && Integer.parseInt(jedis.get(watchKey)) > 1) + throw new UserAccountException(10, "璇风◢鍚庡啀璇�"); + Transaction tran = jedis.multi(); + tran.incr(watchKey); + List<Object> exec = tran.exec(); + if (exec == null || exec.size() == 0) { + throw new UserAccountException(10, "璇风◢鍚庡啀璇�"); + } else { + + UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid()); + // 鐩存帴鐢ㄧ殑寰俊鐧诲綍 + if (userInfo != null) { + LogHelper.test("寰俊unionID瀛樺湪:" + weiXinUser.getUnionid()); + // 鏇存柊璐︽埛鐧诲綍淇℃伅 + updateLonginInfo(userInfo, loginType, request); + // 鍒犻櫎閭�璇峰垎浜浘 + spreadUserImgService.deleteImgUrl(userInfo.getId()); + } else { + LogHelper.test("寰俊unionID涓嶅瓨鍦�:" + weiXinUser.getUnionid()); + // 鍒涘缓鏂拌处鎴� + userInfo = new UserInfo(); + userInfo.setPortrait(weiXinUser.getHeadimgurl()); + userInfo.setAppId(appId); + userInfo.setNickName(weiXinUser.getNickname()); + userInfo.setWxName(weiXinUser.getNickname()); + userInfo.setWxOpenId(weiXinUser.getOpenid()); + userInfo.setWxUnionId(weiXinUser.getUnionid()); + userInfo.setWxPic(weiXinUser.getHeadimgurl()); + userInfo.setLastLoginTime(System.currentTimeMillis()); + userInfo.setLoginType(loginType); + userInfo.setLastLoginIp(request.getRemoteHost()); + userInfo.setState(UserInfo.STATE_NORMAL); + addUser(userInfo); + + try { + // 绗竴娆$櫥褰曟椂鍒涘缓鐢ㄦ埛棰濆淇℃伅 + userInfoExtraService.createUserInfoExtra(userInfo.getId()); + } catch (Exception e) { + e.printStackTrace(); + } + } + return userInfo; + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + jedis.del(watchKey); + jedis.unwatch(); + jedisPool.returnResource(jedis); + } + throw new UserAccountException(10, "璇风◢鍚庡啀璇�"); + } + + /** + * 鏇存柊璐︽埛鐧诲綍淇℃伅 + * + * @param userInfo + * @param loginType + * @param request + */ + public void updateLonginInfo(UserInfo userInfo, int loginType, HttpServletRequest request) { + // 璁剧疆鐧诲綍鏃堕棿涓庣櫥褰曠被鍨� + UserInfo updateUserInfo = new UserInfo(userInfo.getId()); + updateUserInfo.setLastLoginTime(System.currentTimeMillis()); + updateUserInfo.setLoginType(loginType); + updateUserInfo.setLastLoginIp(request.getRemoteHost()); + userInfoMapper.updateByPrimaryKeySelective(updateUserInfo); + } + + @Override + public void bindPhoneNew(Long uid, String phone) throws UserAccountException { + UserInfo user = userInfoMapper.selectByPrimaryKey(uid); + if (user == null) { + throw new UserAccountException(1, "鐢ㄦ埛涓嶅瓨鍦�"); + } + + String hasPhone = user.getPhone(); + if (!StringUtil.isNullOrEmpty(hasPhone) && hasPhone.equals(phone)) { + throw new UserAccountException(2, "鎮ㄥ凡缁忕粦瀹氫簡璇ョ數璇濆彿鐮�"); + } + + UserInfo phoneUser = userInfoMapper.getEffectiveUserInfoByPhone(phone); + if (phoneUser != null) { + throw new UserAccountException(2, "鍙风爜宸茬粡琚崰鐢�"); + } + + // 鏇存柊鐢佃瘽鍙风爜 + UserInfo update = new UserInfo(user.getId()); + update.setPhone(phone); + userInfoMapper.updateByPrimaryKeySelective(update); + // 鍔犲叆缁戝畾璁板綍 + UserAccountBindingHistory history = new UserAccountBindingHistory(); + history.setContent(phone); + history.setType(UserAccountBindingHistory.TYPE_PHONE); + history.setUid(uid); + + // 涔嬪墠宸茬粡缁戝畾鐢佃瘽鍙风爜 + if (!StringUtil.isNullOrEmpty(user.getPhone())) + history.setFirst(false); + else + history.setFirst(true); + userAccountBindingHistoryService.addUserAccountBindingHistory(history); + + // 鍙戦�佹秷鎭� + userAccountMsgNotificationService.bindingSuccess(uid, MsgAccountDetailFactory.TYPE_PHONE); + } + + @Override + public void bindWeiXin(Long uid, String code) throws UserAccountException { + UserInfo user = userInfoMapper.selectByPrimaryKey(uid); + if (user == null) { + throw new UserAccountException(1, "鐢ㄦ埛涓嶅瓨鍦�"); + } + + WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code); + if (weiXinUser == null) { + throw new UserAccountException(2, "寰俊甯愬彿鎺堟潈澶辫触"); + } + + String wxUnionId = weiXinUser.getUnionid(); + if (StringUtil.isNullOrEmpty(wxUnionId)) { + throw new UserAccountException(2, "寰俊甯愬彿鎺堟潈澶辫触"); + } + + String wxUnionIdExist = user.getWxUnionId(); + if (StringUtil.isNullOrEmpty(wxUnionIdExist)) { + UserInfo newUser = userInfoMapper.getEffectiveUserInfoByWXUnionId(wxUnionId); + if (newUser != null) { + throw new UserAccountException(4, "璇ュ井淇″彿宸茶鍏朵粬甯愬彿缁戝畾"); + } + } else if (wxUnionId.equals(wxUnionIdExist)) { + throw new UserAccountException(3, "寰俊甯愬彿涓�鑷存棤闇�鏇存崲"); + } + + if (StringUtil.isNullOrEmpty(user.getPhone())) { + throw new UserAccountException(5, "璇ュ笎鍙锋病鏈夌粦瀹氭墜鏈哄彿鐮侊紝闇�缁戝畾鎵嬫満鍙风爜鎵嶈兘瀹屾垚寰俊鏇存崲"); + } + + UserInfo updateUserInfo = new UserInfo(uid); + updateUserInfo.setWxName(weiXinUser.getNickname()); + updateUserInfo.setWxOpenId(weiXinUser.getOpenid()); + updateUserInfo.setWxPic(weiXinUser.getHeadimgurl()); + updateUserInfo.setWxUnionId(weiXinUser.getUnionid()); + + // 灏嗛粯璁ゆ樀绉版浛鎹㈡垚寰俊鏄电О + String defaultNickName = Constant.systemCommonConfig.getDefaultNickName(); + if (!StringUtil.isNullOrEmpty(weiXinUser.getNickname()) && !StringUtil.isNullOrEmpty(defaultNickName) + && defaultNickName.equals(user.getNickName())) { + updateUserInfo.setNickName(weiXinUser.getNickname()); + } + + // 灏嗛粯璁ゅご鍍忔浛鎹㈡垚寰俊澶村儚 + String defaultPortrait = Constant.systemCommonConfig.getDefaultPortrait(); + if (!StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl()) && !StringUtil.isNullOrEmpty(defaultPortrait) + && defaultPortrait.equals(user.getPortrait())) { + updateUserInfo.setPortrait(weiXinUser.getHeadimgurl()); + } + userInfoMapper.updateByPrimaryKeySelective(updateUserInfo); + + // 鍔犲叆缁戝畾璁板綍 + UserAccountBindingHistory history = new UserAccountBindingHistory(); + history.setContent(weiXinUser.getUnionid()); + history.setType(UserAccountBindingHistory.TYPE_WX); + history.setUid(uid); + + // 涔嬪墠宸茬粡缁戝畾鐢佃瘽鍙风爜 + if (!StringUtil.isNullOrEmpty(user.getWxUnionId())) + history.setFirst(false); + else + history.setFirst(true); + userAccountBindingHistoryService.addUserAccountBindingHistory(history); + + userAccountMsgNotificationService.bindingSuccess(uid, MsgAccountDetailFactory.TYPE_WX); + } + + @Override + public void forbiddenUserAll(Long uid, String reason) { + UserInfo currentInfo = userInfoService.selectByPKey(uid); + if (currentInfo == null) { + return; + } + if (currentInfo.getState() != UserInfo.STATE_NORMAL) { + return; + } + + currentInfo.setState(UserInfo.STATE_FORBIDDEN); + currentInfo.setStateDesc(reason); + userInfoService.updateByPrimaryKeySelective(currentInfo); + + // 鎻掑叆璁板綍 + userInfoDeleteRecordService.addDeleteRecord(uid, UserInfo.STATE_FORBIDDEN, reason); + + // 鍔犲叆灏佺鐨勮处鍙峰垪琛� + ForbiddenUserIdentifyCode forbiddenUserIdentifyCode = new ForbiddenUserIdentifyCode(); + forbiddenUserIdentifyCode.setType(ForbiddenUserIdentifyCodeTypeEnum.wxUnionId); + forbiddenUserIdentifyCode.setIdentifyCode(currentInfo.getWxUnionId()); + forbiddenUserIdentifyCode.setBeiZhu(currentInfo.getWxName()); + try { + forbiddenUserIdentifyCodeService.forbiddenIdentifyCode(forbiddenUserIdentifyCode); + } catch (ForbiddenUserIdentifyCodeException e) { + e.printStackTrace(); + } + + // 鐢佃瘽鍙风爜 + forbiddenUserIdentifyCode = new ForbiddenUserIdentifyCode(); + forbiddenUserIdentifyCode.setType(ForbiddenUserIdentifyCodeTypeEnum.phone); + forbiddenUserIdentifyCode.setIdentifyCode(currentInfo.getPhone()); + try { + forbiddenUserIdentifyCodeService.forbiddenIdentifyCode(forbiddenUserIdentifyCode); + } catch (ForbiddenUserIdentifyCodeException e) { + e.printStackTrace(); + } + + // 娣樺疂 + UserExtraTaoBaoInfo taoBao = userExtraTaoBaoInfoService.getByUid(uid); + if (taoBao != null && !StringUtil.isNullOrEmpty(taoBao.getTaoBaoUid())) { + forbiddenUserIdentifyCode = new ForbiddenUserIdentifyCode(); + forbiddenUserIdentifyCode.setType(ForbiddenUserIdentifyCodeTypeEnum.taobaoUid); + forbiddenUserIdentifyCode.setIdentifyCode(taoBao.getTaoBaoUid()); + try { + forbiddenUserIdentifyCodeService.forbiddenIdentifyCode(forbiddenUserIdentifyCode); + } catch (ForbiddenUserIdentifyCodeException e) { + e.printStackTrace(); + } + } + + // 鏌ヨ鏀粯瀹濈粦瀹� + List<BindingAccount> list = bindingAccountService.getBindingAccountByUid(uid); + if (list != null) { + for (BindingAccount ba : list) { + forbiddenUserIdentifyCode = new ForbiddenUserIdentifyCode(); + forbiddenUserIdentifyCode.setType(ForbiddenUserIdentifyCodeTypeEnum.alipayAccount); + forbiddenUserIdentifyCode.setIdentifyCode(ba.getAccount()); + forbiddenUserIdentifyCode.setBeiZhu(ba.getName()); + try { + forbiddenUserIdentifyCodeService.forbiddenIdentifyCode(forbiddenUserIdentifyCode); + } catch (ForbiddenUserIdentifyCodeException e) { + e.printStackTrace(); + } + } + } + } + + @Override + public void forbiddenUser(Long uid, String reason) { + UserInfo currentInfo = userInfoService.selectByPKey(uid); + if (currentInfo == null) { + return; + } + + if (currentInfo.getState() != UserInfo.STATE_NORMAL) { + return; + } + + currentInfo.setState(UserInfo.STATE_FORBIDDEN); + currentInfo.setStateDesc(reason); + userInfoService.updateByPrimaryKeySelective(currentInfo); + + // 鎻掑叆璁板綍 + userInfoDeleteRecordService.addDeleteRecord(uid, UserInfo.STATE_FORBIDDEN, reason); + } + + @Override + public void DeleteUser(Long uid, String reason) { + UserInfo currentInfo = userInfoService.selectByPKey(uid); + if (currentInfo == null) { + return; + } + + if (currentInfo.getState() != UserInfo.STATE_NORMAL) { + return; + } + + currentInfo.setState(UserInfo.STATE_DELETE); + currentInfo.setStateDesc(reason); + userInfoService.updateByPrimaryKeySelective(currentInfo); + // 鎻掑叆璁板綍 + userInfoDeleteRecordService.addDeleteRecord(uid, UserInfo.STATE_DELETE, reason); + } + + @Override + public void DeleteUserOutOfDate(Long uid, String reason) { + UserInfo currentInfo = userInfoService.selectByPKey(uid); + if (currentInfo == null) { + return; + } + + if (currentInfo.getState() != UserInfo.STATE_NORMAL) { + return; + } + + currentInfo.setState(UserInfo.STATE_DELETE_OUT_OF_DATE); + currentInfo.setStateDesc(reason); + userInfoService.updateByPrimaryKeySelective(currentInfo); + // 鎻掑叆璁板綍 + userInfoDeleteRecordService.addDeleteRecord(uid, UserInfo.STATE_DELETE_OUT_OF_DATE, reason); + } } -- Gitblit v1.8.0