From 9eeda0d3049b71877c373c04d65533939b5582ef Mon Sep 17 00:00:00 2001
From: yujian <yujian@123.com>
Date: 星期一, 02 九月 2019 09:55:55 +0800
Subject: [PATCH] getBoss方法只查询有效上级信息

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/hongbao/ThreeSaleSerivceImpl.java |  871 +++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 527 insertions(+), 344 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/hongbao/ThreeSaleSerivceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/hongbao/ThreeSaleSerivceImpl.java
index 1320154..b9c6f0a 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/hongbao/ThreeSaleSerivceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/hongbao/ThreeSaleSerivceImpl.java
@@ -1,45 +1,46 @@
 package com.yeshi.fanli.service.impl.hongbao;
 
-import java.io.Serializable;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
-import java.util.Map;
 
 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.yeshi.fanli.dao.mybatis.ThreeSaleMapper;
+import com.yeshi.fanli.dao.mybatis.UserInfoMapper;
+import com.yeshi.fanli.entity.bus.user.ThreeSale;
+import com.yeshi.fanli.entity.bus.user.ThreeSaleExtraInfo;
+import com.yeshi.fanli.entity.bus.user.UserActiveLog;
+import com.yeshi.fanli.entity.bus.user.UserInfo;
+import com.yeshi.fanli.exception.ThreeSaleException;
+import com.yeshi.fanli.log.LogHelper;
+import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService;
+import com.yeshi.fanli.service.inter.hongbao.ThreeSaleExtraInfoSerivce;
+import com.yeshi.fanli.service.inter.hongbao.ThreeSaleSerivce;
+import com.yeshi.fanli.service.inter.integral.IntegralGetService;
+import com.yeshi.fanli.service.inter.msg.MsgInviteDetailService;
+import com.yeshi.fanli.service.inter.msg.UserInviteMsgNotificationService;
+import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinOriginService;
+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.util.Constant;
+import com.yeshi.fanli.util.StringUtil;
+import com.yeshi.fanli.util.VersionUtil;
+import com.yeshi.fanli.util.cmq.ThreeSaleCMQManager;
 
 import net.sf.json.JSONArray;
 import net.sf.json.JSONObject;
 
