From 7e7db2fa55a9a3af46d4fd8ede0dee147f101d64 Mon Sep 17 00:00:00 2001
From: yujian <yujian@163.com>
Date: 星期六, 09 五月 2020 21:41:27 +0800
Subject: [PATCH] 2.1需求

---
 fanli/src/main/java/com/yeshi/fanli/controller/admin/PushGoodsController.java                   |   32 
 fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserInfoController.java                |    4 
 fanli/src/main/java/com/yeshi/fanli/controller/client/v1/PushController.java                    |  230 ++--
 fanli/src/main/java/com/yeshi/fanli/controller/admin/homemodule/SpecialCardAdminController.java |   18 
 fanli/src/main/java/com/yeshi/fanli/dao/order/OrderMoneyDailyCountDao.java                      |  150 ++
 fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/GoodsEvaluateServiceImpl.java          |  230 ++-
 fanli/src/main/java/com/yeshi/fanli/service/impl/money/extract/ExtractServiceImpl.java          |   11 
 fanli/src/main/java/com/yeshi/fanli/entity/dynamic/GoodsEvaluate.java                           |   14 
 fanli/src/main/java/com/yeshi/fanli/controller/client/v2/InviteControllerV2.java                |   41 
 fanli/src/main/java/com/yeshi/fanli/service/impl/homemodule/SpecialExtraServiceImpl.java        |   60 +
 fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserMoneyControllerV2.java             |  405 +++++++
 fanli/src/main/java/com/yeshi/fanli/dao/mybatis/HongBaoV2CountMapper.java                       |   18 
 fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserCustomSettingsServiceImpl.java        |    9 
 fanli/src/main/java/com/yeshi/fanli/vo/money/MoneyPredictVO.java                                |   75 +
 fanli/src/main/java/com/yeshi/fanli/controller/admin/GoodsEvaluateAdminController.java          |   25 
 fanli/src/main/java/com/yeshi/fanli/mapping/hongbao/HongBaoV2CountMapper.xml                    |   16 
 fanli/src/main/java/com/yeshi/fanli/entity/system/ConfigKeyEnum.java                            |    3 
 fanli/src/test/java/org/fanli/MyBatisProduce2.java                                              |   17 
 fanli/src/main/java/com/yeshi/fanli/dao/mybatis/ExtractMapper.java                              |   14 
 fanli/src/main/java/com/yeshi/fanli/service/inter/homemodule/SpecialService.java                |    6 
 fanli/src/main/java/com/yeshi/fanli/dao/dynamic/GoodsEvaluateDao.java                           |  127 +
 fanli/src/main/java/com/yeshi/fanli/vo/money/IncomeDetailVO.java                                |   34 
 fanli/src/main/java/com/yeshi/fanli/entity/bus/homemodule/SpecialExtra.java                     |   75 +
 fanli/src/main/java/com/yeshi/fanli/mapping/ExtractMapper.xml                                   |   40 
 fanli/src/main/java/com/yeshi/fanli/mapping/homemodule/SpecialExtraMapper.xml                   |   43 
 fanli/src/main/java/com/yeshi/fanli/dao/user/ThreeSaleFocusInfoDao.java                         |  174 +-
 fanli/src/main/java/com/yeshi/fanli/entity/order/OrderMoneyDailyCount.java                      |  118 ++
 fanli/src/main/java/com/yeshi/fanli/controller/client/v2/DynamicControllerV2.java               |  131 ++
 fanli/src/main/java/com/yeshi/fanli/service/inter/push/PushGoodsService.java                    |    8 
 fanli/src/main/java/com/yeshi/fanli/vo/homemodule/SpecialVO.java                                |   32 
 fanli/src/main/java/com/yeshi/fanli/dao/mybatis/homemodule/SpecialExtraMapper.java              |    8 
 fanli/src/main/java/com/yeshi/fanli/dto/user/ThreeSaleFocusDTO.java                             |   41 
 fanli/src/main/java/com/yeshi/fanli/mapping/order/CommonOrderCountMapper.xml                    |    3 
 fanli/src/main/java/com/yeshi/fanli/service/impl/homemodule/SpecialServiceImpl.java             |   87 +
 fanli/src/main/java/com/yeshi/fanli/dao/order/DateTypeEnum.java                                 |   32 
 fanli/src/main/java/com/yeshi/fanli/service/impl/push/PushGoodsServiceImpl.java                 |  218 +++
 fanli/src/main/java/com/yeshi/fanli/service/impl/count/HongBaoV2CountServiceImpl.java           |   22 
 fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderMoneyDailyCountServiceImpl.java     |   53 +
 fanli/src/main/java/com/yeshi/fanli/entity/push/PushGoods.java                                  |   53 
 fanli/src/main/java/com/yeshi/fanli/vo/money/MoneyStatisticVO.java                              |  159 +++
 fanli/src/main/java/com/yeshi/fanli/service/inter/count/HongBaoV2CountService.java              |   19 
 fanli/src/main/java/com/yeshi/fanli/service/inter/order/OrderMoneyDailyCountService.java        |   25 
 fanli/src/main/java/com/yeshi/fanli/service/inter/dynamic/GoodsEvaluateService.java             |    6 
 fanli/src/main/java/com/yeshi/fanli/service/inter/money/extract/ExtractService.java             |   16 
 fanli/src/main/java/com/yeshi/fanli/vo/push/PushRecommendVO.java                                |  110 ++
 fanli/src/main/java/com/yeshi/fanli/mapping/push/PushGoodsMapper.xml                            |   18 
 fanli/src/main/java/com/yeshi/fanli/entity/bus/user/ThreeSaleFocusInfo.java                     |   15 
 fanli/src/main/java/com/yeshi/fanli/service/inter/homemodule/SpecialExtraService.java           |   27 
 48 files changed, 2,610 insertions(+), 462 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/admin/GoodsEvaluateAdminController.java b/fanli/src/main/java/com/yeshi/fanli/controller/admin/GoodsEvaluateAdminController.java
index 06e5ae7..846e223 100644
--- a/fanli/src/main/java/com/yeshi/fanli/controller/admin/GoodsEvaluateAdminController.java
+++ b/fanli/src/main/java/com/yeshi/fanli/controller/admin/GoodsEvaluateAdminController.java
@@ -407,14 +407,14 @@
 	 * @param out
 	 */
 	@RequestMapping(value = "saveActivityPic")
-	public void saveActivityPic(String callback, String pid, ImgInfo imgInfo, HttpServletRequest request,
+	public void saveActivityPic(String callback, String pid, ImgInfo imgInfo, String picUrls, HttpServletRequest request,
 			PrintWriter out) {
 		try {
 			MultipartHttpServletRequest fileRequest = null;
 			if (request instanceof MultipartHttpServletRequest) {
 				fileRequest = (MultipartHttpServletRequest) request;
 			}
-			goodsEvaluateService.saveActivityPic(pid, imgInfo, fileRequest);
+			goodsEvaluateService.saveActivityPic(pid, imgInfo,picUrls, fileRequest);
 			JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("淇濆瓨鎴愬姛"));
 		} catch (GoodsEvaluateException e) {
 			JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getMsg()));
@@ -436,19 +436,19 @@
 		try {
 			String videoPic = "";
 			String videoUrl = "";
-			String activityPic = "";
 			String activityUrl = "";
+			List<String> list = new ArrayList<String>();
 			GoodsEvaluate goodsEvaluate = goodsEvaluateService.getById(pid);
 			if (goodsEvaluate != null && goodsEvaluate.getImgList() != null && goodsEvaluate.getImgList().size() > 0) {
+				activityUrl = goodsEvaluate.getJumpLink();
 				List<ImgInfo> imgList = goodsEvaluate.getImgList();
 				for (ImgInfo imgInfo : imgList) {
 					ImgEnum type = imgInfo.getType();
 					if (type == ImgEnum.video) {
 						videoPic = imgInfo.getUrl();
 						videoUrl = imgInfo.getVideoUrl();
-					} else if (type == ImgEnum.activity) {
-						activityPic = imgInfo.getUrl();
-						activityUrl = imgInfo.getActivityUrl();
+					} else {
+						list.add(imgInfo.getUrl());
 					}
 				}
 			}
@@ -456,7 +456,7 @@
 			JSONObject data = new JSONObject();
 			data.put("videoUrl", videoUrl);
 			data.put("videoPic", videoPic);
-			data.put("activityPic", activityPic);
+			data.put("listPic", list);
 			data.put("activityUrl", activityUrl);
 			JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
 		} catch (Exception e) {
@@ -608,8 +608,7 @@
 	 * @param out
 	 */
 	@RequestMapping(value = "query")
-	public void query(String callback, Integer pageIndex, Integer pageSize, String key, Integer state,
-			PrintWriter out) {
+	public void query(String callback, Integer pageIndex, Integer pageSize, String key, Integer state, String typeEnum, PrintWriter out) {
 		if (pageIndex == null || pageIndex < 1) {
 			pageIndex = 1;
 		}
@@ -618,7 +617,7 @@
 		}
 
 		try {
-			List<GoodsEvaluate> list = goodsEvaluateService.query((pageIndex - 1) * pageSize, pageSize, key, state, 1);
+			List<GoodsEvaluate> list = goodsEvaluateService.query((pageIndex - 1) * pageSize, pageSize, key, state, 1, typeEnum);
 			if (list == null || list.size() == 0) {
 				JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("鏆傛棤鏁版嵁"));
 				return;
@@ -640,7 +639,7 @@
 				}
 			}
 
-			long count = goodsEvaluateService.count(key, state, 1);
+			long count = goodsEvaluateService.count(key, state, 1, typeEnum);
 
 			int totalPage = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
 			PageEntity pe = new PageEntity(pageIndex, pageSize, count, totalPage);
@@ -675,7 +674,7 @@
 		}
 
 		try {
-			List<GoodsEvaluate> list = goodsEvaluateService.query((pageIndex - 1) * pageSize, pageSize, key, state, 2);
+			List<GoodsEvaluate> list = goodsEvaluateService.query((pageIndex - 1) * pageSize, pageSize, key, state, 2, null);
 			if (list == null || list.size() == 0) {
 				JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("鏆傛棤鏁版嵁"));
 				return;
@@ -697,7 +696,7 @@
 				}
 			}
 
-			long count = goodsEvaluateService.count(key, state, 2);
+			long count = goodsEvaluateService.count(key, state, 2, null);
 
 			int totalPage = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
 			PageEntity pe = new PageEntity(pageIndex, pageSize, count, totalPage);
diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/admin/PushGoodsController.java b/fanli/src/main/java/com/yeshi/fanli/controller/admin/PushGoodsController.java
index c88a50c..dd930ae 100644
--- a/fanli/src/main/java/com/yeshi/fanli/controller/admin/PushGoodsController.java
+++ b/fanli/src/main/java/com/yeshi/fanli/controller/admin/PushGoodsController.java
@@ -86,6 +86,31 @@
 		}
 	}
 
+	
+	/**
+	 * 鏂板/淇敼
+	 * 
+	 * @param callback
+	 * @param special
+	 * @param out
+	 */
+	@RequestMapping(value = "saveInfo")
+	public void saveInfo(String callback, PushGoods pushGoods, String arrayIOS,	String arrayAndroid, PrintWriter out) {
+		try {
+			// 鐗堟湰澶勭悊
+			convertVersion(pushGoods, arrayIOS, arrayAndroid);
+			// 淇濆瓨
+			pushGoodsService.saveInfo(pushGoods);
+
+			JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("娣诲姞鎴愬姛"));
+		} catch (PushGoodsException e) {
+			JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getMsg()));
+		} catch (Exception e) {
+			JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("鎿嶄綔寮傚父"));
+			e.printStackTrace();
+		}
+	}
+	
 	/**
 	 * 鍒犻櫎
 	 * 
@@ -150,10 +175,8 @@
 			Date controlTime = pushGoods.getControlTime();
 			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm");
 			if (controlTime == null) {
-				pushGoods.setTimeTask(false);
 				pushGoods.setControlTime_str("");
 			} else {
-				pushGoods.setTimeTask(true);
 				pushGoods.setControlTime_str(sdf.format(controlTime));
 			}
 			
@@ -216,21 +239,18 @@
 		try {
 
 			List<PushGoods> list = pushGoodsService.listQuery((pageIndex - 1) * pageSize, pageSize, key, state);
-
 			if (list == null || list.size() == 0) {
 				JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("鏆傛棤鏁版嵁"));
 				return;
 			}
 
+			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm");
 			for (PushGoods pushGoods : list) {
 				
 				Date controlTime = pushGoods.getControlTime();
-				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm");
 				if (controlTime == null) {
-					pushGoods.setTimeTask(false);
 					pushGoods.setControlTime_str("");
 				} else {
-					pushGoods.setTimeTask(true);
 					pushGoods.setControlTime_str(sdf.format(controlTime));
 				}
 				
diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/admin/homemodule/SpecialCardAdminController.java b/fanli/src/main/java/com/yeshi/fanli/controller/admin/homemodule/SpecialCardAdminController.java
index a995f49..0c9283d 100644
--- a/fanli/src/main/java/com/yeshi/fanli/controller/admin/homemodule/SpecialCardAdminController.java
+++ b/fanli/src/main/java/com/yeshi/fanli/controller/admin/homemodule/SpecialCardAdminController.java
@@ -21,6 +21,7 @@
 import com.yeshi.fanli.entity.bus.homemodule.AdActivityVersionControl.AdActivityType;
 import com.yeshi.fanli.entity.bus.homemodule.Special;
 import com.yeshi.fanli.entity.bus.homemodule.SpecialCard;
+import com.yeshi.fanli.entity.bus.homemodule.SpecialExtra;
 import com.yeshi.fanli.exception.homemodule.SpecialCardException;
 import com.yeshi.fanli.exception.homemodule.SpecialException;
 import com.yeshi.fanli.service.inter.config.AppVersionService;
@@ -30,6 +31,7 @@
 import com.yeshi.fanli.tag.PageEntity;
 import com.yeshi.fanli.util.Constant;
 import com.yeshi.fanli.util.StringUtil;
+import com.yeshi.fanli.vo.homemodule.SpecialVO;
 
 import net.sf.json.JSONArray;
 import net.sf.json.JSONObject;
@@ -164,16 +166,16 @@
 	 * @param out
 	 */
 	@RequestMapping(value = "saveSpecial")
