From cd637932a970e7935b17d41568fe89c92775bccc Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期五, 06 十二月 2019 17:18:27 +0800
Subject: [PATCH] 双12活动添加,邀请码发布修改,爬单新规则添加

---
 fanli/src/main/java/com/yeshi/fanli/service/inter/user/integral/CodePublishRecordService.java    |    2 
 fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java              |   13 
 fanli/src/main/java/com/yeshi/fanli/mapping/integral/CodePublishRecordMapper.xml                 |   19 
 fanli/src/main/java/com/yeshi/fanli/controller/client/v1/ShareController.java                    |   38 
 fanli/src/main/java/com/yeshi/fanli/job/ShameUserInviteCodePublishJOB.java                       |    3 
 fanli/src/main/java/com/yeshi/fanli/controller/client/v2/S11Controller.java                      |    2 
 fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoServiceImpl.java                   |    5 
 fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserInfoService.java                      |   12 
 fanli/src/main/java/com/yeshi/fanli/entity/order/CommonOrder.java                                |    5 
 fanli/src/main/java/com/yeshi/fanli/service/inter/order/config/HongBaoManageService.java         |   45 +
 fanli/src/main/java/com/yeshi/fanli/service/impl/order/config/HongBaoManageServiceImpl.java      |  131 +++++
 fanli/src/main/java/com/yeshi/fanli/service/inter/order/InviteOrderSubsidyService.java           |    8 
 fanli/src/main/java/com/yeshi/fanli/controller/client/v2/IntegralControllerV2.java               |    2 
 fanli/src/main/java/com/yeshi/fanli/service/impl/order/InviteOrderSubsidyServiceImpl.java        |   13 
 fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserMoneyController.java                |    7 
 fanli/src/main/java/com/yeshi/fanli/dto/order/OrderHongBaoRateParams.java                        |   95 ++++
 fanli/src/main/java/com/yeshi/fanli/service/impl/order/HongBaoV2ServiceImpl.java                 |    1 
 fanli/src/main/java/com/yeshi/fanli/service/manger/HongBaoV2AddManager.java                      |  885 ++++++++++++++++++++++++++++++++++++++++
 fanli/src/main/java/com/yeshi/fanli/controller/h5/H5S11Controller.java                           |    6 
 fanli/src/main/java/com/yeshi/fanli/dao/mybatis/integral/CodePublishRecordMapper.java            |    2 
 fanli/src/main/java/com/yeshi/fanli/service/impl/user/integral/CodePublishRecordServiceImpl.java |    4 
 21 files changed, 1,246 insertions(+), 52 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/ShareController.java b/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/ShareController.java
index f5cdc0e..8919cf3 100644
--- a/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/ShareController.java
+++ b/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/ShareController.java
@@ -18,6 +18,7 @@
 import org.yeshi.utils.taobao.TbImgUtil;
 
 import com.fasterxml.jackson.core.util.VersionUtil;
+import com.google.gson.GsonBuilder;
 import com.yeshi.fanli.controller.client.v2.ShareControllerV2;
 import com.yeshi.fanli.dto.share.ShareGoodsRecordDTO;
 import com.yeshi.fanli.entity.accept.AcceptData;
@@ -512,7 +513,8 @@
 			}
 
 			data.put("count", count);