-import org.hibernate.HibernateException;
-import org.hibernate.Query;
-import org.hibernate.SQLQuery;
-import org.hibernate.Session;
-import org.springframework.orm.hibernate4.HibernateCallback;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.yeshi.utils.NumberUtil;
-
-import com.yeshi.fanli.dao.mybatis.ThreeSaleMapper;
-import com.yeshi.fanli.dao.mybatis.UserInfoMapper;
-import com.yeshi.fanli.dao.user.ThreeSaleDao;
-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.service.inter.config.InviteGetMoneyService;
-import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService;
-import com.yeshi.fanli.service.inter.hongbao.ThreeSaleSerivce;
-import com.yeshi.fanli.service.inter.user.UserInfoService;
-import com.yeshi.fanli.util.Constant;
-import com.yeshi.fanli.util.StringUtil;
-
 @Service
 public class ThreeSaleSerivceImpl implements ThreeSaleSerivce {
-
-	@Resource
-	private ThreeSaleDao dao;
 
 	@Resource
 	private HongBaoManageService hongBaoManageService;
@@ -48,275 +49,249 @@
 	private UserInfoService userInfoService;
 
 	@Resource
-	private InviteGetMoneyService inviteGetMoneyService;
-
-	@Resource
 	private UserInfoMapper userInfoMapper;
-	
+
 	@Resource
 	private ThreeSaleMapper threeSaleMapper;
+
+	@Resource
+	private UserInviteMsgNotificationService userInviteMsgNotificationService;
+
+	@Resource
+	private MsgInviteDetailService msgInviteDetailService;
+
+	@Resource
+	private UserTaoLiJinOriginService userTaoLiJinOriginService;
+
+	@Resource
+	private UserActiveLogService userActiveLogService;
+
+	@Resource
+	private UserInfoExtraService userInfoExtraService;
+
+	@Resource
+	private ThreeSaleExtraInfoSerivce threeSaleExtraInfoSerivce;
+
 	
-	
-	
+	@Lazy
+	@Resource
+	private IntegralGetService integralGetService;
+
+	@Resource(name = "taskExecutor")
+	private TaskExecutor executor;
 
 	public UserInfo getBoss(final long uid) {
-		return (UserInfo) dao.excute(new HibernateCallback<UserInfo>() {
-			public UserInfo doInHibernate(Session session) throws HibernateException {
-				Query query = session.createQuery("select ts.boss FROM ThreeSale ts where ts.worker.id = ?");
-				query.setParameter(0, uid);
-				List<UserInfo> list = query.list();
-				if (list.size() > 0) {
-					return list.get(0);
+		return threeSaleMapper.selectBoss(uid);
+	}
+
+	@Transactional
+	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);
+
+			List<ThreeSale> listExpire = threeSaleMapper.getExpireRecord(inviter.getId(), inviteeUser.getId());
+			if (listExpire != null && listExpire.size() > 0) {
+				// 鍒犻櫎澶辨晥
+				for (ThreeSale saleExpire : listExpire) {
+					msgInviteDetailService.deleteByThreeSale(saleExpire);
 				}
-				return null;
+				// 鍒犻櫎宸插け鏁堝叧绯�
+				threeSaleMapper.deleteExpireRecord(inviter.getId(), inviteeUser.getId());
 			}
-		});
-	}
 
-	public int findInviteCount(final long id) {
+			// 鍒涘缓閫氱煡
+			userInviteMsgNotificationService.inviteScan(inviter.getId(), threeSale);
 
-		return (Integer) dao.excute(new HibernateCallback<Integer>() {
+		} else {// 鏄凡缁忓瓨鍦ㄧ殑鐢ㄦ埛
+			if (worker.getId().longValue() == inviter.getId())
+				throw new ThreeSaleException(4, "涓嶈兘缁戝畾鑷繁");
 
-			public Integer doInHibernate(Session session) throws HibernateException {
-				SQLQuery query = session.createSQLQuery(
-						"SELECT COUNT(*) from `yeshi_ec_threesale` t1  RIGHT JOIN (SELECT t2.`worker_id` AS worker_id FROM `yeshi_ec_threesale` t2  WHERE t2.`boss_id`=? ) t3 ON t1.`boss_id`=t3.worker_id WHERE t1.`boss_id`=t3.worker_id ");
-				query.setParameter(0, id);
-				SQLQuery query2 = session
-						.createSQLQuery("SELECT COUNT(*) from `yeshi_ec_threesale` t4 WHERE t4.`boss_id`=?");
-				query2.setParameter(0, id);
-				int int1 = Integer.parseInt(query.uniqueResult() + "");
-				int int2 = Integer.parseInt(query2.uniqueResult() + "");
-				return int1 + int2;
+			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_OUTOFDATE) {
+							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);
+
+						// 鍒犻櫎宸插け鏁堝叧绯�
+						threeSaleMapper.deleteExpireRecord(inviter.getId(), worker.getId());
+
+						List<ThreeSale> listExpire = threeSaleMapper.getExpireRecord(inviter.getId(), worker.getId());
+						if (listExpire != null && listExpire.size() > 0) {
+							// 鍒犻櫎鍘嗗彶閫氱煡
+							for (ThreeSale saleExpire : listExpire) {
+								msgInviteDetailService.deleteByThreeSale(saleExpire);
+							}
+							// 鍒犻櫎宸插け鏁堝叧绯�
+							threeSaleMapper.deleteExpireRecord(inviter.getId(), worker.getId());
+						}
+
+						userInviteMsgNotificationService.inviteScan(inviter.getId(), threeSale);
+						// threeSaleSerivce.bind(invitee, inviter);
+
+					} 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_OUTOFDATE) {// 杩囨湡鐨�
+							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);
+					ThreeSaleCMQManager.getInstance().addThreeSaleMsg(ts);
+					userInviteMsgNotificationService.inviteSuccess(inviter.getId(), 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);
+						ThreeSaleCMQManager.getInstance().addThreeSaleMsg(list.get(0));// 娣诲姞閫氱煡
+						userInviteMsgNotificationService.inviteSuccess(inviter.getId(), list.get(0));
+					}
+				}
 			}