-	public void saveSpecial(String callback, Special record, String jumpType, HttpServletRequest request,
+	public void saveSpecial(String callback, Special record, String jumpType, SpecialExtra extra, HttpServletRequest request,
 			PrintWriter out) {
 		try {
 			// 1. 鍏堝垽鏂環ttpRequest 鏄惁鍚湁鏂囦欢绫诲瀷
 			if (request instanceof MultipartHttpServletRequest) {
 				MultipartHttpServletRequest fileRequest = (MultipartHttpServletRequest) request;
 				specialService.saveObject(fileRequest.getFile("file"), fileRequest.getFile("file2"),
-						fileRequest.getFile("file3"), record, jumpType);
+						fileRequest.getFile("file3"), record, jumpType, extra);
 			} else {
-				specialService.saveObject(null, null, null, record, jumpType);
+				specialService.saveObject(null, null, null, record, jumpType, extra);
 			}
 
 			JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("淇濆瓨鎴愬姛"));
@@ -281,20 +283,18 @@
 
 		try {
 
-			List<Special> list = specialService.listQueryByCard((pageIndex - 1) * pageSize, pageSize, cardId, key, sex);
-			long count = specialService.countlistQueryByCard(cardId, key, sex);
-			// 鑾峰彇鏈夋晥鐨勪笓棰�
-
+			List<SpecialVO> list = specialService.listQueryByCard((pageIndex - 1) * pageSize, pageSize, cardId, key, sex);
 			if (list == null || list.size() == 0) {
 				JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("鏆傛棤鏁版嵁"));
 				return;
 			}
 
+			long count = specialService.countlistQueryByCard(cardId, key, sex);
 			// 杩囨护
 			if (versionList != null) {
 				if (versionList.size() > 0) {
 					List<Long> sourceIdList = new ArrayList<>();
-					for (Special special : list) {
+					for (SpecialVO special : list) {
 						sourceIdList.add(special.getId());
 					}
 					List<Long> versionIdList = new ArrayList<>();
@@ -324,9 +324,7 @@
 			JSONObject data = new JSONObject();
 			data.put("pe", pe);
 			data.put("result_list", gson.toJson(list));
-
 			JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
-
 		} catch (Exception e) {
 			JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("鎿嶄綔寮傚父"));
 			e.printStackTrace();
diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/PushController.java b/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/PushController.java
index 9c055d3..546fe93 100644
--- a/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/PushController.java
+++ b/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/PushController.java
@@ -1,6 +1,7 @@
 package com.yeshi.fanli.controller.client.v1;
 
 import java.io.PrintWriter;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -14,7 +15,9 @@
 import org.yeshi.utils.taobao.TbImgUtil;
 
 import com.yeshi.fanli.entity.accept.AcceptData;
+import com.yeshi.fanli.entity.bus.activity.ActivityUser;
 import com.yeshi.fanli.entity.common.JumpDetailV2;
+import com.yeshi.fanli.entity.dynamic.GoodsEvaluate;
 import com.yeshi.fanli.entity.goods.CommonGoods;
 import com.yeshi.fanli.entity.push.DeviceActive;
 import com.yeshi.fanli.entity.push.DeviceTokenOPPO;
@@ -29,6 +32,7 @@
 import com.yeshi.fanli.service.inter.common.JumpDetailV2Service;
 import com.yeshi.fanli.service.inter.config.BusinessSystemService;
 import com.yeshi.fanli.service.inter.config.ConfigService;
+import com.yeshi.fanli.service.inter.dynamic.GoodsEvaluateService;
 import com.yeshi.fanli.service.inter.push.DeviceActiveService;
 import com.yeshi.fanli.service.inter.push.DeviceTokenHWService;
 import com.yeshi.fanli.service.inter.push.DeviceTokenOPPOService;
@@ -44,6 +48,8 @@
 import com.yeshi.fanli.util.StringUtil;
 import com.yeshi.fanli.util.annotation.RequestSerializableByKey;
 import com.yeshi.fanli.util.factory.JumpDetailParamsFactory;
+import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
+import com.yeshi.fanli.vo.push.PushRecommendVO;
 
 import net.sf.json.JSONArray;
 import net.sf.json.JSONObject;
@@ -95,6 +101,10 @@
 
 	@Resource
 	private DeviceTokenXMService deviceTokenXMService;
+	
+	@Resource
+	private GoodsEvaluateService goodsEvaluateService;
+	
 
 	@RequestMapping(value = "callback", method = RequestMethod.POST)
 	public void callback(AcceptData acceptData, String pushId, PrintWriter out) {
@@ -199,127 +209,128 @@
 	 */
 	@RequestMapping(value = "/gethistory", method = RequestMethod.POST)
 	public void getHistory(AcceptData acceptData, Long uid, String deviceToken, int page, PrintWriter out) {
-
 		long count = 0;
-		List<PushGoods> list = null;
 		JSONArray resultList = new JSONArray();
-
 		DeviceActive deviceActive = deviceActiveService.getDeviceByDeviceAndPlatform(acceptData.getDevice(),
 				deviceToken, acceptData.getPlatform());
 
-		if (deviceActive != null) {
-
-			// 璁惧娉ㄥ唽鏃堕棿
-			Date createTime = deviceActive.getCreateTime();
-			count = pushGoodsService.countHistoryByPushTime(uid, createTime);
-
-			int pageSize = Constant.PAGE_SIZE;
-
-			list = pushGoodsService.listHistoryByPushTime((page - 1) * pageSize, pageSize, uid, createTime);
-			if (list != null && list.size() > 0) {
-				for (PushGoods pushGoods : list) {
-					JSONObject result = new JSONObject();
-
-					Long pushId = pushGoods.getId();
-					String picture = pushGoods.getPicture();
-					String alertContent = pushGoods.getAlertContent();
-					Date pushTime = pushGoods.getPushTime();
-
-					result.put("content", alertContent);
-					result.put("pushtime", pushTime.getTime());
-
-					// 缁熻鍟嗗搧鏁伴噺
-					long totalgoods = 0;
-					// 鍟嗗搧id
-					CommonGoods commonGoods = null;
-
-					if (StringUtil.isNullOrEmpty(picture)) {
-						try {
-							List<PushGoodsGroup> listGroup = pushGoodsGroupService.getAllInfoByPushId(pushId);
-
-							if (listGroup != null && listGroup.size() > 0) {
-
-								totalgoods = listGroup.size();
-
-								PushGoodsGroup pushGoodsGroup = listGroup.get(0);
-								if (pushGoodsGroup != null) {
-									commonGoods = pushGoodsGroup.getCommonGoods();
-									if (commonGoods != null) {
-										picture = commonGoods.getPicture();
-									}
-								}
-							}
-						} catch (PushGoodsGroupException e) {
-							e.printStackTrace();
-						}
-					}
-
-					result.put("picture", TbImgUtil.getTBSize320Img(picture));
-
-					String fontColor1 = "#666666";
-					String fontColor2 = "#E5005C";
-					JSONArray array = new JSONArray();
-
-					JSONObject contentJson1 = new JSONObject();
-					contentJson1.put("color", fontColor1);
-					contentJson1.put("content", "鏈鎺ㄨ崘鍏�");
-
-					JSONObject contentJson2 = new JSONObject();
-					contentJson2.put("color", fontColor2);
-					contentJson2.put("content", totalgoods);
-
-					JSONObject contentJson3 = new JSONObject();
-					contentJson3.put("color", fontColor1);
-					contentJson3.put("content", "涓晢鍝�");
-
-					array.add(contentJson1);
-					array.add(contentJson2);
-					array.add(contentJson3);
-
-					result.put("totalwords", array);
-
-					String params = "";
-
-					JumpDetailV2 jumpDetail = null;
-					if (totalgoods == 1) {
-						params = JumpDetailParamsFactory.createGoodsParams(commonGoods.getGoodsId(),
-								commonGoods.getGoodsType());
-						// 鍗曚釜鍟嗗搧璺宠浆鍟嗗搧璇︽儏
-						jumpDetail = jumpDetailV2Service.getByTypeCache("goodsdetail",
-								Constant.getPlatformCode(acceptData.getPlatform()),
-								Integer.parseInt(acceptData.getVersion()));
-
-					} else {
-						String url = configService.get(ConfigKeyEnum.pushGoodsDetails.getKey());
-						if (url == null) {
-							url = "";
-						}
-						url = url + "?id=" + pushId;
-
-						params = JumpDetailParamsFactory.createWEBParams(url);
-
-						// 璺宠浆鎺ㄨ崘璇︽儏
-						jumpDetail = jumpDetailV2Service.getByTypeCache("web",
-								Constant.getPlatformCode(acceptData.getPlatform()),
-								Integer.parseInt(acceptData.getVersion()));
-					}
-					result.put("params", params);
-					result.put("jumpDetail", jumpDetail);
-
-					resultList.add(result);
-				}
-			}
+		if (deviceActive == null) {
+			JSONObject resultJson = new JSONObject();
+			resultJson.put("count", count);
+			resultJson.put("result_list", resultList);
+			out.print(JsonUtil.loadTrueResult(resultJson));
+			return;
 		}
 
+		// 璁惧娉ㄥ唽鏃堕棿
+		Date createTime = deviceActive.getCreateTime();
+		count = pushGoodsService.countHistoryByPushTime(uid, createTime);
+
+		int pageSize = Constant.PAGE_SIZE;
+		List<PushGoods> list = pushGoodsService.listHistoryByPushTime((page - 1) * pageSize, pageSize, uid, createTime);
+		if (list == null)
+			list = new ArrayList<>();
+
+		for (PushGoods pushGoods : list) {
+			Long id = pushGoods.getId();
+
+			PushRecommendVO vo = new PushRecommendVO();
+			vo.setTitle(pushGoods.getTitle());
+			vo.setContent(pushGoods.getContent());
+			vo.setPicture(pushGoods.getPicture());
+			vo.setPushtime(pushGoods.getPushTime().getTime());
+			
+			Integer scanNum = pushGoods.getScanNum();
+			if (scanNum == null) {
+				vo.setScanNum("0");
+			} else if (scanNum >= 10000) {
+				double num = scanNum;
+				String numMidea = String.format("%.1f", num / 10000);
+				vo.setScanNum(numMidea + "涓�");
+			} else {
+				vo.setScanNum(scanNum +"");
+			}
+			
+
+			String params = "";
+			String nickName = "";
+			JumpDetailV2 jumpDetail = null;
+			List<ClientTextStyleVO> totalwords = new ArrayList<ClientTextStyleVO>();
+
+			Integer type = pushGoods.getType();
+			if (type == null || type == PushGoods.TYPE_GOODS) {
+				long totalgoods = 0;
+				CommonGoods goods = null;
+				try {
+					List<PushGoodsGroup> listGroup = pushGoodsGroupService.getAllInfoByPushId(id);
+					if (listGroup != null && listGroup.size() > 0) {
+						totalgoods = listGroup.size();
+						PushGoodsGroup pushGoodsGroup = listGroup.get(0);
+						if (pushGoodsGroup != null) {
+							goods = pushGoodsGroup.getCommonGoods();
+						}
+					}
+				} catch (PushGoodsGroupException e) {
+					e.printStackTrace();
+				}
+
+				if (goods != null && StringUtil.isNullOrEmpty(vo.getPicture())) {
+					vo.setPicture(TbImgUtil.getTBSize320Img(goods.getPicture()));
+				}
+
+				if (totalgoods == 1) {
+					params = JumpDetailParamsFactory.createGoodsParams(goods.getGoodsId(), goods.getGoodsType());
+					jumpDetail = jumpDetailV2Service.getByTypeCache("goodsdetail",Constant.getPlatformCode(acceptData.getPlatform()),
+							Integer.parseInt(acceptData.getVersion()));
+				} else {
+					String url = configService.get(ConfigKeyEnum.pushGoodsDetails.getKey());
+					if (url == null) {
+						url = "";
+					}
+					url = url + "?id=" + id;
+
+					params = JumpDetailParamsFactory.createWEBParams(url);
+					jumpDetail = jumpDetailV2Service.getByTypeCache("web",Constant.getPlatformCode(acceptData.getPlatform()),
+							Integer.parseInt(acceptData.getVersion()));
+				}
+
+				totalwords.add(new ClientTextStyleVO("鏈鎺ㄨ崘鍏�", "#666666"));
+				totalwords.add(new ClientTextStyleVO(totalgoods + "", "#E5005C"));
+				totalwords.add(new ClientTextStyleVO("涓晢鍝�", "#666666"));
+			} else if (type == PushGoods.TYPE_ACTIVITY) {
+				GoodsEvaluate goodsEvaluate = goodsEvaluateService.getById(pushGoods.getOtherId());
+				if (goodsEvaluate != null) {
+					ActivityUser user = goodsEvaluate.getUser();
+					if (user != null) {
+						nickName = user.getNickName();
+					}
+				}
+
+				String url = configService.get(ConfigKeyEnum.pushActivityLink.getKey());
+				if (url == null) {
+					url = "";
+				}
+				url = url + "?id=" + id + "&otherId=" + pushGoods.getOtherId();
+				params = JumpDetailParamsFactory.createWEBParams(url);
+				jumpDetail = jumpDetailV2Service.getByTypeCache("web",
+						Constant.getPlatformCode(acceptData.getPlatform()), Integer.parseInt(acceptData.getVersion()));
+			} else {
+				continue;
+			}
+			vo.setNickName(nickName);
+			vo.setParams(params);
+			vo.setJumpDetail(jumpDetail);
+			vo.setTotalwords(totalwords);
+			resultList.add(vo);
+		}
+		
 		JSONObject resultJson = new JSONObject();
 		resultJson.put("count", count);
 		resultJson.put("result_list", resultList);
-
 		out.print(JsonUtil.loadTrueResult(resultJson));
 
-		// 鍒楄〃鍙傛暟銆佽澶囧弬鏁颁俊鎭笉涓虹┖
-		if (list != null && list.size() > 0 && deviceActive != null) {
 
+		if (list != null && list.size() > 0 && deviceActive != null) {
 			final List<PushGoods> listPush = list;
 			// 璁板綍璁块棶淇℃伅
 			executor.execute(new Runnable() {
@@ -327,7 +338,6 @@
 				public void run() {
 					try {
 						Long deviceId = deviceActive.getId();
-
 						for (PushGoods pushGoods : listPush) {
 							List<PushGoodsRecord> listRecord = pushGoodsRecordService
 									.listByPushIdAndDeviceId(pushGoods.getId(), deviceId);
@@ -342,11 +352,9 @@
 							pushGoodsRecord.setDeviceActive(deviceActive);
 							pushGoodsRecordService.insert(pushGoodsRecord);
 						}
-
 					} catch (Exception e) {
 						e.printStackTrace();
 					}
-
 				}
 			});
 		}
diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserInfoController.java b/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserInfoController.java
index f1edece..47d518d 100644
--- a/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserInfoController.java
+++ b/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserInfoController.java
@@ -2198,6 +2198,10 @@
 				inviteLevel.put("link", level.getLink());
 				data.put("inviteLevel", inviteLevel);
 			}
+			
+			if (VersionUtil.greaterThan_2_1_1(acceptData.getPlatform(), acceptData.getVersion())) {
+				data.put("fansCountLink", configService.get(ConfigKeyEnum.teamStatisticsLink.getKey()));
+			}
 
 			out.print(JsonUtil.loadTrueResult(data));
 
diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/DynamicControllerV2.java b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/DynamicControllerV2.java
index 93c7820..97e7398 100644
--- a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/DynamicControllerV2.java
+++ b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/DynamicControllerV2.java
@@ -12,6 +12,7 @@
 
 import javax.annotation.Resource;
 
+import org.apache.commons.beanutils.PropertyUtils;
 import org.springframework.core.task.TaskExecutor;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -29,6 +30,7 @@
 import com.yeshi.fanli.entity.accept.AcceptData;
 import com.yeshi.fanli.entity.bus.clazz.GoodsClass;
 import com.yeshi.fanli.entity.bus.homemodule.Special;
+import com.yeshi.fanli.entity.bus.homemodule.SpecialExtra;
 import com.yeshi.fanli.entity.bus.homemodule.SpecialLabel;
 import com.yeshi.fanli.entity.bus.homemodule.SwiperPicture;
 import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo;
@@ -54,6 +56,7 @@
 import com.yeshi.fanli.service.inter.dynamic.GoodsEvaluateService;
 import com.yeshi.fanli.service.inter.goods.ShareGoodsService;
 import com.yeshi.fanli.service.inter.goods.TaoBaoGoodsBriefService;
+import com.yeshi.fanli.service.inter.homemodule.SpecialExtraService;
 import com.yeshi.fanli.service.inter.homemodule.SpecialService;
 import com.yeshi.fanli.service.inter.homemodule.SwiperPictureService;
 import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
@@ -74,6 +77,7 @@
 import com.yeshi.fanli.util.taobao.TaoBaoUtil;
 import com.yeshi.fanli.vo.dynamic.ArticleVO;
 import com.yeshi.fanli.vo.goods.GoodsDetailVO;
+import com.yeshi.fanli.vo.homemodule.SpecialVO;
 import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
 
 import net.sf.json.JSONArray;
@@ -138,6 +142,11 @@
 
 	@Resource
 	private DailyCountMomentsService dailyCountMomentsService;
+	
+	@Resource
+	private SpecialExtraService specialExtraService;
+	
+	
 
 	@Resource(name = "taskExecutor")
 	private TaskExecutor executor;
@@ -366,29 +375,48 @@
 		long time = System.currentTimeMillis();
 
 		// 鍒犻櫎灏氭湭鍚敤鐨勮繃鏈熺殑
+		List<SpecialVO> listVo = new ArrayList<SpecialVO>();
 		for (int i = 0; i < list.size(); i++) {
 			Special special = list.get(i);
 			if (special.getState() == 1L) {
-				list.remove(i--);
-			} else {
-				if (special.getStartTime() != null && special.getEndTime() != null) {
-					if (time < special.getStartTime().getTime() || time > special.getEndTime().getTime()) {
-						list.remove(i--);
-					} else// 璁剧疆鍊掕鏃�
-					{
-						special.setCountDownTime((special.getEndTime().getTime() - time) / 1000);
-					}
-				}
-
-				List<SpecialLabel> listLabels = special.getListLabels();
-				if (listLabels != null && !listLabels.isEmpty()) {
-					List<ClientTextStyleVO> labels = new ArrayList<>();
-					for (SpecialLabel specialLabel : listLabels) {
-						labels.add(new ClientTextStyleVO(specialLabel.getName(), specialLabel.getBgColor()));
-					}
-					special.setLabels(labels);
+				continue;
+			}
+			
+			// 鏄惁娲诲姩宸茶繃鏈�
+			if (special.getStartTime() != null && special.getEndTime() != null) {
+				if (time < special.getStartTime().getTime() || time > special.getEndTime().getTime()) {
+					continue;
+				} else {
+					special.setCountDownTime((special.getEndTime().getTime() - time) / 1000);
 				}
 			}
+			
+			SpecialVO specialVO = new SpecialVO();
+			try {
+				PropertyUtils.copyProperties(specialVO, special);
+			} catch (Exception e) {
+				e.printStackTrace();
+				continue;
+			}
+			
+			// 璁剧疆鏍囩
+			List<SpecialLabel> listLabels = specialVO.getListLabels();
+			if (listLabels != null && !listLabels.isEmpty()) {
+				List<ClientTextStyleVO> labels = new ArrayList<>();
+				for (SpecialLabel specialLabel : listLabels) {
+					labels.add(new ClientTextStyleVO(specialLabel.getName(), specialLabel.getBgColor()));
+				}
+				specialVO.setLabels(labels);
+			}
+			
+			// 璇勮淇℃伅
+			if (VersionUtil.greaterThan_2_1_1(acceptData.getPlatform(), acceptData.getVersion())) {
+				SpecialExtra extra = specialExtraService.selectByPrimaryKey(specialVO.getId());
+				if (extra != null && !StringUtil.isNullOrEmpty(extra.getComment())) {
+					specialVO.setComment(extra.getComment());
+				}
+			}
+			listVo.add(specialVO);
 		}
 
 		long count = specialService.countByPlaceKeyList(listKey, platformCode,
@@ -398,7 +426,7 @@
 		Gson gson = gsonBuilder.create();
 		JSONObject data = new JSONObject();
 		data.put("count", count);
-		data.put("list", gson.toJson(list));
+		data.put("list", gson.toJson(listVo));
 		out.print(JsonUtil.loadTrueResult(data));
 	}
 
@@ -1041,5 +1069,70 @@
 			}
 		});
 	}
+	
+	/**
+	 * 璇勮澶嶅埗-涓撻
+	 * 
+	 * @param acceptData
+	 * @param id
+	 * @param out
+	 */
+	@RequestMapping(value = "copySpecialComment", method = RequestMethod.POST)
+	public void copySpecialComment(AcceptData acceptData, Long uid, Long id, PrintWriter out) {
+		if (uid == null || id == null) {
+			out.print(JsonUtil.loadFalseResult("鍙傛暟涓嶈兘涓虹┖"));
+			return;
+		}
+
+		SpecialExtra extra = specialExtraService.selectByPrimaryKey(id);
+		if (extra == null ||  StringUtil.isNullOrEmpty(extra.getComment())) {
+			out.print(JsonUtil.loadFalseResult("璇ュ唴瀹瑰凡涓嶅瓨鍦�"));
+			return;
+		}
+
+		UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
+		if (user == null) {
+			out.print(JsonUtil.loadFalseResult("鐢ㄦ埛鏈櫥褰�"));
+			return;
+		}
+
+		if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
+			out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
+			return;
+		}
+
+		UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid);
+		String relationId = null;
+		if (taoBaoInfo != null && taoBaoInfo.getRelationId() != null && taoBaoInfo.getRelationValid() != null
+				&& taoBaoInfo.getRelationValid() == true)
+			relationId = taoBaoInfo.getRelationId();
+
+		if (StringUtil.isNullOrEmpty(relationId)) {
+			out.print(JsonUtil.loadFalseResult(2, "娣樺疂鏈巿鏉冿紝璇峰墠寰�\"鎴戠殑\"缁戝畾娣樺疂璐﹀彿"));
+			return;
+		}
+
+		String text = extra.getComment();
+		String newText = text; 
+		if (extra.getNeedSpin() != null && extra.getNeedSpin()) {
+			try {
+				newText = convertLinkManager.convertLinkFromText(text, uid, true);
+			} catch (ConvertLinkExceptionException e) {
+				if (e.getCode() != ConvertLinkExceptionException.CODE_NONE) {
+					out.print(JsonUtil.loadFalseResult("璇勮鐢熸垚澶辫触"));
+					return;
+				}
+			} catch (Exception e) {
+				LogHelper.errorDetailInfo(e);
+				out.print(JsonUtil.loadFalseResult("璇勮鐢熸垚澶辫触"));
+				return;
+			}
+		}
+
+		JSONObject data = new JSONObject();
+		data.put("text", newText);
+		out.print(JsonUtil.loadTrueResult(data));
+	}
+	
 
 }
diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/InviteControllerV2.java b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/InviteControllerV2.java
index a30f7bc..21596a0 100644
--- a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/InviteControllerV2.java
+++ b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/InviteControllerV2.java
@@ -892,6 +892,11 @@
 		result.put("secondTeam", countSecond);
 		result.put("count", count);
 		result.put("list", array);
+		
+		// 缁熻H5閾炬帴
+		if (page == 1) {
+			result.put("link", configService.get(ConfigKeyEnum.teamStatisticsLink.getKey()));
+		}
 		out.print(JsonUtil.loadTrueResult(result));
 	}
 	
@@ -917,8 +922,8 @@
 	 * @param id
 	 * @param out
 	 */
-	@RequestMapping(value = "countMyTeamV2", method = RequestMethod.POST)
-	public void countMyTeamV2(AcceptData acceptData, Long uid, PrintWriter out) {
+	@RequestMapping(value = "countMyTeamV2")
+	public void countMyTeamV2(String callback, AcceptData acceptData, Long uid, PrintWriter out) {
 		try {
 			JSONObject bossObject = new JSONObject();
 			ThreeSale threeSale = threeSaleSerivce.getByWorkerId(uid);
@@ -976,8 +981,7 @@
 				tearcherObject.put("phone", tearcherInfo.getPhone());
 				tearcherObject.put("weixin", tearcherInfo.getWxID());
 				tearcherObject.put("level", UserLevelEnum.tearcher);
-
-				json.put("tearcher", tearcherInfo);
+				json.put("tearcher", tearcherObject);
 			}
 
 			JSONObject daren = new JSONObject();
@@ -1041,9 +1045,9 @@
 			json.put("daren", daren);
 			json.put("highVIP", highVIP);
 			json.put("superVIP", superVIP);
-			out.print(JsonUtil.loadTrueResult(json));
+			JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(json));
 		} catch (Exception e) {
-			out.print(JsonUtil.loadFalseResult("缁熻澶辫触"));
+			JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("缁熻澶辫触"));
 			e.printStackTrace();
 		}
 
@@ -1117,8 +1121,13 @@
 			weixin = userInfoExtra.getWeiXin();
 			activeTime = userInfoExtra.getActiveTime();
 		}
+		
+		if (activeTime == null) {
+			activeTime = new Date(user.getCreatetime());
+		}
+		
 		data.put("weixin", StringUtil.isNullOrEmpty(weixin) ? "" : weixin);
-		data.put("loginTime", TimeUtil.formatDate(activeTime == null ? userInfoExtra.getCreateTime() : activeTime));
+		data.put("loginTime", TimeUtil.formatDate(activeTime));
 
 		UserExtraTaoBaoInfo userExtraTaoBaoInfo = userExtraTaoBaoInfoService.getByUid(workerId);
 		if (userExtraTaoBaoInfo != null && !StringUtil.isNullOrEmpty(userExtraTaoBaoInfo.getRelationId())
@@ -1156,21 +1165,19 @@
 		}
 		data.put("level", levelName);
 
+		// 绮変笣缁熻
 		long indirectNum = 0;
 		long directNum = threeSaleSerivce.countFirstTeam(workerId);
 		if (directNum > 0) {
 			indirectNum = threeSaleSerivce.countSecondTeam(workerId);
 		}
-		data.put("directNum", directNum);
-		data.put("indirectNum", indirectNum);
-
+		// 璁㈠崟缁熻
 		long countTB = commonOrderCountService.countOrderBySourceAndNearDay(workerId, Constant.SOURCE_TYPE_TAOBAO, 60);
 		long countJD = commonOrderCountService.countOrderBySourceAndNearDay(workerId, Constant.SOURCE_TYPE_JD, 60);
 		long countPDD = commonOrderCountService.countOrderBySourceAndNearDay(workerId, Constant.SOURCE_TYPE_PDD, 60);
 
-		data.put("orderTB", countTB);
-		data.put("orderJD", countJD);
-		data.put("orderPDD", countPDD);
+		data.put("fansNum", "鐩存帴绮変笣锛� "+directNum+"浜篭n" + "闂存帴绮変笣锛� "+indirectNum+"浜�");
+		data.put("orderInfo", "娣樺疂 ("+countTB+"绗�)\n" + "浜笢 ("+countJD+"绗�)\n" + "鎷煎澶� ("+countPDD+"绗�)");
 		out.print(JsonUtil.loadTrueResult(data));
 	}
 
@@ -1225,8 +1232,8 @@
 	 * @param id
 	 * @param out
 	 */
-	@RequestMapping(value = "countTeamH5", method = RequestMethod.POST)
-	public void countTeamH5(AcceptData acceptData, Long uid, PrintWriter out) {
+	@RequestMapping(value = "countTeamH5")
+	public void countTeamH5(String callback, AcceptData acceptData, Long uid, PrintWriter out) {
 		try {
 			Date now = new Date();
 			SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM");
@@ -1294,9 +1301,9 @@
 			json.put("yesterday", yesterday);
 			json.put("month", month);
 			json.put("totality", totality);
-			out.print(JsonUtil.loadTrueResult(json));
+			JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(json));
 		} catch (Exception e) {
-			out.print(JsonUtil.loadFalseResult("缁熻澶辫触"));
+			JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("缁熻澶辫触"));
 			e.printStackTrace();
 		}
 
diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserMoneyControllerV2.java b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserMoneyControllerV2.java
new file mode 100644
index 0000000..d4971f1
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserMoneyControllerV2.java
@@ -0,0 +1,405 @@
+package com.yeshi.fanli.controller.client.v2;
+
+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;
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.yeshi.utils.JsonUtil;
+
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonPrimitive;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
+import com.yeshi.fanli.entity.accept.AcceptData;
+import com.yeshi.fanli.entity.bus.user.Extract;
+import com.yeshi.fanli.entity.bus.user.UserInfo;
+import com.yeshi.fanli.entity.money.UserMoneyDetail.UserMoneyDetailTypeEnum;
+import com.yeshi.fanli.entity.order.OrderMoneyDailyCount;
+import com.yeshi.fanli.entity.system.ConfigKeyEnum;
+import com.yeshi.fanli.service.inter.config.ConfigService;
+import com.yeshi.fanli.service.inter.count.HongBaoV2CountService;
+import com.yeshi.fanli.service.inter.money.UserMoneyDetailService;
+import com.yeshi.fanli.service.inter.money.extract.ExtractService;
+import com.yeshi.fanli.service.inter.order.HongBaoV2Service;
+import com.yeshi.fanli.service.inter.order.OrderMoneyDailyCountService;
+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.TimeUtil;
+import com.yeshi.fanli.vo.money.IncomeDetailVO;
+import com.yeshi.fanli.vo.money.MoneyPredictVO;
+import com.yeshi.fanli.vo.money.MoneyStatisticVO;
+
+import net.sf.json.JSONObject;
+
+/**
+ * 璐︽埛绯荤粺
+ * 
+ * @author Administrator
+ *
+ */
+@Controller
+@RequestMapping("api/v2/usermoney")
+public class UserMoneyControllerV2 {
+
+	@Resource
+	private UserMoneyDetailService userMoneyDetailService;
+
+	@Resource
+	private UserInfoService userInfoService;
+
+	@Resource
+	private HongBaoV2Service hongBaoV2Service;
+
+	@Resource
+	private ExtractService extractService;
+
+	@Resource
+	private UserInfoExtraService userInfoExtraService;
+
+	@Resource
+	private ConfigService configService;
+
+	@Resource
+	private HongBaoV2CountService hongBaoV2CountService;
+	
+	@Resource
+	private OrderMoneyDailyCountService orderMoneyDailyCountService;
+	
+
+	 
+	/**
+	 * 鐢ㄦ埛璧勯噾缁熻
+	 * 
+	 * @param acceptData
+	 * @param uid
+	 * @param out
+	 */
+	@RequestMapping(value = "getMoneyStatistic")
+	public void getMoneyStatistic(AcceptData acceptData, Long uid, PrintWriter out) {
+		if (uid == null || uid == 0) {
+			out.print(JsonUtil.loadFalseResult(1, "鐢ㄦ埛鏈櫥褰�"));
+			return;
+		}
+		UserInfo user = userInfoService.getUserById(uid);
+		
+		MoneyStatisticVO vo = new MoneyStatisticVO();
+		vo.setLink(configService.get(ConfigKeyEnum.autoExtractHelpUrl.getKey()));
+		vo.setBalanceMoney(user.getMyHongBao());
+		vo.setExtractDesc("鎻愮幇閲戦灏辨槸宸叉垚鍔熻浆璐﹀埌鎻愮幇鏀粯瀹濈殑璧勯噾銆�");
+		vo.setMoneyArrivalDesc("璧勯噾宸插埌璐﹀悗鎻愮幇鏃堕棿涓嶅彈闄愬埗銆侀噾棰濆彈闄愬埗銆�");
+		
+		// 鑾峰彇鎻愮幇涓殑淇℃伅
+		BigDecimal extractingMoney = extractService.sumVerifyingMoney(uid);
+		if (extractingMoney.compareTo(new BigDecimal(0)) > 0)
+			vo.setExtractingMoneyInfo("鎻愮幇涓�:楼" + extractingMoney.setScale(2, RoundingMode.HALF_UP));
+		
+		Date minDate = null;
+		Date maxDate = null;
+		long timeStamp = System.currentTimeMillis();
+		List<UserMoneyDetailTypeEnum> typeList = new ArrayList<>();
+		
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTimeInMillis(timeStamp);
+		
+		
+		typeList.clear();
+		typeList.add(UserMoneyDetailTypeEnum.extract);
+		typeList.add(UserMoneyDetailTypeEnum.extractNew);
+		typeList.add(UserMoneyDetailTypeEnum.extractVerify);
+		typeList.add(UserMoneyDetailTypeEnum.extractVerifyNew);
+		typeList.add(UserMoneyDetailTypeEnum.extractReject);
+		typeList.add(UserMoneyDetailTypeEnum.extractAutoWX);
+	
+		// 鏈湀鎻愮幇
+		maxDate = new Date(timeStamp);
+		calendar = Calendar.getInstance();
+		minDate = new Date(TimeUtil.convertToTimeTemp(calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1), "yyyy-M"));
+		calendar.add(Calendar.MONTH, -1);
+		vo.setMonthExtractMoney(userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, minDate, maxDate, 1).abs());
+
+				
+		// 涓婃湀鎻愮幇
+		maxDate = new Date(TimeUtil.convertToTimeTemp(calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1), "yyyy-M"));
+		calendar.add(Calendar.MONTH, -1);
+		minDate = new Date(TimeUtil.convertToTimeTemp(calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1), "yyyy-M"));
+		vo.setLastMonthExtractMoney(userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, minDate, maxDate, 1).abs());
+
+		minDate = new Date(0L);
+		maxDate = new Date(timeStamp);
+		// 绱鎴愬姛鎻愮幇
+		vo.setTotalExtractMoney(
+				userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, minDate, maxDate, 1).abs());
+		
+		// 绱鑷喘杩斿埄
+		typeList.clear();
+		typeList.add(UserMoneyDetailTypeEnum.fanli);
+		typeList.add(UserMoneyDetailTypeEnum.fanliNew);
+		typeList.add(UserMoneyDetailTypeEnum.fanliWeiQuan);
+		typeList.add(UserMoneyDetailTypeEnum.fanliWeiQuanNew);
+		typeList.add(UserMoneyDetailTypeEnum.orderReward);
+		typeList.add(UserMoneyDetailTypeEnum.orderRewardNew);
+		vo.setTotalFanLiMoney(
+				userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, minDate, maxDate).abs());
+
+		// 绱鍒嗕韩璧�
+		typeList.clear();
+		typeList.add(UserMoneyDetailTypeEnum.share);
+		typeList.add(UserMoneyDetailTypeEnum.shareNew);
+		typeList.add(UserMoneyDetailTypeEnum.shareWeiQuan);
+		vo.setTotalShareMoney(userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, minDate, maxDate).abs());
+
+		// 绱閭�璇疯禋
+		typeList.clear();
+		typeList.add(UserMoneyDetailTypeEnum.invite);
+		typeList.add(UserMoneyDetailTypeEnum.inviteWeiQuan);
+		typeList.add(UserMoneyDetailTypeEnum.inviteAndShare);
+		typeList.add(UserMoneyDetailTypeEnum.subsidy);
+		typeList.add(UserMoneyDetailTypeEnum.teamReward);
+		vo.setTotalInviteMoney(userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, minDate, maxDate).abs());
+
+		
+		// 鏈湀鏀惰揣
+		maxDate = new Date(timeStamp);
+		calendar = Calendar.getInstance();
+		minDate = new Date(TimeUtil.convertToTimeTemp(calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1), "yyyy-M"));
+		calendar.add(Calendar.MONTH, -1);
+		vo.setMonthSettleMoney(hongBaoV2CountService.sumMoneyBySettleTimeAndUid(uid, minDate, maxDate));
+		
+		// 涓婃湀鏀惰揣
+		maxDate = new Date(TimeUtil.convertToTimeTemp(calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1), "yyyy-M"));
+		calendar.add(Calendar.MONTH, -1);
+		minDate = new Date(TimeUtil.convertToTimeTemp(calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1), "yyyy-M"));
+		vo.setLastMonthSettleMoney(hongBaoV2CountService.sumMoneyBySettleTimeAndUid(uid, minDate, maxDate));
+		
+		// 寰呯‘璁ゆ敹璐э紙180澶╁唴锛�
+		vo.setNotSettleMoney(hongBaoV2CountService.sumMoneyByANotSettleAndUid(uid));
+		
+		
+		// 浠婃棩棰勪及
+		calendar.add(Calendar.DAY_OF_YEAR, -1);
+		minDate = new Date(TimeUtil.convertDateToTemp(TimeUtil.getGernalTime(timeStamp)));
+		vo.setTodayPredict(cratePredictVO(orderMoneyDailyCountService.query(uid, minDate, null)));
+		
+		// 鏈湀棰勪及
+		maxDate = new Date(timeStamp);
+		calendar = Calendar.getInstance();
+		minDate = new Date(TimeUtil.convertToTimeTemp(calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1), "yyyy-M"));
+		calendar.add(Calendar.MONTH, -1);
+		vo.setMonthPredict(cratePredictVO(orderMoneyDailyCountService.query(uid, minDate, maxDate)));
+		
+		
+		GsonBuilder builder = new GsonBuilder();
+		builder.registerTypeAdapter(BigDecimal.class, new JsonSerializer<BigDecimal>() {
+			@Override
+			public JsonElement serialize(BigDecimal value, Type theType, JsonSerializationContext context) {
+				if (value == null) {
+					return new JsonPrimitive("");
+				} else {
+					// 淇濈暀2浣嶅皬鏁�
+					value = value.setScale(2);
+					return new JsonPrimitive(value.toString());
+				}
+			}
+		});
+		out.print(JsonUtil.loadTrueResult(builder.create().toJson(vo)));
+	}
+
+	
+	private MoneyPredictVO cratePredictVO(List<OrderMoneyDailyCount> list) {
+		MoneyPredictVO predictVO = new MoneyPredictVO();
+		predictVO.setMineNum(0);
+		predictVO.setTeamNum(0);
+		predictVO.setMineMoney(BigDecimal.valueOf(0));
+		predictVO.setTeamMoney(BigDecimal.valueOf(0));
+		
+		if (list != null && list.size() > 0) {
+			for (OrderMoneyDailyCount dailyCount: list) {
+				if (dailyCount.getOrderNum() != null) {
+					predictVO.setMineNum(predictVO.getMineNum() + dailyCount.getOrderNum());
+				}
+				
+				if (dailyCount.getOrderNumTeam() != null) {
+					predictVO.setTeamNum(predictVO.getTeamNum() + dailyCount.getOrderNumTeam());
+				}
+				
+				if (dailyCount.getIncome() != null) {
+					predictVO.setMineMoney(predictVO.getMineMoney().add(dailyCount.getIncome()));
+				}
+				
+				if (dailyCount.getIncomeTeam() != null) {
+					predictVO.setTeamMoney(predictVO.getTeamMoney().add(dailyCount.getIncomeTeam()));
+				}
+			}
+		}
+		
+		predictVO.setTotalNum(predictVO.getTeamNum() + predictVO.getMineNum());
+		predictVO.setTotalMoney(predictVO.getMineMoney().add(predictVO.getTeamMoney()));
+		return predictVO;
+	}
+	
+	
+	 /**
+	  * 鍘嗗彶璇︽儏
+	  * @param acceptData
+	  * @param uid
+	  * @param datetype 1-澶� - 2鏈�
+	  * @param out
+	  */
+	@RequestMapping(value = "getHistoryDetail")
+	public void getHistoryDetail(AcceptData acceptData, Long uid, Integer datetype, PrintWriter out) {
+		if (uid == null || uid == 0) {
+			out.print(JsonUtil.loadFalseResult(1, "鐢ㄦ埛鏈櫥褰�"));
+			return;
+		}
+		
+		if (datetype == null) {
+			datetype = 1;
+		}
+		
+		
+		MoneyPredictVO predictVO = new MoneyPredictVO();
+		predictVO.setMineNum(0);
+		predictVO.setTeamNum(0);
+		predictVO.setMineMoney(BigDecimal.valueOf(0));
+		predictVO.setTeamMoney(BigDecimal.valueOf(0));
+		predictVO.setTotalNum(predictVO.getTeamNum() + predictVO.getMineNum());
+		predictVO.setTotalMoney(predictVO.getMineMoney().add(predictVO.getTeamMoney()));
+		predictVO.setCountDate("2020骞�05鏈�09鏃�");
+		
+		MoneyPredictVO predictVO2 = new MoneyPredictVO();
+		predictVO2.setMineNum(0);
+		predictVO2.setTeamNum(0);
+		predictVO2.setMineMoney(BigDecimal.valueOf(0));
+		predictVO2.setTeamMoney(BigDecimal.valueOf(0));
+		predictVO2.setTotalNum(predictVO.getTeamNum() + predictVO.getMineNum());
+		predictVO2.setTotalMoney(predictVO.getMineMoney().add(predictVO.getTeamMoney()));
+		predictVO2.setCountDate("2020骞�05鏈�08鏃�");
+		
+		List<MoneyPredictVO> list = new ArrayList<>();
+		list.add(predictVO);
+		list.add(predictVO2);
+		
+		GsonBuilder builder = new GsonBuilder();
+		builder.registerTypeAdapter(BigDecimal.class, new JsonSerializer<BigDecimal>() {
+			@Override
+			public JsonElement serialize(BigDecimal value, Type theType, JsonSerializationContext context) {
+				if (value == null) {
+					return new JsonPrimitive("");
+				} else {
+					// 淇濈暀2浣嶅皬鏁�
+					value = value.setScale(2);
+					return new JsonPrimitive(value.toString());
+				}
+			}
+		});
+		
+		JSONObject object = new JSONObject();
+		object.put("count", list.size());
+		object.put("list", builder.create().toJson(list));
+		out.print(JsonUtil.loadTrueResult(object));
+	}
+
+	 
+	 /**
+	  * 鏀剁泭璇︽儏
+	  * @param acceptData
+	  * @param uid
+	  * @param datetype
+	  * @param type
+	  * @param out
+	  */
+	@RequestMapping(value = "getIncomeDetail")
+	public void getIncomeDetail(AcceptData acceptData, Long uid, Integer datetype, int type, PrintWriter out) {
+		if (uid == null || uid == 0) {
+			out.print(JsonUtil.loadFalseResult(1, "鐢ㄦ埛鏈櫥褰�"));
+			return;
+		}
+		
+		IncomeDetailVO detailVO = new IncomeDetailVO();
+		detailVO.setIcon("https://image.baidu.com/search/detail?ct=503316480&z=0&ipn=d&word=%E5%9B%BE%E6%A0%87&hs=2&pn=4&spn=0&di=140910&pi=0&rn=1&tn=baiduimagedetail&is=0%2C0&ie=utf-8&oe=utf-8&cl=2&lm=-1&cs=1127089551%2C1776911506&os=1048215048%2C2112739689&simid=3430760525%2C458613076&adpicid=0&lpn=0&ln=30&fr=ala&fm=&sme=&cg=&bdtype=0&oriquery=%E5%9B%BE%E6%A0%87&objurl=http%3A%2F%2Fbpic.588ku.com%2Felement_origin_min_pic%2F16%2F08%2F20%2F2357b8781a8b798.jpg!%2Ffwfh%2F804x804%2Fquality%2F90%2Funsharp%2Ftrue%2Fcompress%2Ftrue&fromurl=ippr_z2C%24qAzdH3FAzdH3Flafij3t_z%26e3Bv54AzdH3Ff7vwtAzdH3F8clm90md_z%26e3Bip4s&gsm=5&islist=&querylist=");
+		detailVO.setNum(0);
+		detailVO.setMoney(BigDecimal.valueOf(0));
+		
+		IncomeDetailVO detailVO2 = new IncomeDetailVO();
+		detailVO2.setIcon("https://image.baidu.com/search/detail?ct=503316480&z=0&ipn=d&word=%E5%9B%BE%E6%A0%87&hs=2&pn=5&spn=0&di=63690&pi=0&rn=1&tn=baiduimagedetail&is=0%2C0&ie=utf-8&oe=utf-8&cl=2&lm=-1&cs=2705540191%2C3386342097&os=1154083183%2C368350028&simid=3434290922%2C367349849&adpicid=0&lpn=0&ln=30&fr=ala&fm=&sme=&cg=&bdtype=0&oriquery=%E5%9B%BE%E6%A0%87&objurl=http%3A%2F%2Fhbimg.b0.upaiyun.com%2Ffe2a5be541f3c011972f74d3b50b96578116a92c2f63-tK5HwY_fw658&fromurl=ippr_z2C%24qAzdH3FAzdH3Fi7wkwg_z%26e3Bv54AzdH3FrtgfAzdH3F8ca0l0acmdAzdH3F&gsm=5&islist=&querylist=");
+		detailVO2.setNum(0);
+		detailVO2.setMoney(BigDecimal.valueOf(0));
+		List<IncomeDetailVO> list = new ArrayList<>();
+		list.add(detailVO);
+		list.add(detailVO2);
+		
+		GsonBuilder builder = new GsonBuilder();
+		builder.registerTypeAdapter(BigDecimal.class, new JsonSerializer<BigDecimal>() {
+			@Override
+			public JsonElement serialize(BigDecimal value, Type theType, JsonSerializationContext context) {
+				if (value == null) {
+					return new JsonPrimitive("");
+				} else {
+					// 淇濈暀2浣嶅皬鏁�
+					value = value.setScale(2);
+					return new JsonPrimitive(value.toString());
+				}
+			}
+		});
+		
+		JSONObject object = new JSONObject();
+		object.put("count", list.size());
+		object.put("list", builder.create().toJson(list));
+		out.print(JsonUtil.loadTrueResult(object));
+	}
+
+	
+	
+	@RequestMapping(value = "getExtractRecord")
+	public void getExtractRecord(AcceptData acceptData, Integer page, Long uid, PrintWriter out) {
+		if (uid == null || uid == 0) {
+			out.print(JsonUtil.loadFalseResult(1, "鐢ㄦ埛鏈櫥褰�"));
+			return;
+		}
+		
+		List<Extract> list = extractService.getExtractSucceedRecord(page, Constant.PAGE_SIZE, uid);
+		if (list == null) {
+			list = new ArrayList<>();
+		}
+		
+		
+		for (Extract extract: list) {
+			
+		}
+		
+		
+		
+		GsonBuilder builder = new GsonBuilder();
+		builder.registerTypeAdapter(BigDecimal.class, new JsonSerializer<BigDecimal>() {
+			@Override
+			public JsonElement serialize(BigDecimal value, Type theType, JsonSerializationContext context) {
+				if (value == null) {
+					return new JsonPrimitive("");
+				} else {
+					// 淇濈暀2浣嶅皬鏁�
+					value = value.setScale(2);
+					return new JsonPrimitive(value.toString());
+				}
+			}
+		});
+		
+		JSONObject object = new JSONObject();
+		object.put("count", list.size());
+		object.put("list", builder.create().toJson(list));
+		out.print(JsonUtil.loadTrueResult(object));
+	}
+
+	
+	
+}
diff --git a/fanli/src/main/java/com/yeshi/fanli/dao/dynamic/GoodsEvaluateDao.java b/fanli/src/main/java/com/yeshi/fanli/dao/dynamic/GoodsEvaluateDao.java
index 5f8832e..1b167d0 100644
--- a/fanli/src/main/java/com/yeshi/fanli/dao/dynamic/GoodsEvaluateDao.java
+++ b/fanli/src/main/java/com/yeshi/fanli/dao/dynamic/GoodsEvaluateDao.java
@@ -1,5 +1,6 @@
 package com.yeshi.fanli.dao.dynamic;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.regex.Pattern;
@@ -96,31 +97,57 @@
 	 * 
 	 * @return
 	 */