-			data.put("result_list", list);
+			data.put("result_list",
+					JsonUtil.getConvertBigDecimalToStringBuilder(new GsonBuilder()).create().toJson(list));
 			out.print(JsonUtil.loadTrueResult(data));
 
 		} catch (Exception e) {
@@ -1079,30 +1081,28 @@
 						data.put("clickUrl", ShareControllerV2.getERCodeContent(goods, taoBaoLink.getTaoToken()));
 
 					data.put("token", TaoBaoUtil.filterTaoToken(taoBaoLink.getTaoToken()));
-					
-					String inviteCode=null;
-					UserInfoExtra extra=	userInfoExtraService.getUserInfoExtra(uid);
-					if(extra!=null)
-						inviteCode=extra.getInviteCode();
+
+					String inviteCode = null;
+					UserInfoExtra extra = userInfoExtraService.getUserInfoExtra(uid);
+					if (extra != null)
+						inviteCode = extra.getInviteCode();
 					// 娴嬭瘯
 					List<String> commentTexts = new ArrayList<>();
-					String  commentTextStr= 	configService.get("share_single_goods_comment_text");
-					if(!StringUtil.isNullOrEmpty(commentTextStr))
-					{
-						JSONArray arr=	JSONArray.fromObject(commentTextStr);
-						for(int i=0;i<arr.size();i++)
-						{
-							if(StringUtil.isNullOrEmpty(inviteCode))
-							{
-								if(arr.optString(i).contains("[閭�璇风爜]"))
-								{
+					String commentTextStr = configService.get("share_single_goods_comment_text");
+					if (!StringUtil.isNullOrEmpty(commentTextStr)) {
+						JSONArray arr = JSONArray.fromObject(commentTextStr);
+						for (int i = 0; i < arr.size(); i++) {
+							if (StringUtil.isNullOrEmpty(inviteCode)) {
+								if (arr.optString(i).contains("[閭�璇风爜]")) {
 									continue;
 								}
 							}
-							if(StringUtil.isNullOrEmpty(inviteCode))
-								commentTexts.add(arr.optString(i).replace("[涓嬭浇閾炬帴]", Constant.YINGYONGBAO_LINK).replace("[娣樺彛浠", data.optString("token")));
+							if (StringUtil.isNullOrEmpty(inviteCode))
+								commentTexts.add(arr.optString(i).replace("[涓嬭浇閾炬帴]", Constant.YINGYONGBAO_LINK)
+										.replace("[娣樺彛浠", data.optString("token")));
 							else
-								commentTexts.add(arr.optString(i).replace("[涓嬭浇閾炬帴]", Constant.YINGYONGBAO_LINK).replace("[閭�璇风爜]", inviteCode).replace("[娣樺彛浠", data.optString("token")));
+								commentTexts.add(arr.optString(i).replace("[涓嬭浇閾炬帴]", Constant.YINGYONGBAO_LINK)
+										.replace("[閭�璇风爜]", inviteCode).replace("[娣樺彛浠", data.optString("token")));
 						}
 					}
 					data.put("commentTexts", commentTexts);
diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserMoneyController.java b/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserMoneyController.java
index f41e8ae..cb26b1a 100644
--- a/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserMoneyController.java
+++ b/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserMoneyController.java
@@ -4,6 +4,7 @@
 import java.io.PrintWriter;
 import java.lang.reflect.Type;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
@@ -35,6 +36,7 @@
 import com.yeshi.fanli.service.inter.order.HongBaoV2Service;
 import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
 import com.yeshi.fanli.service.inter.user.UserInfoService;
+import com.yeshi.fanli.util.MoneyBigDecimalUtil;
 import com.yeshi.fanli.util.StringUtil;
 import com.yeshi.fanli.util.TimeUtil;
 import com.yeshi.fanli.util.VersionUtil;
@@ -110,7 +112,8 @@
 			date = new Date(ca.getTimeInMillis() - 1);
 		}
 
-		List<UserMoneyDetailHistoryVO> list = userMoneyDetailService.listUserMoneyDetailForClient(uid, index, type, date);
+		List<UserMoneyDetailHistoryVO> list = userMoneyDetailService.listUserMoneyDetailForClient(uid, index, type,
+				date);
 		long count = userMoneyDetailService.countUserMoneyDetailForClient(uid, index, type, date);
 		GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
 		gsonBuilder.registerTypeAdapter(UserMoneyDetailTypeEnum.class, new TypeAdapter<UserMoneyDetailTypeEnum>() {
@@ -311,7 +314,7 @@
 			// 鑾峰彇鎻愮幇涓殑淇℃伅
 			BigDecimal extractingMoney = extractService.sumVerifyingMoney(uid);
 			if (extractingMoney.compareTo(new BigDecimal(0)) > 0)
-				vo.setExtractingMoneyInfo("鎻愮幇涓�:楼" + extractingMoney.setScale(2));
+				vo.setExtractingMoneyInfo("鎻愮幇涓�:楼" + extractingMoney.setScale(2, RoundingMode.HALF_UP));
 			// 鑾峰彇鏄惁缁戝畾浜嗗井淇�
 			if (!StringUtil.isNullOrEmpty(user.getWxUnionId())) {
 				vo.setBindingWX(true);
diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/IntegralControllerV2.java b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/IntegralControllerV2.java
index 56a045e..7edb3f6 100644
--- a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/IntegralControllerV2.java
+++ b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/IntegralControllerV2.java
@@ -540,7 +540,7 @@
 		}
 
 		try {
-			List<CodePublishRecord> list = codePublishRecordService.listValid((page - 1) * Constant.PAGE_SIZE,
+			List<CodePublishRecord> list = codePublishRecordService.listValid(null, (page - 1) * Constant.PAGE_SIZE,
 					Constant.PAGE_SIZE);
 			if (list == null) {
 				list = new ArrayList<CodePublishRecord>();
diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/S11Controller.java b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/S11Controller.java
index fbe0cc3..7723e90 100644
--- a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/S11Controller.java
+++ b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/S11Controller.java
@@ -60,7 +60,7 @@
 		String token = redisManager.getCommonString(key);
 		if (StringUtil.isNullOrEmpty(token)) {
 			try {
-				String link = TaoKeApiUtil.officialActivityConvert("19507100253", "1574664919372",
+				String link = TaoKeApiUtil.officialActivityConvert("19507100253", "1574926757600",
 						info.getRelationId());
 				if (!StringUtil.isNullOrEmpty(link)) {
 					token = TaoKeApiUtil.getTKToken("http://img.flqapp.com/resource/s12/banner.jpg", "銆愬ぉ鐚弻12銆戜笂浜跨孩鍖呯瓑浣犳潵鎷嗭紒---鏉挎牀蹇渷", link);
diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/h5/H5S11Controller.java b/fanli/src/main/java/com/yeshi/fanli/controller/h5/H5S11Controller.java
index acf4c8e..449b674 100644
--- a/fanli/src/main/java/com/yeshi/fanli/controller/h5/H5S11Controller.java
+++ b/fanli/src/main/java/com/yeshi/fanli/controller/h5/H5S11Controller.java
@@ -61,11 +61,11 @@
 		token = redisManager.getCommonString(key);
 		if (StringUtil.isNullOrEmpty(token)) {
 			try {
-				String link = TaoKeApiUtil.officialActivityConvert("19507100253", "1539329391766",
+				String link = TaoKeApiUtil.officialActivityConvert("19507100253", "1574926757600",
 						info.getRelationId());
 				if (!StringUtil.isNullOrEmpty(link)) {
 					token = TaoKeApiUtil.getTKToken("http://img.flqapp.com/resource/s11/banner.jpg",
-							"銆愬ぉ鐚弻11銆戜笂浜跨孩鍖呯瓑浣犳潵鎷嗭紒", link);
+							"銆愬ぉ鐚弻12銆戜笂浜跨孩鍖呯瓑浣犳潵鎷嗭紒", link);
 					if (!StringUtil.isNullOrEmpty(token))
 						redisManager.cacheCommonString(key, token, 60 * 60 * 24);// 缂撳瓨1澶�
 				}
@@ -113,7 +113,7 @@
 			token = redisManager.getCommonString(key);
 		if (StringUtil.isNullOrEmpty(token)) {
 			try {
-				String link = TaoKeApiUtil.officialActivityConvert("19507100253", "1539329391766",
+				String link = TaoKeApiUtil.officialActivityConvert("19507100253", "1574926757600",
 						info.getRelationId());
 				if (!StringUtil.isNullOrEmpty(link)) {
 					token = TaoKeApiUtil.getTKToken("http://img.flqapp.com/resource/s11/banner.jpg",
diff --git a/fanli/src/main/java/com/yeshi/fanli/dao/mybatis/integral/CodePublishRecordMapper.java b/fanli/src/main/java/com/yeshi/fanli/dao/mybatis/integral/CodePublishRecordMapper.java
index cc6cb05..981a64b 100644
--- a/fanli/src/main/java/com/yeshi/fanli/dao/mybatis/integral/CodePublishRecordMapper.java
+++ b/fanli/src/main/java/com/yeshi/fanli/dao/mybatis/integral/CodePublishRecordMapper.java
@@ -15,7 +15,7 @@
 	 * 
 	 * @return
 	 */
-	List<CodePublishRecord> listValid(@Param("start") long start, @Param("count") int count,
+	List<CodePublishRecord> listValid(@Param("uid") Long uid, @Param("start") long start, @Param("count") int count,
 			@Param("validTime") long validTime);
 
 	/**
diff --git a/fanli/src/main/java/com/yeshi/fanli/dto/order/OrderHongBaoRateParams.java b/fanli/src/main/java/com/yeshi/fanli/dto/order/OrderHongBaoRateParams.java
new file mode 100644
index 0000000..61381f7
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/dto/order/OrderHongBaoRateParams.java
@@ -0,0 +1,95 @@
+package com.yeshi.fanli.dto.order;
+
+import java.util.Date;
+
+public class OrderHongBaoRateParams {
+
+	private int level;// 0-浜х敓璁㈠崟鏈骇 1-浜х敓璁㈠崟鐨勪笂绾� 2-浜х敓璁㈠崟鐨勪笂涓婄骇
+	private int orderType;// 璁㈠崟绫诲瀷 鍒嗕韩/鑷喘
+	private boolean subsidy;// 鏄惁涓鸿ˉ璐�
+	private boolean vip;// 鏄惁涓簐ip
+	private Boolean lastVIP;// 涓婄骇鏄惁涓篤IP
+	private Boolean superLastVIP;// 涓婁笂绾ф槸鍚︿负vip
+	private Date orderCreateTime;// 璁㈠崟鍒涘缓鏃堕棿
+
+	// public RateParams(int level, int orderType, boolean subsidy, boolean
+	// vip, Boolean lastVIP, Boolean superLastVIP,
+	// Date orderCreateTime) {
+	// this.level = level;
+	// this.orderType = orderType;
+	// this.subsidy = subsidy;
+	// this.vip = vip;
+	// this.lastVIP = lastVIP;
+	// this.superLastVIP = superLastVIP;
+	// this.orderCreateTime = orderCreateTime;
+	// }
+
+	public OrderHongBaoRateParams(int level, int orderType, boolean subsidy, boolean vip, Date orderCreateTime) {
+		this.level = level;
+		this.orderType = orderType;
+		this.subsidy = subsidy;
+		this.vip = vip;
+		this.orderCreateTime = orderCreateTime;
+	}
+
+	public OrderHongBaoRateParams() {
+
+	}
+
+	public Date getOrderCreateTime() {
+		return orderCreateTime;
+	}
+
+	public void setOrderCreateTime(Date orderCreateTime) {
+		this.orderCreateTime = orderCreateTime;
+	}
+
+	public int getLevel() {
+		return level;
+	}
+
+	public void setLevel(int level) {
+		this.level = level;
+	}
+
+	public int getOrderType() {
+		return orderType;
+	}
+
+	public void setOrderType(int orderType) {
+		this.orderType = orderType;
+	}
+
+	public boolean isSubsidy() {
+		return subsidy;
+	}
+
+	public void setSubsidy(boolean subsidy) {
+		this.subsidy = subsidy;
+	}
+
+	public boolean isVip() {
+		return vip;
+	}
+
+	public void setVip(boolean vip) {
+		this.vip = vip;
+	}
+
+	public Boolean isLastVIP() {
+		return lastVIP;
+	}
+
+	public void setLastVIP(Boolean lastVIP) {
+		this.lastVIP = lastVIP;
+	}
+
+	public Boolean isSuperLastVIP() {
+		return superLastVIP;
+	}
+
+	public void setSuperLastVIP(Boolean superLastVIP) {
+		this.superLastVIP = superLastVIP;
+	}
+
+}
diff --git a/fanli/src/main/java/com/yeshi/fanli/entity/order/CommonOrder.java b/fanli/src/main/java/com/yeshi/fanli/entity/order/CommonOrder.java
index 7cd006d..f033fe3 100644
--- a/fanli/src/main/java/com/yeshi/fanli/entity/order/CommonOrder.java
+++ b/fanli/src/main/java/com/yeshi/fanli/entity/order/CommonOrder.java
@@ -36,6 +36,9 @@
 	public final static String TYPE_INVITE = "http://ec-1255749512.file.myqcloud.com/resource/order/icon_invite.png";
 	public final static String TYPE_SHARE = "http://ec-1255749512.file.myqcloud.com/resource/order/icon_share.png";
 
+	public final static int ORDER_TYPE_ZIGOU = 1;// 鑷喘
+	public final static int ORDER_TYPE_SHARE = 20;// 鍒嗕韩
+
 	@Column(name = "co_id")
 	private Long id;
 
@@ -105,7 +108,7 @@
 
 	@Column(name = "co_trade_id")
 	private String tradeId;
-	
+
 	// 鐘舵�佽鏄�
 	@Column(name = "co_state_desc")
 	private String stateDesc;
diff --git a/fanli/src/main/java/com/yeshi/fanli/job/ShameUserInviteCodePublishJOB.java b/fanli/src/main/java/com/yeshi/fanli/job/ShameUserInviteCodePublishJOB.java
index edd793e..f6d08f1 100644
--- a/fanli/src/main/java/com/yeshi/fanli/job/ShameUserInviteCodePublishJOB.java
+++ b/fanli/src/main/java/com/yeshi/fanli/job/ShameUserInviteCodePublishJOB.java
@@ -70,6 +70,9 @@
 			} catch (InterruptedException e) {
 				e.printStackTrace();
 			}
+			// 鏌ヨ鐢ㄦ埛鏄惁杩�3澶╁唴鍙戝竷杩�
+			if (codePublishRecordService.listValid(userList.get(0).getId(), 0, 1).size() > 0)
+				return;
 			if (userList != null && userList.size() > 0) {
 				codePublishRecordService.publishInviteCode(userList.get(0).getId());
 			}
diff --git a/fanli/src/main/java/com/yeshi/fanli/mapping/integral/CodePublishRecordMapper.xml b/fanli/src/main/java/com/yeshi/fanli/mapping/integral/CodePublishRecordMapper.xml
index c6b7e37..ce5fe53 100644
--- a/fanli/src/main/java/com/yeshi/fanli/mapping/integral/CodePublishRecordMapper.xml
+++ b/fanli/src/main/java/com/yeshi/fanli/mapping/integral/CodePublishRecordMapper.xml
@@ -67,17 +67,24 @@
 	<select id="listValid" resultMap="BaseResultVOMap">
 		SELECT p.*,u.`nick_name`,u.`portrait`,e.`uie_invite_code` FROM
 		yeshi_ec_code_publish_record p
-		LEFT JOIN `yeshi_ec_user` u ON u.`id` = p.`pr_uid`
-		LEFT JOIN `yeshi_ec_user_info_extra` e ON e.`uie_uid` = p.`pr_uid`
+		LEFT JOIN `yeshi_ec_user` u ON u.`id` =
+		p.`pr_uid`
+		LEFT JOIN `yeshi_ec_user_info_extra` e ON e.`uie_uid` =
+		p.`pr_uid`
 		WHERE TIMESTAMPDIFF(SECOND,p.`pr_create_time`,NOW())<![CDATA[<]]>
 		#{validTime}
+		<if test="uid!=null">
+			and pr_uid=#{uid}
+		</if>
+
 		ORDER BY p.`pr_create_time` DESC
 		LIMIT #{start},#{count}
 	</select>
 
 
 	<select id="listByMinTime" resultMap="BaseResultMap">
-		SELECT * FROM yeshi_ec_code_publish_record p where p.`pr_create_time` >=
+		SELECT * FROM
+		yeshi_ec_code_publish_record p where p.`pr_create_time` >=
 		#{minTime}
 		ORDER BY p.`pr_create_time` DESC
 		LIMIT #{start},#{count}
@@ -85,13 +92,15 @@
 
 	<select id="countValid" resultType="Long">
 		SELECT IFNULL(COUNT(pr_id),0) FROM yeshi_ec_code_publish_record
-		WHERE TIMESTAMPDIFF(SECOND,`pr_create_time`,NOW())<![CDATA[<]]>
+		WHERE
+		TIMESTAMPDIFF(SECOND,`pr_create_time`,NOW())<![CDATA[<]]>
 		#{validTime}
 	</select>
 
 	<select id="countValidRecord" resultType="Long">
 		SELECT IFNULL(COUNT(pr_id),0) FROM yeshi_ec_code_publish_record
-		WHERE pr_uid = #{uid} AND TIMESTAMPDIFF(SECOND,`pr_create_time`,NOW())<![CDATA[<]]>
+		WHERE
+		pr_uid = #{uid} AND TIMESTAMPDIFF(SECOND,`pr_create_time`,NOW())<![CDATA[<]]>
 		#{validTime}
 	</select>
 
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/HongBaoV2ServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/HongBaoV2ServiceImpl.java
index c0f1139..71c0172 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/HongBaoV2ServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/HongBaoV2ServiceImpl.java
@@ -52,6 +52,7 @@
 import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
 import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
 import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
+import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService;
 import com.yeshi.fanli.util.Constant;
 import com.yeshi.fanli.util.MoneyBigDecimalUtil;
 import com.yeshi.fanli.util.StringUtil;
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/InviteOrderSubsidyServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/InviteOrderSubsidyServiceImpl.java
index b9d4cb8..b582b81 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/InviteOrderSubsidyServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/InviteOrderSubsidyServiceImpl.java
@@ -25,6 +25,7 @@
 import com.yeshi.fanli.service.inter.order.OrderHongBaoMapService;
 import com.yeshi.fanli.service.inter.order.OrderService;
 import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
+import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService;
 import com.yeshi.fanli.util.MoneyBigDecimalUtil;
 import com.yeshi.fanli.util.StringUtil;
 import com.yeshi.fanli.util.TimeUtil;
@@ -50,6 +51,9 @@
 	@Resource
 	private HongBaoManageService hongBaoManageService;
 
+	@Resource
+	private UserVIPInfoService userVIPInfoService;
+
 	@Override
 	public InviteOrderSubsidy getByOrderNoAndType(Long uid, String orderNo, Integer type) {
 		return inviteOrderSubsidyMapper.getByOrderNoAndType(uid, orderNo, type);
@@ -61,9 +65,8 @@
 	}
 
 	@Transactional
-	@Override
-	public void addOrderSubsidy(InviteOrderSubsidy orderSubsidy) throws InviteOrderSubsidyException {
-		// 鏈哄埗2020骞寸敓鏁�
+	private void addOrderSubsidy(InviteOrderSubsidy orderSubsidy) throws InviteOrderSubsidyException {
+		//TODO 纭畾鐢熸晥鏃ユ湡  鏈哄埗2020骞寸敓鏁�
 		if (System.currentTimeMillis() < TimeUtil.convertToTimeTemp("2020-01-01", "yyyy-MM-dd")) {
 			return;
 		}
@@ -165,7 +168,9 @@
 							orderSubsidy.setOrderNo(orderId);
 							orderSubsidy.setSourceType(sourceType);
 							orderSubsidy.setState(state);
-							addOrderSubsidy(orderSubsidy);
+							// VIP鐢ㄦ埛鎵嶈兘琛ヨ创
+							if (userVIPInfoService.isVIP(uid))
+								addOrderSubsidy(orderSubsidy);
 						}
 					}
 				}
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java
index d916c99..09ebb52 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java
@@ -77,6 +77,7 @@
 import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService;
 import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
 import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
+import com.yeshi.fanli.service.manger.HongBaoV2AddManager;
 import com.yeshi.fanli.util.CMQManager;
 import com.yeshi.fanli.util.Constant;
 import com.yeshi.fanli.util.MoneyBigDecimalUtil;
@@ -158,6 +159,9 @@
 
 	@Resource
 	private OrderMoneySettleService orderMoneySettleService;
+
+	@Resource
+	private HongBaoV2AddManager hongBaoV2AddManager;
 
 	/**
 	 * 鏄惁鏄垎浜鍗�
@@ -1209,7 +1213,14 @@
 		final List<CommonOrder> coList = convertCommonOrder(commonOrderList);
 		int resultCode = 0;
 		try {
-			resultCode = hongBaoV2Service.addHongBao(coList, hongBaoType);
+			long time = TimeUtil.convertToTimeTemp("2019-12-06", "yyyy-MM-dd");
+			if (!Constant.IS_TEST)
+				time = TimeUtil.convertToTimeTemp("2020-01-01", "yyyy-MM-dd");
+
+			if (coList.get(0).getThirdCreateTime().getTime() < time)
+				resultCode = hongBaoV2Service.addHongBao(coList, hongBaoType);
+			else
+				resultCode = hongBaoV2AddManager.addHongBao(coList, hongBaoType);
 		} catch (HongBaoException e) {
 			try {
 				LogHelper.errorDetailInfo(e, "addJDOrder鎴朼ddHongBao鍑洪敊", "璁㈠崟鍙�:" + orderId);
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/config/HongBaoManageServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/config/HongBaoManageServiceImpl.java
index 2c9599d..86ab526 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/config/HongBaoManageServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/config/HongBaoManageServiceImpl.java
@@ -12,7 +12,10 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import com.yeshi.fanli.dao.mybatis.HongBaoManageMapper;
+import com.yeshi.fanli.dto.order.OrderHongBaoRateParams;
 import com.yeshi.fanli.entity.bus.user.HongBaoManage;
+import com.yeshi.fanli.entity.order.CommonOrder;
+import com.yeshi.fanli.exception.order.HongBaoException;
 import com.yeshi.fanli.log.LogHelper;
 import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
 
@@ -34,6 +37,24 @@
 		HongBaoManage hongBaoManage = hongBaoManageMapper.selectByKey(key);
 		if (hongBaoManage != null)
 			hongBaoManage.getValue();
+		return null;
+	}
+
+	/**
+	 * 鏍规嵁閿�间笌鏃堕棿鏌ヨ姣斾緥
+	 * 
+	 * @param key
+	 * @param time
+	 * @return
+	 */
+	public BigDecimal getByKeyAndMaxTime(String key, Long time) {
+		if (time == null)
+			time = System.currentTimeMillis();
+		HongBaoManage hongBaoManage = hongBaoManageMapper.selectByKeyAndMaxValidTime(key, time);
+		if (hongBaoManage == null)
+			hongBaoManage = hongBaoManageMapper.selectByKey(key);
+		if (hongBaoManage != null)
+			return new BigDecimal(hongBaoManage.getValue());
 		return null;
 	}
 
@@ -211,4 +232,114 @@
 		return new BigDecimal(0);
 	}
 
+	@Override
+	public BigDecimal getVIPFanLiRate(long time) {
+		String key = "hongbao_goods_proportion_vip";
+		HongBaoManage hongBaoManage = hongBaoManageMapper.selectByKeyAndMaxValidTime(key, time);
+		if (hongBaoManage == null)
+			hongBaoManage = hongBaoManageMapper.selectByKey(key);
+		if (hongBaoManage != null)
+			return new BigDecimal(hongBaoManage.getValue());
+		LogHelper.error("鑾峰彇杩斿埄鍒嗘垚姣斾緥鍑洪敊");
+		return null;
+	}
+
+	@Override
+	public BigDecimal getVIPShareRate(long time) {
+		String key = "share_proportion_vip";
+		HongBaoManage hongBaoManage = hongBaoManageMapper.selectByKeyAndMaxValidTime(key, time);
+		if (hongBaoManage == null)
+			hongBaoManage = hongBaoManageMapper.selectByKey(key);
+		if (hongBaoManage != null)
+			return new BigDecimal(hongBaoManage.getValue());
+		LogHelper.error("鑾峰彇杩斿埄鍒嗘垚姣斾緥鍑洪敊");
+		return null;
+	}
+
+	@Override
+	public BigDecimal getVIPFanLiRate() {
+		return getVIPFanLiRate(System.currentTimeMillis());
+	}
+
+	@Override
+	public BigDecimal getVIPShareRate() {
+		return getVIPShareRate(System.currentTimeMillis());
+	}
+
+	/**
+	 * 鑾峰彇姣斾緥
+	 * 
+	 * @param level
+	 *            0-鏈骇 1-涓嬬骇 2-涓嬩笅绾�
+	 * @param orderType
+	 * @param isVip鏈骇鏄惁涓篤IP
+	 * @param isWorkerVip涓嬬骇鏄惁涓篤IP
+	 * @return
+	 */
+	public BigDecimal getRate(OrderHongBaoRateParams params) throws HongBaoException {
+		if (params == null)
+			throw new HongBaoException(1, "姣斾緥鍙傛暟閿欒");
+
+		long time = params.getOrderCreateTime().getTime();
+
+		if (params.getLevel() == 0) {// 鏈骇
+
+			if (params.getOrderType() == CommonOrder.ORDER_TYPE_ZIGOU) {
+				if (params.isVip())
+					return getVIPFanLiRate(time);
+				else
+					return getFanLiRate(time);
+			} else {
+				if (params.isVip())
+					return getVIPShareRate(time);
+				else
+					return getShareRate(time);
+			}
+
+		} else if (params.getLevel() == 1) {// 涓婄骇
+			if (params.getOrderType() == CommonOrder.ORDER_TYPE_ZIGOU) {// 鑷喘
+				if (params.isSubsidy()) {// 琛ヨ创姣斾緥
+					if (params.isVip()) {// 涓嬬骇涓轰細鍛樹笉琛ヨ创
+						return new BigDecimal("0");
+					} else {
+						return getInviteFirstLevelSubsidyRate(time);
+					}
+				} else {// 濂栭噾姣斾緥
+					if (params.isVip()) {
+						return getByKeyAndMaxTime("new_invite_vip_6", time);
+					} else {
+						return getByKeyAndMaxTime("new_invite_6", time);
+					}
+				}
+			} else {// 鍒嗕韩
+				if (params.isVip()) {
+					return getByKeyAndMaxTime("new_share_vip_21", time);
+				} else {
+					return getByKeyAndMaxTime("new_share_21", time);
+				}
+			}
+		} else if (params.getLevel() == 2) {// 涓婁笂绾�
+			if (params.getOrderType() == CommonOrder.ORDER_TYPE_ZIGOU) {// 鑷喘
+				if (params.isSubsidy()) {// 琛ヨ创姣斾緥
+					if (params.isVip()) {// 涓嬩笅绾т负浼氬憳涓嶈ˉ璐�
+						return new BigDecimal("0");
+					} else {
+						return getInviteSecondLevelSubsidyRate(time);
+					}
+				} else {// 濂栭噾姣斾緥
+					if (params.isVip())
+						return new BigDecimal("0");
+					else
+						return getByKeyAndMaxTime("new_invite_7", time);
+				}
+			} else {// 鍒嗕韩
+				if (params.isVip())
+					return new BigDecimal("0");
+				else
+					return getByKeyAndMaxTime("new_share_22", time);
+			}
+		}
+		throw new HongBaoException(2, "鏈尮閰嶅埌姣斾緥鍙傛暟");
+	}
+
 }
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoServiceImpl.java
index 5ab3a0d..2ff91bc 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoServiceImpl.java
@@ -671,4 +671,9 @@
 		return userInfoMapper.getAutoExtractUserTo1212(start, count);
 	}
 
+	@Override
+	public UserInfo selectAvailableByPrimaryKey(Long uid) {
+		return userInfoMapper.selectAvailableByPrimaryKey(uid);
+	}
+
 }
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/integral/CodePublishRecordServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/integral/CodePublishRecordServiceImpl.java
index 9d2fb53..7355e95 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/integral/CodePublishRecordServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/integral/CodePublishRecordServiceImpl.java
@@ -46,9 +46,9 @@
 	}
 
 	@Override
-	public List<CodePublishRecord> listValid(long start, int count) {
+	public List<CodePublishRecord> listValid(Long uid, long start, int count) {
 
-		List<CodePublishRecord> listValid = codePublishRecordMapper.listValid(start, count,
+		List<CodePublishRecord> listValid = codePublishRecordMapper.listValid(uid, start, count,
 				CodePublishRecord.VALIDTIME);
 		if (listValid == null || listValid.size() == 0) {
 			return listValid;
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/inter/order/InviteOrderSubsidyService.java b/fanli/src/main/java/com/yeshi/fanli/service/inter/order/InviteOrderSubsidyService.java
index 2d2cafd..d72aa5d 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/inter/order/InviteOrderSubsidyService.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/inter/order/InviteOrderSubsidyService.java
@@ -27,14 +27,6 @@
 	public InviteOrderSubsidy getByOrderNoAndTypeForUpdate(Long uid, String orderNo, Integer type);
 	
 	
-	
-	/**
-	 * 娣诲姞璁㈠崟琛ヨ创
-	 * 
-	 * @param orderSubsidy
-	 * @throws OrderSubsidyException
-	 */
-	public void addOrderSubsidy(InviteOrderSubsidy orderSubsidy) throws InviteOrderSubsidyException;
 
 	/**
 	 * 娣诲姞鎴栦慨鏀癸紙鎸夌収璁㈠崟鍙蜂笌鏉ユ簮锛�
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/inter/order/config/HongBaoManageService.java b/fanli/src/main/java/com/yeshi/fanli/service/inter/order/config/HongBaoManageService.java
index 37b76eb..ef9f80b 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/inter/order/config/HongBaoManageService.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/inter/order/config/HongBaoManageService.java
@@ -6,7 +6,9 @@
 
 import org.springframework.cache.annotation.CacheEvict;
 
+import com.yeshi.fanli.dto.order.OrderHongBaoRateParams;
 import com.yeshi.fanli.entity.bus.user.HongBaoManage;
+import com.yeshi.fanli.exception.order.HongBaoException;
 
 public interface HongBaoManageService {
 
@@ -26,12 +28,28 @@
 	public BigDecimal getFanLiRate(long time);
 
 	/**
+	 * VIP鐢ㄦ埛杩斿埄姣斾緥
+	 * 
+	 * @param time
+	 * @return
+	 */
+	public BigDecimal getVIPFanLiRate(long time);
+
+	/**
 	 * 鑾峰彇鍒嗕韩璁㈠崟杩斿埄姣斾緥
 	 * 
 	 * @param time
 	 * @return
 	 */
 	public BigDecimal getShareRate(long time);
+
+	/**
+	 * 鑾峰彇VIP鐢ㄦ埛鐨勫垎浜瘮渚�
+	 * 
+	 * @param time
+	 * @return
+	 */
+	public BigDecimal getVIPShareRate(long time);
 
 	/**
 	 * 鑾峰彇杩斿埄璁㈠崟杩斿埄姣斾緥
@@ -46,6 +64,20 @@
 	 * @return
 	 */
 	public BigDecimal getShareRate();
+
+	/**
+	 * 鑾峰彇VIP杩斿埄璁㈠崟杩斿埄姣斾緥
+	 * 
+	 * @return
+	 */
+	public BigDecimal getVIPFanLiRate();
+
+	/**
+	 * 鑾峰彇VIP鍒嗕韩璁㈠崟杩斿埄姣斾緥
+	 * 
+	 * @return
+	 */
+	public BigDecimal getVIPShareRate();
 
 	/**
 	 * 鑾峰彇绗竴绾х殑閭�璇疯禋姣斾緥
@@ -128,13 +160,22 @@
 	 * @return
 	 */
 	public BigDecimal getInviteFirstLevelSubsidyRate(Long time);
-	
-	
+
 	/**
 	 * 鑾峰彇閭�璇蜂簩绾цˉ璐存瘮渚�
+	 * 
 	 * @param time
 	 * @return
 	 */
 	public BigDecimal getInviteSecondLevelSubsidyRate(Long time);
 
+	/**
+	 * 鑾峰彇杩斿埄姣斾緥锛堣鍗曞鐞嗘椂浣跨敤锛�
+	 * 
+	 * @param params
+	 * @return
+	 * @throws HongBaoException
+	 */
+	public BigDecimal getRate(OrderHongBaoRateParams params) throws HongBaoException;
+
 }
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserInfoService.java b/fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserInfoService.java
index 6905ccd..bce3f52 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserInfoService.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserInfoService.java
@@ -210,11 +210,21 @@
 	public long countByType(int type);
 
 	/**
-	 * 鍙�12棰勫敭寮�鍚椂锛屽紑鍚浼戠湢鑰佺敤鎴风殑鍞ら啋宸ヤ綔锛屽湪2019.1.1鍒�2019.6.18鏈熼棿浜х敓杩囪鍗曪紝骞朵笖2019.6.18鍙峰悗鏈啀娲昏穬锛屽苟涓旇处鎴蜂綑棰濆ぇ浜�1鍏冿紝骞朵笖缁戝畾浜嗗井淇$殑鐢ㄦ埛鏈�2468浜�
+	 * 鍙�12棰勫敭寮�鍚椂锛屽紑鍚浼戠湢鑰佺敤鎴风殑鍞ら啋宸ヤ綔锛屽湪2019.1.1鍒�2019.6.18鏈熼棿浜х敓杩囪鍗曪紝骞朵笖2019.6.18鍙峰悗鏈啀娲昏穬锛�
+	 * 骞朵笖璐︽埛浣欓澶т簬1鍏冿紝骞朵笖缁戝畾浜嗗井淇$殑鐢ㄦ埛鏈�2468浜�
+	 * 
 	 * @param start
 	 * @param count
 	 * @return
 	 */
 	public List<UserInfo> getAutoExtractUserTo1212(int start, int count);
 
+	/**
+	 * 鏍规嵁鐢ㄦ埛ID妫�绱�
+	 * 
+	 * @param uid
+	 * @return
+	 */
+	public UserInfo selectAvailableByPrimaryKey(Long uid);
+
 }
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/inter/user/integral/CodePublishRecordService.java b/fanli/src/main/java/com/yeshi/fanli/service/inter/user/integral/CodePublishRecordService.java
index b18c168..85fbf4e 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/inter/user/integral/CodePublishRecordService.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/inter/user/integral/CodePublishRecordService.java
@@ -12,7 +12,7 @@
 	 * 
 	 * @return
 	 */
-	public List<CodePublishRecord> listValid(long start, int count);
+	public List<CodePublishRecord> listValid(Long uid, long start, int count);
 
 	/**
 	 * 鏍规嵁鏈�灏忔椂闂存煡璇�
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/manger/HongBaoV2AddManager.java b/fanli/src/main/java/com/yeshi/fanli/service/manger/HongBaoV2AddManager.java
new file mode 100644
index 0000000..daa791b
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/service/manger/HongBaoV2AddManager.java
@@ -0,0 +1,885 @@
+package com.yeshi.fanli.service.manger;
+
+import java.math.BigDecimal;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.yeshi.fanli.dao.mybatis.HongBaoV2Mapper;
+import com.yeshi.fanli.dao.mybatis.order.CommonOrderGoodsMapper;
+import com.yeshi.fanli.dao.mybatis.order.HongBaoOrderMapper;
+import com.yeshi.fanli.dto.HongBao;
+import com.yeshi.fanli.dto.order.OrderHongBaoRateParams;
+import com.yeshi.fanli.entity.bus.user.HongBaoV2;
+import com.yeshi.fanli.entity.bus.user.ThreeSale;
+import com.yeshi.fanli.entity.bus.user.UserInfo;
+import com.yeshi.fanli.entity.order.CommonOrder;
+import com.yeshi.fanli.entity.order.CommonOrderGoods;
+import com.yeshi.fanli.entity.order.HongBaoOrder;
+import com.yeshi.fanli.exception.order.HongBaoException;
+import com.yeshi.fanli.exception.user.UserAccountException;
+import com.yeshi.fanli.exception.user.UserInfoException;
+import com.yeshi.fanli.service.inter.order.CommonOrderService;
+import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
+import com.yeshi.fanli.service.inter.order.msg.UserOrderMsgNotificationService;
+import com.yeshi.fanli.service.inter.user.UserInfoService;
+import com.yeshi.fanli.service.inter.user.UserSystemCouponRecordService;
+import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
+import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
+import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService;
+import com.yeshi.fanli.util.Constant;
+import com.yeshi.fanli.util.MoneyBigDecimalUtil;
+import com.yeshi.fanli.util.TaoBaoConstant;
+import com.yeshi.fanli.util.TimeUtil;
+
+@Component
+public class HongBaoV2AddManager {
+
+	@Resource
+	private UserInfoService userInfoService;
+
+	@Resource
+	private ThreeSaleSerivce threeSaleSerivce;
+
+	@Resource
+	private HongBaoOrderMapper hongBaoOrderMapper;
+
+	@Resource
+	private HongBaoV2Mapper hongBaoV2Mapper;
+
+	@Resource
+	private UserOrderMsgNotificationService userOrderMsgNotificationService;
+
+	@Resource
+	private HongBaoManageService hongBaoManageService;
+
+	@Resource
+	private CommonOrderService commonOrderService;
+
+	@Resource
+	private UserSystemCouponRecordService userSystemCouponRecordService;
+
+	@Resource
+	private UserSystemCouponService userSystemCouponService;
+
+	@Resource
+	private CommonOrderGoodsMapper commonOrderGoodsMapper;
+
+	@Resource
+	private UserVIPInfoService userVIPInfoService;
+
+	// 淇濆瓨绾㈠寘
+	public void saveHongBao1(CommonOrder commonOrder, int commonOrderType) throws HongBaoException, UserInfoException {
+		// 鏌ヨ涓�2绾х殑淇℃伅
+		long uid = commonOrder.getUserInfo().getId();
+		UserInfo user = userInfoService.selectAvailableByPrimaryKey(uid);
+		if (user == null)
+			throw new UserInfoException(1, "鐢ㄦ埛涓嶅瓨鍦�");
+
+		UserInfo lastUser = threeSaleSerivce.getBoss(uid);
+		UserInfo superLastUser = null;
+		if (lastUser != null) {
+			lastUser = userInfoService.selectAvailableByPrimaryKey(lastUser.getId());
+			if (lastUser != null)
+				superLastUser = threeSaleSerivce.getBoss(lastUser.getId());
+			if (superLastUser != null)
+				superLastUser = userInfoService.selectAvailableByPrimaryKey(superLastUser.getId());
+		}
+
+		if (commonOrderType == CommonOrder.ORDER_TYPE_ZIGOU) {
+			// 淇濆瓨绾㈠寘淇℃伅
+
+		} else if (commonOrderType == CommonOrder.ORDER_TYPE_SHARE) {
+
+		}
+	}
+
+	/**
+	 * 娣诲姞绾㈠寘淇℃伅
+	 * 
+	 * @param commonOrderList
+	 * @param type
+	 * @return
+	 * @throws HongBaoException
+	 * @throws UserAccountException
+	 */
+	public int addHongBao(List<CommonOrder> commonOrderList, int type) throws HongBaoException, UserAccountException {
+
+		if (commonOrderList != null && commonOrderList.size() > 0) {
+			int orderType = commonOrderList.get(0).getSourceType();
+
+			Map<Integer, HongBaoOrder> notificationMap = new HashMap<>();
+			int goodsCount = 0;
+			boolean hasAdd = false;
+			boolean hasUpdate = false;
+			Set<Integer> stateSet = new HashSet<>();// 璁㈠崟鐘舵�丼et
+			boolean isVIP = userVIPInfoService.isVIP(commonOrderList.get(0).getUserInfo().getId());
+			for (CommonOrder commonOrder : commonOrderList) {
+				stateSet.add(commonOrder.getState());
+				goodsCount += commonOrder.getCount();
+				if (commonOrder == null || commonOrder.getId() == null || commonOrder.getUserInfo() == null)
+					throw new HongBaoException(1, "璁㈠崟淇℃伅涓嶅畬鏁�");
+				HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId());
+				if (hongBaoOrder == null) {
+					saveHongBao(commonOrder, type, isVIP, notificationMap);
+					hasAdd = true;
+				} else {
+					boolean update = updateHongBao(hongBaoOrder, commonOrder, type, notificationMap);
+					if (update)
+						hasUpdate = true;
+				}
+			}
+
+			/**
+			 * 閫氱煡鐢ㄦ埛鐨勮繑鍒╂儏鍐�
+			 */
+			int state = getOrderState(stateSet);
+			if (!Constant.IS_TEST) {
+				if (hasAdd) {
+					Iterator<Integer> its = notificationMap.keySet().iterator();
+					while (its.hasNext()) {
+						Integer t = its.next();
+						HongBaoV2 notify = notificationMap.get(t).getHongBaoV2();
+						CommonOrder commonOrder = notificationMap.get(t).getCommonOrder();
+						String orderId = commonOrderList.get(0).getOrderNo();
+						Long uid = notify.getUserInfo().getId();
+						BigDecimal money = notify.getMoney();
+						switch (t) {
+						case HongBaoV2.TYPE_ZIGOU:
+							userOrderMsgNotificationService.orderFanLiStatistic(uid, orderId, orderType,
+									commonOrder.getPayment(), money, goodsCount, state);
+							break;
+						case HongBaoV2.TYPE_SHARE_GOODS:
+							userOrderMsgNotificationService.orderShareStatistic(uid, orderId, orderType,
+									commonOrder.getPayment(), money, goodsCount, state);
+							break;
+						case HongBaoV2.TYPE_YIJI:
+							userOrderMsgNotificationService.orderInviteStatistic(uid, orderId, orderType,
+									commonOrder.getPayment(), money, goodsCount, state);
+							break;
+						case HongBaoV2.TYPE_ERJI:
+							userOrderMsgNotificationService.orderInviteStatistic(uid, orderId, orderType,
+									commonOrder.getPayment(), money, goodsCount, state);
+							break;
+						case HongBaoV2.TYPE_SHARE_YIJI:
+							userOrderMsgNotificationService.orderShareFirstLevelStatistic(uid, orderId, orderType,
+									commonOrder.getPayment(), money, goodsCount, state, notify.getBeizhu());
+							break;
+						}
+					}
+				}
+
+				// 娣诲姞鏂扮増鏈�氱煡
+
+				if (!hasAdd) {
+					Iterator<Integer> its = notificationMap.keySet().iterator();
+					while (its.hasNext()) {
+						Integer t = its.next();
+						HongBaoV2 notify = notificationMap.get(t).getHongBaoV2();
+						CommonOrder commonOrder = notificationMap.get(t).getCommonOrder();
+						String orderId = commonOrderList.get(0).getOrderNo();
+						Long uid = notify.getUserInfo().getId();
+						BigDecimal money = notify.getMoney();
+						switch (t) {
+						case HongBaoV2.TYPE_ZIGOU:
+							userOrderMsgNotificationService.orderFanLiStateChanged(uid, orderId, orderType,
+									commonOrder.getPayment(), money, state);
+							break;
+						case HongBaoV2.TYPE_SHARE_GOODS:
+							userOrderMsgNotificationService.orderShareStateChanged(uid, orderId, orderType,
+									commonOrder.getPayment(), money, state);
+							break;
+						case HongBaoV2.TYPE_YIJI:
+							userOrderMsgNotificationService.orderInviteStateChanged(uid, orderId, orderType,
+									commonOrder.getPayment(), money, state);
+							break;
+						case HongBaoV2.TYPE_ERJI:
+							userOrderMsgNotificationService.orderInviteStateChanged(uid, orderId, orderType,
+									commonOrder.getPayment(), money, state);
+							break;
+						case HongBaoV2.TYPE_SHARE_YIJI:
+							userOrderMsgNotificationService.orderShareFirstLevelStateChanged(uid, orderId, orderType,
+									commonOrder.getPayment(), money, state);
+						}
+					}
+				}
+			}
+
+			int resultCode = 0;
+			if (hasAdd && hasUpdate)
+				return 12;
+			else if (hasAdd)
+				return 1;
+			else if (hasUpdate)
+				return 2;
+			return resultCode;
+		}
+		return 0;
+	}
+
+	private int getOrderState(Set<Integer> states) {
+		if (states.size() == 1)
+			return states.iterator().next();
+		Iterator<Integer> its = states.iterator();
+		while (its.hasNext()) {
+			int tempState = its.next();
+			if (tempState == CommonOrder.STATE_FK)
+				return CommonOrder.STATE_FK;
+			else if (tempState == CommonOrder.STATE_JS)
+				return CommonOrder.STATE_JS;
+		}
+		return CommonOrder.STATE_SX;
+	}
+
+	@Transactional
+	private boolean updateHongBao(HongBaoOrder hongBaoOrder, CommonOrder commonOrder, int type,
+			Map<Integer, HongBaoOrder> notificationMap) throws HongBaoException, UserAccountException {
+		System.out.println(commonOrder.getOrderNo());
+		// 閿佽
+		HongBaoV2 oldHongBao = hongBaoV2Mapper.selectByPrimaryKeyForUpdate(hongBaoOrder.getHongBaoV2().getId());
+		if (oldHongBao == null)
+			throw new HongBaoException(10, "绾㈠寘瀵硅薄涓嶅瓨鍦�");
+		// 宸茬粡澶辨晥锛屽凡缁忛鍙栵紝鏂拌�佺姸鎬佷竴鑷寸殑绾㈠寘涓嶅仛澶勭悊
+		if (oldHongBao.getState() == HongBaoV2.STATE_SHIXIAO || oldHongBao.getState() == HongBaoV2.STATE_YILINGQU)
+			return false;
+
+		if (type == HongBaoV2.TYPE_ZIGOU) {// 鑾峰彇鑷喘鐨勮繑鍒╂瘮渚�
+			BigDecimal fanliRate = hongBaoManageService.getRate(new OrderHongBaoRateParams(0, type, false,
+					oldHongBao.getUrank() == 100, commonOrder.getThirdCreateTime()));
+			// 鍏嶅崟澶勭悊
+			boolean mianDan = false;
+			List<CommonOrder> orderList = commonOrderService.listBySourceTypeAndOrderId(Constant.SOURCE_TYPE_TAOBAO,
+					commonOrder.getOrderNo());
+			if (orderList != null && orderList.size() == 1) {// 鍙湁1涓鍗曟墠鍙備笌鍏嶅崟
+				BigDecimal payMent = commonOrder.getPayment();
+				if (commonOrder.getState() == CommonOrder.STATE_JS)
+					payMent = commonOrder.getSettlement();
+
+				if (payMent.compareTo(new BigDecimal(10)) < 0) {
+					mianDan = userSystemCouponRecordService.isSuccessMianDan(commonOrder.getSourceType(),
+							commonOrder.getOrderNo());
+				}
+			}
+
+			HongBaoV2 hongBao = createFanLiUpdateHongBao(commonOrder, fanliRate, hongBaoOrder.getHongBaoV2().getId(),
+					mianDan);
+
+			// 鏂拌�佺孩鍖呯姸鎬佷竴鑷翠笉澶勭悊
+			if (oldHongBao.getState().intValue() == hongBao.getState())
+				return false;
+
+			if (hongBao.getState() == HongBaoV2.STATE_SHIXIAO) {
+				if (mianDan) {
+					try {
+						userSystemCouponService.updateStateByDrawback(commonOrder.getOrderNo());
+					} catch (Exception e) {
+						e.printStackTrace();
+						throw new HongBaoException(12, "鍏嶅崟鍒搁��娆惧嚭閿�");
+					}
+				}
+			}
+
+			hongBaoV2Mapper.updateByPrimaryKeySelective(hongBao);
+
+			// 鍔犲叆閫氱煡
+			if (notificationMap.get(type) == null) {
+				HongBaoV2 tempHongBao = new HongBaoV2(oldHongBao.getId());
+				tempHongBao.setUserInfo(oldHongBao.getUserInfo());
+				tempHongBao.setMoney(hongBao.getMoney());
+				CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
+				tempCommonOrder.setPayment(commonOrder.getPayment());
+				notificationMap.put(type, new HongBaoOrder(tempCommonOrder, tempHongBao));
+			} else {
+				// 澧炲姞浠樻閲戦涓庤祫閲�
+				HongBaoOrder tempHongBaoOrder = notificationMap.get(type);
+				tempHongBaoOrder.getCommonOrder()
+						.setPayment(tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
+				tempHongBaoOrder.getHongBaoV2()
+						.setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(hongBao.getMoney()));
+				notificationMap.put(type, tempHongBaoOrder);
+			}
+
+			// 鑾峰彇瀛愮孩鍖�
+			List<HongBaoV2> children = hongBaoV2Mapper.listChildrenById(hongBao.getId());
+			if (children != null && children.size() > 0) {
+				for (HongBaoV2 child : children) {
+					if (child.getState() == HongBaoV2.STATE_YILINGQU)
+						continue;
+					BigDecimal rate = null;
+					if (child.getType() == HongBaoV2.TYPE_YIJI) {
+						rate = hongBaoManageService.getRate(new OrderHongBaoRateParams(1, oldHongBao.getType(), false,
+								oldHongBao.getUrank() == 100, commonOrder.getThirdCreateTime()));
+					} else if (child.getType() == HongBaoV2.TYPE_ERJI) {
+						rate = hongBaoManageService.getRate(new OrderHongBaoRateParams(2, oldHongBao.getType(), false,
+								oldHongBao.getUrank() == 100, commonOrder.getThirdCreateTime()));
+					}
+
+					HongBaoV2 childUpdate = createInviteUpdateHongBao(child, hongBao.getState(),
+							MoneyBigDecimalUtil.mul(hongBao.getMoney(), rate.divide(new BigDecimal(100))), commonOrder);
+					hongBaoV2Mapper.updateByPrimaryKeySelective(childUpdate);
+
+					// 鍔犲叆閫氱煡
+					if (notificationMap.get(child.getType()) == null) {
+						HongBaoV2 tempHongBao = new HongBaoV2(child.getId());
+						tempHongBao.setUserInfo(child.getUserInfo());
+						tempHongBao.setMoney(child.getMoney());
+						CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
+						tempCommonOrder.setPayment(commonOrder.getPayment());
+						notificationMap.put(child.getType(), new HongBaoOrder(tempCommonOrder, tempHongBao));
+					} else {
+						// 澧炲姞浠樻閲戦涓庤祫閲�
+						HongBaoOrder tempHongBaoOrder = notificationMap.get(child.getType());
+						tempHongBaoOrder.getCommonOrder().setPayment(
+								tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
+						tempHongBaoOrder.getHongBaoV2()
+								.setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(child.getMoney()));
+						notificationMap.put(child.getType(), tempHongBaoOrder);
+					}
+				}
+			} else {// 淇涔嬪墠浜岀骇,涓夌骇璁㈠崟鏈粺璁″埌鐨勬儏鍐�
+				if (!mianDan) {
+					ThreeSale threeSale = threeSaleSerivce.selectByWorkerId(commonOrder.getUserInfo().getId());
+					if (threeSale != null && threeSale.getSucceedTime() != null
+							&& threeSale.getSucceedTime() <= commonOrder.getThirdCreateTime().getTime()) {
+						UserInfo boss = threeSaleSerivce.getBoss(commonOrder.getUserInfo().getId());
+						if (boss != null) {
+							boss = userInfoService.selectAvailableByPrimaryKey(boss.getId());
+						}
+
+						if (boss != null) {
+							// 鎻掑叆涓�绾у瓙绾㈠寘
+							BigDecimal firstRate = hongBaoManageService.getRate(new OrderHongBaoRateParams(1, type,
+									false, oldHongBao.getUrank() == 100, commonOrder.getThirdCreateTime()));
+							if (firstRate != null && firstRate.compareTo(new BigDecimal(0)) > 0) {
+								HongBaoV2 firstHongbao = createInviteHongBao(boss.getId(), oldHongBao, commonOrder,
+										HongBaoV2.TYPE_YIJI, MoneyBigDecimalUtil.mul(hongBao.getMoney(),
+												firstRate.divide(new BigDecimal(100))));
+								if (firstHongbao != null)
+									addInviteHongBao(firstHongbao, notificationMap, commonOrder);
+							}
+							boss = threeSaleSerivce.getBoss(boss.getId());
+							if (boss != null) {
+								boss = userInfoService.selectAvailableByPrimaryKey(boss.getId());
+							}
+							if (boss != null) {
+								// 浜岀骇绾㈠寘
+								BigDecimal secondRate = hongBaoManageService.getRate(new OrderHongBaoRateParams(2, type,
+										false, oldHongBao.getUrank() == 100, commonOrder.getThirdCreateTime()));
+								if (secondRate != null && secondRate.compareTo(new BigDecimal(0)) > 0) {
+									HongBaoV2 secondHongbao = createInviteHongBao(boss.getId(), oldHongBao, commonOrder,
+											HongBaoV2.TYPE_ERJI, MoneyBigDecimalUtil.mul(hongBao.getMoney(),
+													secondRate.divide(new BigDecimal(100))));
+									if (secondHongbao != null)
+										addInviteHongBao(secondHongbao, notificationMap, commonOrder);
+								}
+							}
+						}
+					}
+				}
+			}
+		} else if (type == HongBaoV2.TYPE_SHARE_GOODS) {
+			BigDecimal fanliRate = hongBaoManageService.getRate(new OrderHongBaoRateParams(0, type, false,
+					oldHongBao.getUrank() == 100, commonOrder.getThirdCreateTime()));
+
+			HongBaoV2 hongBao = createShareUpdateHongBao(commonOrder, fanliRate, oldHongBao.getId());
+			hongBaoV2Mapper.updateByPrimaryKeySelective(hongBao);
+			// 閫氱煡
+			if (notificationMap.get(type) == null) {
+				HongBaoV2 tempHongBao = new HongBaoV2(hongBao.getId());
+				tempHongBao.setUserInfo(hongBaoOrder.getHongBaoV2().getUserInfo());
+				tempHongBao.setMoney(hongBao.getMoney());
+				CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
+				tempCommonOrder.setPayment(commonOrder.getPayment());
+				notificationMap.put(type, new HongBaoOrder(tempCommonOrder, tempHongBao));
+			} else {
+				// 澧炲姞浠樻閲戦涓庤祫閲�
+				HongBaoOrder tempHongBaoOrder = notificationMap.get(type);
+				tempHongBaoOrder.getCommonOrder()
+						.setPayment(tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
+				tempHongBaoOrder.getHongBaoV2()
+						.setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(hongBao.getMoney()));
+				notificationMap.put(type, tempHongBaoOrder);
+			}
+
+			// 鑾峰彇瀛愮孩鍖�
+			List<HongBaoV2> children = hongBaoV2Mapper.listChildrenById(hongBao.getId());
+			if (children != null)
+				for (HongBaoV2 child : children) {
+					if (child.getState() == HongBaoV2.STATE_YILINGQU)
+						continue;
+
+					BigDecimal rate = null;
+					if (child.getType() == HongBaoV2.TYPE_SHARE_YIJI) {
+						rate = hongBaoManageService.getRate(new OrderHongBaoRateParams(1, oldHongBao.getType(), false,
+								oldHongBao.getUrank() == 100, commonOrder.getThirdCreateTime()));
+					} else if (child.getType() == HongBaoV2.TYPE_SHARE_ERJI) {
+						rate = hongBaoManageService.getRate(new OrderHongBaoRateParams(2, oldHongBao.getType(), false,
+								oldHongBao.getUrank() == 100, commonOrder.getThirdCreateTime()));
+					}
+					HongBaoV2 childUpdate = createInviteUpdateHongBao(child, hongBao.getState(),
+							MoneyBigDecimalUtil.mul(hongBao.getMoney(), rate.divide(new BigDecimal(100))), commonOrder);
+					hongBaoV2Mapper.updateByPrimaryKeySelective(childUpdate);
+					// 娣诲姞閫氱煡
+					if (notificationMap.get(child.getType()) == null) {
+						HongBaoV2 tempHongBao = new HongBaoV2(child.getId());
+						tempHongBao.setUserInfo(child.getUserInfo());
+						tempHongBao
+								.setMoney(childUpdate.getMoney() == null ? new BigDecimal(0) : childUpdate.getMoney());
+						CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
+						tempCommonOrder.setPayment(commonOrder.getPayment());
+						notificationMap.put(child.getType(), new HongBaoOrder(tempCommonOrder, tempHongBao));
+					} else {
+						// 澧炲姞浠樻閲戦涓庤祫閲�
+						HongBaoOrder tempHongBaoOrder = notificationMap.get(child.getType());
+						if (commonOrder.getPayment() != null)
+							tempHongBaoOrder.getCommonOrder().setPayment(
+									tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
+						if (childUpdate.getMoney() != null)
+							tempHongBaoOrder.getHongBaoV2()
+									.setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(childUpdate.getMoney()));
+						notificationMap.put(child.getType(), tempHongBaoOrder);
+					}
+
+				}
+		} else
+			throw new HongBaoException(2, "type閿欒");
+
+		return true;
+	}
+
+	@Transactional
+	private void saveHongBao(CommonOrder commonOrder, int type, boolean vip, Map<Integer, HongBaoOrder> notificationMap)
+			throws HongBaoException, UserAccountException {
+		if (type == HongBaoV2.TYPE_ZIGOU) {// 鑾峰彇鑷喘鐨勮繑鍒╂瘮渚�
+			BigDecimal fanliRate = hongBaoManageService
+					.getRate(new OrderHongBaoRateParams(0, type, false, vip, commonOrder.getThirdCreateTime()));
+			// 鏌ヨ鏄惁鏈夊厤鍗曡鍒�
+			BigDecimal mianDanMoney = null;
+			if (commonOrder.getState() == CommonOrder.STATE_JS || commonOrder.getState() == CommonOrder.STATE_FK) {
+				List<CommonOrder> orderList = commonOrderService.listBySourceTypeAndOrderId(commonOrder.getSourceType(),
+						commonOrder.getOrderNo());
+				if (orderList != null && orderList.size() == 1) {// 鍙湁1涓鍗曟墠鍙備笌鍏嶅崟
+					BigDecimal payMent = commonOrder.getPayment();
+					if (commonOrder.getState() == CommonOrder.STATE_JS)
+						payMent = commonOrder.getSettlement();
+
+					CommonOrderGoods goods = commonOrderGoodsMapper
+							.selectByPrimaryKey(commonOrder.getCommonOrderGoods().getId());
+					if (goods != null) {
+						try {
+							if (userSystemCouponService.updateCouponRecordUsed(commonOrder.getUserInfo().getId(),
+									commonOrder.getOrderNo(), payMent, Long.parseLong(goods.getGoodsId())))
+								mianDanMoney = payMent;
+						} catch (NumberFormatException e) {
+							throw new HongBaoException(10, "鍏嶅崟鍟嗗搧澶勭悊鍑洪敊");
+						} catch (Exception e) {
+							e.printStackTrace();
+							throw new HongBaoException(11, "鍏嶅崟鍟嗗搧澶勭悊鍑洪敊");
+						}
+					}
+				}
+			} else if (commonOrder.getState() == CommonOrder.STATE_SX) {// 璁剧疆鍏嶅崟鍒稿け鏁�
+				commonOrder.setPayment(new BigDecimal(0));// 璁㈠崟澶辨晥鍚庣殑浠樻閲戦璁剧疆涓�0
+				try {
+					userSystemCouponService.updateStateByDrawback(commonOrder.getOrderNo());
+				} catch (Exception e) {
+					e.printStackTrace();
+				}
+			}
+
+			HongBaoV2 hongBao = createFanLiHongBao(commonOrder, fanliRate, mianDanMoney, vip);
+			if (hongBao == null)
+				return;
+			addFanLiOrShareHongBao(hongBao, commonOrder, notificationMap);
+			UserInfo boss = threeSaleSerivce.getBoss(hongBao.getUserInfo().getId());
+			if (boss != null && hongBao.getState() != HongBaoV2.STATE_SHIXIAO && mianDanMoney == null) {// 1绾OSS瀛樺湪涓旂孩鍖呮湭澶辨晥,鍏嶅崟涓嶆敮鎸佸绾у垎閿�
+				// 鎻掑叆涓�绾у瓙绾㈠寘
+				BigDecimal firstRate = hongBaoManageService
+						.getRate(new OrderHongBaoRateParams(1, type, false, vip, commonOrder.getThirdCreateTime()));
+				if (firstRate.compareTo(new BigDecimal(0)) <= 0)// 杩斿埄姣斾緥涓�0鐨勪笉鍒嗘垚
+					return;
+
+				HongBaoV2 firstHongbao = createInviteHongBao(boss.getId(), hongBao, commonOrder, HongBaoV2.TYPE_YIJI,
+						MoneyBigDecimalUtil.mul(hongBao.getMoney(), firstRate.divide(new BigDecimal(100))));
+
+				addInviteHongBao(firstHongbao, notificationMap, commonOrder);
+
+				// 鎻掑叆浜岀骇瀛愮孩鍖�
+				boss = threeSaleSerivce.getBoss(boss.getId());
+				if (boss != null) {// 浜岀骇BOSS瀛樺湪涓旀槸闈炰細鍛樿鍗�
+					BigDecimal secondRate = hongBaoManageService
+							.getRate(new OrderHongBaoRateParams(2, type, false, vip, commonOrder.getThirdCreateTime()));
+					if (secondRate.compareTo(new BigDecimal(0)) <= 0)
+						return;
+					HongBaoV2 secondHongbao = createInviteHongBao(boss.getId(), hongBao, commonOrder,
+							HongBaoV2.TYPE_ERJI,
+							MoneyBigDecimalUtil.mul(hongBao.getMoney(), secondRate.divide(new BigDecimal(100))));
+					addInviteHongBao(secondHongbao, notificationMap, commonOrder);
+				}
+			}
+
+		} else if (type == HongBaoV2.TYPE_SHARE_GOODS) {
+			// 鍒嗕韩璧氫笉鍔犲叆澶辨晥鐨勮鍗�
+			if (commonOrder.getState() == CommonOrder.STATE_SX || commonOrder.getState() == CommonOrder.STATE_WQ)
+				return;
+			// 鍒嗕韩璧�
+			BigDecimal shareRate = null;
+			if (commonOrder.getSourceType() == Constant.SOURCE_TYPE_TAOBAO
+					&& commonOrder.getSourcePosition().equalsIgnoreCase(TaoBaoConstant.TAOBAO_TLJ_RELATION_PID_DEFAULT))// 鏉ヨ嚜浜庢窐绀奸噾鐨勫垎浜�
+				shareRate = hongBaoManageService.getTLJShareRate(commonOrder.getCreateTime().getTime());
+			else
+				shareRate = hongBaoManageService
+						.getRate(new OrderHongBaoRateParams(0, type, false, vip, commonOrder.getThirdCreateTime()));
+
+			if (shareRate.compareTo(new BigDecimal(0)) <= 0)
+				return;
+			HongBaoV2 hongBao = createShareHongBao(commonOrder, shareRate,vip);
+			if (hongBao == null)
+				return;
+			addFanLiOrShareHongBao(hongBao, commonOrder, notificationMap);
+			// 4鏈�17鏃ュ悗鎵嶆湁涓�绾у垎浜禋
+			if (commonOrder.getThirdCreateTime().getTime() > TimeUtil.convertToTimeTemp("2019-04-17", "yyyy-MM-dd")) {
+				UserInfo boss = threeSaleSerivce.getBoss(hongBao.getUserInfo().getId());
+				if (boss != null) {
+					BigDecimal firstLevelRate = hongBaoManageService
+							.getRate(new OrderHongBaoRateParams(1, type, false, vip, commonOrder.getThirdCreateTime()));
+					if (firstLevelRate == null || firstLevelRate.compareTo(new BigDecimal("0")) == 0)
+						return;
+
+					HongBaoV2 firstHongbao = createInviteHongBao(boss.getId(), hongBao, commonOrder,
+							HongBaoV2.TYPE_SHARE_YIJI,
+							MoneyBigDecimalUtil.mul(hongBao.getMoney(), firstLevelRate.divide(new BigDecimal(100))));
+
+					addInviteHongBao(firstHongbao, notificationMap, commonOrder);
+
+					// 浜岀骇鍒嗕韩璧�
+					boss = threeSaleSerivce.getBoss(boss.getId());
+					if (boss != null) {
+						BigDecimal secondLevelRate = hongBaoManageService.getRate(
+								new OrderHongBaoRateParams(2, type, false, vip, commonOrder.getThirdCreateTime()));
+						if (secondLevelRate.compareTo(new BigDecimal(0)) <= 0)// 杩斿埄姣斾緥涓�0灏变笉缁熻
+							return;
+						HongBaoV2 secondChild = createInviteHongBao(boss.getId(), hongBao, commonOrder,
+								HongBaoV2.TYPE_SHARE_ERJI, MoneyBigDecimalUtil.mul(hongBao.getMoney(),
+										secondLevelRate.divide(new BigDecimal(100))));
+						addInviteHongBao(secondChild, notificationMap, commonOrder);
+					}
+				}
+			}
+
+			// 淇敼缁熻鏁版嵁
+			Long goodsId = commonOrder.getCommonOrderGoods().getId();
+			// 鏌ヨ鍟嗗搧
+			CommonOrderGoods goods = commonOrderGoodsMapper.selectByPrimaryKey(goodsId);
+
+			HongBao hb = new HongBao();
+			if (goods != null)
+				hb.setAuctionId(Long.parseLong(goods.getGoodsId()));
+			hb.setUserInfo(hongBao.getUserInfo());
+			hb.setMoney(hongBao.getMoney());
+
+			// TODO 鏇存柊鍒嗕韩璁板綍鏁版嵁
+			// try {
+			// userShareGoodsGroupService.updateOrderRecord(hb,
+			// commonOrder.getSourceType());
+			// } catch (UserShareGoodsRecordException e) {
+			// try {
+			// LogHelper.errorDetailInfo(e);
+			// } catch (Exception e1) {
+			// e1.printStackTrace();
+			// }
+			// }
+		} else
+			throw new HongBaoException(2, "type閿欒");
+	}
+
+	/**
+	 * 娣诲姞閭�璇疯禋绾㈠寘
+	 * 
+	 * @param child
+	 * @param notificationMap
+	 * @param commonOrder
+	 */
+	private void addInviteHongBao(HongBaoV2 child, Map<Integer, HongBaoOrder> notificationMap,
+			CommonOrder commonOrder) {
+		if (child != null) {
+			hongBaoV2Mapper.insertSelective(child);
+			// 鐢ㄦ埛閫氱煡
+			if (notificationMap.get(child.getType()) == null) {
+				HongBaoV2 tempHongBao = new HongBaoV2(child.getId());
+				tempHongBao.setUserInfo(child.getUserInfo());
+				tempHongBao.setMoney(child.getMoney());
+				CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
+				tempCommonOrder.setPayment(commonOrder.getPayment());
+				notificationMap.put(child.getType(), new HongBaoOrder(tempCommonOrder, tempHongBao));
+			} else {
+				// 澧炲姞浠樻閲戦涓庤祫閲�
+				HongBaoOrder tempHongBaoOrder = notificationMap.get(child.getType());
+				tempHongBaoOrder.getCommonOrder()
+						.setPayment(tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
+				tempHongBaoOrder.getHongBaoV2()
+						.setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(child.getMoney()));
+				notificationMap.put(child.getType(), tempHongBaoOrder);
+			}
+		}
+	}
+
+	/**
+	 * 鍒涘缓閭�璇风孩鍖�
+	 * 
+	 * @param uid
+	 * @param parent
+	 * @param commonOrder
+	 * @param hongBaoType
+	 * @param money
+	 * @return
+	 */
+	private HongBaoV2 createInviteHongBao(Long uid, HongBaoV2 parent, CommonOrder commonOrder, int hongBaoType,
+			BigDecimal money) {
+		if (parent == null)
+			return null;
+		if (parent.getState() == HongBaoV2.STATE_SHIXIAO)
+			return null;
+		UserInfo user = userInfoService.selectAvailableByPrimaryKey(uid);
+		if (user == null)
+			return null;
+		boolean isVIP = userVIPInfoService.isVIP(uid);
+
+		HongBaoV2 child = new HongBaoV2();
+		child.setParent(parent);
+		child.setType(hongBaoType);
+		child.setMoney(money);
+
+		if (commonOrder.getState() == CommonOrder.STATE_FK) {
+			child.setState(HongBaoV2.STATE_BUKELINGQU);
+		} else if (commonOrder.getState() == CommonOrder.STATE_JS || commonOrder.getState() == CommonOrder.STATE_WQ) {
+			child.setState(HongBaoV2.STATE_KELINGQU);
+			Calendar calendar = Calendar.getInstance();
+			calendar.setTime(commonOrder.getSettleTime());
+			calendar.add(Calendar.MONTH, 1);
+			child.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
+					calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25", "yyyy-M-dd")));
+		}
+
+		child.setUserInfo(user);
+		child.setUrank(user.getRank());
+		child.setVersion(2);
+		child.setCreateTime(new Date());
+		child.setOrderType(commonOrder.getSourceType());
+		if (child.getMoney() == null)
+			return null;
+		if (child.getMoney().compareTo(new BigDecimal(0)) <= 0 && !isVIP)
+			return null;
+		return child;
+	}
+
+	/**
+	 * 
+	 * @param commonOrder
+	 *            - 璁㈠崟淇℃伅
+	 * @param fanliRate
+	 *            -杩斿埄姣斾緥
+	 * @param mianDanMoney
+	 *            鍏嶅崟閲戦
+	 * @param isVIP-鏄惁涓篤IP璁㈠崟
+	 * @return
+	 * @throws HongBaoException
+	 * @throws UserAccountException
+	 */
+	private HongBaoV2 createFanLiHongBao(CommonOrder commonOrder, BigDecimal fanliRate, BigDecimal mianDanMoney,
+			boolean isVIP) throws HongBaoException, UserAccountException {
+		HongBaoV2 hongBao = new HongBaoV2();
+		hongBao.setUserInfo(commonOrder.getUserInfo());
+		hongBao.setCreateTime(new Date());
+		hongBao.setType(HongBaoV2.TYPE_ZIGOU);
+		hongBao.setVersion(2);
+		if (commonOrder.getState() == CommonOrder.STATE_FK) {
+			hongBao.setState(HongBaoV2.STATE_BUKELINGQU);
+			hongBao.setMoney(MoneyBigDecimalUtil.mul(commonOrder.getEstimate(), fanliRate.divide(new BigDecimal(100))));
+		} else if (commonOrder.getState() == CommonOrder.STATE_JS || CommonOrder.STATE_WQ == commonOrder.getState()) {
+			hongBao.setState(HongBaoV2.STATE_KELINGQU);
+			hongBao.setMoney(MoneyBigDecimalUtil.mul(commonOrder.geteIncome(), fanliRate.divide(new BigDecimal(100))));
+			if (commonOrder.getSourceType() == Constant.SOURCE_TYPE_PDD)// 鎷煎澶�15澶╁崐鍒拌处
+				hongBao.setPreGetTime(new Date(
+						commonOrder.getSettleTime().getTime() + 1000 * 60 * 60 * 24 * 15L + 1000 * 60 * 60 * 12L));
+			else
+				hongBao.setPreGetTime(new Date(commonOrder.getSettleTime().getTime() + 1000 * 60 * 60 * 24 * 15L));
+		} else if (commonOrder.getState() == CommonOrder.STATE_SX) {
+			hongBao.setState(HongBaoV2.STATE_SHIXIAO);
+			hongBao.setMoney(new BigDecimal(0));
+		} else {
+			throw new HongBaoException(3, "缁存潈璁㈠崟涓嶈兘鍒涘缓绾㈠寘");
+		}
+
+		if (mianDanMoney != null)
+			hongBao.setMoney(mianDanMoney);
+
+		UserInfo user = userInfoService.getUserById(commonOrder.getUserInfo().getId());
+		if (user == null)
+			throw new UserAccountException(1001, "鐢ㄦ埛涓嶅瓨鍦�/琚皝绂�");
+		if (isVIP) {
+			hongBao.setUrank(100);// VIP鐨勭瓑绾ц缃负100
+		} else {
+			hongBao.setUrank(user.getRank());
+		}
+		hongBao.setOrderType(commonOrder.getSourceType());
+		return hongBao;
+	}
+
+	private HongBaoV2 createFanLiUpdateHongBao(CommonOrder commonOrder, BigDecimal fanliRate, Long hongBaoId,
+			boolean mianDan) throws HongBaoException, UserAccountException {
+		HongBaoV2 hongBao = new HongBaoV2(hongBaoId);
+		hongBao.setUpdateTime(new Date());
+		// 鏇存敼鐘舵�佷笌璧勯噾
+		if (commonOrder.getState() == CommonOrder.STATE_FK) {
+			hongBao.setState(HongBaoV2.STATE_BUKELINGQU);
+			hongBao.setMoney(MoneyBigDecimalUtil.mul(commonOrder.getEstimate(), fanliRate.divide(new BigDecimal(100))));
+			if (mianDan)
+				hongBao.setMoney(commonOrder.getPayment());
+		} else if (commonOrder.getState() == CommonOrder.STATE_JS || commonOrder.getState() == CommonOrder.STATE_WQ) {
+			hongBao.setState(HongBaoV2.STATE_KELINGQU);
+			hongBao.setMoney(MoneyBigDecimalUtil.mul(commonOrder.geteIncome(), fanliRate.divide(new BigDecimal(100))));
+			if (commonOrder.getSourceType() == Constant.SOURCE_TYPE_PDD)// 鎷煎澶�15澶╄繃1涓皬鏃跺埌璐�
+				hongBao.setPreGetTime(new Date(
+						commonOrder.getSettleTime().getTime() + 1000 * 60 * 60 * 24 * 15L + 1000 * 60 * 60 * 1L));
+			else
+				hongBao.setPreGetTime(new Date(commonOrder.getSettleTime().getTime() + 1000 * 60 * 60 * 24 * 15L));
+			if (mianDan)
+				hongBao.setMoney(commonOrder.getSettlement().compareTo(commonOrder.getPayment()) <= 0
+						? commonOrder.getSettlement() : commonOrder.getPayment());// 杩斿埄缁撶畻涓庝粯娆捐緝灏忕殑閲戦
+		} else if (commonOrder.getState() == CommonOrder.STATE_SX) {
+			hongBao.setState(HongBaoV2.STATE_SHIXIAO);
+			hongBao.setMoney(new BigDecimal(0));
+		}
+		return hongBao;
+	}
+
+	/**
+	 * 鍒嗕韩璧氭洿鏂�
+	 * 
+	 * @param commonOrder
+	 * @param fanliRate
+	 * @param hongBaoId
+	 * @param mianDan
+	 * @return
+	 * @throws HongBaoException
+	 * @throws UserAccountException
+	 */
+	private HongBaoV2 createShareUpdateHongBao(CommonOrder commonOrder, BigDecimal fanliRate, Long hongBaoId)
+			throws HongBaoException, UserAccountException {
+		HongBaoV2 hongBao = new HongBaoV2(hongBaoId);
+		hongBao.setUpdateTime(new Date());
+		// 鏇存敼鐘舵�佷笌璧勯噾
+		if (commonOrder.getState() == CommonOrder.STATE_FK) {
+			hongBao.setState(HongBaoV2.STATE_BUKELINGQU);
+			hongBao.setMoney(MoneyBigDecimalUtil.mul(commonOrder.getEstimate(), fanliRate.divide(new BigDecimal(100))));
+		} else if (commonOrder.getState() == CommonOrder.STATE_JS || commonOrder.getState() == CommonOrder.STATE_WQ) {
+			hongBao.setState(HongBaoV2.STATE_KELINGQU);
+			hongBao.setMoney(MoneyBigDecimalUtil.mul(commonOrder.geteIncome(), fanliRate.divide(new BigDecimal(100))));
+			Calendar calendar = Calendar.getInstance();
+			calendar.setTime(commonOrder.getSettleTime());
+			calendar.add(Calendar.MONTH, 1);
+			hongBao.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
+					calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25", "yyyy-M-dd")));
+		} else if (commonOrder.getState() == CommonOrder.STATE_SX) {
+			hongBao.setState(HongBaoV2.STATE_SHIXIAO);
+			hongBao.setMoney(new BigDecimal(0));
+		}
+		return hongBao;
+	}
+
+	private HongBaoV2 createInviteUpdateHongBao(HongBaoV2 oldChild, int mainHongBaoState, BigDecimal money,
+			CommonOrder commonOrder) {
+		HongBaoV2 childUpdate = new HongBaoV2(oldChild.getId());
+		childUpdate.setState(mainHongBaoState);
+		childUpdate.setUpdateTime(new Date());
+		childUpdate.setMoney(money);
+		// 浠ュ疄闄呮敹鍏ヤ负鍑嗚绠楅浼版敹鐩�
+		if (mainHongBaoState == HongBaoV2.STATE_KELINGQU) {
+			Calendar calendar = Calendar.getInstance();
+			calendar.setTime(commonOrder.getSettleTime());
+			calendar.add(Calendar.MONTH, 1);
+			childUpdate.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
+					calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25", "yyyy-M-dd")));
+		}
+		return childUpdate;
+	}
+
+	private void addFanLiOrShareHongBao(HongBaoV2 hongBao, CommonOrder commonOrder,
+			Map<Integer, HongBaoOrder> notificationMap) {
+		hongBaoV2Mapper.insertSelective(hongBao);
+		// 娣诲姞绾㈠寘涓庤鍗曠殑鏄犲皠
+		HongBaoOrder hongBaoOrder = new HongBaoOrder();
+		hongBaoOrder.setCommonOrder(commonOrder);
+		hongBaoOrder.setCreateTime(new Date());
+		hongBaoOrder.setHongBaoV2(hongBao);
+		hongBaoOrderMapper.insertSelective(hongBaoOrder);
+		// 鍔犲叆閫氱煡
+		if (notificationMap.get(hongBao.getType()) == null) {
+			HongBaoV2 tempHongBao = new HongBaoV2(hongBao.getId());
+			tempHongBao.setUserInfo(hongBao.getUserInfo());
+			tempHongBao.setMoney(hongBao.getMoney());
+			CommonOrder tempCommonOrder = new CommonOrder(commonOrder.getId());
+			tempCommonOrder.setPayment(commonOrder.getPayment());
+			notificationMap.put(hongBao.getType(), new HongBaoOrder(tempCommonOrder, tempHongBao));
+		} else {
+			// 澧炲姞浠樻閲戦涓庤祫閲�
+			HongBaoOrder tempHongBaoOrder = notificationMap.get(hongBao.getType());
+			tempHongBaoOrder.getCommonOrder()
+					.setPayment(tempHongBaoOrder.getCommonOrder().getPayment().add(commonOrder.getPayment()));
+			tempHongBaoOrder.getHongBaoV2()
+					.setMoney(tempHongBaoOrder.getHongBaoV2().getMoney().add(hongBao.getMoney()));
+			notificationMap.put(hongBao.getType(), tempHongBaoOrder);
+		}
+	}
+
+	/**
+	 * 鍒涘缓鍒嗕韩璧氱孩鍖�
+	 * 
+	 * @param commonOrder
+	 * @param shareRate
+	 * @return
+	 * @throws HongBaoException
+	 * @throws UserAccountException
+	 */
+	private HongBaoV2 createShareHongBao(CommonOrder commonOrder, BigDecimal shareRate, boolean isVip)
+			throws HongBaoException, UserAccountException {
+		HongBaoV2 hongBao = new HongBaoV2();
+		hongBao.setCreateTime(new Date());
+		hongBao.setType(HongBaoV2.TYPE_SHARE_GOODS);
+		hongBao.setVersion(2);
+		if (commonOrder.getState() == CommonOrder.STATE_FK) {
+			hongBao.setState(HongBaoV2.STATE_BUKELINGQU);
+			hongBao.setMoney(MoneyBigDecimalUtil.mul(commonOrder.getEstimate(), shareRate.divide(new BigDecimal(100))));
+		} else if (commonOrder.getState() == CommonOrder.STATE_JS || commonOrder.getState() == CommonOrder.STATE_WQ) {
+			hongBao.setState(HongBaoV2.STATE_KELINGQU);
+			hongBao.setMoney(MoneyBigDecimalUtil.mul(commonOrder.geteIncome(), shareRate.divide(new BigDecimal(100))));
+			Calendar calendar = Calendar.getInstance();
+			calendar.setTime(commonOrder.getSettleTime());
+			calendar.add(Calendar.MONTH, 1);
+			hongBao.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
+					calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25", "yyyy-M-dd")));
+		}
+		UserInfo user = userInfoService.getUserById(commonOrder.getUserInfo().getId());
+		if (user == null)
+			throw new UserAccountException(1001, "鐢ㄦ埛涓嶅瓨鍦�/琚皝绂�");
+		if (isVip)
+			hongBao.setUrank(100);
+		else
+			hongBao.setUrank(user.getRank());
+		hongBao.setUserInfo(user);
+		hongBao.setOrderType(commonOrder.getSourceType());
+		return hongBao;
+	}
+
+}

--
Gitblit v1.8.0