-		});
+		}
 	}
 
 	@Transactional
-	public void bind(UserInfo invitee, UserInfo inviter) {
-		ThreeSale threeSale = new ThreeSale();
-		threeSale.setBoss(inviter);
-		threeSale.setWorker(invitee);
-		threeSale.setState(false);
-		threeSale.setCreateTime(System.currentTimeMillis());
-		dao.save(threeSale);
-	}
-
-	@Transactional
-	public void effective(UserInfo invitee) {
-		List<ThreeSale> list = dao.list("from ThreeSale ts where ts.worker.id = ? ",
-				new Serializable[] { invitee.getId() });
+	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 threeSale = list.get(0);
-			UserInfo inviter = threeSale.getBoss();
-			threeSale.setState(true);
-			dao.update(threeSale);
-			if (inviter != null)
-				reComputeUserRank(inviter.getId());
-			// }
-			// });
+			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());
+
+			UserInfo inviter = list.get(0).getBoss();
+			// 涓嶄互閭�璇蜂汉鏁拌绠楃瓑绾�
+			// if (inviter != null)
+			// reComputeUserRank(inviter.getId());
+			// 娣诲姞鍒伴槦鍒�
+			ThreeSaleCMQManager.getInstance().addThreeSaleMsg(oldSale);
+			// 閫氱煡
+			userInviteMsgNotificationService.inviteSuccess(inviter.getId(), oldSale);
 		}
