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