From 30d8e227e8d823b6c38c3b9c90ac2df03b63befe Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期二, 25 二月 2025 16:41:22 +0800 Subject: [PATCH] 淘宝转链接口更新 --- fanli/src/main/java/com/yeshi/fanli/service/impl/user/invite/ThreeSaleSerivceImpl.java | 1196 +++++++++++++++++++++++++++++++--------------------------- 1 files changed, 637 insertions(+), 559 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/invite/ThreeSaleSerivceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/invite/ThreeSaleSerivceImpl.java index 119559b..32b7dbc 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/invite/ThreeSaleSerivceImpl.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/invite/ThreeSaleSerivceImpl.java @@ -1,559 +1,637 @@ -package com.yeshi.fanli.service.impl.user.invite; - -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.List; - -import javax.annotation.Resource; - -import org.springframework.context.annotation.Lazy; -import org.springframework.core.task.TaskExecutor; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import com.aliyun.openservices.ons.api.Message; -import com.aliyun.openservices.ons.api.Producer; -import com.yeshi.fanli.dao.mybatis.ThreeSaleMapper; -import com.yeshi.fanli.dao.mybatis.UserInfoMapper; -import com.yeshi.fanli.dto.mq.user.UserTopicTagEnum; -import com.yeshi.fanli.dto.mq.user.body.UserInviteMQMsg; -import com.yeshi.fanli.entity.bus.user.ThreeSale; -import com.yeshi.fanli.entity.bus.user.ThreeSaleExtraInfo; -import com.yeshi.fanli.entity.bus.user.UserInfo; -import com.yeshi.fanli.exception.user.ThreeSaleException; -import com.yeshi.fanli.service.inter.order.config.HongBaoManageService; -import com.yeshi.fanli.service.inter.user.UserActiveLogService; -import com.yeshi.fanli.service.inter.user.UserInfoExtraService; -import com.yeshi.fanli.service.inter.user.UserInfoService; -import com.yeshi.fanli.service.inter.user.integral.IntegralGetService; -import com.yeshi.fanli.service.inter.user.invite.MsgInviteDetailService; -import com.yeshi.fanli.service.inter.user.invite.ThreeSaleExtraInfoSerivce; -import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce; -import com.yeshi.fanli.service.inter.user.invite.UserInviteMsgNotificationService; -import com.yeshi.fanli.util.Constant; -import com.yeshi.fanli.util.StringUtil; -import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory; -import com.yeshi.fanli.util.rocketmq.MQTopicName; - -import net.sf.json.JSONArray; -import net.sf.json.JSONObject; - -@Service -public class ThreeSaleSerivceImpl implements ThreeSaleSerivce { - - @Resource - private HongBaoManageService hongBaoManageService; - - @Resource - private UserInfoService userInfoService; - - @Resource - private UserInfoMapper userInfoMapper; - - @Resource - private ThreeSaleMapper threeSaleMapper; - - @Resource - private UserInviteMsgNotificationService userInviteMsgNotificationService; - - @Resource - private MsgInviteDetailService msgInviteDetailService; - - @Resource - private UserActiveLogService userActiveLogService; - - @Resource - private UserInfoExtraService userInfoExtraService; - - @Resource - private ThreeSaleExtraInfoSerivce threeSaleExtraInfoSerivce; - - @Lazy - @Resource - private IntegralGetService integralGetService; - - @Resource(name = "taskExecutor") - private TaskExecutor executor; - - @Resource(name = "producer") - private Producer producer; - - public UserInfo getBoss(final long uid) { - return threeSaleMapper.selectBoss(uid); - } - - @Transactional(rollbackFor = Exception.class) - public void bind(UserInfo worker, UserInfo inviter) throws ThreeSaleException { - if (worker == null || inviter == null) - throw new ThreeSaleException(1, "鐢ㄦ埛淇℃伅涓虹┖"); - - if (worker.getId() == null)// 璇ョ敤鎴疯繕涓嶅瓨鍦� - { - // 淇濆瓨鐢ㄦ埛 - UserInfo inviteeUser = userInfoService.addUser(worker, Constant.APPID); - if (inviteeUser == null) - throw new ThreeSaleException(2, "鍒涘缓鐢ㄦ埛澶辫触"); - // 淇濆瓨鍏崇郴 - ThreeSale threeSale = new ThreeSale(); - threeSale.setBoss(inviter); - threeSale.setCreateTime(java.lang.System.currentTimeMillis()); - threeSale.setExpire(ThreeSale.EXPIRE_NORMAL); - threeSale.setState(false); - threeSale.setUpdateTime(java.lang.System.currentTimeMillis()); - threeSale.setWorker(inviteeUser); - threeSaleMapper.insertSelective(threeSale); - - } else {// 鏄凡缁忓瓨鍦ㄧ殑鐢ㄦ埛 - if (worker.getId().longValue() == inviter.getId()) - throw new ThreeSaleException(4, "涓嶈兘缁戝畾鑷繁"); - - worker = userInfoService.selectByPKey(worker.getId()); - - // 鐢ㄦ埛宸茬粡瀛樺湪鎴戜滑鐨勭敤鎴峰簱涓� - if (worker.getLastLoginTime() == null || worker.getLastLoginTime() == 0L) { - // 鐢ㄦ埛鏈櫥褰� - int outOfDateCount = 0;// 杩囨湡鏁伴噺 - // 鏌ヨ閭�璇峰叧绯� - List<ThreeSale> list = listByWorkerId(worker.getId()); - if (list != null && list.size() > 0) { - for (ThreeSale ts : list) { - if (!ts.getState() && ts.getExpire() == ThreeSale.EXPIRE_BREAK) { - outOfDateCount++; - } - } - // 鍏ㄩ儴鏄け鏁堢姸鎬� - if (outOfDateCount == list.size()) { - // 鍙互纭畾鍏崇郴 - ThreeSale threeSale = new ThreeSale(); - threeSale.setBoss(inviter); - threeSale.setCreateTime(java.lang.System.currentTimeMillis()); - threeSale.setExpire(ThreeSale.EXPIRE_NORMAL); - threeSale.setState(false); - threeSale.setUpdateTime(java.lang.System.currentTimeMillis()); - threeSale.setWorker(worker); - threeSaleMapper.insertSelective(threeSale); - } else { - // 杩樺瓨鍦ㄦ湁鏁堢殑閭�璇凤紝鍒欎笉鍋氬鐞� - } - } else { - // 鐢ㄦ埛鏈櫥褰�,鍙堜笉瀛樺湪閭�璇峰叧绯�,涓嶅仛澶勭悊 - } - } else { - // 宸茬粡鐧诲綍锛岃�屼笖娌℃湁涓婁笅绾у叧绯绘垨鑰呬笂涓嬬骇鍏崇郴鏈敓鏁堬紝鍒欑粦瀹氬叧绯� - List<ThreeSale> list = threeSaleMapper.listByWorkerId(worker.getId()); - // 鍒犻櫎鏃犳晥鐨� - if (list != null) - for (int i = 0; i < list.size(); i++) { - if (list.get(i).getState() != null && list.get(i).getState() == false - && list.get(i).getExpire() == ThreeSale.EXPIRE_BREAK) {// 杩囨湡鐨� - list.remove(i); - i--; - } - } - // 鏌ヨ涓婄骇鏄惁鏈夊拰鐜板湪涓婄骇涓�鏍风殑 - if (list == null || list.size() == 0)// 灏氭湭纭珛鍏崇郴锛屽缓绔嬪叧绯� - { - ThreeSale ts = new ThreeSale(); - ts.setBoss(inviter); - ts.setCreateTime(System.currentTimeMillis()); - ts.setExpire(ThreeSale.EXPIRE_NORMAL); - ts.setState(true); - ts.setSucceedTime(System.currentTimeMillis()); - ts.setWorker(worker); - threeSaleMapper.insertSelective(ts); - } else { - if (!list.get(0).getState() && list.get(0).getExpire() == ThreeSale.EXPIRE_NORMAL - && list.get(0).getBoss().getId() == inviter.getId().longValue()) {// 鏈敓鏁堢殑涓婄骇鍜岀幇鍦ㄤ笂绾т竴鏍峰氨鐢熸晥 - ThreeSale update = new ThreeSale(list.get(0).getId()); - update.setState(true); - update.setSucceedTime(System.currentTimeMillis()); - threeSaleMapper.updateByPrimaryKeySelective(update); - } - } - } - } - } - - @Transactional - public void effective(UserInfo worker) { - List<ThreeSale> list = threeSaleMapper.listByWorkerId(worker.getId()); - if (list != null) - for (int i = 0; i < list.size(); i++) { - if (list.get(i).getState() != null && list.get(i).getState() == false - && list.get(i).getExpire() == ThreeSale.EXPIRE_NORMAL) { - ; - } else { - list.remove(i); - i--; - } - } - if (list.size() > 0) { - ThreeSale oldSale = list.get(0); - - ThreeSale update = new ThreeSale(list.get(0).getId()); - update.setState(true); - update.setSucceedTime(System.currentTimeMillis()); - threeSaleMapper.updateByPrimaryKeySelective(update); - - oldSale.setState(update.getState()); - oldSale.setSucceedTime(update.getSucceedTime()); - - // 涓嶄互閭�璇蜂汉鏁拌绠楃瓑绾� - // if (inviter != null) - // reComputeUserRank(inviter.getId()); - // 娣诲姞鍒伴槦鍒� - inviteSuccess(worker.getId(), oldSale.getBoss().getId()); - } - } - - - @Override - public List<ThreeSale> listFirstTeamQuery(long start, int count, Long uid, Integer state, String startTime, - String endTime, Integer validState) { - return threeSaleMapper.listFirstTeamQuery(start, count, uid, state, startTime, endTime, validState); - } - - @Override - public long countFirstTeamQuery(Long uid, Integer state, String startTime, String endTime, Integer validState) { - return threeSaleMapper.countFirstTeamQuery(uid, state, startTime, endTime, validState); - } - - @Override - public List<ThreeSale> listSecondTeamQuery(long start, int count, Long uid, Integer state, String startTime, - String endTime, Integer validState) { - return threeSaleMapper.listSecondTeamQuery(start, count, uid, state, startTime, endTime, validState); - } - - @Override - public long countSecondTeamQuery(Long uid, Integer state, String startTime, String endTime, Integer validState) { - return threeSaleMapper.countSecondTeamQuery(uid, state, startTime, endTime, validState); - } - - @Override - public List<ThreeSale> listSuperiorQuery(long start, int count, Integer state, Long uid) { - return threeSaleMapper.listSuperiorQuery(start, count, state, uid); - } - - @Override - public long countSuperiorQuery(Integer state, Long uid) { - return threeSaleMapper.countSuperiorQuery(state, uid); - } - - @Override - public ThreeSale getMyBoss(Long uid) { - return threeSaleMapper.getMyBoss(uid); - } - - @Override - public ThreeSale selectByPrimaryKey(Long id) { - return threeSaleMapper.selectByPrimaryKey(id); - } - - @Override - public List<ThreeSale> listbyIdAndBossId(Long id, Long uid, Integer expire) { - return threeSaleMapper.listbyIdAndBossId(id, uid, expire); - } - - @Override - public JSONObject getMyFirstTeam(long start, int count, Long uid) { - List<ThreeSale> list = threeSaleMapper.listFirstTeam(start, count, uid); - if (list == null) { - list = new ArrayList<ThreeSale>(); - } - long countTotal = threeSaleMapper.countFirstTeam(uid); - return organizeTeam(countTotal, list); - } - - @Override - public JSONObject getMySecondTeam(long start, int count, Long uid) { - List<ThreeSale> list = threeSaleMapper.listSecondTeam(start, count, uid); - if (list == null) { - list = new ArrayList<ThreeSale>(); - } - long countTotal = threeSaleMapper.countSecondTeam(uid); - return organizeTeam(countTotal, list); - } - - public JSONObject organizeTeam(long count, List<ThreeSale> list) { - - JSONObject result = new JSONObject(); - - JSONArray resultArray = new JSONArray(); - - for (ThreeSale threeSale : list) { - JSONObject object = new JSONObject(); - SimpleDateFormat sdf = new SimpleDateFormat("MM.dd HH:mm"); - SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); - SimpleDateFormat formatYears = new SimpleDateFormat("yyyy"); - - Date todayTime = new Date(); - // 閭�璇穒d - object.put("inviteId", threeSale.getId()); - - // 鍔犲叆闃熷垪鏃堕棿 - Long createTime = threeSale.getCreateTime(); - Date inviteTime = new Date(createTime); - object.put("inviteTime", format.format(inviteTime) + " 鍔犲叆"); - - String memoName = ""; - ThreeSaleExtraInfo threeSaleExtraInfo = threeSale.getThreeSaleExtraInfo(); - if (threeSaleExtraInfo != null) { - if (!StringUtil.isNullOrEmpty(threeSaleExtraInfo.getNickname())) { - memoName = threeSaleExtraInfo.getNickname(); - } - } - object.put("memoName", memoName); - - String nickName = ""; - String portrait = ""; - Long lastLoginTime = null; - - UserInfo worker = threeSale.getWorker(); - if (worker != null) { - portrait = worker.getPortrait(); - lastLoginTime = worker.getLastLoginTime(); - nickName = worker.getNickName(); - } - object.put("nickName", nickName); - object.put("portrait", portrait); - - int state = 0; - String fontColor1 = "#888888"; - String fontColor2 = "#F14242"; - - JSONArray array = new JSONArray(); - if (threeSale.getState()) { - state = 1; - if (lastLoginTime == null) { - lastLoginTime = threeSale.getCreateTime(); - } - - JSONObject contentJson = new JSONObject(); - contentJson.put("color", fontColor1); - - if (formatYears.format(todayTime).equals(formatYears.format(lastLoginTime))) { - // 鏈勾 - contentJson.put("content", "鏈�杩戠櫥褰� " + sdf.format(lastLoginTime)); - } else { - // 寰�骞� - contentJson.put("content", "鏈�杩戠櫥褰� " + format.format(lastLoginTime)); - } - - array.add(contentJson); - - } else if (threeSale.getExpire() != null - && (threeSale.getExpire() == 1 || threeSale.getExpire().equals(1))) { - state = 2; - JSONObject contentJson = new JSONObject(); - contentJson.put("color", fontColor1); - contentJson.put("content", "宸茬粡鑴辩閭�璇峰叧绯�"); - array.add(contentJson); - } else { - state = 0; - - Calendar c = Calendar.getInstance(); - c.setTime(inviteTime); - c.add(Calendar.DAY_OF_MONTH, 60);// 閭�璇蜂笉瓒呰繃60澶� - - long days = (c.getTimeInMillis() - todayTime.getTime()) / (1000 * 3600 * 24); - if (days < 0) { - days = 0; - } - - JSONObject contentJson1 = new JSONObject(); - contentJson1.put("color", fontColor1); - contentJson1.put("content", "灏嗕簬"); - - JSONObject contentJson2 = new JSONObject(); - contentJson2.put("color", fontColor2); - contentJson2.put("content", days + "澶�"); - - JSONObject contentJson3 = new JSONObject(); - contentJson3.put("color", fontColor1); - contentJson3.put("content", "鍚庤劚绂婚個璇峰叧绯�"); - - array.add(contentJson1); - array.add(contentJson2); - array.add(contentJson3); - } - - object.put("state", state); - object.put("recentMsg", array); - - resultArray.add(object); - } - - result.put("count", count); - result.put("result_list", resultArray); - - return result; - } - - @Override - public List<ThreeSale> listByWorkerId(Long workerId) { - return threeSaleMapper.listByWorkerId(workerId); - } - - @Override - public int getSuccessRelationshipNum(Long uid) { - return threeSaleMapper.getSuccessRelationshipNum(uid); - } - - - @Override - @Transactional(rollbackFor = Exception.class) - public void bindInviteRelationship(Long workerId, Long bossId) throws ThreeSaleException { - if (workerId == null || bossId == null) - throw new ThreeSaleException(1, "鐢ㄦ埛淇℃伅涓虹┖"); - - // 鏂板缓绔嬬‘瀹氬叧绯� - ThreeSale threeSale = new ThreeSale(); - threeSale.setBoss(new UserInfo(bossId)); - threeSale.setWorker(new UserInfo(workerId)); - threeSale.setState(true); - threeSale.setExpire(ThreeSale.EXPIRE_NORMAL); - threeSale.setSucceedTime(java.lang.System.currentTimeMillis()); - threeSale.setCreateTime(java.lang.System.currentTimeMillis()); - threeSale.setUpdateTime(java.lang.System.currentTimeMillis()); - threeSaleMapper.insertSelective(threeSale); - - // 閭�璇锋垚鍔燂細娑堟伅銆佺浉鍏冲鐞� - inviteSuccess(workerId, bossId); - } - - /** - * 閭�璇锋垚鍔� - */ - @Transactional - private void inviteSuccess(Long workerId, Long bossId) { - if (!Constant.IS_TEST) { - UserInviteMQMsg msg = new UserInviteMQMsg(bossId, workerId, null, new Date(), UserInviteMQMsg.STATE_SUCCESS); - Message message = MQMsgBodyFactory.create(MQTopicName.TOPIC_USER, UserTopicTagEnum.inviteSuccess, msg); - producer.send(message); - } - - executor.execute(new Runnable() { - @Override - public void run() { - try { // 閭�璇烽噾甯� - integralGetService.addInviteLevelOne(bossId, workerId); - } catch (Exception e) { - e.printStackTrace(); - } - - try { - // 鐩存帴绮変笣閭�璇锋垚鍔� - UserInfo invitee = userInfoService.selectByPKey(workerId); - userInviteMsgNotificationService.directInviteSuccess(bossId, invitee.getNickName(), - invitee.getPortrait(), new Date()); - - // 闂存帴绮変笣閭�璇锋垚鍔� - ThreeSale myBoss = threeSaleMapper.getMyBoss(bossId); - if (myBoss != null) { - UserInfo boss = userInfoService.selectByPKey(bossId); - userInviteMsgNotificationService.indirectInviteSuccess(myBoss.getBoss().getId(), - boss.getNickName(), invitee.getNickName(), invitee.getPortrait(), new Date()); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - - /** - * 鏍规嵁閭�璇疯�呮煡璇㈠叧绯� - * - * @param workerId - * @return - */ - @Override - public ThreeSale getByWorkerId(Long workerId) { - return threeSaleMapper.getByWorkerId(workerId); - } - - - @Override - public ThreeSale selectByWorkerId(Long workerId) { - return threeSaleMapper.selectSuccessByWorkerId(workerId); - } - - @Override - public ThreeSale getNearRelationByBossIdAndWorkerId(Long bossId, Long workerId) { - return threeSaleMapper.getNearRelationByBossIdAndWorkerId(bossId, workerId); - } - - @Override - public List<ThreeSale> getSuccessByDate(Long bossId, Long minTime, Long maxTime) { - return threeSaleMapper.getSuccessByDate(bossId, minTime, maxTime); - } - - @Override - public List<ThreeSale> listFirstTeam(long start, int count, Long uid) { - return threeSaleMapper.listFirstTeam(start, count, uid); - } - - @Override - public List<ThreeSale> listSecondTeam(long start, int count, Long uid) { - return threeSaleMapper.listSecondTeam(start, count, uid); - } - - @Override - public long countFirstTeam(Long uid) { - return threeSaleMapper.countFirstTeam(uid); - } - - @Override - public long countSecondTeam(Long uid) { - return threeSaleMapper.countSecondTeam(uid); - } - - - @Override - public ThreeSale selectLatestByWorkerIdAndState(Long workerId, int state) { - return threeSaleMapper.selectLatestByWorkerIdAndState(workerId, state); - } - - @Override - public ThreeSale getByWorkerIdAndTime(Long workerId, long time) { - return threeSaleMapper.getByWorkerIdAndTime(workerId, time); - } - - @Override - public void inviteSeparate(Long workerId, Long bossId) { - threeSaleMapper.inviteSeparate(workerId, bossId); - } - - @Override - public long getTeamOrderNumByWorkerId(Long workerId) { - return threeSaleMapper.getTeamOrderNumByWorkerId(workerId); - } - - @Override - public List<ThreeSale> getValidWorkerIdsByTime(Long bossId, long limitTime) { - return threeSaleMapper.getValidWorkerIdsByTime(bossId, limitTime); - } - - @Override - public List<ThreeSale> getMyBossDeepList(Long uid, int deep) { - - List<ThreeSale> deepList = new ArrayList<>(); - ThreeSale boss = getMyBoss(uid); - while (deep > 0 && boss != null) { - deep--; - deepList.add(boss); - boss = getMyBoss(boss.getBoss().getId()); - } - - return deepList; - } - - @Override - public List<ThreeSale> getMyBossDeepList(Long uid) { - //TODO 闇�瑕佹洿鍔犵畝渚跨殑鏂瑰紡澶勭悊 - return getMyBossDeepList(uid, 100); - } - -} +package com.yeshi.fanli.service.impl.user.invite; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +import javax.annotation.Resource; + +import com.yeshi.fanli.entity.SystemEnum; +import com.yeshi.fanli.entity.SystemFunction; +import com.yeshi.fanli.util.SystemInfoUtil; +import org.springframework.context.annotation.Lazy; +import org.springframework.core.task.TaskExecutor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.aliyun.openservices.ons.api.Message; +import com.aliyun.openservices.ons.api.Producer; +import com.yeshi.fanli.dao.mybatis.ThreeSaleMapper; +import com.yeshi.fanli.dao.mybatis.UserInfoMapper; +import com.yeshi.fanli.dto.mq.user.UserTopicTagEnum; +import com.yeshi.fanli.dto.mq.user.body.UserInviteMQMsg; +import com.yeshi.fanli.entity.bus.user.ThreeSale; +import com.yeshi.fanli.entity.bus.user.ThreeSaleExtraInfo; +import com.yeshi.fanli.entity.bus.user.UserInfo; +import com.yeshi.fanli.exception.user.ThreeSaleException; +import com.yeshi.fanli.log.LogHelper; +import com.yeshi.fanli.service.inter.order.config.HongBaoManageService; +import com.yeshi.fanli.service.inter.user.UserActiveLogService; +import com.yeshi.fanli.service.inter.user.UserInfoExtraService; +import com.yeshi.fanli.service.inter.user.UserInfoService; +import com.yeshi.fanli.service.inter.user.integral.IntegralGetService; +import com.yeshi.fanli.service.inter.user.invite.MsgInviteDetailService; +import com.yeshi.fanli.service.inter.user.invite.TeamFansInfoService; +import com.yeshi.fanli.service.inter.user.invite.ThreeSaleExtraInfoSerivce; +import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce; +import com.yeshi.fanli.service.inter.user.invite.UserInviteMsgNotificationService; +import com.yeshi.fanli.service.manger.msg.RocketMQManager; +import com.yeshi.fanli.util.Constant; +import com.yeshi.fanli.util.StringUtil; +import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory; +import com.yeshi.fanli.util.rocketmq.MQTopicName; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +@Service +public class ThreeSaleSerivceImpl implements ThreeSaleSerivce { + + @Resource + private UserInfoService userInfoService; + + @Resource + private ThreeSaleMapper threeSaleMapper; + + @Resource + private UserInviteMsgNotificationService userInviteMsgNotificationService; + + @Lazy + @Resource + private IntegralGetService integralGetService; + + @Lazy + @Resource + private TeamFansInfoService teamFansInfoService; + + + @Resource(name = "taskExecutor") + private TaskExecutor executor; + + @Resource + private RocketMQManager rocketMQManager; + + + public UserInfo getBoss(final long uid) { + return threeSaleMapper.selectBoss(uid); + } + + @Transactional(rollbackFor = Exception.class) + public void bind(UserInfo worker, UserInfo inviter) throws ThreeSaleException { + if (worker == null || inviter == null) + throw new ThreeSaleException(1, "鐢ㄦ埛淇℃伅涓虹┖"); + + //鍒ゆ柇鏄惁瀛樺湪閭�璇锋潈闄� + SystemEnum system1 = userInfoService.getUserSystem(worker.getId()); + if (!SystemInfoUtil.hasFunctions(system1, SystemFunction.threeSale)) + throw new ThreeSaleException(2, "鏃犳硶寤虹珛閭�璇峰叧绯�"); + + SystemEnum system2 = userInfoService.getUserSystem(inviter.getId()); + if (!SystemInfoUtil.hasFunctions(system2, SystemFunction.threeSale)) + throw new ThreeSaleException(2, "鏃犳硶寤虹珛閭�璇峰叧绯�"); + + if (system1 != system2) + throw new ThreeSaleException(2, "鏃犳硶寤虹珛閭�璇峰叧绯�"); + + if (worker.getId() == null)// 璇ョ敤鎴疯繕涓嶅瓨鍦� + { + // 淇濆瓨鐢ㄦ埛 + UserInfo inviteeUser = userInfoService.addUser(worker, worker.getSystem()); + if (inviteeUser == null) + throw new ThreeSaleException(2, "鍒涘缓鐢ㄦ埛澶辫触"); + // 淇濆瓨鍏崇郴 + ThreeSale threeSale = new ThreeSale(); + threeSale.setBoss(inviter); + threeSale.setCreateTime(java.lang.System.currentTimeMillis()); + threeSale.setExpire(ThreeSale.EXPIRE_NORMAL); + threeSale.setState(false); + threeSale.setUpdateTime(java.lang.System.currentTimeMillis()); + threeSale.setWorker(inviteeUser); + threeSaleMapper.insertSelective(threeSale); + + } else {// 鏄凡缁忓瓨鍦ㄧ殑鐢ㄦ埛 + if (worker.getId().longValue() == inviter.getId()) + throw new ThreeSaleException(4, "涓嶈兘缁戝畾鑷繁"); + + worker = userInfoService.selectByPKey(worker.getId()); + + // 鐢ㄦ埛宸茬粡瀛樺湪鎴戜滑鐨勭敤鎴峰簱涓� + if (worker.getLastLoginTime() == null || worker.getLastLoginTime() == 0L) { + // 鐢ㄦ埛鏈櫥褰� + int outOfDateCount = 0;// 杩囨湡鏁伴噺 + // 鏌ヨ閭�璇峰叧绯� + List<ThreeSale> list = listByWorkerId(worker.getId()); + if (list != null && list.size() > 0) { + for (ThreeSale ts : list) { + if (!ts.getState() && ts.getExpire() == ThreeSale.EXPIRE_BREAK) { + outOfDateCount++; + } + } + // 鍏ㄩ儴鏄け鏁堢姸鎬� + if (outOfDateCount == list.size()) { + // 鍙互纭畾鍏崇郴 + ThreeSale threeSale = new ThreeSale(); + threeSale.setBoss(inviter); + threeSale.setCreateTime(java.lang.System.currentTimeMillis()); + threeSale.setExpire(ThreeSale.EXPIRE_NORMAL); + threeSale.setState(false); + threeSale.setUpdateTime(java.lang.System.currentTimeMillis()); + threeSale.setWorker(worker); + threeSaleMapper.insertSelective(threeSale); + } else { + // 杩樺瓨鍦ㄦ湁鏁堢殑閭�璇凤紝鍒欎笉鍋氬鐞� + } + } else { + // 鐢ㄦ埛鏈櫥褰�,鍙堜笉瀛樺湪閭�璇峰叧绯�,涓嶅仛澶勭悊 + } + } else { + // 宸茬粡鐧诲綍锛岃�屼笖娌℃湁涓婁笅绾у叧绯绘垨鑰呬笂涓嬬骇鍏崇郴鏈敓鏁堬紝鍒欑粦瀹氬叧绯� + List<ThreeSale> list = threeSaleMapper.listByWorkerId(worker.getId()); + // 鍒犻櫎鏃犳晥鐨� + if (list != null) + for (int i = 0; i < list.size(); i++) { + if (list.get(i).getState() != null && list.get(i).getState() == false + && list.get(i).getExpire() == ThreeSale.EXPIRE_BREAK) {// 杩囨湡鐨� + list.remove(i); + i--; + } + } + // 鏌ヨ涓婄骇鏄惁鏈夊拰鐜板湪涓婄骇涓�鏍风殑 + if (list == null || list.size() == 0)// 灏氭湭纭珛鍏崇郴锛屽缓绔嬪叧绯� + { + ThreeSale ts = new ThreeSale(); + ts.setBoss(inviter); + ts.setCreateTime(System.currentTimeMillis()); + ts.setExpire(ThreeSale.EXPIRE_NORMAL); + ts.setState(true); + ts.setSucceedTime(System.currentTimeMillis()); + ts.setWorker(worker); + threeSaleMapper.insertSelective(ts); + } else { + if (!list.get(0).getState() && list.get(0).getExpire() == ThreeSale.EXPIRE_NORMAL + && list.get(0).getBoss().getId() == inviter.getId().longValue()) {// 鏈敓鏁堢殑涓婄骇鍜岀幇鍦ㄤ笂绾т竴鏍峰氨鐢熸晥 + ThreeSale update = new ThreeSale(list.get(0).getId()); + update.setState(true); + update.setSucceedTime(System.currentTimeMillis()); + threeSaleMapper.updateByPrimaryKeySelective(update); + } + } + } + } + } + + @Transactional + public void effective(UserInfo worker) { + List<ThreeSale> list = threeSaleMapper.listByWorkerId(worker.getId()); + if (list != null) + for (int i = 0; i < list.size(); i++) { + if (list.get(i).getState() != null && list.get(i).getState() == false + && list.get(i).getExpire() == ThreeSale.EXPIRE_NORMAL) { + ; + } else { + list.remove(i); + i--; + } + } + if (list.size() > 0) { + ThreeSale oldSale = list.get(0); + + ThreeSale update = new ThreeSale(list.get(0).getId()); + update.setState(true); + update.setSucceedTime(System.currentTimeMillis()); + threeSaleMapper.updateByPrimaryKeySelective(update); + + oldSale.setState(update.getState()); + oldSale.setSucceedTime(update.getSucceedTime()); + + // 涓嶄互閭�璇蜂汉鏁拌绠楃瓑绾� + // if (inviter != null) + // reComputeUserRank(inviter.getId()); + // 娣诲姞鍒伴槦鍒� + inviteSuccess(worker.getId(), oldSale.getBoss().getId()); + } + } + + @Override + public List<ThreeSale> listFirstTeamQuery(long start, int count, Long uid, Integer state, String startTime, + String endTime, Integer validState) { + return threeSaleMapper.listFirstTeamQuery(start, count, uid, state, startTime, endTime, validState); + } + + @Override + public long countFirstTeamQuery(Long uid, Integer state, String startTime, String endTime, Integer validState) { + return threeSaleMapper.countFirstTeamQuery(uid, state, startTime, endTime, validState); + } + + @Override + public List<ThreeSale> listSecondTeamQuery(long start, int count, Long uid, Integer state, String startTime, + String endTime, Integer validState) { + return threeSaleMapper.listSecondTeamQuery(start, count, uid, state, startTime, endTime, validState); + } + + @Override + public long countSecondTeamQuery(Long uid, Integer state, String startTime, String endTime, Integer validState) { + return threeSaleMapper.countSecondTeamQuery(uid, state, startTime, endTime, validState); + } + + @Override + public List<ThreeSale> listSuperiorQuery(long start, int count, Integer state, Long uid) { + return threeSaleMapper.listSuperiorQuery(start, count, state, uid); + } + + @Override + public long countSuperiorQuery(Integer state, Long uid) { + return threeSaleMapper.countSuperiorQuery(state, uid); + } + + @Override + public ThreeSale getMyBoss(Long uid) { + return threeSaleMapper.getMyBoss(uid); + } + + @Override + public ThreeSale selectByPrimaryKey(Long id) { + return threeSaleMapper.selectByPrimaryKey(id); + } + + @Override + public List<ThreeSale> listbyIdAndBossId(Long id, Long uid, Integer expire) { + return threeSaleMapper.listbyIdAndBossId(id, uid, expire); + } + + @Override + public JSONObject getMyFirstTeam(long start, int count, Long uid) { + List<ThreeSale> list = threeSaleMapper.listFirstTeam(start, count, uid, null); + if (list == null) { + list = new ArrayList<ThreeSale>(); + } + long countTotal = threeSaleMapper.countFirstTeam(uid, null); + return organizeTeam(countTotal, list); + } + + @Override + public JSONObject getMySecondTeam(long start, int count, Long uid) { + List<ThreeSale> list = threeSaleMapper.listSecondTeam(start, count, uid, null); + if (list == null) { + list = new ArrayList<ThreeSale>(); + } + long countTotal = threeSaleMapper.countSecondTeam(uid, null); + return organizeTeam(countTotal, list); + } + + public JSONObject organizeTeam(long count, List<ThreeSale> list) { + + JSONObject result = new JSONObject(); + + JSONArray resultArray = new JSONArray(); + + for (ThreeSale threeSale : list) { + JSONObject object = new JSONObject(); + SimpleDateFormat sdf = new SimpleDateFormat("MM.dd HH:mm"); + SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); + SimpleDateFormat formatYears = new SimpleDateFormat("yyyy"); + + Date todayTime = new Date(); + // 閭�璇穒d + object.put("inviteId", threeSale.getId()); + + // 鍔犲叆闃熷垪鏃堕棿 + Long createTime = threeSale.getCreateTime(); + Date inviteTime = new Date(createTime); + object.put("inviteTime", format.format(inviteTime) + " 鍔犲叆"); + + String memoName = ""; + ThreeSaleExtraInfo threeSaleExtraInfo = threeSale.getThreeSaleExtraInfo(); + if (threeSaleExtraInfo != null) { + if (!StringUtil.isNullOrEmpty(threeSaleExtraInfo.getNickname())) { + memoName = threeSaleExtraInfo.getNickname(); + } + } + object.put("memoName", memoName); + + String nickName = ""; + String portrait = ""; + Long lastLoginTime = null; + + UserInfo worker = threeSale.getWorker(); + if (worker != null) { + portrait = worker.getPortrait(); + lastLoginTime = worker.getLastLoginTime(); + nickName = worker.getNickName(); + } + object.put("nickName", nickName); + object.put("portrait", portrait); + + int state = 0; + String fontColor1 = "#888888"; + String fontColor2 = "#F14242"; + + JSONArray array = new JSONArray(); + if (threeSale.getState()) { + state = 1; + if (lastLoginTime == null) { + lastLoginTime = threeSale.getCreateTime(); + } + + JSONObject contentJson = new JSONObject(); + contentJson.put("color", fontColor1); + + if (formatYears.format(todayTime).equals(formatYears.format(lastLoginTime))) { + // 鏈勾 + contentJson.put("content", "鏈�杩戠櫥褰� " + sdf.format(lastLoginTime)); + } else { + // 寰�骞� + contentJson.put("content", "鏈�杩戠櫥褰� " + format.format(lastLoginTime)); + } + + array.add(contentJson); + + } else if (threeSale.getExpire() != null + && (threeSale.getExpire() == 1 || threeSale.getExpire().equals(1))) { + state = 2; + JSONObject contentJson = new JSONObject(); + contentJson.put("color", fontColor1); + contentJson.put("content", "宸茬粡鑴辩閭�璇峰叧绯�"); + array.add(contentJson); + } else { + state = 0; + + Calendar c = Calendar.getInstance(); + c.setTime(inviteTime); + c.add(Calendar.DAY_OF_MONTH, 60);// 閭�璇蜂笉瓒呰繃60澶� + + long days = (c.getTimeInMillis() - todayTime.getTime()) / (1000 * 3600 * 24); + if (days < 0) { + days = 0; + } + + JSONObject contentJson1 = new JSONObject(); + contentJson1.put("color", fontColor1); + contentJson1.put("content", "灏嗕簬"); + + JSONObject contentJson2 = new JSONObject(); + contentJson2.put("color", fontColor2); + contentJson2.put("content", days + "澶�"); + + JSONObject contentJson3 = new JSONObject(); + contentJson3.put("color", fontColor1); + contentJson3.put("content", "鍚庤劚绂婚個璇峰叧绯�"); + + array.add(contentJson1); + array.add(contentJson2); + array.add(contentJson3); + } + + object.put("state", state); + object.put("recentMsg", array); + + resultArray.add(object); + } + + result.put("count", count); + result.put("result_list", resultArray); + + return result; + } + + @Override + public List<ThreeSale> listByWorkerId(Long workerId) { + return threeSaleMapper.listByWorkerId(workerId); + } + + @Override + public int getSuccessRelationshipNum(Long uid) { + return threeSaleMapper.getSuccessRelationshipNum(uid); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void bindInviteRelationship(Long workerId, Long bossId) throws ThreeSaleException { + if (workerId == null || bossId == null) + throw new ThreeSaleException(1, "鐢ㄦ埛淇℃伅涓虹┖"); + //鍒ゆ柇鏄惁瀛樺湪閭�璇锋潈闄� + SystemEnum system1 = userInfoService.getUserSystem(workerId); + if (!SystemInfoUtil.hasFunctions(system1, SystemFunction.threeSale)) + throw new ThreeSaleException(2, "鏃犳硶寤虹珛閭�璇峰叧绯�"); + + SystemEnum system2 = userInfoService.getUserSystem(bossId); + if (!SystemInfoUtil.hasFunctions(system2, SystemFunction.threeSale)) + throw new ThreeSaleException(2, "鏃犳硶寤虹珛閭�璇峰叧绯�"); + + if (system1 != system2) + throw new ThreeSaleException(2, "鏃犳硶寤虹珛閭�璇峰叧绯�"); + + // 鏂板缓绔嬬‘瀹氬叧绯� + ThreeSale threeSale = new ThreeSale(); + threeSale.setBoss(new UserInfo(bossId)); + threeSale.setWorker(new UserInfo(workerId)); + threeSale.setState(true); + threeSale.setExpire(ThreeSale.EXPIRE_NORMAL); + threeSale.setSucceedTime(java.lang.System.currentTimeMillis()); + threeSale.setCreateTime(java.lang.System.currentTimeMillis()); + threeSale.setUpdateTime(java.lang.System.currentTimeMillis()); + threeSaleMapper.insertSelective(threeSale); + + // 閭�璇锋垚鍔燂細娑堟伅銆佺浉鍏冲鐞� + inviteSuccess(workerId, bossId); + } + + /** + * 閭�璇锋垚鍔� + */ + @Transactional + private void inviteSuccess(Long workerId, Long bossId) { + // 鍚屾绮変笣娑堟伅 + teamFansInfoService.addFansInfo(workerId, bossId, new Date()); + + if (!Constant.IS_TEST) { + UserInviteMQMsg msg = new UserInviteMQMsg(bossId, workerId, null, new Date(), + UserInviteMQMsg.STATE_SUCCESS); + Message message = MQMsgBodyFactory.create(MQTopicName.TOPIC_USER, UserTopicTagEnum.inviteSuccess, msg); + message.setStartDeliverTime(java.lang.System.currentTimeMillis() + 5000); + rocketMQManager.sendNormalMsg(message, 5000L, null); + } + + executor.execute(new Runnable() { + @Override + public void run() { + try { // 閭�璇烽噾甯� + integralGetService.addInviteLevelOne(bossId, workerId); + } catch (Exception e) { + LogHelper.error(e); + } + + // 閭�璇锋垚鍔熸秷鎭� + try { + // 鐩存帴绮変笣閭�璇锋垚鍔� + UserInfo invitee = userInfoService.selectByPKey(workerId); + userInviteMsgNotificationService.directInviteSuccess(bossId, invitee.getNickName(), + invitee.getPortrait(), new Date()); + + // 闂存帴绮変笣閭�璇锋垚鍔� + ThreeSale myBoss = threeSaleMapper.getMyBoss(bossId); + if (myBoss != null) { + UserInfo boss = userInfoService.selectByPKey(bossId); + userInviteMsgNotificationService.indirectInviteSuccess(myBoss.getBoss().getId(), + boss.getNickName(), invitee.getNickName(), invitee.getPortrait(), new Date()); + } + } catch (Exception e) { + LogHelper.error(e); + } + } + }); + } + + /** + * 鏍规嵁閭�璇疯�呮煡璇㈠叧绯� + * + * @param workerId + * @return + */ + @Override + public ThreeSale getByWorkerId(Long workerId) { + return threeSaleMapper.getByWorkerId(workerId); + } + + @Override + public ThreeSale selectByWorkerId(Long workerId) { + return threeSaleMapper.selectSuccessByWorkerId(workerId); + } + + @Override + public ThreeSale getNearRelationByBossIdAndWorkerId(Long bossId, Long workerId) { + return threeSaleMapper.getNearRelationByBossIdAndWorkerId(bossId, workerId); + } + + @Override + public List<ThreeSale> getSuccessByDate(Long bossId, Long minTime, Long maxTime) { + return threeSaleMapper.getSuccessByDate(bossId, minTime, maxTime); + } + + @Override + public List<ThreeSale> listFirstTeam(long start, int count, Long uid) { + return threeSaleMapper.listFirstTeam(start, count, uid, null); + } + + @Override + public List<ThreeSale> listSecondTeam(long start, int count, Long uid) { + return threeSaleMapper.listSecondTeam(start, count, uid, null); + } + + @Override + public List<ThreeSale> listFirstTeam(long start, int count, Long uid, List<Long> listId) { + return threeSaleMapper.listFirstTeam(start, count, uid, listId); + } + + @Override + public List<ThreeSale> listSecondTeam(long start, int count, Long uid, List<Long> listId) { + return threeSaleMapper.listSecondTeam(start, count, uid, listId); + } + + @Override + public long countFirstTeam(Long uid) { + return threeSaleMapper.countFirstTeam(uid, null); + } + + @Override + public long countSecondTeam(Long uid) { + return threeSaleMapper.countSecondTeam(uid, null); + } + + @Override + public long countFirstTeam(Long uid, List<Long> listId) { + return threeSaleMapper.countFirstTeam(uid, listId); + } + + @Override + public long countSecondTeam(Long uid, List<Long> listId) { + return threeSaleMapper.countSecondTeam(uid, listId); + } + + @Override + public long countFirstTeamByDate(Long uid, int dayType) { + return threeSaleMapper.countFirstTeamByDate(uid, dayType); + } + + @Override + public long countSecondTeamByDate(Long uid, int dayType) { + return threeSaleMapper.countSecondTeamByDate(uid, dayType); + } + + @Override + public ThreeSale selectLatestByWorkerIdAndState(Long workerId, int state) { + return threeSaleMapper.selectLatestByWorkerIdAndState(workerId, state); + } + + @Override + public ThreeSale getByWorkerIdAndTime(Long workerId, long time) { + return threeSaleMapper.getByWorkerIdAndTime(workerId, time); + } + + @Override + public void inviteSeparate(Long workerId, Long bossId) { + threeSaleMapper.inviteSeparate(workerId, bossId); + } + + @Override + public long getTeamOrderNumByWorkerId(Long workerId) { + return threeSaleMapper.getTeamOrderNumByWorkerId(workerId); + } + + @Override + public List<ThreeSale> getValidWorkerIdsByTime(Long bossId, long limitTime) { + return threeSaleMapper.getValidWorkerIdsByTime(bossId, limitTime); + } + + @Override + public List<ThreeSale> getMyBossDeepList(Long uid, int deep) { + + List<ThreeSale> deepList = new ArrayList<>(); + ThreeSale boss = getMyBoss(uid); + while (deep > 0 && boss != null) { + deep--; + deepList.add(boss); + boss = getMyBoss(boss.getBoss().getId()); + } + + return deepList; + } + + @Override + public List<ThreeSale> getMyBossDeepList(Long uid) { + // TODO 闇�瑕佹洿鍔犵畝渚跨殑鏂瑰紡澶勭悊 + return getMyBossDeepList(uid, 100); + } + + @Override + public Long getTopBoss(Long uid) { + Long bossUid = null; + UserInfo boss = getBoss(uid); + while (boss != null) { + bossUid = boss.getId(); + boss = getBoss(boss.getId()); + } + return bossUid; + } + + @Override + public List<ThreeSale> listAll(Date minTime, Date maxTime, int page, int pageSize) { + return threeSaleMapper.listAll(minTime == null ? null : minTime.getTime(), + maxTime == null ? null : maxTime.getTime(), (page - 1) * pageSize, pageSize); + } + + @Override + public long countAll(Date minTime, Date maxTime) { + return threeSaleMapper.countAll(minTime == null ? null : minTime.getTime(), + maxTime == null ? null : maxTime.getTime()); + } + + + @Override + public List<Long> getAllBossId() { + return threeSaleMapper.getAllBossId(); + } + +} -- Gitblit v1.8.0