-	}
-
-	@Transactional
-	public void validateTwentyFour() {
-		dao.excute(new HibernateCallback() {
-			@Override
-			public Object doInHibernate(Session session) throws HibernateException {
-				long currentTimeMillis = System.currentTimeMillis();
-				Query query = session
-						.createQuery("delete from ThreeSale ts where ts.state = ? and (?-ts.createTime) > 86400000");
-				query.setParameter(0, false);
-				query.setParameter(1, currentTimeMillis);
-				query.executeUpdate();
-				return null;
-			}
-		});
-	}
-
-	@Transactional
-	public void validate365() {
-		dao.excute(new HibernateCallback() {
-			@Override
-			public Object doInHibernate(Session session) throws HibernateException {
-				long currentTimeMillis = System.currentTimeMillis();
-				Query query = session.createQuery("delete from ThreeSale ts where (?-ts.createTime) > 31536000000");
-				query.setParameter(0, currentTimeMillis);
-				query.executeUpdate();
-				return null;
-			}
-		});
-	}
-
-	@SuppressWarnings("unchecked")
-	@Override
-	public List<UserInfo> getFirstUsers(Long uid, int page) {
-		return (List<UserInfo>) dao.excute(new HibernateCallback<List<UserInfo>>() {
-
-			@Override
-			public List<UserInfo> doInHibernate(Session session) throws HibernateException {
-				Query query = session
-						.createSQLQuery(
-								"SELECT u.* FROM `yeshi_ec_threesale` t LEFT JOIN `yeshi_ec_user` u ON u.`id`=t.`worker_id` WHERE  t.`boss_id`=? ORDER BY t.`createtime` DESC")
-						.addEntity(UserInfo.class);
-				query.setParameter(0, uid);
-				query.setFirstResult((page - 1) * Constant.PAGE_SIZE).setMaxResults(Constant.PAGE_SIZE);
-				return query.list();
-			}
-		});
-
-	}
-
-	@SuppressWarnings("unchecked")
-	@Override
-	public List<UserInfo> getSecondUsers(Long uid, int page) {
-		return (List<UserInfo>) dao.excute(new HibernateCallback<List<UserInfo>>() {
-
-			@Override
-			public List<UserInfo> doInHibernate(Session session) throws HibernateException {
-				Query query = session
-						.createSQLQuery(
-								"SELECT u.* FROM `yeshi_ec_threesale` t LEFT JOIN yeshi_ec_threesale t1 ON t1.`boss_id`=t.`worker_id` LEFT JOIN `yeshi_ec_user` u ON u.`id`=t1.`worker_id` WHERE  t.`boss_id`=? AND u.`id` IS NOT NULL GROUP BY u.`id` ORDER BY t.`createtime` DESC")
-						.addEntity(UserInfo.class);
-				query.setParameter(0, uid);
-				query.setFirstResult((page - 1) * Constant.PAGE_SIZE).setMaxResults(Constant.PAGE_SIZE);
-				return query.list();
-			}
-		});
-	}
-
-	@Override
-	public List<ThreeSale> getLastestThreeSaleList(int page, String key) {
-		if (NumberUtil.isNumeric(key)) {
-			Long uid = Long.parseLong(key);
-			int start = (page - 1) * Constant.PAGE_SIZE;
-			List<ThreeSale> list = dao.list(
-					"from ThreeSale ts where ts.boss.nickName like ? or ts.boss.id = ? or ts.worker.nickName like ? or ts.worker.id = ? order by ts.createTime desc",
-					start, Constant.PAGE_SIZE, new Serializable[] { "%" + key + "%", uid, "%" + key + "%", uid });
-			return list;
-		}
-		int start = (page - 1) * Constant.PAGE_SIZE;
-		List<ThreeSale> list = dao.list(
-				"from ThreeSale ts where ts.boss.nickName like ? or ts.worker.nickName like ? order by ts.createTime desc",
-				start, Constant.PAGE_SIZE, new Serializable[] { "%" + key + "%", "%" + key + "%" });
-		return list;
-
-	}
-
-	@Override
-	public int getLastestThreeSaleCount(String key) {
-		if (NumberUtil.isNumeric(key)) {
-			long lk = Long.parseLong(key);
-			return (int) dao.getCount(
-					"select count(*) from ThreeSale ts where ts.boss.id = ? or ts.worker.id = ? or ts.boss.nickName like ? or ts.worker.nickName like ?",
-					new Serializable[] { lk, lk, "%" + key + "%", "%" + key + "%" });
-		}
-		Long lcount = dao.getCount(
-				"select count(*) from ThreeSale ts where ts.boss.nickName like ? or ts.worker.nickName like ?",
-				new Serializable[] { "%" + key + "%", "%" + key + "%" });
-		return lcount.intValue();
-
 	}
 
 	@Override
 	public long getFirstUsersCount(Long uid) {
-		return (Long) dao.excute(new HibernateCallback<Long>() {
-
-			@Override
-			public Long doInHibernate(Session session) throws HibernateException {
-				Query query = session.createSQLQuery(
-						"SELECT count(u.id) FROM `yeshi_ec_threesale` t LEFT JOIN `yeshi_ec_user` u ON u.`id`=t.`worker_id` WHERE  t.`boss_id`=?");
-				query.setParameter(0, uid);
-				Object count = query.uniqueResult();
-				return Long.parseLong(count + "");
-			}
-		});
+		return threeSaleMapper.countFirstTeam(uid, null);
 	}
 
 	@Override
 	public long getSecondUsersCount(Long uid) {
-		return (Long) dao.excute(new HibernateCallback<Long>() {
-
-			@Override
-			public Long doInHibernate(Session session) throws HibernateException {
-				Query query = session.createSQLQuery(
-						"SELECT count(1) FROM `yeshi_ec_threesale` t LEFT JOIN yeshi_ec_threesale t1 ON t1.`boss_id`=t.`worker_id` LEFT JOIN `yeshi_ec_user` u ON u.`id`=t1.`worker_id` WHERE  t.`boss_id`=? AND u.`id` IS NOT NULL");
-				query.setParameter(0, uid);
-				Object count = query.uniqueResult();
-				return Long.parseLong(count + "");
-			}
-		});
+		return threeSaleMapper.countSecondTeam(uid, null);
 	}
 
 	@Override