-	public List<GoodsEvaluate> query(int start, int count, String key, Integer state, int dynamicType) {
+	public List<GoodsEvaluate> query(int start, int count, String key, Integer state, int dynamicType, String typeEnum) {
 		Query query = new Query();
-		query.addCriteria(Criteria.where("dynamicType").is(dynamicType));
+		List<Criteria> list = new ArrayList<Criteria>();
+		list.add(Criteria.where("dynamicType").is(dynamicType));
+		
 		if (state != null) {
-			query.addCriteria(Criteria.where("state").is(state));
+			list.add(Criteria.where("state").is(state));
 		}
+		
+		if (!StringUtil.isNullOrEmpty(typeEnum))
+			list.add(Criteria.where("type").is(typeEnum));
+		
 		if (!StringUtil.isNullOrEmpty(key))
-			query.addCriteria(new Criteria().orOperator(
+			list.add(new Criteria().orOperator(
 					       Criteria.where("title").regex(Pattern.compile("^.*" + key + ".*$", Pattern.CASE_INSENSITIVE))));
-     
+		
+		if (list.size() > 0) {
+			Criteria[] cas = new Criteria[list.size()];
+			for (int i = 0; i < list.size(); i++)
+				cas[i] = list.get(i);
+			query.addCriteria(new Criteria().andOperator(cas));
+		}
+		
 		query.skip(start).limit(count);
         query.with(new Sort(Sort.Direction.DESC,"weight")).with(new Sort(Sort.Direction.DESC,"createTime"));
 		return mongoTemplate.find(query, GoodsEvaluate.class);
 	}
 
-	public long count(String key, Integer state, int dynamicType) {
+	public long count(String key, Integer state, int dynamicType, String typeEnum) {
 		Query query = new Query();
-		query.addCriteria(Criteria.where("dynamicType").is(dynamicType));
-
+		List<Criteria> list = new ArrayList<Criteria>();
+		list.add(Criteria.where("dynamicType").is(dynamicType));
+		
 		if (state != null) {
-			query.addCriteria(Criteria.where("state").is(state));
+			list.add(Criteria.where("state").is(state));
 		}
+		
+		if (!StringUtil.isNullOrEmpty(typeEnum))
+			list.add(Criteria.where("type").is(typeEnum));
+		
 		if (!StringUtil.isNullOrEmpty(key))
-			query.addCriteria(new Criteria().orOperator(
+			list.add(new Criteria().orOperator(
 					       Criteria.where("title").regex(Pattern.compile("^.*" + key + ".*$", Pattern.CASE_INSENSITIVE))));
+		
+		if (list.size() > 0) {
+			Criteria[] cas = new Criteria[list.size()];
+			for (int i = 0; i < list.size(); i++)
+				cas[i] = list.get(i);
+			query.addCriteria(new Criteria().andOperator(cas));
+		}
+		
 		return mongoTemplate.count(query, GoodsEvaluate.class);
 	}
 
@@ -134,10 +161,20 @@
 	public List<GoodsEvaluate> queryValid(int start, int count, int dynamicType) {
 		Date now = new Date();
 		Query query = new Query();
-		query.addCriteria(Criteria.where("dynamicType").is(dynamicType));
-		query.addCriteria(Criteria.where("state").is(1));
-		query.addCriteria(Criteria.where("startTime").lte(now));
-		query.addCriteria(Criteria.where("endTime").gte(now));
+		List<Criteria> list = new ArrayList<Criteria>();
+		
+		list.add(Criteria.where("dynamicType").is(dynamicType));
+		list.add(Criteria.where("state").is(1));
+		list.add(Criteria.where("startTime").lte(now));
+		list.add(Criteria.where("endTime").gte(now));
+		
+		if (list.size() > 0) {
+			Criteria[] cas = new Criteria[list.size()];
+			for (int i = 0; i < list.size(); i++)
+				cas[i] = list.get(i);
+			query.addCriteria(new Criteria().andOperator(cas));
+		}
+		
         query.skip(start).limit(count);
 		query.with(new Sort(Sort.Direction.DESC,"weight")).with(new Sort(Sort.Direction.DESC,"startTime"));
 		return mongoTemplate.find(query, GoodsEvaluate.class);
@@ -151,10 +188,19 @@
 	public long countValid(int dynamicType) {
 		Date now = new Date();
 		Query query = new Query();
-		query.addCriteria(Criteria.where("dynamicType").is(dynamicType));
-		query.addCriteria(Criteria.where("state").is(1));
-		query.addCriteria(Criteria.where("startTime").lte(now));
-		query.addCriteria(Criteria.where("endTime").gte(now));
+		List<Criteria> list = new ArrayList<Criteria>();
+		
+		list.add(Criteria.where("dynamicType").is(dynamicType));
+		list.add(Criteria.where("state").is(1));
+		list.add(Criteria.where("startTime").lte(now));
+		list.add(Criteria.where("endTime").gte(now));
+		
+		if (list.size() > 0) {
+			Criteria[] cas = new Criteria[list.size()];
+			for (int i = 0; i < list.size(); i++)
+				cas[i] = list.get(i);
+			query.addCriteria(new Criteria().andOperator(cas));
+		}
 		return mongoTemplate.count(query, GoodsEvaluate.class);
 	}
 	
@@ -168,9 +214,18 @@
 	 */
 	public List<GoodsEvaluate> querySingleExist() {
 		Query query = new Query();
-		query.addCriteria(Criteria.where("dynamicType").is(1));
-		query.addCriteria(Criteria.where("state").is(1));
-		query.addCriteria(Criteria.where("goods.goodsType").is(1));
+		List<Criteria> list = new ArrayList<Criteria>();
+		
+		list.add(Criteria.where("dynamicType").is(1));
+		list.add(Criteria.where("state").is(1));
+		list.add(Criteria.where("goods.goodsType").is(1));
+		
+		if (list.size() > 0) {
+			Criteria[] cas = new Criteria[list.size()];
+			for (int i = 0; i < list.size(); i++)
+				cas[i] = list.get(i);
+			query.addCriteria(new Criteria().andOperator(cas));
+		}
 		return mongoTemplate.find(query, GoodsEvaluate.class);
 	}
 	
@@ -184,10 +239,19 @@
 	 */
 	public List<GoodsEvaluate> queryExist(int goodsType, Long goodsId) {
 		Query query = new Query();
-		query.addCriteria(Criteria.where("dynamicType").is(1));
-		query.addCriteria(Criteria.where("state").is(1));
-		query.addCriteria(Criteria.where("imgList.goods.goodsId").is(goodsId));
-		query.addCriteria(Criteria.where("imgList.goods.goodsType").is(goodsType));
+		List<Criteria> list = new ArrayList<Criteria>();
+		list.add(Criteria.where("dynamicType").is(1));
+		list.add(Criteria.where("state").is(1));
+		list.add(Criteria.where("imgList.goods.goodsId").is(goodsId));
+		list.add(Criteria.where("imgList.goods.goodsType").is(goodsType));
+		
+		if (list.size() > 0) {
+			Criteria[] cas = new Criteria[list.size()];
+			for (int i = 0; i < list.size(); i++)
+				cas[i] = list.get(i);
+			query.addCriteria(new Criteria().andOperator(cas));
+		}
+		
 		return mongoTemplate.find(query, GoodsEvaluate.class);
 	}
 
@@ -217,8 +281,17 @@
 	 */
 	public List<GoodsEvaluate> removeDownGoods() {
 		Query query = new Query();
-		query.addCriteria(Criteria.where("type").is("single"));
-		query.addCriteria(Criteria.where("goods.state").is(1));
+		List<Criteria> list = new ArrayList<Criteria>();
+		list.add(Criteria.where("type").is("single"));
+		list.add(Criteria.where("goods.state").is(1));
+		
+		if (list.size() > 0) {
+			Criteria[] cas = new Criteria[list.size()];
+			for (int i = 0; i < list.size(); i++)
+				cas[i] = list.get(i);
+			query.addCriteria(new Criteria().andOperator(cas));
+		}
+		
 		return mongoTemplate.find(query, GoodsEvaluate.class);
 	}
 }
diff --git a/fanli/src/main/java/com/yeshi/fanli/dao/mybatis/ExtractMapper.java b/fanli/src/main/java/com/yeshi/fanli/dao/mybatis/ExtractMapper.java
index 75dcae6..b76be58 100644
--- a/fanli/src/main/java/com/yeshi/fanli/dao/mybatis/ExtractMapper.java
+++ b/fanli/src/main/java/com/yeshi/fanli/dao/mybatis/ExtractMapper.java
@@ -124,4 +124,18 @@
 	 * @return
 	 */
 	BigDecimal sumMoneyByUidAndState(@Param("uid") Long uid,@Param("stateList")List<Integer> stateList);
+	
+	
+	/**
+	 * 鏌ヨ鎻愮幇鎴愬姛璁板綍
+	 * @param start
+	 * @param count
+	 * @param uid
+	 * @return
+	 */
+	List<Extract> getExtractSucceedRecord(@Param("start") long start, @Param("count") int count, @Param("uid") Long uid);
+
+	
+	Long countExtractSucceedRecord(@Param("uid") Long uid);
+
 }
\ No newline at end of file
diff --git a/fanli/src/main/java/com/yeshi/fanli/dao/mybatis/HongBaoV2CountMapper.java b/fanli/src/main/java/com/yeshi/fanli/dao/mybatis/HongBaoV2CountMapper.java
index 0ad0629..6b0ac36 100644
--- a/fanli/src/main/java/com/yeshi/fanli/dao/mybatis/HongBaoV2CountMapper.java
+++ b/fanli/src/main/java/com/yeshi/fanli/dao/mybatis/HongBaoV2CountMapper.java
@@ -172,5 +172,23 @@
 	 * @return
 	 */
 	BigDecimal sumMoneyArrivalByUidAndNearDay(@Param("uid") Long uid, @Param("day") int day);
+	
+	
+	/**
+	 * 缁熻缁撶畻閲戦
+	 * @param uid
+	 * @param minDate
+	 * @param maxDate
+	 * @return
+	 */
+	BigDecimal sumMoneyBySettleTimeAndUid(@Param("uid") Long uid, @Param("minDate") Date minDate, @Param("maxDate") Date maxDate);
 
+	/**
+	 * 180鍐呮湭鏀惰揣鐨勯噾棰�
+	 * @param uid
+	 * @return
+	 */
+	BigDecimal sumMoneyByANotSettleAndUid(@Param("uid") Long uid);
+	
+	
 }
\ No newline at end of file
diff --git a/fanli/src/main/java/com/yeshi/fanli/dao/mybatis/homemodule/SpecialExtraMapper.java b/fanli/src/main/java/com/yeshi/fanli/dao/mybatis/homemodule/SpecialExtraMapper.java
new file mode 100644
index 0000000..1de3785
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/dao/mybatis/homemodule/SpecialExtraMapper.java
@@ -0,0 +1,8 @@
+package com.yeshi.fanli.dao.mybatis.homemodule;
+
+import com.yeshi.fanli.dao.BaseMapper;
+import com.yeshi.fanli.entity.bus.homemodule.SpecialExtra;
+
+public interface SpecialExtraMapper extends BaseMapper<SpecialExtra> {
+
+}
\ No newline at end of file
diff --git a/fanli/src/main/java/com/yeshi/fanli/dao/order/DateTypeEnum.java b/fanli/src/main/java/com/yeshi/fanli/dao/order/DateTypeEnum.java
new file mode 100644
index 0000000..18bc298
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/dao/order/DateTypeEnum.java
@@ -0,0 +1,32 @@
+package com.yeshi.fanli.dao.order;
+
+public enum DateTypeEnum {
+	DATE("1", "%Y-%m-%d"),
+	MONTH("2", "%Y-%m"),
+	YEAR("3", "%Y");
+	
+	private String name;
+	private String value;
+
+	private DateTypeEnum(String name, String value) {
+		this.name = name;
+		this.value = value;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+	public void setValue(String value) {
+		this.value = value;
+	}
+
+}
\ No newline at end of file
diff --git a/fanli/src/main/java/com/yeshi/fanli/dao/order/OrderMoneyDailyCountDao.java b/fanli/src/main/java/com/yeshi/fanli/dao/order/OrderMoneyDailyCountDao.java
new file mode 100644
index 0000000..dd77db7
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/dao/order/OrderMoneyDailyCountDao.java
@@ -0,0 +1,150 @@
+package com.yeshi.fanli.dao.order;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.core.query.Update;
+import org.springframework.stereotype.Repository;
+
+import com.mongodb.BasicDBList;
+import com.mongodb.BasicDBObject;
+import com.mongodb.DBCollection;
+import com.mongodb.DBObject;
+import com.mongodb.GroupCommand;
+import com.yeshi.fanli.entity.order.OrderMoneyDailyCount;
+
+@Repository
+public class OrderMoneyDailyCountDao {
+
+	@Resource
+	private MongoTemplate mongoTemplate;
+
+	/**
+	 * 鏂板
+	 * 
+	 * @param record
+	 */
+	public void save(OrderMoneyDailyCount record) {
+		if (record == null) {
+			return;
+		}
+		mongoTemplate.save(record);
+	}
+
+	/**
+	 * 鏌ヨID
+	 * 
+	 * @param id
+	 * @return
+	 */
+	public OrderMoneyDailyCount getById(String id) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("id").is(id));
+		return mongoTemplate.findOne(query, OrderMoneyDailyCount.class);
+	}
+
+	/**
+	 * 閫夋嫨鏇存柊
+	 * 
+	 * @param info
+	 */
+	public void updateSelective(OrderMoneyDailyCount info) {
+		Query query = new Query();
+		query.addCriteria(Criteria.where("id").is(info.getId()));
+		Update update = new Update();
+		if (info.getIncome() != null)
+			update.set("income", info.getIncome());
+		if (info.getIncomeTeam() != null)
+			update.set("incomeTeam", info.getIncomeTeam());
+		if (info.getOrderNum() != null)
+			update.set("orderNum", info.getOrderNum());
+		if (info.getOrderNumTeam() != null)
+			update.set("orderNumTeam", info.getOrderNumTeam());
+		update.set("updateTime", new Date());
+		mongoTemplate.updateMulti(query, update, OrderMoneyDailyCount.class);
+	}
+
+	// 鏌ヨ
+	public List<OrderMoneyDailyCount> query(Long uid, Date minDay, Date maxDay) {
+		Query query = new Query();
+		List<Criteria> list = new ArrayList<Criteria>();
+		list.add(Criteria.where("uid").is(uid));
+
+		if (minDay != null) {
+			list.add(Criteria.where("bossSuperId").lte(uid));
+		}
+
+		if (maxDay != null) {
+			list.add(Criteria.where("bossSuperId").gte(uid));
+		}
+
+		if (list.size() > 0) {
+			Criteria[] cas = new Criteria[list.size()];
+			for (int i = 0; i < list.size(); i++)
+				cas[i] = list.get(i);
+			query.addCriteria(new Criteria().andOperator(cas));
+		}
+		query.with(new Sort(Sort.Direction.ASC, "countDay"));
+		return mongoTemplate.find(query, OrderMoneyDailyCount.class);
+	}
+
+	
+//	
+//	public List<PlaybackEntity> queryPlaybackRecord(FunctionUseQueryEntity queryEntity) {
+//		Criteria criteria = Criteria.where("createTime").gte(queryEntity.getStartTime()).lte(queryEntity.getEndTime())
+//				.and("status").is(1);
+//		Query query = Query.query(criteria);
+//
+//		BasicDBObject initial = new BasicDBObject();
+//		initial.put("playbackNum", 0);
+//
+//		String reduce = getReduce();
+//		// 杩涜鎸夊ぉ銆佸懆銆佹湀鍒嗙粍
+//		String keyf = getKeyf(queryEntity);
+//
+//		DBCollection collection = mongoTemplate.getCollection(COLLNAME);
+//
+//		GroupCommand xx = new GroupCommand(collection, keyf, query.getQueryObject(), initial, reduce, null);
+//
+//		BasicDBList objects = (BasicDBList) collection.group(xx);
+//
+//		List<PlaybackEntity> results = new ArrayList<PlaybackEntity>();
+//		if (objects != null) {
+//			for (int i = 0; i < objects.size(); i++) {
+//				PlaybackEntity play = new PlaybackEntity();
+//				DBObject obj = (DBObject) objects.get(i);
+//				play.setFormateTime((String) obj.get("strData"));
+//				play.setPlaybackNum((Double) obj.get("playbackNum"));
+//				results.add(play);
+//			}
+//		}
+//		return results;
+//	}
+//
+//	private String getKeyf(FunctionUseQueryEntity queryEntity) {
+//		StringBuilder keyfBuilder = new StringBuilder();
+//		keyfBuilder.append("function(doc){ ").append("    var date = new Date(doc.createTime); ");
+//		if (DateTypeEnum.DATE.getValue().equals(queryEntity.getType())) {
+//			keyfBuilder.append(
+//					"    var dateKey = '' + date.getFullYear()+ '-' + (date.getMonth()+1) + '-' + date.getDate();");
+//		} else if (DateTypeEnum.MONTH.getValue().equals(queryEntity.getType())) {
+//			keyfBuilder.append("    var dateKey = '' + date.getFullYear()+ '-' + (date.getMonth()+1);");
+//		}
+//		keyfBuilder.append("    return {'strData':dateKey};  ").append(" }");
+//		return keyfBuilder.toString();
+//	}
+//
+//	private String getReduce() {
+//		StringBuilder reduceBuilder = new StringBuilder();
+//		reduceBuilder.append("function Reduce(doc, out) { ").append("    out.playbackNum += 1; ").append(" }");
+//		return reduceBuilder.toString();
+//	}
+
+}
diff --git a/fanli/src/main/java/com/yeshi/fanli/dao/user/ThreeSaleFocusInfoDao.java b/fanli/src/main/java/com/yeshi/fanli/dao/user/ThreeSaleFocusInfoDao.java
index a60a386..9481784 100644
--- a/fanli/src/main/java/com/yeshi/fanli/dao/user/ThreeSaleFocusInfoDao.java
+++ b/fanli/src/main/java/com/yeshi/fanli/dao/user/ThreeSaleFocusInfoDao.java
@@ -1,6 +1,7 @@
 package com.yeshi.fanli.dao.user;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.regex.Pattern;
@@ -36,7 +37,6 @@
 		mongoTemplate.save(record);
 	}
 
-	
 	/**
 	 * 鏇存柊鏍囩
 	 * 
@@ -46,10 +46,10 @@
 		if (memoName == null) {
 			memoName = "";
 		}
-		
+
 		Query query = new Query();
 		query.addCriteria(Criteria.where("workerId").is(workerId));
-		
+
 		Update update = null;
 		if (type == 1) {
 			update = Update.update("memoName", memoName);
@@ -68,10 +68,10 @@
 		if (tags == null) {
 			tags = "";
 		}
-		
+
 		Query query = new Query();
 		query.addCriteria(Criteria.where("workerId").is(workerId));
-		
+
 		Update update = null;
 		if (type == 1) {
 			update = Update.update("tags", tags);
@@ -80,9 +80,10 @@
 		}
 		mongoTemplate.updateFirst(query, update, ThreeSaleFocusInfo.class);
 	}
-	
+
 	/**
 	 * 鏇存柊鏄电О
+	 * 
 	 * @param workerId
 	 * @param nickName
 	 */
@@ -90,90 +91,94 @@
 		if (nickName == null) {
 			nickName = "";
 		}
-		
+
 		Query query = new Query();
 		query.addCriteria(Criteria.where("workerId").is(workerId));
-		Update update =  Update.update("nickName", nickName);
+		Update update = Update.update("nickName", nickName);
 		mongoTemplate.updateFirst(query, update, ThreeSaleFocusInfo.class);
 	}
-	
-	
+
 	/**
 	 * 鏇存柊鏄惁鏈夋晥绮変笣
+	 * 
 	 * @param workerId
 	 * @param stateValid
 	 */
 	public void updateStateValid(Long workerId, boolean stateValid) {
 		Query query = new Query();
 		query.addCriteria(Criteria.where("workerId").is(workerId));
-		Update update =  Update.update("stateValid", stateValid);
+		Update update = Update.update("stateValid", stateValid);
 		mongoTemplate.updateFirst(query, update, ThreeSaleFocusInfo.class);
 	}
-	
+
 	/**
 	 * 鏇存柊娣樺疂缁戝畾
+	 * 
 	 * @param workerId
 	 * @param taobaoBind
 	 */
 	public void updateTaobaoBind(Long workerId, boolean taobaoBind) {
 		Query query = new Query();
 		query.addCriteria(Criteria.where("workerId").is(workerId));
-		Update update =  Update.update("taobaoBind", taobaoBind);
+		Update update = Update.update("taobaoBind", taobaoBind);
 		mongoTemplate.updateFirst(query, update, ThreeSaleFocusInfo.class);
 	}
-	
+
 	/**
 	 * 鏇存柊寰俊缁戝畾
+	 * 
 	 * @param workerId
 	 * @param weixinBind
 	 */
 	public void updateWeixinBind(Long workerId, boolean weixinBind) {
 		Query query = new Query();
 		query.addCriteria(Criteria.where("workerId").is(workerId));
-		Update update =  Update.update("weixinBind", weixinBind);
+		Update update = Update.update("weixinBind", weixinBind);
 		mongoTemplate.updateFirst(query, update, ThreeSaleFocusInfo.class);
 	}
 
 	/**
 	 * 鏇存柊娲昏穬鏃堕棿
+	 * 
 	 * @param workerId
 	 * @param activeTime
 	 */
 	public void updateActiveTime(Long workerId, Date activeTime) {
 		Query query = new Query();
 		query.addCriteria(Criteria.where("workerId").is(workerId));
-		Update update =  Update.update("activeTime", activeTime);
+		Update update = Update.update("activeTime", activeTime);
 		mongoTemplate.updateFirst(query, update, ThreeSaleFocusInfo.class);
 	}
 
 	/**
 	 * 鏇存柊绮変笣鏁伴噺
+	 * 
 	 * @param workerId
 	 * @param fansNum
 	 */
 	public void updateFansNum(Long workerId, int fansNum) {
 		Query query = new Query();
 		query.addCriteria(Criteria.where("workerId").is(workerId));
-		Update update =  Update.update("fansNum", fansNum);
+		Update update = Update.update("fansNum", fansNum);
 		mongoTemplate.updateFirst(query, update, ThreeSaleFocusInfo.class);
 	}
 
-
 	/**
 	 * 鏇存柊鏀跺叆
+	 * 
 	 * @param workerId
 	 * @param income
 	 */
 	public void updateIncome(Long workerId, BigDecimal income) {
 		Query query = new Query();
 		query.addCriteria(Criteria.where("workerId").is(workerId));
-		Update update =  Update.update("income", income).set("incomeTime", new Date());
+		Update update = Update.update("income", income).set("incomeTime", new Date());
 		mongoTemplate.updateMulti(query, update, ThreeSaleFocusInfo.class);
 	}
-	
 
 	/**
 	 * 缁熻
+	 * 
 	 * @return
 	 */
 	public ThreeSaleFocusInfo getbyWorkerId(Long workerId) {
@@ -181,7 +186,7 @@
 		query.addCriteria(Criteria.where("workerId").is(workerId));
 		return mongoTemplate.findOne(query, ThreeSaleFocusInfo.class);
 	}
-	
+
 	/**
 	 * 鏌ヨ
 	 * 
@@ -190,12 +195,13 @@
 	public List<ThreeSaleFocusInfo> query(int start, int count, int type, Long uid, ThreeSaleFocusDTO focusDTO) {
 		Query query = createQuery(type, uid, focusDTO);
 		query.skip(start).limit(count);
-		query.with(new Sort(Sort.Direction.DESC,"weight"));
+		query.with(new Sort(Sort.Direction.DESC, "weight"));
 		return mongoTemplate.find(query, ThreeSaleFocusInfo.class);
 	}
 
 	/**
 	 * 缁熻
+	 * 
 	 * @return
 	 */
 	public long count(int type, Long uid, ThreeSaleFocusDTO focusDTO) {
@@ -203,65 +209,85 @@
 		return mongoTemplate.count(query, ThreeSaleFocusInfo.class);
 	}
 
-	
 	private Query createQuery(int type, Long uid, ThreeSaleFocusDTO focusDTO) {
 		Query query = new Query();
+		List<Criteria> list = new ArrayList<Criteria>();
+
 		if (type == 1) {
-			query.addCriteria(Criteria.where("bossId").is(uid));
+			list.add(Criteria.where("bossId").is(uid));
 		} else {
-			query.addCriteria(Criteria.where("bossSuperId").is(uid));
+			list.add(Criteria.where("bossSuperId").is(uid));
 		}
-		
-		if (focusDTO == null) {
-			return query;
-		}
-		
-		if (focusDTO.getStateValid() != null)
-			query.addCriteria(Criteria.where("stateValid").is(focusDTO.getStateValid()));
-	
-		if (focusDTO.getTaobaoBind() != null)
-			query.addCriteria(Criteria.where("taobaoBind").is(focusDTO.getTaobaoBind()));
-	
-		if (focusDTO.getWeixinBind() != null)
-			query.addCriteria(Criteria.where("weixinBind").is(focusDTO.getWeixinBind()));
-	
-		if (focusDTO.getMinFansNum() != null)
-			query.addCriteria(Criteria.where("fansNum").lte(focusDTO.getMinFansNum()));
-	
-		if (focusDTO.getMinFansNum() != null)
-			query.addCriteria(Criteria.where("fansNum").gte(focusDTO.getMinFansNum()));
-	
-		if (focusDTO.getMinActiveTime() != null)
-			query.addCriteria(Criteria.where("activeTime").lte(focusDTO.getMinActiveTime()));
-	
-		if (focusDTO.getMaxActiveTime() != null)
-			query.addCriteria(Criteria.where("activeTime").gte(focusDTO.getMaxActiveTime()));
-		
-		if (focusDTO.getMinIncome() != null)
-			query.addCriteria(Criteria.where("income").lte(focusDTO.getMinIncome()));
-	
-		if (focusDTO.getMaxIncome() != null)
-			query.addCriteria(Criteria.where("income").gte(focusDTO.getMaxIncome()));
-		
-		
-		if (!StringUtil.isNullOrEmpty(focusDTO.getKey())) {
-			if (type == 1) {
-				query.addCriteria(new Criteria().orOperator(
-				       Criteria.where("nickName").regex(Pattern.compile("^.*" + focusDTO.getKey() + ".*$", Pattern.CASE_INSENSITIVE)),
-				       		new Criteria().andOperator(Criteria.where("memoName").regex(Pattern.compile("^.*" + focusDTO.getKey() + ".*$", Pattern.CASE_INSENSITIVE))),
-				       		new Criteria().andOperator(Criteria.where("tags").regex(Pattern.compile("^.*" + focusDTO.getKey() + ".*$", Pattern.CASE_INSENSITIVE)))
-				    ));
-			} else {
-				query.addCriteria(new Criteria().orOperator(
-					       Criteria.where("nickName").regex(Pattern.compile("^.*" + focusDTO.getKey() + ".*$", Pattern.CASE_INSENSITIVE)),
-					       		new Criteria().andOperator(Criteria.where("memoNameSup").regex(Pattern.compile("^.*" + focusDTO.getKey() + ".*$", Pattern.CASE_INSENSITIVE))),
-					       		new Criteria().andOperator(Criteria.where("tagsSup").regex(Pattern.compile("^.*" + focusDTO.getKey() + ".*$", Pattern.CASE_INSENSITIVE)))
-					    ));
+
+		if (focusDTO != null) {
+			if (focusDTO.getStateValid() != null)
+				list.add(Criteria.where("stateValid").is(focusDTO.getStateValid()));
+
+			if (focusDTO.getTaobaoBind() != null)
+				list.add(Criteria.where("taobaoBind").is(focusDTO.getTaobaoBind()));
+
+			if (focusDTO.getWeixinBind() != null)
+				list.add(Criteria.where("weixinBind").is(focusDTO.getWeixinBind()));
+
+			if (!StringUtil.isNullOrEmpty(focusDTO.getLevel()))
+				list.add(Criteria.where("level").is(focusDTO.getLevel()));
+
+			if (focusDTO.getMinFansNum() != null)
+				list.add(Criteria.where("fansNum").lte(focusDTO.getMinFansNum()));
+
+			if (focusDTO.getMaxFansNum() != null)
+				list.add(Criteria.where("fansNum").gte(focusDTO.getMaxFansNum()));
+
+			if (!StringUtil.isNullOrEmpty(focusDTO.getMinJoinTime()))
+				list.add(Criteria.where("joinTime").lte(focusDTO.getMinJoinTime()));
+
+			if (!StringUtil.isNullOrEmpty(focusDTO.getMaxJoinTime()))
+				list.add(Criteria.where("joinTime").gte(focusDTO.getMaxJoinTime()));
+
+			if (!StringUtil.isNullOrEmpty(focusDTO.getMinActiveTime()))
+				list.add(Criteria.where("activeTime").lte(focusDTO.getMinActiveTime()));
+
+			if (!StringUtil.isNullOrEmpty(focusDTO.getMaxActiveTime()))
+				list.add(Criteria.where("activeTime").gte(focusDTO.getMaxActiveTime()));
+
+			if (focusDTO.getMinIncome() != null)
+				list.add(Criteria.where("income").lte(focusDTO.getMinIncome()));
+
+			if (focusDTO.getMaxIncome() != null)
+				list.add(Criteria.where("income").gte(focusDTO.getMaxIncome()));
+
+			if (!StringUtil.isNullOrEmpty(focusDTO.getKey())) {
+				if (type == 1) {
+					list.add(new Criteria().orOperator(	Criteria.where("nickName")
+											.regex(Pattern.compile("^.*" + focusDTO.getKey() + ".*$",
+													Pattern.CASE_INSENSITIVE)),
+									new Criteria().andOperator(Criteria.where("memoName")
+											.regex(Pattern.compile("^.*" + focusDTO.getKey() + ".*$",
+													Pattern.CASE_INSENSITIVE))),
+									new Criteria().andOperator(Criteria.where("tags").regex(Pattern
+											.compile("^.*" + focusDTO.getKey() + ".*$", Pattern.CASE_INSENSITIVE)))));
+				} else {
+					list.add(new Criteria().orOperator(Criteria.where("nickName")
+											.regex(Pattern.compile("^.*" + focusDTO.getKey() + ".*$",
+													Pattern.CASE_INSENSITIVE)),
+									new Criteria().andOperator(Criteria.where("memoNameSup")
+											.regex(Pattern.compile("^.*" + focusDTO.getKey() + ".*$",
+													Pattern.CASE_INSENSITIVE))),
+									new Criteria().andOperator(Criteria.where("tagsSup").regex(Pattern
+											.compile("^.*" + focusDTO.getKey() + ".*$", Pattern.CASE_INSENSITIVE)))));
+				}
 			}
 		}
+
+		if (list.size() > 0) {
+
+			Criteria[] cas = new Criteria[list.size()];
+			for (int i = 0; i < list.size(); i++)
+				cas[i] = list.get(i);
+			query.addCriteria(new Criteria().andOperator(cas));
+		}
+
 		return query;
 	}
-	
-	
-	
+
 }
diff --git a/fanli/src/main/java/com/yeshi/fanli/dto/user/ThreeSaleFocusDTO.java b/fanli/src/main/java/com/yeshi/fanli/dto/user/ThreeSaleFocusDTO.java
index d4e17e7..f507678 100644
--- a/fanli/src/main/java/com/yeshi/fanli/dto/user/ThreeSaleFocusDTO.java
+++ b/fanli/src/main/java/com/yeshi/fanli/dto/user/ThreeSaleFocusDTO.java
@@ -1,17 +1,19 @@
 package com.yeshi.fanli.dto.user;
 
 import java.math.BigDecimal;
-import java.util.Date;
 
 public class ThreeSaleFocusDTO {
 	private String key;
+	private String level;
 	private Boolean stateValid;
 	private Boolean taobaoBind;
 	private Boolean weixinBind;
 	private Integer minFansNum;
 	private Integer maxFansNum;
-	private Date minActiveTime;
-	private Date maxActiveTime;
+	private String minJoinTime;
+	private String maxJoinTime;
+	private String minActiveTime;
+	private String maxActiveTime;
 	private BigDecimal minIncome;
 	private BigDecimal maxIncome;
 
@@ -64,19 +66,19 @@
 		this.maxFansNum = maxFansNum;
 	}
 
-	public Date getMinActiveTime() {
+	public String getMinActiveTime() {
 		return minActiveTime;
 	}
 
-	public void setMinActiveTime(Date minActiveTime) {
+	public void setMinActiveTime(String minActiveTime) {
 		this.minActiveTime = minActiveTime;
 	}
 
-	public Date getMaxActiveTime() {
+	public String getMaxActiveTime() {
 		return maxActiveTime;
 	}
 
-	public void setMaxActiveTime(Date maxActiveTime) {
+	public void setMaxActiveTime(String maxActiveTime) {
 		this.maxActiveTime = maxActiveTime;
 	}
 
@@ -96,4 +98,29 @@
 		this.maxIncome = maxIncome;
 	}
 
+	public String getMinJoinTime() {
+		return minJoinTime;
+	}
+
+	public void setMinJoinTime(String minJoinTime) {
+		this.minJoinTime = minJoinTime;
+	}
+
+	public String getMaxJoinTime() {
+		return maxJoinTime;
+	}
+
+	public void setMaxJoinTime(String maxJoinTime) {
+		this.maxJoinTime = maxJoinTime;
+	}
+
+	public String getLevel() {
+		return level;
+	}
+
+	public void setLevel(String level) {
+		this.level = level;
+	}
+
+	
 }
diff --git a/fanli/src/main/java/com/yeshi/fanli/entity/bus/homemodule/SpecialExtra.java b/fanli/src/main/java/com/yeshi/fanli/entity/bus/homemodule/SpecialExtra.java
new file mode 100644
index 0000000..12e8686
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/entity/bus/homemodule/SpecialExtra.java
@@ -0,0 +1,75 @@
+package com.yeshi.fanli.entity.bus.homemodule;
+
+import java.util.Date;
+
+import org.yeshi.utils.mybatis.Column;
+import org.yeshi.utils.mybatis.Table;
+
+/**
+ * 涓撻绠$悊
+ * 
+ */
+@Table("yeshi_ec_special_extra")
+public class SpecialExtra {
+
+	//涓撻id
+	@Column(name = "se_id")
+	private Long id;
+
+	// 鏄惁杞摼
+	@Column(name = "se_need_spin")
+	private Boolean needSpin;
+
+	// 璇勮璇�
+	@Column(name = "se_comment")
+	private String comment;
+
+	// 鍒涘缓鏃堕棿
+	@Column(name = "se_createtime")
+	private Date createtime;
+
+	// 鏇存柊鏃堕棿
+	@Column(name = "se_updatetime")
+	private Date updatetime;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Boolean getNeedSpin() {
+		return needSpin;
+	}
+
+	public void setNeedSpin(Boolean needSpin) {
+		this.needSpin = needSpin;
+	}
+
+	public String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+
+	public Date getCreatetime() {
+		return createtime;
+	}
+
+	public void setCreatetime(Date createtime) {
+		this.createtime = createtime;
+	}
+
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+
+}
diff --git a/fanli/src/main/java/com/yeshi/fanli/entity/bus/user/ThreeSaleFocusInfo.java b/fanli/src/main/java/com/yeshi/fanli/entity/bus/user/ThreeSaleFocusInfo.java
index 8f3b00c..10472d9 100644
--- a/fanli/src/main/java/com/yeshi/fanli/entity/bus/user/ThreeSaleFocusInfo.java
+++ b/fanli/src/main/java/com/yeshi/fanli/entity/bus/user/ThreeSaleFocusInfo.java
@@ -7,6 +7,8 @@
 import org.springframework.data.mongodb.core.mapping.Document;
 import org.springframework.data.mongodb.core.mapping.Field;
 
+import com.yeshi.fanli.entity.bus.user.vip.UserLevelEnum;
+
 @Document(collection = "three_sale_focus_info")
 public class ThreeSaleFocusInfo {
 
@@ -25,6 +27,9 @@
 
 	@Field("nickName")
 	private String nickName; // 鏄电О
+	
+	@Field("level")
+	private UserLevelEnum level; // 褰撳墠绛夌骇
 
 	@Field("stateValid")
 	private Boolean stateValid; // 鏈夋晥绮変笣
@@ -58,6 +63,8 @@
 
 	@Field("memoNameSup")
 	private String memoNameSup; // 闂存帴涓婄骇澶囨敞鍚�
+	
+	
 
 	@Field("tagsSup")
 	private String tagsSup; // 闂存帴涓婄骇鏍囩
@@ -209,4 +216,12 @@
 		this.tagsSup = tagsSup;
 	}
 
+	public UserLevelEnum getLevel() {
+		return level;
+	}
+
+	public void setLevel(UserLevelEnum level) {
+		this.level = level;
+	}
+
 }
diff --git a/fanli/src/main/java/com/yeshi/fanli/entity/dynamic/GoodsEvaluate.java b/fanli/src/main/java/com/yeshi/fanli/entity/dynamic/GoodsEvaluate.java
index 8cfed4e..027a708 100644
--- a/fanli/src/main/java/com/yeshi/fanli/entity/dynamic/GoodsEvaluate.java
+++ b/fanli/src/main/java/com/yeshi/fanli/entity/dynamic/GoodsEvaluate.java
@@ -108,7 +108,6 @@
 	@Field("endTime")
 	private Date endTime; // 缁撴潫鏃堕棿
 	
-	
 	@Field("createTime")
 	private Date createTime; // 鍒涘缓鏃堕棿
 
@@ -120,6 +119,10 @@
 	
 	@Field("dynamicType")
 	private Integer dynamicType; // 1鍙戝湀 2绱犳潗
+	
+	@Expose
+	@Field("jumpLink")
+	private String jumpLink;
 	
 	
 	private String startTimeChar;
@@ -304,4 +307,13 @@
 	public void setRemarks(String remarks) {
 		this.remarks = remarks;
 	}
+
+	public String getJumpLink() {
+		return jumpLink;
+	}
+
+	public void setJumpLink(String jumpLink) {
+		this.jumpLink = jumpLink;
+	}
+	
 }
diff --git a/fanli/src/main/java/com/yeshi/fanli/entity/order/OrderMoneyDailyCount.java b/fanli/src/main/java/com/yeshi/fanli/entity/order/OrderMoneyDailyCount.java
new file mode 100644
index 0000000..a23817b
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/entity/order/OrderMoneyDailyCount.java
@@ -0,0 +1,118 @@
+package com.yeshi.fanli.entity.order;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+import org.springframework.data.mongodb.core.mapping.Field;
+
+/**
+ * 璁㈠崟鐩稿叧璧勯噾缁熻
+ * @author Administrator
+ *
+ */
+@Document(collection = "order_money_daily_count")
+public class OrderMoneyDailyCount {
+
+	@Id
+	@Field("id")
+	private String id;
+
+	@Field("uid")
+	private Long uid; // 涓婄骇id
+	
+	@Field("sourceType")
+	private String sourceType; // 鏉ユ簮绫诲瀷
+	
+	@Field("countDay")
+	private Date countDay; // 缁熻鏃ユ湡
+	
+	@Field("income")
+	private BigDecimal income; // 鏀跺叆-鎴戠殑
+
+	@Field("incomeTeam")
+	private BigDecimal incomeTeam; // 鏀跺叆-鍥㈤槦-
+
+	@Field("orderNum")
+	private Integer orderNum; // 璁㈠崟鏁伴噺-鎴戠殑
+
+	@Field("orderNumTeam")
+	private Integer orderNumTeam; // 璁㈠崟鏁伴噺-鍥㈤槦
+
+	@Field("updateTime")
+	private Date updateTime; // 鏇存柊鏃堕棿
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public Long getUid() {
+		return uid;
+	}
+
+	public void setUid(Long uid) {
+		this.uid = uid;
+	}
+
+	public BigDecimal getIncome() {
+		return income;
+	}
+
+	public void setIncome(BigDecimal income) {
+		this.income = income;
+	}
+
+	public BigDecimal getIncomeTeam() {
+		return incomeTeam;
+	}
+
+	public void setIncomeTeam(BigDecimal incomeTeam) {
+		this.incomeTeam = incomeTeam;
+	}
+
+	public Integer getOrderNum() {
+		return orderNum;
+	}
+
+	public void setOrderNum(Integer orderNum) {
+		this.orderNum = orderNum;
+	}
+
+	public Integer getOrderNumTeam() {
+		return orderNumTeam;
+	}
+
+	public void setOrderNumTeam(Integer orderNumTeam) {
+		this.orderNumTeam = orderNumTeam;
+	}
+
+	public Date getCountDay() {
+		return countDay;
+	}
+
+	public void setCountDay(Date countDay) {
+		this.countDay = countDay;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getSourceType() {
+		return sourceType;
+	}
+
+	public void setSourceType(String sourceType) {
+		this.sourceType = sourceType;
+	}
+
+}
diff --git a/fanli/src/main/java/com/yeshi/fanli/entity/push/PushGoods.java b/fanli/src/main/java/com/yeshi/fanli/entity/push/PushGoods.java
index 249e895..ee68ff9 100644
--- a/fanli/src/main/java/com/yeshi/fanli/entity/push/PushGoods.java
+++ b/fanli/src/main/java/com/yeshi/fanli/entity/push/PushGoods.java
@@ -13,7 +13,11 @@
 	public final static int STATE_INIT = 0;
 	public final static int STATE_SUCCESS = 1;
 	public final static int STATE_FAIL = 2;
-
+	
+	public final static int TYPE_GOODS = 1;
+	public final static int TYPE_ACTIVITY = 2;
+	
+	
 	@Column(name = "pg_id")
 	private Long id;
 
@@ -65,9 +69,17 @@
 	
 	@Column(name = "pg_updatetime")
 	private Date updateTime;
-
-	// 鏄惁瀹氭椂
-	private Boolean timeTask;
+	
+	// 绫诲瀷
+	@Column(name = "pg_type")
+	private Integer type;
+	// 鍏朵粬鍙傛暟
+	@Column(name = "pg_other_id")
+	private String otherId;
+	// 娴忚娆℃暟
+	@Column(name = "pg_scan_num")
+	private Integer scanNum;
+	
 	// 瀹氭椂鏃堕棿
 	private String controlTime_str;
 	
@@ -83,8 +95,6 @@
 	public PushGoods(Long id){
 		this.id = id;
 	}
-	
-	
 	
 	public Long getId() {
 		return id;
@@ -214,13 +224,6 @@
 		this.controlTime = controlTime;
 	}
 
-	public Boolean isTimeTask() {
-		return timeTask;
-	}
-
-	public void setTimeTask(Boolean timeTask) {
-		this.timeTask = timeTask;
-	}
 
 	public String getControlTime_str() {
 		return controlTime_str;
@@ -237,5 +240,29 @@
 	public void setRemark(String remark) {
 		this.remark = remark;
 	}
+
+	public Integer getType() {
+		return type;
+	}
+
+	public void setType(Integer type) {
+		this.type = type;
+	}
+
+	public Integer getScanNum() {
+		return scanNum;
+	}
+
+	public void setScanNum(Integer scanNum) {
+		this.scanNum = scanNum;
+	}
+
+	public String getOtherId() {
+		return otherId;
+	}
+
+	public void setOtherId(String otherId) {
+		this.otherId = otherId;
+	}
 	
 }
diff --git a/fanli/src/main/java/com/yeshi/fanli/entity/system/ConfigKeyEnum.java b/fanli/src/main/java/com/yeshi/fanli/entity/system/ConfigKeyEnum.java
index 8d5d5bf..59db54a 100644
--- a/fanli/src/main/java/com/yeshi/fanli/entity/system/ConfigKeyEnum.java
+++ b/fanli/src/main/java/com/yeshi/fanli/entity/system/ConfigKeyEnum.java
@@ -162,6 +162,7 @@
 	openSpeicalAndRelationApply("open_speical_and_relation_apply", "寮�鍚細鍛樿繍钀D涓庢笭閬揑D鐢宠"),
 	hotFunctionUrl("hot_function_url", "鐑棬鍔熻兘閾炬帴"), // 瀛樺湪2涓浉鍚� 瀛樺湪鐗堟湰鍖哄垎
 	pushGoodsDetails("push_goods_details", "鎺ㄩ�侀〉闈�"),
+	pushActivityLink("push_activity_link", "鎺ㄩ�佸彂鍦堟椿鍔ㄩ〉闈�"),
 	brandBackgroundPicture("brand_background_picture", "鍝佺墝鑳屾櫙鍥剧墖"),
 	articleHotWords("article_hot_words", "鍔ㄦ��-瀛﹂櫌鏂囩珷鐑悳璇�"),
 	inviteRules("invite_rules", "鍔ㄦ��-瀛﹂櫌鏂囩珷鐑悳璇�"),
@@ -188,6 +189,8 @@
 	vipUpgradeLink("vip_upgrade_link", "鎴戠殑鐣岄潰-浼氬憳鍗囩骇閾炬帴"),
 
 	orderRebateDescLink("order_rebate_desc_link", "璁㈠崟杩斿埄璁$畻璇存槑閾炬帴"),
+	
+	teamStatisticsLink("team_statistics_link", "鎺ㄩ�佸彂鍦堟椿鍔ㄩ〉闈�"),
 
 	// 骞冲彴瑙勫垯
 	platformRule("platform_rule_link", "骞冲彴瑙勫垯");
diff --git a/fanli/src/main/java/com/yeshi/fanli/mapping/ExtractMapper.xml b/fanli/src/main/java/com/yeshi/fanli/mapping/ExtractMapper.xml
index 3ceb70e..8cf3a70 100644
--- a/fanli/src/main/java/com/yeshi/fanli/mapping/ExtractMapper.xml
+++ b/fanli/src/main/java/com/yeshi/fanli/mapping/ExtractMapper.xml
@@ -22,8 +22,33 @@
 		<association property="system" column="sid"
 			select="com.yeshi.fanli.dao.mybatis.BusinessSystemMapper.selectByPrimaryKey">
 		</association>
-
 	</resultMap>
+	
+	
+	<resultMap id="SimplMap" type="com.yeshi.fanli.entity.bus.user.Extract">
+		<id column="id" property="id" jdbcType="BIGINT" />
+		<result column="account" property="account" jdbcType="VARCHAR" />
+		<result column="extractTime" property="extractTime" jdbcType="BIGINT" />
+		<result column="receiveTime" property="receiveTime" jdbcType="TIMESTAMP" />
+		<result column="ip" property="ip" jdbcType="VARCHAR" />
+		<result column="money" property="money" jdbcType="DECIMAL" />
+		<result column="name" property="name" jdbcType="VARCHAR" />
+		<result column="reason" property="reason" jdbcType="VARCHAR" />
+		<result column="state" property="state" jdbcType="INTEGER" />
+		<result column="type" property="type" jdbcType="INTEGER" />
+		<result column="adminId" property="adminId" jdbcType="BIGINT" />
+
+	    <association column="uid" property="userInfo" javaType="com.yeshi.fanli.entity.bus.user.UserInfo">
+			<id column="uid" property="id" jdbcType="BIGINT" />	
+	    </association>
+	    
+	    <association column=""sid"" property="system" javaType="com.yeshi.fanli.entity.system.BusinessSystem">
+			<id column="sid" property="id" jdbcType="BIGINT" />	
+	    </association>
+	</resultMap>
+	
+	
+	
 	<sql id="Base_Column_List">
 		id,account,extractTime,ip,money,name,reason,state,type,uid,sid,adminId,receiveTime
 	</sql>
@@ -428,4 +453,17 @@
 	</select>
 	
 	
+	<select id="getExtractSucceedRecord" resultMap="SimplMap">
+		 SELECT * FROM yeshi_ec_extract t
+		 WHERE t.`uid` = #{uid} AND t.`state` = 1
+		 ORDER BY t.`id` DESC
+		 LIMIT #{start},#{count}
+	</select>
+	
+	
+	<select id="countExtractSucceedRecord" resultType="Long">
+		SELECT COUNT(t.`id`) FROM yeshi_ec_extract t
+		WHERE t.`uid` = 389677 AND t.`state` = 1
+	</select>
+	
 </mapper>
\ No newline at end of file
diff --git a/fanli/src/main/java/com/yeshi/fanli/mapping/homemodule/SpecialExtraMapper.xml b/fanli/src/main/java/com/yeshi/fanli/mapping/homemodule/SpecialExtraMapper.xml
new file mode 100644
index 0000000..585a12f
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/mapping/homemodule/SpecialExtraMapper.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.yeshi.fanli.dao.mybatis.homemodule.SpecialExtraMapper">
+  <resultMap id="BaseResultMap" type="com.yeshi.fanli.entity.bus.homemodule.SpecialExtra">
+    <id column="se_id" property="id" jdbcType="BIGINT"/>
+    <result column="se_need_spin" property="needSpin" jdbcType="BOOLEAN"/>
+    <result column="se_comment" property="comment" jdbcType="VARCHAR"/>
+    <result column="se_createtime" property="createtime" jdbcType="TIMESTAMP"/>
+    <result column="se_updatetime" property="updatetime" jdbcType="TIMESTAMP"/>
+  </resultMap>
+  <sql id="Base_Column_List">se_id,se_need_spin,se_comment,se_createtime,se_updatetime</sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long">select
+    <include refid="Base_Column_List"/>from yeshi_ec_special_extra where se_id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">delete from yeshi_ec_special_extra where se_id = #{id,jdbcType=BIGINT}</delete>
+  <insert id="insert" parameterType="com.yeshi.fanli.entity.bus.homemodule.SpecialExtra" useGeneratedKeys="true" keyProperty="id">insert into yeshi_ec_special_extra (se_id,se_need_spin,se_comment,se_createtime,se_updatetime) values (#{id,jdbcType=BIGINT},#{needSpin,jdbcType=BOOLEAN},#{comment,jdbcType=VARCHAR},#{createtime,jdbcType=TIMESTAMP},#{updatetime,jdbcType=TIMESTAMP})</insert>
+  <insert id="insertSelective" parameterType="com.yeshi.fanli.entity.bus.homemodule.SpecialExtra" useGeneratedKeys="true" keyProperty="id">insert into yeshi_ec_special_extra
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">se_id,</if>
+      <if test="needSpin != null">se_need_spin,</if>
+      <if test="comment != null">se_comment,</if>
+      <if test="createtime != null">se_createtime,</if>
+      <if test="updatetime != null">se_updatetime,</if>
+    </trim>values
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">#{id,jdbcType=BIGINT},</if>
+      <if test="needSpin != null">#{needSpin,jdbcType=BOOLEAN},</if>
+      <if test="comment != null">#{comment,jdbcType=VARCHAR},</if>
+      <if test="createtime != null">#{createtime,jdbcType=TIMESTAMP},</if>
+      <if test="updatetime != null">#{updatetime,jdbcType=TIMESTAMP},</if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKey" parameterType="com.yeshi.fanli.entity.bus.homemodule.SpecialExtra">update yeshi_ec_special_extra set se_need_spin = #{needSpin,jdbcType=BOOLEAN},se_comment = #{comment,jdbcType=VARCHAR},se_createtime = #{createtime,jdbcType=TIMESTAMP},se_updatetime = #{updatetime,jdbcType=TIMESTAMP} where se_id = #{id,jdbcType=BIGINT}</update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.yeshi.fanli.entity.bus.homemodule.SpecialExtra">update yeshi_ec_special_extra
+    <set>
+      <if test="needSpin != null">se_need_spin=#{needSpin,jdbcType=BOOLEAN},</if>
+      <if test="comment != null">se_comment=#{comment,jdbcType=VARCHAR},</if>
+      <if test="createtime != null">se_createtime=#{createtime,jdbcType=TIMESTAMP},</if>
+      <if test="updatetime != null">se_updatetime=#{updatetime,jdbcType=TIMESTAMP},</if>
+    </set> where se_id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/fanli/src/main/java/com/yeshi/fanli/mapping/hongbao/HongBaoV2CountMapper.xml b/fanli/src/main/java/com/yeshi/fanli/mapping/hongbao/HongBaoV2CountMapper.xml
index 6f2b09f..c9770b9 100644
--- a/fanli/src/main/java/com/yeshi/fanli/mapping/hongbao/HongBaoV2CountMapper.xml
+++ b/fanli/src/main/java/com/yeshi/fanli/mapping/hongbao/HongBaoV2CountMapper.xml
@@ -417,4 +417,20 @@
 			AND  DATE_SUB(CURDATE(), INTERVAL #{day} DAY) <![CDATA[<=]]> DATE(v2.`hb_get_time`) 
 	</select>
 	
+	<select id="sumMoneyBySettleTimeAndUid" resultType="BigDecimal">
+		SELECT SUM(v2.hb_money) FROM  `yeshi_ec_hongbao_order` h 
+		LEFT JOIN (SELECT * FROM `yeshi_ec_hongbao_v2` v WHERE v.`hb_uid` = #{uid}) v2 ON IFNULL(v2.`hb_pid`,v2.`hb_id`) = h.`ho_hongbao_id`
+		LEFT JOIN `yeshi_ec_common_order` co ON h.`ho_order_id` = co.`co_id`
+		WHERE v2.`hb_id` IS NOT NULL AND  co.`co_settle_time`&gt;=#{minDate} AND co.`co_settle_time`<![CDATA[<]]>#{maxDate}
+	</select>
+	
+	<select id="sumMoneyByANotSettleAndUid" resultType="BigDecimal">
+		SELECT SUM(v2.hb_money) FROM  `yeshi_ec_hongbao_order` h 
+		LEFT JOIN (SELECT * FROM `yeshi_ec_hongbao_v2` v WHERE v.`hb_uid` = #{uid}) v2 ON IFNULL(v2.`hb_pid`,v2.`hb_id`) = h.`ho_hongbao_id`
+		LEFT JOIN `yeshi_ec_common_order` co ON h.`ho_order_id` = co.`co_id`
+		WHERE v2.`hb_id` IS NOT NULL AND co.co_state = 1 
+			AND DATE_SUB(CURDATE(), INTERVAL 180 DAY) <![CDATA[<=]]> DATE(co.`co_third_create_time`)
+	</select>
+	
+	
 </mapper>
diff --git a/fanli/src/main/java/com/yeshi/fanli/mapping/order/CommonOrderCountMapper.xml b/fanli/src/main/java/com/yeshi/fanli/mapping/order/CommonOrderCountMapper.xml
index 2ce61b6..2dc9bde 100644
--- a/fanli/src/main/java/com/yeshi/fanli/mapping/order/CommonOrderCountMapper.xml
+++ b/fanli/src/main/java/com/yeshi/fanli/mapping/order/CommonOrderCountMapper.xml
@@ -359,4 +359,7 @@
 				AND DATE_SUB(CURDATE(), INTERVAL #{day} DAY) <![CDATA[<=]]> DATE(d.`co_third_create_time`) 
 		GROUP BY d.`co_order_no`,d.`co_source_type`)A
 	</select>
+	
+	
+	
 </mapper>
diff --git a/fanli/src/main/java/com/yeshi/fanli/mapping/push/PushGoodsMapper.xml b/fanli/src/main/java/com/yeshi/fanli/mapping/push/PushGoodsMapper.xml
index 494f14f..088b6ad 100644
--- a/fanli/src/main/java/com/yeshi/fanli/mapping/push/PushGoodsMapper.xml
+++ b/fanli/src/main/java/com/yeshi/fanli/mapping/push/PushGoodsMapper.xml
@@ -17,13 +17,16 @@
     <result column="pg_push_time" property="pushTime" jdbcType="TIMESTAMP"/>
     <result column="pg_createtime" property="createTime" jdbcType="TIMESTAMP"/>
     <result column="pg_updatetime" property="updateTime" jdbcType="TIMESTAMP"/>
+    <result column="pg_type" property="type" jdbcType="INTEGER"/>
+    <result column="pg_other_id" property="otherId" jdbcType="VARCHAR"/>
+    <result column="pg_scan_num" property="scanNum" jdbcType="INTEGER"/>
   </resultMap>
-  <sql id="Base_Column_List">pg_id,pg_alert_title,pg_alert_content,pg_title,pg_content,pg_picture,pg_uid,pg_versions,pg_remark,pg_is_push,pg_control_time,pg_push_time,pg_createtime,pg_updatetime</sql>
+  <sql id="Base_Column_List">pg_id,pg_alert_title,pg_alert_content,pg_title,pg_content,pg_picture,pg_uid,pg_versions,pg_remark,pg_is_push,pg_control_time,pg_push_time,pg_createtime,pg_updatetime,pg_type,pg_other_id,pg_scan_num</sql>
   <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long">select
     <include refid="Base_Column_List"/>from yeshi_ec_push_goods where pg_id = #{id,jdbcType=BIGINT}
   </select>
   <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">delete from yeshi_ec_push_goods where pg_id = #{id,jdbcType=BIGINT}</delete>
-  <insert id="insert" parameterType="com.yeshi.fanli.entity.push.PushGoods" useGeneratedKeys="true" keyProperty="id">insert into yeshi_ec_push_goods (pg_id,pg_alert_title,pg_alert_content,pg_title,pg_content,pg_picture,pg_uid,pg_versions,pg_remark,pg_is_push,pg_control_time,pg_push_time,pg_createtime,pg_updatetime) values (#{id,jdbcType=BIGINT},#{alertTitle,jdbcType=VARCHAR},#{alertContent,jdbcType=VARCHAR},#{title,jdbcType=VARCHAR},#{content,jdbcType=VARCHAR},#{picture,jdbcType=VARCHAR},#{uid,jdbcType=BIGINT},#{versions,jdbcType=VARCHAR},#{remark,jdbcType=VARCHAR},#{isPush,jdbcType=INTEGER},#{controlTime,jdbcType=TIMESTAMP},#{pushTime,jdbcType=TIMESTAMP},#{createTime,jdbcType=TIMESTAMP},#{updateTime,jdbcType=TIMESTAMP})</insert>
+  <insert id="insert" parameterType="com.yeshi.fanli.entity.push.PushGoods" useGeneratedKeys="true" keyProperty="id">insert into yeshi_ec_push_goods (pg_id,pg_alert_title,pg_alert_content,pg_title,pg_content,pg_picture,pg_uid,pg_versions,pg_remark,pg_is_push,pg_control_time,pg_push_time,pg_createtime,pg_updatetime,pg_type,pg_other_id,pg_scan_num) values (#{id,jdbcType=BIGINT},#{alertTitle,jdbcType=VARCHAR},#{alertContent,jdbcType=VARCHAR},#{title,jdbcType=VARCHAR},#{content,jdbcType=VARCHAR},#{picture,jdbcType=VARCHAR},#{uid,jdbcType=BIGINT},#{versions,jdbcType=VARCHAR},#{remark,jdbcType=VARCHAR},#{isPush,jdbcType=INTEGER},#{controlTime,jdbcType=TIMESTAMP},#{pushTime,jdbcType=TIMESTAMP},#{createTime,jdbcType=TIMESTAMP},#{updateTime,jdbcType=TIMESTAMP},#{type,jdbcType=INTEGER},#{otherId,jdbcType=VARCHAR},#{scanNum,jdbcType=INTEGER})</insert>
   <insert id="insertSelective" parameterType="com.yeshi.fanli.entity.push.PushGoods" useGeneratedKeys="true" keyProperty="id">insert into yeshi_ec_push_goods
     <trim prefix="(" suffix=")" suffixOverrides=",">
       <if test="id != null">pg_id,</if>
@@ -40,6 +43,9 @@
       <if test="pushTime != null">pg_push_time,</if>
       <if test="createTime != null">pg_createtime,</if>
       <if test="updateTime != null">pg_updatetime,</if>
+      <if test="type != null">pg_type,</if>
+      <if test="otherId != null">pg_other_id,</if>
+      <if test="scanNum != null">pg_scan_num,</if>
     </trim>values
     <trim prefix="(" suffix=")" suffixOverrides=",">
       <if test="id != null">#{id,jdbcType=BIGINT},</if>
@@ -56,9 +62,12 @@
       <if test="pushTime != null">#{pushTime,jdbcType=TIMESTAMP},</if>
       <if test="createTime != null">#{createTime,jdbcType=TIMESTAMP},</if>
       <if test="updateTime != null">#{updateTime,jdbcType=TIMESTAMP},</if>
+      <if test="type != null">#{type,jdbcType=INTEGER},</if>
+      <if test="otherId != null">#{otherId,jdbcType=VARCHAR},</if>
+      <if test="scanNum != null">#{scanNum,jdbcType=INTEGER},</if>
     </trim>
   </insert>
-  <update id="updateByPrimaryKey" parameterType="com.yeshi.fanli.entity.push.PushGoods">update yeshi_ec_push_goods set pg_alert_title = #{alertTitle,jdbcType=VARCHAR},pg_alert_content = #{alertContent,jdbcType=VARCHAR},pg_title = #{title,jdbcType=VARCHAR},pg_content = #{content,jdbcType=VARCHAR},pg_picture = #{picture,jdbcType=VARCHAR},pg_uid = #{uid,jdbcType=BIGINT},pg_versions = #{versions,jdbcType=VARCHAR},pg_remark = #{remark,jdbcType=VARCHAR},pg_is_push = #{isPush,jdbcType=INTEGER},pg_control_time = #{controlTime,jdbcType=TIMESTAMP},pg_push_time = #{pushTime,jdbcType=TIMESTAMP},pg_createtime = #{createTime,jdbcType=TIMESTAMP},pg_updatetime = #{updateTime,jdbcType=TIMESTAMP} where pg_id = #{id,jdbcType=BIGINT}</update>
+  <update id="updateByPrimaryKey" parameterType="com.yeshi.fanli.entity.push.PushGoods">update yeshi_ec_push_goods set pg_alert_title = #{alertTitle,jdbcType=VARCHAR},pg_alert_content = #{alertContent,jdbcType=VARCHAR},pg_title = #{title,jdbcType=VARCHAR},pg_content = #{content,jdbcType=VARCHAR},pg_picture = #{picture,jdbcType=VARCHAR},pg_uid = #{uid,jdbcType=BIGINT},pg_versions = #{versions,jdbcType=VARCHAR},pg_remark = #{remark,jdbcType=VARCHAR},pg_is_push = #{isPush,jdbcType=INTEGER},pg_control_time = #{controlTime,jdbcType=TIMESTAMP},pg_push_time = #{pushTime,jdbcType=TIMESTAMP},pg_createtime = #{createTime,jdbcType=TIMESTAMP},pg_updatetime = #{updateTime,jdbcType=TIMESTAMP},pg_type = #{type,jdbcType=INTEGER},pg_other_id = #{otherId,jdbcType=VARCHAR},pg_scan_num = #{scanNum,jdbcType=INTEGER} where pg_id = #{id,jdbcType=BIGINT}</update>
   <update id="updateByPrimaryKeySelective" parameterType="com.yeshi.fanli.entity.push.PushGoods">update yeshi_ec_push_goods
     <set>
       <if test="alertTitle != null">pg_alert_title=#{alertTitle,jdbcType=VARCHAR},</if>
@@ -74,6 +83,9 @@
       <if test="pushTime != null">pg_push_time=#{pushTime,jdbcType=TIMESTAMP},</if>
       <if test="createTime != null">pg_createtime=#{createTime,jdbcType=TIMESTAMP},</if>
       <if test="updateTime != null">pg_updatetime=#{updateTime,jdbcType=TIMESTAMP},</if>
+      <if test="type != null">pg_type=#{type,jdbcType=INTEGER},</if>
+      <if test="otherId != null">pg_other_id=#{otherId,jdbcType=VARCHAR},</if>
+      <if test="scanNum != null">pg_scan_num=#{scanNum,jdbcType=INTEGER},</if>
     </set> where pg_id = #{id,jdbcType=BIGINT}
   </update>
   <delete id="deleteBatchByPrimaryKey"  parameterType="java.util.List">
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/count/HongBaoV2CountServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/count/HongBaoV2CountServiceImpl.java
index 0dfdf88..df705bc 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/count/HongBaoV2CountServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/count/HongBaoV2CountServiceImpl.java
@@ -174,4 +174,26 @@
 	public BigDecimal sumMoneyArrivalByUidAndNearDay(Long uid, int day) {
 		return hongBaoV2CountMapper.sumMoneyArrivalByUidAndNearDay(uid, day);
 	}
+	
+	
+	@Override
+	public BigDecimal sumMoneyBySettleTimeAndUid(Long uid, Date minDate, Date maxDate) {
+		 BigDecimal money = hongBaoV2CountMapper.sumMoneyBySettleTimeAndUid(uid, minDate, maxDate);
+		 if (money == null) {
+			 money = new BigDecimal(0);
+		 }
+		 return money;
+	}
+	
+	@Override
+	public BigDecimal sumMoneyByANotSettleAndUid(Long uid) {
+		 BigDecimal money = hongBaoV2CountMapper.sumMoneyByANotSettleAndUid(uid);
+		 if (money == null) {
+			 money = new BigDecimal(0);
+		 }
+		 return money;
+	}
+	
+	
+	
 }
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/GoodsEvaluateServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/GoodsEvaluateServiceImpl.java
index adb054c..2ff11ab 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/GoodsEvaluateServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/GoodsEvaluateServiceImpl.java
@@ -1001,7 +1001,7 @@
 	}
 
 	@Override
-	public void saveActivityPic(String pid, ImgInfo imgInfo, MultipartHttpServletRequest fileRequest)
+	public void saveActivityPic(String pid, ImgInfo imgInfo, String picUrls, MultipartHttpServletRequest fileRequest)
 			throws GoodsEvaluateException, Exception {
 		if (StringUtil.isNullOrEmpty(pid)) {
 			throw new GoodsEvaluateException(1, "璇蜂繚瀛樼涓�閮ㄥ垎淇℃伅");
@@ -1010,107 +1010,122 @@
 		GoodsEvaluate resultObj = goodsEvaluateDao.getById(pid);
 		if (resultObj == null)
 			throw new GoodsEvaluateException(1, "绗竴閮ㄥ垎淇℃伅缂哄け");
+		
+		if (imgInfo == null || StringUtil.isNullOrEmpty(imgInfo.getActivityUrl())) {
+			throw new GoodsEvaluateException(1, "娲诲姩閾炬帴涓嶈兘涓虹┖");
+		}
 
-		String videoPic = null;
-		String activityPic = null;
 		ImgInfo imgVideo = null;
-		ImgInfo imgactivity = null;
+		List<String> listDel = new ArrayList<String>();
+		List<ImgInfo> listOld = new ArrayList<ImgInfo>();
 		List<ImgInfo> resultList = resultObj.getImgList();
 		if (resultList != null && resultList.size() > 0) {
 			for (ImgInfo info : resultList) {
-				if (info.getType() == ImgEnum.activity) {
-					activityPic = info.getActivityPic();
-					imgactivity = info;
-				} else {
+				if (info.getType() == ImgEnum.video) {
 					imgVideo = info;
-					videoPic = info.getUrl();
+				} else {
+					listOld.add(info);
+				}
+			}
+		}
+		
+		// 瑙嗛閮ㄥ垎
+		if (fileRequest != null) {
+			MultipartFile filevideo = fileRequest.getFile("filevideo");
+			if (filevideo != null) {
+				if (StringUtil.isNullOrEmpty(imgInfo.getVideoUrl())) {
+					throw new GoodsEvaluateException(1, "瑙嗛閾炬帴涓嶈兘涓虹┖");
+				}
+				ImgInfo info = uploadVideoPicture(filevideo);
+				if (info == null)
+					throw new GoodsEvaluateException(2, "瑙嗛鍥剧墖涓婁紶澶辫触");
+				if (imgVideo != null) {
+					String url = imgVideo.getUrl();
+					if (!StringUtil.isNullOrEmpty(url)) {
+						listDel.add(url);
+					}
+					imgVideo.setUrl(info.getUrl());
+					imgVideo.setUrlHD(info.getUrl());
+				} else {
+					imgVideo = new ImgInfo();
+					imgVideo.setId(UUID.randomUUID().toString().replace("-", ""));
+					imgVideo.setLarge(true);
+					imgVideo.setPid(pid);
+					imgVideo.setUrl(info.getUrl());
+					imgVideo.setUrlHD(info.getUrl());
+					imgVideo.setVideoUrl(imgInfo.getVideoUrl());
+					imgVideo.setType(ImgEnum.video);
+				}
+				imgVideo.setW(info.getW());
+				imgVideo.setH(info.getH());
+			}
+		}
+
+		
+		List<ImgInfo> listImg = new ArrayList<ImgInfo>();
+		if (imgVideo != null) {
+			if (!StringUtil.isNullOrEmpty(imgInfo.getVideoUrl())) {
+				if (imgVideo != null && StringUtil.isNullOrEmpty(imgVideo.getUrl())) {
+					throw new GoodsEvaluateException(1, "瑙嗛灏侀潰鍥句笉鑳戒负绌�");
+				}
+				imgVideo.setVideoUrl(imgInfo.getVideoUrl());
+				listImg.add(imgVideo);
+			} else {
+				String url = imgVideo.getUrl();
+				if (!StringUtil.isNullOrEmpty(url)) {
+					listDel.add(url);
+				}
+			}
+		}
+ 
+		// 缂栬緫鍥剧墖
+		List<ImgInfo> tempList = new ArrayList<ImgInfo>();
+		if (!StringUtil.isNullOrEmpty(picUrls)) {
+			String[] pics = picUrls.split(",");
+			if (pics != null) {
+				for (int i = 0; i < pics.length; i++) {
+					String picLink = pics[i];
+					if (picLink.startsWith("http")) {
+						if (listOld != null) {
+							for (ImgInfo info: listOld) {
+								if (info.getUrl().equals(picLink)) {
+									tempList.add(info);
+									break;
+								}
+							}
+						}
+					}
 				}
 			}
 		}
 
-		int width = 0;
-		int height = 0;
-		int width2 = 0;
-		int height2 = 0;
-		List<ImgInfo> listImg = new ArrayList<ImgInfo>();
+		// 涓婁紶鏂囦欢鏇挎崲
 		if (fileRequest != null) {
-			MultipartFile filevideo = fileRequest.getFile("filevideo");
-			if (filevideo != null) {
-				removePicture(videoPic);
-
-				ImgInfo info = uploadVideoPicture(filevideo);
-				if (info == null)
-					throw new GoodsEvaluateException(2, "瑙嗛鍥剧墖涓婁紶澶辫触");
-				videoPic = info.getUrl();
-				width = info.getW();
-				height = info.getH();
-			}
-
-			MultipartFile activityfile = fileRequest.getFile("activityfile");
-			if (activityfile != null) {
-				removePicture(activityPic);
-				InputStream inputStream = activityfile.getInputStream();
-				BufferedImage sourceImg = ImageIO.read(inputStream);
-				width2 = sourceImg.getWidth();
-				height2 = sourceImg.getHeight();
-				String picLink = uploadPicture(activityfile);
-				activityPic = picLink;
+			for (int i = 0; i < 9; i++) {
+				MultipartFile file = fileRequest.getFile("file" + i);
+				if (file != null) {
+					ImgInfo info = uploadVideoPicture(file);
+					ImgInfo imgInfo0 = new ImgInfo();
+					imgInfo0.setId(UUID.randomUUID().toString().replace("-", ""));
+					imgInfo0.setLarge(false);
+					imgInfo0.setPid(pid);
+					imgInfo0.setUrl(info.getUrl());
+					imgInfo0.setUrlHD(info.getUrl());
+					imgInfo0.setType(ImgEnum.img);
+					imgInfo0.setW(info.getW());
+					imgInfo0.setH(info.getH());
+					
+					if (i < tempList.size()) {
+						tempList.set(i, imgInfo0);
+					} else {
+						tempList.add(imgInfo0);
+					}
+				} 
 			}
 		}
-
-		if (!StringUtil.isNullOrEmpty(videoPic) || !StringUtil.isNullOrEmpty(imgInfo.getVideoUrl())) {
-			if (imgVideo != null) {
-				imgVideo.setUrl(videoPic);
-				imgVideo.setUrlHD(videoPic);
-				imgVideo.setVideoUrl(imgInfo.getVideoUrl());
-			} else {
-				imgVideo = new ImgInfo();
-				imgVideo.setId(UUID.randomUUID().toString().replace("-", ""));
-				imgVideo.setLarge(true);
-				imgVideo.setPid(pid);
-				imgVideo.setUrl(videoPic);
-				imgVideo.setUrlHD(videoPic);
-				imgVideo.setVideoUrl(imgInfo.getVideoUrl());
-				imgVideo.setType(ImgEnum.video);
-			}
-			if (width > 0) {
-				imgVideo.setW(width);
-				imgVideo.setH(height);
-			} else {
-				imgVideo.setW(imgVideo.getW());
-				imgVideo.setH(imgVideo.getH());
-			}
-			listImg.add(imgVideo);
-		}
-
-		int totalImg = 0;
-		if (!StringUtil.isNullOrEmpty(activityPic) || !StringUtil.isNullOrEmpty(imgInfo.getActivityUrl())) {
-			if (imgactivity != null) {
-				imgactivity.setUrl(activityPic);
-				imgactivity.setUrlHD(activityPic);
-				imgactivity.setActivityUrl(imgInfo.getActivityUrl());
-			} else {
-				imgactivity = new ImgInfo();
-				imgactivity.setId(UUID.randomUUID().toString().replace("-", ""));
-				imgactivity.setLarge(true);
-				imgactivity.setPid(pid);
-				imgactivity.setUrl(activityPic);
-				imgactivity.setUrlHD(activityPic);
-				imgactivity.setActivityUrl(imgInfo.getActivityUrl());
-				imgactivity.setType(ImgEnum.activity);
-			}
-			if (width2 > 0) {
-				imgactivity.setW(width2);
-				imgactivity.setH(height2);
-			} else {
-				imgactivity.setW(imgactivity.getW());
-				imgactivity.setH(imgactivity.getH());
-			}
-			listImg.add(imgactivity);
-			totalImg++;
-		}
-
+		
 		int lineNum = 0;
+		int totalImg = tempList.size();
 		if (totalImg > 0) {
 			if (totalImg == 1) {
 				lineNum = 1;
@@ -1122,10 +1137,39 @@
 				lineNum = 3;
 			}
 		}
-
+		
+		if (tempList.size() > 0) {
+			listImg.addAll(tempList);
+		}
+		
+		// 娓呯悊鑰佸浘鐗�
+		if (listOld != null && listOld.size() > 0) {
+			for (ImgInfo infoOld: listOld) {
+				boolean del = true;
+				String oldPic = infoOld.getUrl();
+				for (ImgInfo info : listImg) {
+					if (info.getUrl().equals(oldPic)) {
+						del = false;
+					}
+				}
+				if (del)
+					listDel.add(infoOld.getUrl());
+			}
+		}
+		
+		resultObj.setJumpLink(imgInfo.getActivityUrl());
 		resultObj.setLineNum(lineNum);
 		resultObj.setImgList(listImg);
 		goodsEvaluateDao.save(resultObj);
+		
+		// 鍒犻櫎鍥剧墖
+		if (listDel.size() > 0) {
+			for (String url : listDel) {
+				if (url.contains(FilePathEnum.goodsEvaluate.getPath())) {
+					removePicture(url);
+				}
+			}
+		}
 	}
 
 	@Override
@@ -1458,13 +1502,13 @@
 	}
 
 	@Override
-	public List<GoodsEvaluate> query(int start, int count, String key, Integer state, int dynamicType) {
-		return goodsEvaluateDao.query(start, count, key, state, dynamicType);
+	public List<GoodsEvaluate> query(int start, int count, String key, Integer state, int dynamicType, String typeEnum) {
+		return goodsEvaluateDao.query(start, count, key, state, dynamicType, typeEnum);
 	}
 
 	@Override
-	public long count(String key, Integer state, int dynamicType) {
-		return goodsEvaluateDao.count(key, state, dynamicType);
+	public long count(String key, Integer state, int dynamicType, String typeEnum) {
+		return goodsEvaluateDao.count(key, state, dynamicType, typeEnum);
 	}
 
 	@Override
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/homemodule/SpecialExtraServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/homemodule/SpecialExtraServiceImpl.java
new file mode 100644
index 0000000..50bdaa2
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/homemodule/SpecialExtraServiceImpl.java
@@ -0,0 +1,60 @@
+package com.yeshi.fanli.service.impl.homemodule;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+import com.yeshi.fanli.dao.mybatis.homemodule.SpecialExtraMapper;
+import com.yeshi.fanli.entity.bus.homemodule.SpecialExtra;
+import com.yeshi.fanli.exception.goods.ConvertLinkExceptionException;
+import com.yeshi.fanli.exception.homemodule.SpecialException;
+import com.yeshi.fanli.service.inter.homemodule.SpecialExtraService;
+import com.yeshi.fanli.service.manger.goods.ConvertLinkManager;
+import com.yeshi.fanli.util.Constant;
+import com.yeshi.fanli.util.StringUtil;
+
+@Service
+public class SpecialExtraServiceImpl implements SpecialExtraService {
+
+	@Resource
+	private SpecialExtraMapper specialExtraMapper;
+	
+	@Resource
+	private ConvertLinkManager convertLinkManager;
+
+	@Override
+	public void saveExtraInfo(SpecialExtra record) throws SpecialException {
+		if (record == null || record.getId() == null)
+			return;
+
+		if (!StringUtil.isNullOrEmpty(record.getComment())) {
+			if (record.getNeedSpin() == null)
+				record.setNeedSpin(false);
+			
+			if (record.getNeedSpin()) {
+				try {
+					convertLinkManager.convertLinkFromText(record.getComment(), Constant.LINK_TOKEN_VERIFY_UID, true);
+				} catch (ConvertLinkExceptionException e) {
+					if (ConvertLinkExceptionException.CODE_NONE != e.getCode()) {
+						throw new SpecialException(1, "鍖呭惈涓嶅彲杞摼鐨勫彛浠や笌閾炬帴");
+					}
+				} catch (Exception e) {
+					throw new SpecialException(1, "鍖呭惈涓嶅彲杞摼鐨勫彛浠や笌閾炬帴");
+				}
+			}
+		}
+		
+		SpecialExtra extra = specialExtraMapper.selectByPrimaryKey(record.getId());
+		if (extra == null) {
+			specialExtraMapper.insertSelective(record);
+		} else {
+			specialExtraMapper.updateByPrimaryKeySelective(record);
+		}
+	}
+
+	@Override
+	public SpecialExtra selectByPrimaryKey(Long id) {
+		return specialExtraMapper.selectByPrimaryKey(id);
+	}
+
+}
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/homemodule/SpecialServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/homemodule/SpecialServiceImpl.java
index 8db309c..8a1cc30 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/homemodule/SpecialServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/homemodule/SpecialServiceImpl.java
@@ -12,6 +12,7 @@
 
 import javax.annotation.Resource;
 
+import org.apache.commons.beanutils.PropertyUtils;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -26,6 +27,7 @@
 import com.yeshi.fanli.entity.bus.homemodule.AdActivityVersionControl;
 import com.yeshi.fanli.entity.bus.homemodule.AdActivityVersionControl.AdActivityType;
 import com.yeshi.fanli.entity.bus.homemodule.Special;
+import com.yeshi.fanli.entity.bus.homemodule.SpecialExtra;
 import com.yeshi.fanli.entity.common.JumpDetailV2;
 import com.yeshi.fanli.entity.system.ConfigKeyEnum;
 import com.yeshi.fanli.exception.banner.SwiperPictureException;
@@ -35,12 +37,14 @@
 import com.yeshi.fanli.service.inter.config.ConfigService;
 import com.yeshi.fanli.service.inter.homemodule.AdActivityVersionControlService;
 import com.yeshi.fanli.service.inter.homemodule.SpecialCardService;
+import com.yeshi.fanli.service.inter.homemodule.SpecialExtraService;
 import com.yeshi.fanli.service.inter.homemodule.SpecialPlaceService;
 import com.yeshi.fanli.service.inter.homemodule.SpecialService;
 import com.yeshi.fanli.util.Constant;
 import com.yeshi.fanli.util.FilePathEnum;
 import com.yeshi.fanli.util.StringUtil;
 import com.yeshi.fanli.util.VersionUtil;
+import com.yeshi.fanli.vo.homemodule.SpecialVO;
 
 import net.sf.json.JSONObject;
 
@@ -56,6 +60,9 @@
 	@Resource
 	private SpecialCardService specialCardService;
 
+	@Resource
+	private SpecialExtraService specialExtraService;
+	
 	@Resource
 	private JumpDetailV2Service jumpDetailV2Service;
 
@@ -75,7 +82,7 @@
 
 	@Override
 	public void saveObject(MultipartFile file, MultipartFile file2, MultipartFile file3, Special record,
-			String jumpType) throws SpecialException, Exception {
+			String jumpType, SpecialExtra extra) throws SpecialException, Exception {
 
 		Long cardId = record.getCardId();
 		if (cardId == null) {
@@ -149,6 +156,8 @@
 			record.setUpdatetime(new Date());
 			specialMapper.insert(record);
 
+			extra.setId(record.getId());
+			
 			Special s = new Special();
 			s.setId(record.getId());
 			s.setOrderby(Integer.parseInt(s.getId() + ""));
@@ -213,7 +222,12 @@
 
 			record.setUpdatetime(new Date());
 			specialMapper.updateByPrimaryKey(record);
+			
+			extra.setId(record.getId());
 		}
+		
+		// 娣诲姞琛ュ厖淇℃伅
+		specialExtraService.saveExtraInfo(extra);
 	}
 
 	/**
@@ -374,61 +388,84 @@
 	}
 
 	@Override
-	public List<Special> listQueryByCard(long start, int count, Long card, String key, Integer sex) {
-
+	public List<SpecialVO> listQueryByCard(long start, int count, Long card, String key, Integer sex) {
 		List<Special> list = specialMapper.listQueryByCard(start, count, card, key, sex);
-		if (list == null || list.size() == 0) {
-			return list;
+		if (list == null) {
+			return null;
 		}
 
-		// 璺宠浆閾炬帴
+	    List<SpecialVO> listvo = new ArrayList<SpecialVO>();
 		for (Special special : list) {
-			if (special.getState() != null && special.getState().longValue() == 0) {
-				special.setState(1L);
-			} else {
-				special.setState(0L);
+			SpecialVO specialVO = new SpecialVO();
+			try {
+				PropertyUtils.copyProperties(specialVO, special);
+			} catch (Exception e) {
+				e.printStackTrace();
+				continue;
 			}
 			
-			Date startTime = special.getStartTime();
-			Date endTime = special.getEndTime();
+			if (specialVO.getState() != null && specialVO.getState().longValue() == 0) {
+				specialVO.setState(1L);
+			} else {
+				specialVO.setState(0L);
+			}
+			
+			Date startTime = specialVO.getStartTime();
+			Date endTime = specialVO.getEndTime();
 			if (startTime == null && endTime == null) {
-				special.setStartTime_str("");
-				special.setEndTime_str("");
+				specialVO.setStartTime_str("");
+				specialVO.setEndTime_str("");
 			} else {
 				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm");
 				if (startTime == null) {
-					special.setStartTime_str("");
+					specialVO.setStartTime_str("");
 				} else {
-					special.setStartTime_str(sdf.format(startTime));
+					specialVO.setStartTime_str(sdf.format(startTime));
 				}
 
 				if (endTime == null) {
-					special.setEndTime_str("");
+					specialVO.setEndTime_str("");
 				} else {
-					special.setEndTime_str(sdf.format(endTime));
+					specialVO.setEndTime_str(sdf.format(endTime));
 				}
 			}
 
-			String params = special.getParams();
+			String params = specialVO.getParams();
 			if (StringUtil.isNullOrEmpty(params)) {
-				special.setParams("");
+				specialVO.setParams("");
 			}
 
-			String remark = special.getRemark();
+			String remark = specialVO.getRemark();
 			if (StringUtil.isNullOrEmpty(remark)) {
-				special.setRemark("");
+				specialVO.setRemark("");
 			}
 
-			JumpDetailV2 jumpDetail = special.getJumpDetail();
+			JumpDetailV2 jumpDetail = specialVO.getJumpDetail();
 			if (jumpDetail == null) {
 				// 榛樿鏈�夋嫨
 				JumpDetailV2 jumpDetailV2 = new JumpDetailV2();
 				jumpDetailV2.setName("-鏈�夋嫨-");
 				jumpDetailV2.setType("default");
-				special.setJumpDetail(jumpDetailV2);
+				specialVO.setJumpDetail(jumpDetailV2);
 			}
+			
+			// 琛ュ厖淇℃伅
+			SpecialExtra extra = specialExtraService.selectByPrimaryKey(specialVO.getId());
+			if (extra == null) {
+				specialVO.setNeedSpin(false);
+				specialVO.setComment("");
+			} else {
+				specialVO.setNeedSpin(extra.getNeedSpin());
+				if (StringUtil.isNullOrEmpty(extra.getComment())) {
+					specialVO.setComment("");
+				} else {
+					specialVO.setComment(extra.getComment());
+				}
+			}
+			
+			listvo.add(specialVO);
 		}
-		return list;
+		return listvo;
 	}
 
 	@Override
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/money/extract/ExtractServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/money/extract/ExtractServiceImpl.java
index f97f412..1646b47 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/money/extract/ExtractServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/money/extract/ExtractServiceImpl.java
@@ -1350,4 +1350,15 @@
 		}
 	}
 
+	
+	@Override
+	public List<Extract> getExtractSucceedRecord(int page, int pageSize, Long uid) {
+		return extractMapper.getExtractSucceedRecord((page-1)*pageSize, pageSize, uid);
+	}
+	
+	@Override
+	public long countExtractSucceedRecord(Long uid) {
+       Long count = extractMapper.countExtractSucceedRecord(uid);
+       return count== null? 0 : count;
+	}
 }
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderMoneyDailyCountServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderMoneyDailyCountServiceImpl.java
new file mode 100644
index 0000000..a3c283e
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderMoneyDailyCountServiceImpl.java
@@ -0,0 +1,53 @@
+package com.yeshi.fanli.service.impl.order;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+import com.yeshi.fanli.dao.order.OrderMoneyDailyCountDao;
+import com.yeshi.fanli.entity.order.OrderMoneyDailyCount;
+import com.yeshi.fanli.service.inter.order.OrderMoneyDailyCountService;
+import com.yeshi.fanli.util.StringUtil;
+import com.yeshi.fanli.util.TimeUtil;
+import com.yeshi.fanli.util.annotation.RequestSerializableByKeyService;
+
+@Service
+public class OrderMoneyDailyCountServiceImpl implements OrderMoneyDailyCountService {
+
+	@Resource
+	private OrderMoneyDailyCountDao orderMoneyDailyCountDao;
+
+	
+	@Override
+	@RequestSerializableByKeyService(key = "#record.uid")
+	public void saveDailyCount(OrderMoneyDailyCount record) {
+		if (record.getUid() == null || record.getCountDay() == null || StringUtil.isNullOrEmpty(record.getSourceType())) {
+			return; // 鍙傛暟涓嶅叏
+		}
+		String gernalTime = TimeUtil.getGernalTime(record.getCountDay().getTime());
+		String id = StringUtil.Md5(record.getUid() + record.getSourceType() + gernalTime);
+		
+		// id
+		record.setId(id);
+		// 缁熻鏃ユ湡-骞存湀鏃�
+		record.setCountDay(new Date(TimeUtil.convertDateToTemp(gernalTime)));
+		
+	    OrderMoneyDailyCount dailyCount = orderMoneyDailyCountDao.getById(id);
+		if (dailyCount == null) {
+			// 閫夋嫨鎬ф洿鏂�
+			orderMoneyDailyCountDao.save(record);
+		} else {
+			// 閫夋嫨鎬ф彃鍏�
+			orderMoneyDailyCountDao.updateSelective(record);
+		}
+	}
+	
+	@Override
+	public List<OrderMoneyDailyCount> query(Long uid, Date minDay, Date maxDay) {
+		return orderMoneyDailyCountDao.query(uid, minDay, maxDay);
+	}
+	
+}
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/push/PushGoodsServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/push/PushGoodsServiceImpl.java
index 936229c..b7c6cbb 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/push/PushGoodsServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/push/PushGoodsServiceImpl.java
@@ -12,6 +12,10 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import com.yeshi.fanli.dao.mybatis.push.PushGoodsMapper;
+import com.yeshi.fanli.entity.dynamic.GoodsEvaluate;
+import com.yeshi.fanli.entity.dynamic.GoodsEvaluate.EvaluateEnum;
+import com.yeshi.fanli.entity.dynamic.ImgInfo;
+import com.yeshi.fanli.entity.dynamic.ImgInfo.ImgEnum;
 import com.yeshi.fanli.entity.goods.CommonGoods;
 import com.yeshi.fanli.entity.push.PushGoods;
 import com.yeshi.fanli.entity.push.PushGoodsGroup;
@@ -20,6 +24,7 @@
 import com.yeshi.fanli.exception.push.PushException;
 import com.yeshi.fanli.exception.push.PushGoodsException;
 import com.yeshi.fanli.service.inter.config.ConfigService;
+import com.yeshi.fanli.service.inter.dynamic.GoodsEvaluateService;
 import com.yeshi.fanli.service.inter.goods.CommonGoodsService;
 import com.yeshi.fanli.service.inter.push.PushGoodsGroupService;
 import com.yeshi.fanli.service.inter.push.PushGoodsService;
@@ -47,6 +52,11 @@
 
 	@Resource
 	private PushGoodsGroupService pushGoodsGroupService;
+	
+	@Resource
+	private GoodsEvaluateService goodsEvaluateService;
+	
+	
 
 	@Override
 	public int deleteByPrimaryKey(Long id) throws PushGoodsException {
@@ -81,23 +91,14 @@
 	@Override
 	@Transactional(rollbackFor=Exception.class)
 	public void save(PushGoods record, List<Long> goodsIds) throws PushGoodsException, Exception {
-
 		// 瀹氭椂鏃堕棿
-		Boolean timeTask = record.isTimeTask();
-		if (timeTask != null && timeTask) {
-			String controlTime_str = record.getControlTime_str();
-			if (controlTime_str == null || controlTime_str.trim().length() == 0) {
-				throw new PushGoodsException(1, "棰勮鏃堕棿涓嶈兘涓虹┖");
-			}
-
+		if (StringUtil.isNullOrEmpty(record.getControlTime_str())) {
 			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
-			controlTime_str = controlTime_str.replaceAll("T", " ");
-			record.setControlTime(format.parse(controlTime_str));
-		} else {
-			record.setControlTime(null);
+			record.setControlTime(format.parse(record.getControlTime_str().replaceAll("T", " ")));
 		}
 
 		record.setIsPush(PushGoods.STATE_INIT);
+		record.setType(PushGoods.TYPE_GOODS);
 		
 		boolean isAdd = false;
 		// 鎺ㄩ�乮d
@@ -130,7 +131,6 @@
 
 	@Transactional(rollbackFor=Exception.class)
 	public void saveGoodsInfo(boolean isAdd, Long pushId, List<Long> goodsIds) throws Exception {
-
 		if (goodsIds == null || goodsIds.size() == 0) {
 			if (!isAdd) {
 				pushGoodsGroupService.deleteByPushId(pushId);
@@ -156,16 +156,12 @@
 			} catch (Exception e) {
 				e.printStackTrace();
 			}
-			
 		}
 
 		/* 淇敼鏃跺垹闄� 閮ㄥ垎 */
 		if (!isAdd) {
-
 			List<Long> listdelete = new ArrayList<Long>();
-
 			List<PushGoodsGroup> listGroup = pushGoodsGroupService.selectByPushId(pushId);
-
 			if (listGroup != null && listGroup.size() > 0) {
 				for (PushGoodsGroup group : listGroup) {
 					Long groupId = group.getId();
@@ -199,11 +195,86 @@
 				pushGoodsGroup.setCommonGoods(new CommonGoods(cid));
 				listAdd.add(pushGoodsGroup);
 			}
-			
 			pushGoodsGroupService.insertBatch(listAdd);
 		}
-		
 	}
+	
+	
+	@Override
+	@Transactional(rollbackFor=Exception.class)
+	public void saveInfo(PushGoods record) throws PushGoodsException, Exception {
+		if (StringUtil.isNullOrEmpty(record.getOtherId())) {
+			throw new PushGoodsException(1, "鐩稿叧鍐呭ID涓嶈兘涓虹┖");
+		}
+		
+		if (StringUtil.isNullOrEmpty(record.getTitle())) {
+			throw new PushGoodsException(1, "鏍囬涓嶈兘涓虹┖");
+		}
+		
+		if (StringUtil.isNullOrEmpty(record.getContent())) {
+			throw new PushGoodsException(1, "鍐呭涓嶈兘涓虹┖");
+		}
+		
+		if (record.getType() == null) {
+			throw new PushGoodsException(1, "鎺ㄩ�佺被鍨嬩笉鑳戒负绌�");
+		}
+		
+		if (record.getType() == PushGoods.TYPE_ACTIVITY) {
+			GoodsEvaluate goodsEvaluate = goodsEvaluateService.getById(record.getOtherId());
+			if (goodsEvaluate == null) {
+				throw new PushGoodsException(1, "鍙戝湀娲诲姩淇℃伅涓嶅瓨鍦�");
+			}
+			
+			if (goodsEvaluate.getType() != EvaluateEnum.activity) {
+				throw new PushGoodsException(1, "璇ュ唴瀹归潪鍙戝湀娲诲姩淇℃伅");
+			}
+			
+			String picUrl = null;
+			List<ImgInfo> imgList = goodsEvaluate.getImgList();
+			if (imgList != null && imgList.size() > 0) {
+				for (ImgInfo imgInfo: imgList) {
+					if (imgInfo.getType() == ImgEnum.img && !StringUtil.isNullOrEmpty(imgInfo.getUrl())) {
+						picUrl = imgInfo.getUrl();
+					}
+				}
+			}
+			if (StringUtil.isNullOrEmpty(picUrl)) {
+				throw new PushGoodsException(1, "璇ラ潪鍙戝湀娲诲姩鏃犲浘鐗囦俊鎭�");
+			}
+			record.setPicture(picUrl);
+		}
+		 
+		
+		// 瀹氭椂鏃堕棿
+		if (StringUtil.isNullOrEmpty(record.getControlTime_str())) {
+			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+			record.setControlTime(format.parse(record.getControlTime_str().replaceAll("T", " ")));
+		}
+		// 娴忚鏁伴噺闅忔満
+		if (record.getScanNum() == null || record.getScanNum()  <= 0)
+			record.setScanNum((int) (Math.random() * 5000) + 1000);
+		
+		record.setIsPush(PushGoods.STATE_INIT);
+		record.setAlertTitle(record.getTitle());
+		record.setAlertContent(record.getContent());
+		
+		Long id = record.getId();
+		if (id == null) {
+			record.setCreateTime(new Date());
+			pushGoodsMapper.insert(record);
+		} else {
+			PushGoods current = pushGoodsMapper.selectByPrimaryKey(id);
+			if (current == null) {
+				throw new PushGoodsException(1, "璇ヨ褰曞凡涓嶅瓨鍦�");
+			}
+			record.setCreateTime(current.getCreateTime());
+			record.setScanNum(current.getScanNum());
+			record.setUpdateTime(new Date());
+			pushGoodsMapper.updateByPrimaryKey(record);
+		}
+	}
+
+	
 
 	@Override
 	@Transactional(rollbackFor=Exception.class)
@@ -292,15 +363,102 @@
 	
 	@Override
 	public void executePush(PushGoods pushGoods) throws Exception, PushGoodsException, PushException {
-
-		Long id = pushGoods.getId();
-
-		String alertTitle = pushGoods.getAlertTitle();
-		String alertContent = pushGoods.getAlertContent();
-		if (StringUtil.isNullOrEmpty(alertTitle) || StringUtil.isNullOrEmpty(alertContent)) {
+		if (StringUtil.isNullOrEmpty(pushGoods.getTitle()) || StringUtil.isNullOrEmpty(pushGoods.getContent())) {
 			throw new PushGoodsException(1, "鎺ㄩ�佹爣棰樺強鍐呭涓嶈兘涓虹┖");
 		}
-
+		
+		if (StringUtil.isNullOrEmpty(pushGoods.getVersions())) {
+			throw new PushGoodsException(1, "鎺ㄩ�佺増鏈笉鑳戒负绌�");
+		}
+		
+		if (pushGoods.getType() == null || pushGoods.getType() == PushGoods.TYPE_GOODS) {
+			executePushGoods(pushGoods); // 鎺ㄩ�佸晢鍝�
+		} else if (pushGoods.getType() == PushGoods.TYPE_ACTIVITY) {
+			executePushActivity(pushGoods); // 鎺ㄩ�佹椿鍔�
+		}
+	}
+	
+	
+	/**
+	 * 鎺ㄩ�佹椿鍔�
+	 * @param pushGoods
+	 * @throws Exception
+	 * @throws PushGoodsException
+	 * @throws PushException
+	 */
+	private void executePushActivity(PushGoods pushGoods) throws Exception, PushGoodsException, PushException {
+		String otherId = pushGoods.getOtherId();
+		if (StringUtil.isNullOrEmpty(otherId)) {
+			throw new PushGoodsException(1, "娲诲姩id涓嶈兘涓虹┖");
+		}
+		
+		GoodsEvaluate goodsEvaluate = goodsEvaluateService.getById(otherId);
+		if (goodsEvaluate == null) {
+			throw new PushGoodsException(1, "鍙戝湀娲诲姩淇℃伅涓嶅瓨鍦�");
+		}
+		
+		if (goodsEvaluate.getType() != EvaluateEnum.activity) {
+			throw new PushGoodsException(1, "璇ュ唴瀹归潪鍙戝湀娲诲姩淇℃伅");
+		}
+		
+		String picUrl = null;
+		List<ImgInfo> imgList = goodsEvaluate.getImgList();
+		if (imgList != null && imgList.size() > 0) {
+			for (ImgInfo imgInfo: imgList) {
+				if (imgInfo.getType() == ImgEnum.img && !StringUtil.isNullOrEmpty(imgInfo.getUrl())) {
+					picUrl = imgInfo.getUrl();
+				}
+			}
+		}
+		
+		if (StringUtil.isNullOrEmpty(picUrl)) {
+			throw new PushGoodsException(1, "璇ラ潪鍙戝湀娲诲姩鏃犲浘鐗囦俊鎭�");
+		}
+		
+		
+		String versions = pushGoods.getVersions();
+		JSONObject json = JSONObject.fromObject(versions);
+		
+		String versionsIOS = json.getString("IOS");
+		List<String> listIOS = new ArrayList<String>();
+		if (versionsIOS != null && versionsIOS.trim().length() > 0) {
+			if (versionsIOS.contains("鍏ㄦ帹")) {
+				listIOS = null;
+			} else {
+				listIOS = Arrays.asList(versionsIOS.split(","));
+			}
+		}
+		
+		List<String> listAndroid = new ArrayList<String>();
+		String versionsAndroid  = json.getString("Android");
+		if (versionsAndroid != null && versionsAndroid.trim().length() > 0) {
+			if (versionsAndroid.contains("鍏ㄦ帹")) {
+				listAndroid = null;
+			} else {
+				listAndroid = Arrays.asList(versionsAndroid.split(","));
+			}
+		}
+		
+		String url = configService.get(ConfigKeyEnum.pushActivityLink.getKey());
+		if (StringUtil.isNullOrEmpty(url)) {
+			throw new PushGoodsException(1, "鎺ㄩ�侀〉闈㈤摼鎺ヤ笉瀛樺湪");
+		}
+		url = url + "?id=" + pushGoods.getId() + "&otherId=" + pushGoods.getOtherId();
+		
+		// h娲诲姩鍏ㄦ帹
+		pushService.pushUrl(pushGoods.getUid(), pushGoods.getTitle(), pushGoods.getContent(), url, listIOS, listAndroid);
+	}
+	
+	
+	/**
+	 * 鎺ㄩ�佸晢鍝�
+	 * @param pushGoods
+	 * @throws Exception
+	 * @throws PushGoodsException
+	 * @throws PushException
+	 */
+	private void executePushGoods(PushGoods pushGoods) throws Exception, PushGoodsException, PushException {
+		Long id = pushGoods.getId();
 		List<PushGoodsGroup> goodsList = pushGoodsGroupService.getAllInfoByPushId(id);
 		if (goodsList == null || goodsList.size() == 0) {
 			throw new PushGoodsException(1, "鎺ㄩ�佹棤鍟嗗搧,璇峰畬鍠勬暟鎹�");
@@ -342,9 +500,7 @@
 
 			Long goodsId = commonGoods.getGoodsId();
 			String url = "https://item.taobao.com/item.htm?id=" + goodsId;
-		
-			pushService.pushGoods(pushGoods.getUid(), alertTitle, alertContent, url,listIOS, listAndroid);
-			
+			pushService.pushGoods(pushGoods.getUid(), pushGoods.getTitle(), pushGoods.getContent(), url,listIOS, listAndroid);
 		} else {
 			/*   澶氫釜鍟嗗搧鎺ㄩ��    */
 			String url = configService.get(ConfigKeyEnum.pushGoodsDetails.getKey());
@@ -353,9 +509,9 @@
 			}
 			// 鐢熸垚閾炬帴
 			url = url + "?id=" + id;
-
-			pushService.pushUrl(pushGoods.getUid(), alertTitle, alertContent, url, listIOS, listAndroid);
+			pushService.pushUrl(pushGoods.getUid(), pushGoods.getTitle(), pushGoods.getContent(), url, listIOS, listAndroid);
 		}
 	}
 	
+	
 }
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserCustomSettingsServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserCustomSettingsServiceImpl.java
index 9f1d837..791f0d3 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserCustomSettingsServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserCustomSettingsServiceImpl.java
@@ -6,6 +6,7 @@
 import javax.annotation.Resource;
 
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import com.yeshi.fanli.dao.mybatis.user.UserCustomSettingsMapper;
 import com.yeshi.fanli.entity.bus.user.UserCustomSettings;
@@ -22,6 +23,7 @@
 	private UserCustomSettingsMapper userCustomSettingsMapper;
 
 	@Override
+	@Transactional
 	public void saveModuleState(Long uid, String type, Integer state) throws UserCustomSettingsException {
 		if (uid == null || type == null || state == null || state > 1 || state < 0) {
 			throw new UserCustomSettingsException(1, "浼犻�掑弬鏁颁笉姝g‘");
@@ -41,7 +43,7 @@
 		} else if (type.equals(UserSettingTypeEnum.openSpreadHongBao.name())) {
 			mineTypeNum = UserSettingTypeEnum.openSpreadHongBao;
 		} else if (type.equals(UserSettingTypeEnum.noDisplayPhoneNum.name())) {
-				mineTypeNum = UserSettingTypeEnum.noDisplayPhoneNum;
+			mineTypeNum = UserSettingTypeEnum.noDisplayPhoneNum;
 		} else {
 			throw new UserCustomSettingsException(1, "鍙傛暟绫诲瀷涓嶅尮閰�");
 		}
@@ -64,7 +66,6 @@
 			settings.setCreateTime(new Date());
 			userCustomSettingsMapper.insertSelective(settings);
 		}
-
 	}
 
 	@Override
@@ -72,13 +73,11 @@
 		if (uid == null) {
 			throw new UserCustomSettingsException(1, "uid涓嶈兘涓虹┖");
 		}
-
 		return userCustomSettingsMapper.getSettingsByUid(uid);
 	}
 
 	@Override
 	public UserCustomSettings getSettingsByUidAndType(Long uid, String type) throws UserCustomSettingsException {
-
 		if (uid == null || type == null || type.trim().length() == 0) {
 			throw new UserCustomSettingsException(1, "浼犻�掔殑鍙傛暟涓嶈兘涓虹┖");
 		}
@@ -117,7 +116,7 @@
 				} else if (typeEnum.equals(UserSettingTypeEnum.openSpreadHongBao)) {
 					userSettingsVO.setOpenSpreadHongBao(state);
 				} else if (typeEnum.equals(UserSettingTypeEnum.noDisplayPhoneNum)) {
-					userSettingsVO.setOpenSpreadHongBao(state);
+					userSettingsVO.setNoDisplayPhoneNum(state);
 				}
 			}
 		}
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/inter/count/HongBaoV2CountService.java b/fanli/src/main/java/com/yeshi/fanli/service/inter/count/HongBaoV2CountService.java
index 1a745ee..eb69a6b 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/inter/count/HongBaoV2CountService.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/inter/count/HongBaoV2CountService.java
@@ -207,6 +207,23 @@
 	 * @param day
 	 * @return
 	 */
-	public BigDecimal sumMoneyArrivalByUidAndNearDay(Long uid, int day);
+	public BigDecimal sumMoneyArrivalByUidAndNearDay(Long uid, int day);
+
+	/**
+	 * 缁熻鏀惰揣閲戦
+	 * @param uid
+	 * @param minDate
+	 * @param maxDate
+	 * @return
+	 */
+	public BigDecimal sumMoneyBySettleTimeAndUid(Long uid, Date minDate, Date maxDate);
+
+	
+	/**
+	 * 180澶╁唴鏈敹璐х殑閲戦
+	 * @param uid
+	 * @return
+	 */
+	public BigDecimal sumMoneyByANotSettleAndUid(Long uid);
 
 }
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/inter/dynamic/GoodsEvaluateService.java b/fanli/src/main/java/com/yeshi/fanli/service/inter/dynamic/GoodsEvaluateService.java
index 3a974d3..2bb7781 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/inter/dynamic/GoodsEvaluateService.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/inter/dynamic/GoodsEvaluateService.java
@@ -43,9 +43,9 @@
 	 * @param state
 	 * @return
 	 */
-	public List<GoodsEvaluate> query(int start, int count, String key, Integer state, int dynamicType);
+	public List<GoodsEvaluate> query(int start, int count, String key, Integer state, int dynamicType, String typeEnum);
 
-	public long count(String key, Integer state,int dynamicType);
+	public long count(String key, Integer state,int dynamicType, String typeEnum);
 
 	
 	/**
@@ -92,7 +92,7 @@
 	public void saveCurrencyCoupon(String pid, int kind, CommentInfo commentInfo) throws GoodsEvaluateException, Exception;
 
 
-	public void saveActivityPic(String pid, ImgInfo imgInfo, MultipartHttpServletRequest fileRequest)
+	public void saveActivityPic(String pid, ImgInfo imgInfo, String picUrls, MultipartHttpServletRequest fileRequest)
 			throws GoodsEvaluateException, Exception;
 
 
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/inter/homemodule/SpecialExtraService.java b/fanli/src/main/java/com/yeshi/fanli/service/inter/homemodule/SpecialExtraService.java
new file mode 100644
index 0000000..89b86a4
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/service/inter/homemodule/SpecialExtraService.java
@@ -0,0 +1,27 @@
+package com.yeshi.fanli.service.inter.homemodule;
+
+import com.yeshi.fanli.entity.bus.homemodule.SpecialExtra;
+import com.yeshi.fanli.exception.homemodule.SpecialException;
+
+/**
+ *  涓撻棰濆
+ * 
+ * @author Administrator
+ *
+ */
+public interface SpecialExtraService{
+
+	/**
+	 * 淇濆瓨淇℃伅
+	 * @param record
+	 */
+	public void saveExtraInfo(SpecialExtra record) throws SpecialException;
+
+	/**
+	 * 鏌ヨ
+	 * @param id
+	 * @return
+	 */
+	public SpecialExtra selectByPrimaryKey(Long id);
+	
+}
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/inter/homemodule/SpecialService.java b/fanli/src/main/java/com/yeshi/fanli/service/inter/homemodule/SpecialService.java
index eead433..b0f6d19 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/inter/homemodule/SpecialService.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/inter/homemodule/SpecialService.java
@@ -6,7 +6,9 @@
 
 import com.yeshi.fanli.entity.accept.AcceptData;
 import com.yeshi.fanli.entity.bus.homemodule.Special;
+import com.yeshi.fanli.entity.bus.homemodule.SpecialExtra;
 import com.yeshi.fanli.exception.homemodule.SpecialException;
+import com.yeshi.fanli.vo.homemodule.SpecialVO;
 
 import net.sf.json.JSONObject;
 
@@ -22,7 +24,7 @@
 	public Special selectByPrimaryKey(Long id);
 
 
-	public List<Special> listQueryByCard(long start, int count, Long card, String key, Integer sex);
+	public List<SpecialVO> listQueryByCard(long start, int count, Long card, String key, Integer sex);
 
 	public long countlistQueryByCard(Long card, String key, Integer sex);
 
@@ -70,7 +72,7 @@
 	 * @throws SpecialException
 	 * @throws Exception
 	 */
-	public void saveObject(MultipartFile file, MultipartFile file2, MultipartFile file3, Special record, String jumpType) throws SpecialException, Exception;
+	public void saveObject(MultipartFile file, MultipartFile file2, MultipartFile file3, Special record, String jumpType, SpecialExtra extra) throws SpecialException, Exception;
 
 	/**
 	 * 鏇存崲椤哄簭
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/inter/money/extract/ExtractService.java b/fanli/src/main/java/com/yeshi/fanli/service/inter/money/extract/ExtractService.java
index 7024cf9..def184b 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/inter/money/extract/ExtractService.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/inter/money/extract/ExtractService.java
@@ -138,5 +138,21 @@
 	public List<String> getAutoExtractOpenIdsTo1212() throws Exception;
 
 	public List<UserInfo> preAutoUserTo1212() throws Exception;
+
+	/**
+	 * 鑾峰彇鎻愮幇鎴愬姛璁板綍
+	 * @param page
+	 * @param pageSize
+	 * @param uid
+	 * @return
+	 */
+	public List<Extract> getExtractSucceedRecord(int page, int pageSize, Long uid);
+
+	/**
+	 * 缁熻鎻愮幇鎴愬姛璁板綍
+	 * @param uid
+	 * @return
+	 */
+	public long countExtractSucceedRecord(Long uid);
 	
 }
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/inter/order/OrderMoneyDailyCountService.java b/fanli/src/main/java/com/yeshi/fanli/service/inter/order/OrderMoneyDailyCountService.java
new file mode 100644
index 0000000..c070b1d
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/service/inter/order/OrderMoneyDailyCountService.java
@@ -0,0 +1,25 @@
+package com.yeshi.fanli.service.inter.order;
+
+import java.util.Date;
+import java.util.List;
+
+import com.yeshi.fanli.entity.order.OrderMoneyDailyCount;
+
+public interface OrderMoneyDailyCountService {
+
+	/**
+	 * 鏌ヨ
+	 * @param uid
+	 * @param minDay 鍙负绌�
+	 * @param maxDay 鍙负绌�
+	 * @return
+	 */
+	public List<OrderMoneyDailyCount> query(Long uid, Date minDay, Date maxDay);
+
+	/**
+	 * 淇濆瓨-鏇存柊淇℃伅
+	 * @param record
+	 */
+	public void saveDailyCount(OrderMoneyDailyCount record);
+	
+}
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/inter/push/PushGoodsService.java b/fanli/src/main/java/com/yeshi/fanli/service/inter/push/PushGoodsService.java
index 15d2b62..fbff3dc 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/inter/push/PushGoodsService.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/inter/push/PushGoodsService.java
@@ -83,5 +83,13 @@
 	 * @throws PushException
 	 */
 	public void handPush(Long id) throws Exception, PushGoodsException, PushException;
+
+	/**
+	 * 淇濆瓨淇℃伅
+	 * @param record
+	 * @throws PushGoodsException
+	 * @throws Exception
+	 */
+	public void saveInfo(PushGoods record) throws PushGoodsException, Exception;
 	
 }
diff --git a/fanli/src/main/java/com/yeshi/fanli/vo/homemodule/SpecialVO.java b/fanli/src/main/java/com/yeshi/fanli/vo/homemodule/SpecialVO.java
new file mode 100644
index 0000000..ab9befc
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/vo/homemodule/SpecialVO.java
@@ -0,0 +1,32 @@
+package com.yeshi.fanli.vo.homemodule;
+
+import com.google.gson.annotations.Expose;
+import com.yeshi.fanli.entity.bus.homemodule.Special;
+
+public class SpecialVO extends Special{
+	 
+	private static final long serialVersionUID = 1L;
+	
+	private Boolean needSpin;
+	
+	@Expose
+	private String comment;
+
+	public String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+
+	public Boolean getNeedSpin() {
+		return needSpin;
+	}
+
+	public void setNeedSpin(Boolean needSpin) {
+		this.needSpin = needSpin;
+	}
+	
+	 
+}
diff --git a/fanli/src/main/java/com/yeshi/fanli/vo/money/IncomeDetailVO.java b/fanli/src/main/java/com/yeshi/fanli/vo/money/IncomeDetailVO.java
new file mode 100644
index 0000000..0836d40
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/vo/money/IncomeDetailVO.java
@@ -0,0 +1,34 @@
+package com.yeshi.fanli.vo.money;
+
+import java.math.BigDecimal;
+
+public class IncomeDetailVO {
+	private String icon;// 娓犻亾鍥炬爣
+	private Integer num; // 璁㈠崟鏁伴噺
+	private BigDecimal money;// 閲戦
+
+	public String getIcon() {
+		return icon;
+	}
+
+	public void setIcon(String icon) {
+		this.icon = icon;
+	}
+
+	public Integer getNum() {
+		return num;
+	}
+
+	public void setNum(Integer num) {
+		this.num = num;
+	}
+
+	public BigDecimal getMoney() {
+		return money;
+	}
+
+	public void setMoney(BigDecimal money) {
+		this.money = money;
+	}
+
+}
diff --git a/fanli/src/main/java/com/yeshi/fanli/vo/money/MoneyPredictVO.java b/fanli/src/main/java/com/yeshi/fanli/vo/money/MoneyPredictVO.java
new file mode 100644
index 0000000..5638aac
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/vo/money/MoneyPredictVO.java
@@ -0,0 +1,75 @@
+package com.yeshi.fanli.vo.money;
+
+import java.math.BigDecimal;
+
+public class MoneyPredictVO {
+	// 鎬荤殑
+	private BigDecimal totalMoney; // 鎬婚浼版敹鐩�
+	private Integer totalNum; // 鎬讳粯娆捐鍗曟暟锛堢瑪锛�
+	// 鎴戠殑
+	private BigDecimal mineMoney;// 棰勪及鎴戠殑鏀剁泭
+	private Integer mineNum;// 浠樻璁㈠崟鏁帮紙绗旓級
+	// 鍥㈤槦
+	private BigDecimal teamMoney;// 绱鎻愮幇
+	private Integer teamNum;// 绱鎻愮幇
+
+	private String  countDate; // 缁熻鏃ユ湡
+	
+	
+	public BigDecimal getTotalMoney() {
+		return totalMoney;
+	}
+
+	public void setTotalMoney(BigDecimal totalMoney) {
+		this.totalMoney = totalMoney;
+	}
+
+	public Integer getTotalNum() {
+		return totalNum;
+	}
+
+	public void setTotalNum(Integer totalNum) {
+		this.totalNum = totalNum;
+	}
+
+	public BigDecimal getMineMoney() {
+		return mineMoney;
+	}
+
+	public void setMineMoney(BigDecimal mineMoney) {
+		this.mineMoney = mineMoney;
+	}
+
+	public Integer getMineNum() {
+		return mineNum;
+	}
+
+	public void setMineNum(Integer mineNum) {
+		this.mineNum = mineNum;
+	}
+
+	public BigDecimal getTeamMoney() {
+		return teamMoney;
+	}
+
+	public void setTeamMoney(BigDecimal teamMoney) {
+		this.teamMoney = teamMoney;
+	}
+
+	public Integer getTeamNum() {
+		return teamNum;
+	}
+
+	public void setTeamNum(Integer teamNum) {
+		this.teamNum = teamNum;
+	}
+
+	public String getCountDate() {
+		return countDate;
+	}
+
+	public void setCountDate(String countDate) {
+		this.countDate = countDate;
+	}
+
+}
diff --git a/fanli/src/main/java/com/yeshi/fanli/vo/money/MoneyStatisticVO.java b/fanli/src/main/java/com/yeshi/fanli/vo/money/MoneyStatisticVO.java
new file mode 100644
index 0000000..032980f
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/vo/money/MoneyStatisticVO.java
@@ -0,0 +1,159 @@
+package com.yeshi.fanli.vo.money;
+
+import java.math.BigDecimal;
+
+public class MoneyStatisticVO {
+	private String link;// 閾炬帴
+	private BigDecimal balanceMoney;// 璐︽埛浣欓
+	private String extractingMoneyInfo;// 鎻愮幇涓殑璧勯噾淇℃伅
+	
+	private String extractDesc; // 鎻愮幇璇存槑鏂囧瓧
+	private String moneyArrivalDesc; // 璧勯噾鍒拌处璇存槑鏂囧瓧
+
+	// 鎻愮幇
+	private BigDecimal monthExtractMoney;// 鏈湀鎻愮幇
+	private BigDecimal lastMonthExtractMoney;// 涓婃湀鎻愮幇
+	private BigDecimal totalExtractMoney;// 绱鎻愮幇
+
+	// 绱
+	private BigDecimal totalFanLiMoney;// 绱鑷喘杩斿埄
+	private BigDecimal totalShareMoney;// 绱鍒嗕韩濂栭噾
+	private BigDecimal totalInviteMoney;// 绱閭�璇峰閲�
+	
+	// 鏀惰揣璇︽儏
+	private BigDecimal monthSettleMoney;// 鏈湀宸叉敹璐�
+	private BigDecimal lastMonthSettleMoney;// 涓婃湀宸叉敹璐�
+	private BigDecimal notSettleMoney;// 寰呯‘璁ゆ敹璐�
+
+	
+	private MoneyPredictVO  todayPredict;// 浠婃棩棰勪及
+	private MoneyPredictVO  monthPredict;// 鏈湀棰勪及
+
+	public BigDecimal getBalanceMoney() {
+		return balanceMoney;
+	}
+
+	public void setBalanceMoney(BigDecimal balanceMoney) {
+		this.balanceMoney = balanceMoney;
+	}
+
+	public String getExtractingMoneyInfo() {
+		return extractingMoneyInfo;
+	}
+
+	public void setExtractingMoneyInfo(String extractingMoneyInfo) {
+		this.extractingMoneyInfo = extractingMoneyInfo;
+	}
+
+	public BigDecimal getMonthExtractMoney() {
+		return monthExtractMoney;
+	}
+
+	public void setMonthExtractMoney(BigDecimal monthExtractMoney) {
+		this.monthExtractMoney = monthExtractMoney;
+	}
+
+	public BigDecimal getLastMonthExtractMoney() {
+		return lastMonthExtractMoney;
+	}
+
+	public void setLastMonthExtractMoney(BigDecimal lastMonthExtractMoney) {
+		this.lastMonthExtractMoney = lastMonthExtractMoney;
+	}
+
+	public BigDecimal getTotalExtractMoney() {
+		return totalExtractMoney;
+	}
+
+	public void setTotalExtractMoney(BigDecimal totalExtractMoney) {
+		this.totalExtractMoney = totalExtractMoney;
+	}
+
+	public BigDecimal getTotalFanLiMoney() {
+		return totalFanLiMoney;
+	}
+
+	public void setTotalFanLiMoney(BigDecimal totalFanLiMoney) {
+		this.totalFanLiMoney = totalFanLiMoney;
+	}
+
+	public BigDecimal getTotalShareMoney() {
+		return totalShareMoney;
+	}
+
+	public void setTotalShareMoney(BigDecimal totalShareMoney) {
+		this.totalShareMoney = totalShareMoney;
+	}
+
+	public BigDecimal getTotalInviteMoney() {
+		return totalInviteMoney;
+	}
+
+	public void setTotalInviteMoney(BigDecimal totalInviteMoney) {
+		this.totalInviteMoney = totalInviteMoney;
+	}
+
+	public BigDecimal getMonthSettleMoney() {
+		return monthSettleMoney;
+	}
+
+	public void setMonthSettleMoney(BigDecimal monthSettleMoney) {
+		this.monthSettleMoney = monthSettleMoney;
+	}
+
+	public BigDecimal getLastMonthSettleMoney() {
+		return lastMonthSettleMoney;
+	}
+
+	public void setLastMonthSettleMoney(BigDecimal lastMonthSettleMoney) {
+		this.lastMonthSettleMoney = lastMonthSettleMoney;
+	}
+
+	public BigDecimal getNotSettleMoney() {
+		return notSettleMoney;
+	}
+
+	public void setNotSettleMoney(BigDecimal notSettleMoney) {
+		this.notSettleMoney = notSettleMoney;
+	}
+
+	public String getExtractDesc() {
+		return extractDesc;
+	}
+
+	public void setExtractDesc(String extractDesc) {
+		this.extractDesc = extractDesc;
+	}
+
+	public String getMoneyArrivalDesc() {
+		return moneyArrivalDesc;
+	}
+
+	public void setMoneyArrivalDesc(String moneyArrivalDesc) {
+		this.moneyArrivalDesc = moneyArrivalDesc;
+	}
+
+	public MoneyPredictVO getTodayPredict() {
+		return todayPredict;
+	}
+
+	public void setTodayPredict(MoneyPredictVO todayPredict) {
+		this.todayPredict = todayPredict;
+	}
+
+	public MoneyPredictVO getMonthPredict() {
+		return monthPredict;
+	}
+
+	public void setMonthPredict(MoneyPredictVO monthPredict) {
+		this.monthPredict = monthPredict;
+	}
+
+	public String getLink() {
+		return link;
+	}
+
+	public void setLink(String link) {
+		this.link = link;
+	}
+}
diff --git a/fanli/src/main/java/com/yeshi/fanli/vo/push/PushRecommendVO.java b/fanli/src/main/java/com/yeshi/fanli/vo/push/PushRecommendVO.java
new file mode 100644
index 0000000..98d9731
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/vo/push/PushRecommendVO.java
@@ -0,0 +1,110 @@
+package com.yeshi.fanli.vo.push;
+
+import java.util.List;
+
+import com.google.gson.annotations.Expose;
+import com.yeshi.fanli.entity.common.JumpDetailV2;
+import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
+
+public class PushRecommendVO {
+	// 鎺ㄩ�佹椂闂�
+	@Expose
+	private Long pushtime;
+	// 鏍囬
+	@Expose
+	private String title;
+	// 鍐呭
+	@Expose
+	private String content;
+	// 鍥剧墖
+	@Expose
+	private String picture;
+	// 鍚嶇О
+	@Expose
+	private String nickName;
+	// 娴忚鏁伴噺
+	@Expose
+	private String scanNum;
+	// 鍙傛暟
+	@Expose
+	private String params;
+	// 璺宠浆
+	@Expose
+	private JumpDetailV2 jumpDetail;
+
+	@Expose
+	private List<ClientTextStyleVO> totalwords;
+
+	public Long getPushtime() {
+		return pushtime;
+	}
+
+	public void setPushtime(Long pushtime) {
+		this.pushtime = pushtime;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public String getPicture() {
+		return picture;
+	}
+
+	public void setPicture(String picture) {
+		this.picture = picture;
+	}
+
+	public String getNickName() {
+		return nickName;
+	}
+
+	public void setNickName(String nickName) {
+		this.nickName = nickName;
+	}
+
+	public String getScanNum() {
+		return scanNum;
+	}
+
+	public void setScanNum(String scanNum) {
+		this.scanNum = scanNum;
+	}
+
+	public String getParams() {
+		return params;
+	}
+
+	public void setParams(String params) {
+		this.params = params;
+	}
+
+	public JumpDetailV2 getJumpDetail() {
+		return jumpDetail;
+	}
+
+	public void setJumpDetail(JumpDetailV2 jumpDetail) {
+		this.jumpDetail = jumpDetail;
+	}
+
+	public List<ClientTextStyleVO> getTotalwords() {
+		return totalwords;
+	}
+
+	public void setTotalwords(List<ClientTextStyleVO> totalwords) {
+		this.totalwords = totalwords;
+	}
+
+}
diff --git a/fanli/src/test/java/org/fanli/MyBatisProduce2.java b/fanli/src/test/java/org/fanli/MyBatisProduce2.java
new file mode 100644
index 0000000..f23751f
--- /dev/null
+++ b/fanli/src/test/java/org/fanli/MyBatisProduce2.java
@@ -0,0 +1,17 @@
+package org.fanli;
+
+import org.junit.Test;
+import org.yeshi.utils.mybatis.MyBatisMapperUtil;
+
+import com.yeshi.fanli.entity.push.PushGoods;
+
+//@Ignore
+public class MyBatisProduce2 {
+
+	@Test
+	public void test3() {
+		MyBatisMapperUtil.createMapper(PushGoods.class);
+	}
+
+
+}

--
Gitblit v1.8.0