-	public void reComputeUserRank(Long uid) {
-		int myFirstTeamCount = inviteGetMoneyService.myFirstTeamCount(uid + "");
-		int mySecondTeamCount = inviteGetMoneyService.mySecondTeamCount(uid + "");
-		int count = myFirstTeamCount + mySecondTeamCount;
-		UserInfo user = userInfoService.getUserById(uid);
-		if (user == null)
-			return;
-
-		Map<String, String> convertMap = hongBaoManageService.convertMap();
-		int tong = Integer.parseInt(convertMap.get("sale_tong"));
-		int yin = Integer.parseInt(convertMap.get("sale_yin"));
-		int jin = Integer.parseInt(convertMap.get("sale_jin"));
-		int rank = user.getRank();
-		if (count >= jin) {
-			rank = 3;
-		} else if (count >= yin) {
-			rank = 2;
-		} else if (count >= tong) {
-			rank = 1;
-		}
-
-		if (rank > user.getRank()) {
-			// 鏇存柊Rank
-			UserInfo userInfo = new UserInfo(uid);
-			userInfo.setRank(rank);
-			userInfoMapper.updateByPrimaryKeySelective(userInfo);
-		}
-
-	}
-
-	@Override
-	public List<ThreeSale> queryMyFirstTeamList(int start, int count, String key, Long bossId){
+	public List<ThreeSale> queryMyFirstTeamList(int start, int count, String key, Long bossId) {
 		return threeSaleMapper.queryMyFirstTeamList(start, count, key, bossId);
 	}
-	
+
 	@Override
-	public long queryCountMyFirstTeamList(String key, Long bossId){
+	public long queryCountMyFirstTeamList(String key, Long bossId) {
 		return threeSaleMapper.queryCountMyFirstTeamList(key, bossId);
 	}
-	
+
 	@Override
-	public List<ThreeSale> queryMySecondTeamList(int start, int count, String key, Long bossId){
+	public List<ThreeSale> queryMySecondTeamList(int start, int count, String key, Long bossId) {
 		return threeSaleMapper.queryMySecondTeamList(start, count, key, bossId);
 	}
-	
+
 	@Override
-	public long queryCountMySecondTeamList(String key, Long bossId){
+	public long queryCountMySecondTeamList(String key, Long bossId) {
 		return threeSaleMapper.queryCountMySecondTeamList(key, bossId);
 	}
-	
-	
+
 	@Override
-	public int deleteByPrimaryKey(Long id){
+	public int deleteByPrimaryKey(Long id) {
 		return threeSaleMapper.deleteByPrimaryKey(id);
 	}
-	
+
 	@Override
-	public  List<Long> queryLongTimeFailed(int daysNum){
+	public List<Long> queryLongTimeFailed(int daysNum) {
 		return threeSaleMapper.queryLongTimeFailed(daysNum);
 	}
-	
-	
+
 	@Override
-	public List<ThreeSale> queryLongTimeSuccess(int daysNum){
+	public List<ThreeSale> queryLongTimeSuccess(int daysNum) {
 		return threeSaleMapper.queryLongTimeSuccess(daysNum);
 	}
-	
+
 	@Override
-	public int updateExpire(List<Long> list){
+	public int updateExpire(List<Long> list) {
 		return threeSaleMapper.updateExpire(list);
 	}
 
@@ -353,96 +328,76 @@
 	}
 
 	@Override
-	public List<ThreeSale> listFirstTeam(long start, int count, Long uid) {
-		return threeSaleMapper.listFirstTeam(start, count, uid);
-	}
-
-	@Override
 	public long countFirstTeam(Long uid, Integer state) {
 		return threeSaleMapper.countFirstTeam(uid, state);
-	}
-
-	@Override
-	public List<ThreeSale> listSecondTeam(long start, int count, Long uid) {
-		return threeSaleMapper.listSecondTeam(start, count, uid);
 	}
 
 	@Override
 	public long countSecondTeam(Long uid, Integer state) {
 		return threeSaleMapper.countSecondTeam(uid, state);
 	}
-	
+
 	@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);
+	public JSONObject getMyFirstTeam(long start, int count, Long uid, Integer state) {
+
+		List<ThreeSale> list = threeSaleMapper.listFirstTeam(start, count, uid, state);
 		if (list == null) {
 			list = new ArrayList<ThreeSale>();
 		}
-		
-		long countTotal = threeSaleMapper.countFirstTeam(uid, null);
-		
+
+		long countTotal = threeSaleMapper.countFirstTeam(uid, state);
+
 		return organizeTeam(countTotal, list);
 	}
 
 	@Override
-	public JSONObject getMySecondTeam(long start, int count, Long uid) {
-		List<ThreeSale> list = threeSaleMapper.listSecondTeam(start, count, uid);
+	public JSONObject getMySecondTeam(long start, int count, Long uid, Integer state) {
+		List<ThreeSale> list = threeSaleMapper.listSecondTeam(start, count, uid, state);
 		if (list == null) {
 			list = new ArrayList<ThreeSale>();
 		}
-		
-		long countTotal = threeSaleMapper.countSecondTeam(uid, null);
-		
+
+		long countTotal = threeSaleMapper.countSecondTeam(uid, state);
+
 		return organizeTeam(countTotal, list);
 	}
 
-	
-	
 	public JSONObject organizeTeam(long count, List<ThreeSale> list) {
-		
+
 		JSONObject result = new JSONObject();
-		
-		JSONArray resultArray  = new JSONArray();
-		
-		for (ThreeSale threeSale: list) {
+
+		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);
-			
-			if (formatYears.format(todayTime).equals(formatYears.format(inviteTime))) {
-				// 鏈勾
-				object.put("inviteTime", sdf.format(inviteTime) + " 鍔犲叆");
-			} else {
-				// 寰�骞�
-				object.put("inviteTime", format.format(inviteTime) + " 鍔犲叆");
-			}
-			
+			object.put("inviteTime", format.format(inviteTime) + " 鍔犲叆");
+
 			String memoName = "";
 			ThreeSaleExtraInfo threeSaleExtraInfo = threeSale.getThreeSaleExtraInfo();
 			if (threeSaleExtraInfo != null) {
@@ -451,89 +406,317 @@
 				}
 			}
 			object.put("memoName", memoName);
-			
+
 			String nickName = "";
 			String portrait = "";
 			Long lastLoginTime = null;
-			Long workerId = null;
-			
+
 			UserInfo worker = threeSale.getWorker();
 			if (worker != null) {
-				workerId = worker.getId();
 				portrait = worker.getPortrait();
 				lastLoginTime = worker.getLastLoginTime();
 				nickName = worker.getNickName();
 			}
 			object.put("nickName", nickName);
-			object.put("workerId", workerId);
 			object.put("portrait", portrait);
-			
-			int type = 0;
+
+			int state = 0;
 			String fontColor1 = "#888888";
 			String fontColor2 = "#F14242";
-			
-			JSONArray array  = new JSONArray();
+
+			JSONArray array = new JSONArray();
 			if (threeSale.getState()) {
-				type = 1;
+				state = 1;
 				if (lastLoginTime == null) {
 					lastLoginTime = threeSale.getCreateTime();
 				}
-				
-				JSONArray array1 = new JSONArray();
-				array1.add(fontColor1);
-				array1.add("鏈�杩戠櫥闄� " + sdf.format(lastLoginTime));
-				
-				array.add(array1);
-				
-			} else if ( threeSale.getExpire()!= null && (threeSale.getExpire() == 1 || threeSale.getExpire().equals(1))) {
-				type = 2;
-				JSONArray array1 = new JSONArray();
-				array1.add(fontColor1);
-				array1.add("宸茬粡鑴辩閭�璇峰叧绯�");
-				
-				array.add(array1);
+
+				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 {
-				type = 0;
-				
+				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);
+
+				long days = (c.getTimeInMillis() - todayTime.getTime()) / (1000 * 3600 * 24);
 				if (days < 0) {
 					days = 0;
 				}
-				
-				JSONArray array1 = new JSONArray();
-				array1.add(fontColor1);
-				array1.add("灏嗕簬");
-				
-				JSONArray array2 = new JSONArray();
-				array2.add(fontColor2);
-				array2.add(days+"澶�");
-				
-				JSONArray array3 = new JSONArray();
-				array3.add(fontColor1);
-				array3.add("鍚庤劚绂婚個璇峰叧绯�");
-					
-				array.add(array1);
-				array.add(array2);
-				array.add(array3);
+
+				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("type", type);
+
+			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
+	public void bindRelationshipByInviteCode(UserInfo invitee, UserInfo inviter) throws ThreeSaleException {
+
+		if (invitee == null || inviter == null)
+			throw new ThreeSaleException(1, "鐢ㄦ埛淇℃伅涓虹┖");
+
+		// 鑾峰彇鏈夋晥鐨勯個璇峰叧绯�
+		ThreeSale threeSale = threeSaleMapper.getRelationshipByBossIdAndWorkerId(inviter.getId(), invitee.getId());
+
+		if (threeSale != null) {
+			// 鏈夋晥鍏崇郴--鐢熸晥
+			threeSale.setBoss(inviter);
+			threeSale.setWorker(invitee);
+			threeSale.setState(true);
+			threeSale.setExpire(ThreeSale.EXPIRE_NORMAL);
+			threeSale.setSucceedTime(java.lang.System.currentTimeMillis());
+			threeSale.setUpdateTime(java.lang.System.currentTimeMillis());
+			threeSaleMapper.updateByPrimaryKeySelective(threeSale);
+		} else {
+			// 鏂板缓绔嬬‘瀹氬叧绯�
+			threeSale = new ThreeSale();
+			threeSale.setBoss(inviter);
+			threeSale.setWorker(invitee);
+			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);
+		}
+
+		List<ThreeSale> listExpire = threeSaleMapper.getExpireRecord(inviter.getId(), invitee.getId());
+		if (listExpire != null && listExpire.size() > 0) {
+			// 鍒犻櫎鍘嗗彶閫氱煡
+			for (ThreeSale saleExpire : listExpire) {
+				msgInviteDetailService.deleteByThreeSale(saleExpire);
+			}
+			// 鍒犻櫎宸插け鏁堝叧绯�
+			threeSaleMapper.deleteExpireRecord(inviter.getId(), invitee.getId());
+		}
+
+		// 娣诲姞鍒伴槦鍒�
+		ThreeSaleCMQManager.getInstance().addThreeSaleMsg(threeSale);
+
+		// 閭�璇锋秷鎭�
+		userInviteMsgNotificationService.inviteSuccess(inviter.getId(), threeSale);
+
+		executor.execute(new Runnable() {
+			@Override
+			public void run() {
+
+				UserActiveLog activeLog = userActiveLogService.getUserLatestActiveInfo(inviter.getId());
+				try {
+					if (activeLog != null && !StringUtil.isNullOrEmpty(activeLog.getVersionCode())) {
+						String versionCode = activeLog.getVersionCode();
+						String channel = activeLog.getChannel();
+
+						boolean result = false;
+						// 娓犻亾鏄痑ppstore 鍒ゆ柇涓篒OS
+						if (!StringUtil.isNullOrEmpty(channel) && "appstore".equalsIgnoreCase(channel)) {
+							result = VersionUtil.greaterThan_1_5_60("ios", versionCode);
+						} else {
+							result = VersionUtil.greaterThan_1_5_60("android", versionCode);
+						}
+
+						if (result) {
+							// 琚個璇峰悕绉�
+							String inviteName = invitee.getNickName();
+							if (StringUtil.isNullOrEmpty(inviteName)) {
+								UserInfo userInfo = userInfoService.selectByPKey(invitee.getId());
+								if (userInfo != null) {
+									inviteName = userInfo.getNickName();
+								}
+							}
+							// 濂栧姳閭�璇风孩鍖咃紙娣樼ぜ閲戯級
+							userTaoLiJinOriginService.addInviteWinMoney(inviter.getId(), inviteName);
+						}
+					}
+				} catch (Exception e) {
+					LogHelper.errorDetailInfo(e);
+				}
+
+				// 閭�璇烽噾甯�
+				integralGetService.addInviteLevelOne(inviter.getId(), invitee.getId());
+			}
+		});
+
+	}
+
+	@Override
+	@Transactional
+	public void bindRelationshipByWX(UserInfo invitee, Long inviterId, ThreeSale threeSaleOld)
+			throws ThreeSaleException {
+
+		if (invitee == null || (inviterId == null && threeSaleOld == null))
+			throw new ThreeSaleException(1, "鐢ㄦ埛淇℃伅涓虹┖");
+
+		ThreeSale threeSale = null;
+		if (inviterId != null) {
+			// 鏂板缓绔嬬‘瀹氬叧绯�
+			threeSale = new ThreeSale();
+			threeSale.setBoss(new UserInfo(inviterId));
+			threeSale.setWorker(invitee);
+			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);
+
+			// 閭�璇峰叧绯诲け鏁� 1.5.3 涔嬪墠澶辨晥
+			if (threeSaleOld != null) {
+				ThreeSale three = new ThreeSale();
+				three.setId(threeSaleOld.getId());
+				three.setExpire(ThreeSale.EXPIRE_OUTOFDATE);
+				three.setUpdateTime(java.lang.System.currentTimeMillis());
+				threeSaleMapper.updateByPrimaryKeySelective(three);
+			}
+		} else if (threeSaleOld != null && inviterId == null) {
+			// 1.5.3 涔嬪墠鐢熸晥
+			threeSaleOld.setState(true);
+			threeSaleOld.setExpire(ThreeSale.EXPIRE_NORMAL);
+			threeSaleOld.setSucceedTime(java.lang.System.currentTimeMillis());
+			threeSaleOld.setUpdateTime(java.lang.System.currentTimeMillis());
+			threeSaleMapper.updateByPrimaryKeySelective(threeSaleOld);
+
+			threeSale = threeSaleOld;
+		}
+
+		if (threeSale == null) {
+			throw new ThreeSaleException(1, "鍏崇郴缁戝畾澶辫触");
+		}
+
+		UserInfo boss = userInfoService.selectByPKey(threeSale.getBoss().getId());
+		threeSale.setBoss(boss);
+		threeSale.setWorker(invitee);
+
+		// 娣诲姞鍒伴槦鍒�
+		ThreeSaleCMQManager.getInstance().addThreeSaleMsg(threeSale);
+
+		// 閭�璇锋秷鎭�
+		userInviteMsgNotificationService.inviteSuccess(threeSale.getBoss().getId(), threeSale);
+
+		executor.execute(new Runnable() {
+			@Override
+			public void run() {
+				try {
+					UserActiveLog activeLog = userActiveLogService.getUserLatestActiveInfo(inviterId);
+					if (activeLog != null && !StringUtil.isNullOrEmpty(activeLog.getVersionCode())) {
+						boolean result = false;
+						String versionCode = activeLog.getVersionCode();
+						String channel = activeLog.getChannel();
+
+						// 娓犻亾鏄痑ppstore 鍒ゆ柇涓篒OS
+						if (!StringUtil.isNullOrEmpty(channel) && "appstore".equalsIgnoreCase(channel)) {
+							result = VersionUtil.greaterThan_1_5_60("ios", versionCode);
+						} else {
+							result = VersionUtil.greaterThan_1_5_60("android", versionCode);
+						}
+
+						if (result) {
+							// 琚個璇峰悕绉�
+							String inviteName = invitee.getNickName();
+							if (StringUtil.isNullOrEmpty(inviteName)) {
+								UserInfo userInfo = userInfoService.selectByPKey(invitee.getId());
+								if (userInfo != null) {
+									inviteName = userInfo.getNickName();
+								}
+							}
+							// 濂栧姳閭�璇风孩鍖咃紙娣樼ぜ閲戯級
+							userTaoLiJinOriginService.addInviteWinMoney(inviterId, inviteName);
+						}
+					}
+				} catch (Exception e) {
+					LogHelper.errorDetailInfo(e);
+				}
+			}
+		});
+	}
+
+	/**
+	 * 鏍规嵁閭�璇疯�呮煡璇㈠叧绯�
+	 * 
+	 * @param workerId
+	 * @return
+	 */
+	@Override
+	public ThreeSale getByWorkerId(Long workerId) {
+		return threeSaleMapper.getByWorkerId(workerId);
+	}
+
+	@Override
+	public long countSuccessFirstTeam(Long uid) {
+		return threeSaleMapper.countFirstTeam(uid, 1);
+	}
+
+	@Override
+	public ThreeSale selectByWorkerId(Long workerId) {
+		return threeSaleMapper.selectSuccessByWorkerId(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, Integer state) {
+		return threeSaleMapper.listFirstTeam(start, count, uid, state);
+	}
+
+	@Override
+	public List<ThreeSale> listSecondTeam(long start, int count, Long uid, Integer state) {
+		return threeSaleMapper.listSecondTeam(start, count, uid, state);
+	}
+
 }

--
Gitblit v1.8.0