From 30d8e227e8d823b6c38c3b9c90ac2df03b63befe Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期二, 25 二月 2025 16:41:22 +0800
Subject: [PATCH] 淘宝转链接口更新

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/count/DailyCountOrderServiceImpl.java | 1132 +++++++++++++++++++++++++++++-----------------------------
 1 files changed, 566 insertions(+), 566 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/count/DailyCountOrderServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/count/DailyCountOrderServiceImpl.java
index 06f9e31..6287d80 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/count/DailyCountOrderServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/count/DailyCountOrderServiceImpl.java
@@ -1,566 +1,566 @@
-package com.yeshi.fanli.service.impl.count;
-
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-import javax.annotation.Resource;
-
-import org.springframework.stereotype.Service;
-import org.yeshi.utils.DateUtil;
-
-import com.yeshi.fanli.dao.user.count.DailyCountOrderDao;
-import com.yeshi.fanli.dto.order.CountOrderDTO;
-import com.yeshi.fanli.entity.admin.count.DailyCountOrder;
-import com.yeshi.fanli.entity.admin.count.DailyCountOrder.DailyCountOrderEnum;
-import com.yeshi.fanli.entity.bus.user.LostOrder;
-import com.yeshi.fanli.entity.bus.user.UserInfoRegister;
-import com.yeshi.fanli.entity.system.ChannelEnum;
-import com.yeshi.fanli.service.inter.count.DailyCountOrderService;
-import com.yeshi.fanli.service.inter.count.HongBaoV2CountService;
-import com.yeshi.fanli.service.inter.order.CommonOrderCountService;
-import com.yeshi.fanli.service.inter.order.LostOrderService;
-import com.yeshi.fanli.service.inter.order.UserOrderWeiQuanRecordService;
-import com.yeshi.fanli.service.inter.order.jd.JDOrderService;
-import com.yeshi.fanli.service.inter.order.pdd.PDDOrderService;
-import com.yeshi.fanli.service.inter.order.tb.TaoBaoOrderService;
-import com.yeshi.fanli.service.inter.user.UserInfoRegisterService;
-import com.yeshi.fanli.util.Constant;
-import com.yeshi.fanli.util.MoneyBigDecimalUtil;
-import com.yeshi.fanli.util.StringUtil;
-import com.yeshi.fanli.util.TimeUtil;
-
-@Service
-public class DailyCountOrderServiceImpl implements DailyCountOrderService {
-
-	@Resource
-	private DailyCountOrderDao dailyCountOrderDao;
-
-	@Resource
-	private HongBaoV2CountService hongBaoV2CountService;
-
-	@Resource
-	private CommonOrderCountService commonOrderCountService;
-
-	@Resource
-	private UserInfoRegisterService userInfoRegisterService;
-
-	@Resource
-	private UserOrderWeiQuanRecordService userOrderWeiQuanRecordService;
-
-	@Resource
-	private TaoBaoOrderService taoBaoOrderService;
-
-	@Resource
-	private JDOrderService jdOrderService;
-
-	@Resource
-	private PDDOrderService pddOrderService;
-
-	@Resource
-	private LostOrderService lostOrderService;
-
-	@Override
-	public List<DailyCountOrder> getDailyCountList(String type, Date startTime, Date endTime, String channel)
-			throws Exception {
-		// 鏌ヨ绫诲瀷
-		DailyCountOrderEnum typeEnum = getTypeEnum(type);
-		if (typeEnum == null) {
-			return null;
-		}
-
-		// 鍒濆鍖栨暟鎹�
-		initData(typeEnum);
-
-		return dailyCountOrderDao.query(typeEnum, startTime, endTime, channel);
-	}
-
-	/**
-	 * 鑾峰彇鏋氫妇绫诲瀷
-	 * 
-	 * @param type
-	 * @return
-	 */
-	private DailyCountOrderEnum getTypeEnum(String name) {
-		if (StringUtil.isNullOrEmpty(name)) {
-			return null;
-		}
-
-		DailyCountOrderEnum[] array = DailyCountOrderEnum.values();
-		for (int i = 0; i < array.length; i++) {
-			if (array[i].name().equals(name)) {
-				return array[i];
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * 鑾峰彇鏋氫妇绫诲瀷
-	 * 
-	 * @param type
-	 * @return
-	 */
-	@Override
-	public String getTypeEnumDesc(String name) {
-		if (StringUtil.isNullOrEmpty(name)) {
-			return "";
-		}
-
-		DailyCountOrderEnum[] array = DailyCountOrderEnum.values();
-		for (int i = 0; i < array.length; i++) {
-			if (array[i].name().equals(name)) {
-				return array[i].getDesc();
-			}
-		}
-
-		return "";
-	}
-
-	/**
-	 * 鍒濆鏁版嵁
-	 * 
-	 * @param typeEnum
-	 * @throws Exception
-	 */
-	@Override
-	public void initData(DailyCountOrderEnum typeEnum) throws Exception {
-		Date lastDate = null;
-		DailyCountOrder lastRecord = dailyCountOrderDao.getMaxDate(typeEnum);
-		if (lastRecord != null) {
-			lastDate = lastRecord.getUpdateDate();
-		} else {
-			lastDate = TimeUtil.parse("2018-01-20");
-		}
-
-		long min = DateUtil.dateDiffMin(lastDate, new Date());
-		if (min <= 10) { // 10鍒嗛挓浠ュ唴涓嶇粺璁�
-			return;
-		}
-
-		Date today = new Date();
-		int betweenDays = DateUtil.daysBetween2(lastDate, today);
-		for (int i = 0; i <= betweenDays; i++) {
-			// 璁$畻鏃ユ湡
-			String preDay = DateUtil.plusDay(i, lastDate);
-			// 缁熻鏁版嵁
-			if (DailyCountOrderEnum.fanliOrderNum == typeEnum) {
-				addOrderNumCount(preDay, typeEnum, 1);
-			} else if (DailyCountOrderEnum.shareOrderNum == typeEnum) {
-				addOrderNumCount(preDay, typeEnum, 2);
-			} else if (DailyCountOrderEnum.inviteOrderNum == typeEnum) {
-				addOrderNumCount(preDay, typeEnum, 3);
-			} else if (DailyCountOrderEnum.channelOrderNum24H == typeEnum) {
-				addChannelOrderNum24H(preDay, typeEnum);
-			} else if (DailyCountOrderEnum.channelOrderNum == typeEnum) {
-				addChannelOrderNum(preDay, typeEnum);
-			} else if (DailyCountOrderEnum.channelOrderMoney == typeEnum) {
-				addChannelOrderMoney(preDay, typeEnum);
-			} else if (DailyCountOrderEnum.weiQuanOrderNum == typeEnum) {
-				addWeiQuanOrderNum(preDay, typeEnum);
-			} else if (DailyCountOrderEnum.weiQuanOrderMoney == typeEnum) {
-				addWeiQuanOrderMoney(preDay, typeEnum);
-			} else if (DailyCountOrderEnum.tbOrderTrackRate == typeEnum) {
-				addTBOrderTrackRate(preDay, typeEnum);
-			} else if (DailyCountOrderEnum.jdOrderTrackRate == typeEnum) {
-				addJDOrderTrackRate(preDay, typeEnum);
-			} else if (DailyCountOrderEnum.pddOrderTrackRate == typeEnum) {
-				addPDDOrderTrackRate(preDay, typeEnum);
-			} else if (DailyCountOrderEnum.lastOrderUntreatedNum == typeEnum) {
-				addLastOrderUntreatedNum(preDay, typeEnum);
-			} else if (DailyCountOrderEnum.lastOrderSucceedNum == typeEnum) {
-				addLastOrderSucceedNum(preDay, typeEnum);
-			} else if (DailyCountOrderEnum.lastOrderFailNum == typeEnum) {
-				addLastOrderFailNum(preDay, typeEnum);
-			} else if (DailyCountOrderEnum.lastOrderSucceedMoney == typeEnum) {
-				addLastOrderSucceedMoney(preDay, typeEnum);
-			}
-		}
-	}
-
-	/**
-	 * 缁熻璁㈠崟鏁伴噺
-	 * 
-	 * @param preDay
-	 * @param typeEnum
-	 * @param orderType
-	 * @throws Exception
-	 */
-	private void addOrderNumCount(String preDay, DailyCountOrderEnum typeEnum, int orderType) throws Exception {
-		Long count = hongBaoV2CountService.countOrderByTypeAndDate(orderType, preDay);
-		if (count == null)
-			count = 0L;
-
-		DailyCountOrder obj = new DailyCountOrder();
-		obj.setTotal(BigDecimal.valueOf(count));
-		obj.setType(typeEnum);
-		obj.setUpdateDate(new Date());
-		obj.setDay(TimeUtil.parse(preDay));
-		obj.setId(StringUtil.Md5(preDay + typeEnum.name()));
-		dailyCountOrderDao.save(obj);
-	}
-
-	/**
-	 * 缁熻鍚勪釜娓犻亾璁㈠崟鏁版嵁
-	 * 
-	 * @param preDay
-	 * @param typeEnum
-	 * @throws Exception
-	 */
-	private void addChannelOrderNum(String preDay, DailyCountOrderEnum typeEnum) throws Exception {
-		List<UserInfoRegister> listRegister = null;
-		// 缁熻褰撴棩璁㈠崟
-		List<CountOrderDTO> listOrder = commonOrderCountService.countValidOrderByDay(preDay);
-
-		if (listOrder != null && listOrder.size() > 0) {
-			List<Long> listUid = new ArrayList<>();
-			for (CountOrderDTO countOrderDTO : listOrder) {
-				listUid.add(countOrderDTO.getUid());
-			}
-			listRegister = userInfoRegisterService.listByMultipleUids(listUid);
-		}
-
-		// 缁熻鍚勪釜娓犻亾
-		ChannelEnum[] channels = ChannelEnum.values();
-		for (int i = 0; i < channels.length; i++) {
-			long count = 0;
-			String channelVlaue = channels[i].getVlaue();
-			if (listOrder != null && listOrder.size() > 0 && listRegister != null && listRegister.size() > 0) {
-				for (CountOrderDTO dto : listOrder) {
-					Long orderUid = dto.getUid();
-					if (orderUid == null) {
-						continue;
-					}
-
-					for (UserInfoRegister register : listRegister) {
-						Long uid = register.getId();
-						String vlaue = register.getChannel();
-						// 娓犻亾 銆佺敤鎴穒d鍖归厤
-						if (channelVlaue.equalsIgnoreCase(vlaue) && uid.longValue() == orderUid.longValue()) {
-							count++;
-							break;
-						}
-					}
-				}
-			}
-
-			DailyCountOrder obj = new DailyCountOrder();
-			obj.setTotal(BigDecimal.valueOf(count));
-			obj.setType(typeEnum);
-			obj.setChannel(channels[i].name());
-			obj.setUpdateDate(new Date());
-			obj.setDay(TimeUtil.parse(preDay));
-			obj.setId(StringUtil.Md5(preDay + channels[i].name() + typeEnum.name()));
-			dailyCountOrderDao.save(obj);
-		}
-	}
-
-	/**
-	 * 缁熻鏂颁汉24H鍐呬笅鍗曟暟閲�
-	 * 
-	 * @param preDay
-	 * @param typeEnum
-	 * @throws Exception
-	 */
-	private void addChannelOrderNum24H(String preDay, DailyCountOrderEnum typeEnum) throws Exception {
-		ChannelEnum[] channels = ChannelEnum.values();
-		for (int i = 0; i < channels.length; i++) {
-			int count = 0;
-
-			List<UserInfoRegister> list = userInfoRegisterService.listByChannelAndDay(channels[i].getVlaue(), preDay);
-			if (list != null && list.size() > 0) {
-				for (UserInfoRegister user : list) {
-					Date limitDay = DateUtil.plusDayDate(1, user.getCreateTime());
-					Integer total = commonOrderCountService.countOderByUidAndDate(limitDay, user.getId());
-					if (total != null)
-						count += total;
-				}
-			}
-
-			DailyCountOrder obj = new DailyCountOrder();
-			obj.setTotal(BigDecimal.valueOf(count));
-			obj.setType(typeEnum);
-			obj.setChannel(channels[i].name());
-			obj.setUpdateDate(new Date());
-			obj.setDay(TimeUtil.parse(preDay));
-			obj.setId(StringUtil.Md5(preDay + channels[i].name() + typeEnum.name()));
-			dailyCountOrderDao.save(obj);
-		}
-	}
-
-	/**
-	 * 缁熻娓犻亾閲戦
-	 * 
-	 * @param preDay
-	 * @param typeEnum
-	 * @throws Exception
-	 */
-	private void addChannelOrderMoney(String preDay, DailyCountOrderEnum typeEnum) throws Exception {
-		List<UserInfoRegister> listRegister = null;
-		// 鏌ヨ璁㈠崟浣i噾
-		List<CountOrderDTO> listOrder = commonOrderCountService.countCommissionByDay(preDay);
-
-		if (listOrder != null && listOrder.size() > 0) {
-			List<Long> listUid = new ArrayList<>();
-			for (CountOrderDTO countOrderDTO : listOrder) {
-				listUid.add(countOrderDTO.getUid());
-			}
-			listRegister = userInfoRegisterService.listByMultipleUids(listUid);
-		}
-
-		ChannelEnum[] channels = ChannelEnum.values();
-		for (int i = 0; i < channels.length; i++) {
-			BigDecimal money = new BigDecimal(0);
-			String channelVlaue = channels[i].getVlaue();
-
-			if (listOrder != null && listOrder.size() > 0 && listRegister != null && listRegister.size() > 0) {
-				for (CountOrderDTO dto : listOrder) {
-					Long orderUid = dto.getUid();
-					BigDecimal commission = dto.getCommission();
-					if (commission == null || orderUid == null) {
-						continue;
-					}
-
-					for (UserInfoRegister register : listRegister) {
-						Long uid = register.getId();
-						String vlaue = register.getChannel();
-						// 娓犻亾 銆佺敤鎴穒d鍖归厤
-						if (channelVlaue.equalsIgnoreCase(vlaue) && uid.longValue() == orderUid.longValue()) {
-							money = MoneyBigDecimalUtil.add(money, commission);
-						}
-					}
-				}
-			}
-
-			DailyCountOrder obj = new DailyCountOrder();
-			obj.setTotal(money);
-			obj.setType(typeEnum);
-			obj.setChannel(channels[i].name());
-			obj.setUpdateDate(new Date());
-			obj.setDay(TimeUtil.parse(preDay));
-			obj.setId(StringUtil.Md5(preDay + channels[i].name() + typeEnum.name()));
-			dailyCountOrderDao.save(obj);
-		}
-	}
-
-	/**
-	 * 缁熻缁存潈璁㈠崟鏁伴噺
-	 * 
-	 * @param preDay
-	 * @param typeEnum
-	 * @throws Exception
-	 */
-	private void addWeiQuanOrderNum(String preDay, DailyCountOrderEnum typeEnum) throws Exception {
-		Integer count = userOrderWeiQuanRecordService.countWeiQaunOrderNumberByDate(preDay);
-		if (count == null)
-			count = 0;
-
-		DailyCountOrder obj = new DailyCountOrder();
-		obj.setTotal(BigDecimal.valueOf(count));
-		obj.setType(typeEnum);
-		obj.setUpdateDate(new Date());
-		obj.setDay(TimeUtil.parse(preDay));
-		obj.setId(StringUtil.Md5(preDay + typeEnum.name()));
-		dailyCountOrderDao.save(obj);
-	}
-
-	/**
-	 * 鏌ヨ缁存潈閲戦
-	 * 
-	 * @param preDay
-	 * @param typeEnum
-	 * @throws Exception
-	 */
-	private void addWeiQuanOrderMoney(String preDay, DailyCountOrderEnum typeEnum) throws Exception {
-		BigDecimal money = userOrderWeiQuanRecordService.countWeiQaunOrderMoneyByDate(preDay);
-		if (money == null)
-			money = new BigDecimal(0);
-
-		DailyCountOrder obj = new DailyCountOrder();
-		obj.setTotal(money);
-		obj.setType(typeEnum);
-		obj.setUpdateDate(new Date());
-		obj.setDay(TimeUtil.parse(preDay));
-		obj.setId(StringUtil.Md5(preDay + typeEnum.name()));
-		dailyCountOrderDao.save(obj);
-	}
-
-	/**
-	 * 娣樺疂璁㈠崟璺熻釜鐜�
-	 * 
-	 * @param preDay
-	 * @param typeEnum
-	 * @throws Exception
-	 */
-	private void addTBOrderTrackRate(String preDay, DailyCountOrderEnum typeEnum) throws Exception {
-		// 缁熻璺熻釜鍒版暟鎹�
-		Long count = commonOrderCountService.countOrderBySourceTypeAndDay(Constant.SOURCE_TYPE_TAOBAO, preDay);
-
-		Long total = taoBaoOrderService.countOrderByDay(preDay);
-
-		// 璁$畻姣斾緥
-		BigDecimal rate = new BigDecimal(0);
-		if (total != null && total > 0 && count != null && count > 0) {
-			rate = MoneyBigDecimalUtil.div(BigDecimal.valueOf(count), BigDecimal.valueOf(total));
-			rate = MoneyBigDecimalUtil.mul(rate, BigDecimal.valueOf(100));
-		}
-
-		DailyCountOrder obj = new DailyCountOrder();
-		obj.setRate(true);
-		obj.setTotalDay(BigDecimal.valueOf(total));
-		obj.setTotalValid(BigDecimal.valueOf(count));
-		obj.setTotal(rate);
-		obj.setType(typeEnum);
-		obj.setUpdateDate(new Date());
-		obj.setDay(TimeUtil.parse(preDay));
-		obj.setId(StringUtil.Md5(preDay + typeEnum.name()));
-		dailyCountOrderDao.save(obj);
-	}
-
-	/**
-	 * 浜笢璁㈠崟璺熻釜鐜�
-	 * 
-	 * @param preDay
-	 * @param typeEnum
-	 * @throws Exception
-	 */
-	private void addJDOrderTrackRate(String preDay, DailyCountOrderEnum typeEnum) throws Exception {
-		// 缁熻璺熻釜鍒版暟鎹�
-		Long count = commonOrderCountService.countOrderBySourceTypeAndDay(Constant.SOURCE_TYPE_JD, preDay);
-
-		Long total = jdOrderService.countOrderByDay(preDay);
-
-		// 璁$畻姣斾緥
-		BigDecimal rate = new BigDecimal(0);
-		if (total != null && total > 0 && count != null && count > 0) {
-			rate = MoneyBigDecimalUtil.div(BigDecimal.valueOf(count), BigDecimal.valueOf(total));
-			rate = MoneyBigDecimalUtil.mul(rate, BigDecimal.valueOf(100));
-		}
-
-		DailyCountOrder obj = new DailyCountOrder();
-		obj.setRate(true);
-		obj.setTotalDay(BigDecimal.valueOf(total));
-		obj.setTotalValid(BigDecimal.valueOf(count));
-		obj.setTotal(rate);
-		obj.setType(typeEnum);
-		obj.setUpdateDate(new Date());
-		obj.setDay(TimeUtil.parse(preDay));
-		obj.setId(StringUtil.Md5(preDay + typeEnum.name()));
-		dailyCountOrderDao.save(obj);
-	}
-
-	/**
-	 * 鎷煎澶氳鍗曡窡韪巼
-	 * 
-	 * @param preDay
-	 * @param typeEnum
-	 * @throws Exception
-	 */
-	private void addPDDOrderTrackRate(String preDay, DailyCountOrderEnum typeEnum) throws Exception {
-		// 缁熻璺熻釜鍒版暟鎹�
-		Long count = commonOrderCountService.countOrderBySourceTypeAndDay(Constant.SOURCE_TYPE_PDD, preDay);
-
-		Long total = pddOrderService.countOrderByDay(preDay);
-		// 璁$畻姣斾緥
-		BigDecimal rate = new BigDecimal(0);
-		if (total != null && total > 0 && count != null && count > 0) {
-			rate = MoneyBigDecimalUtil.div(BigDecimal.valueOf(count), BigDecimal.valueOf(total));
-			rate = MoneyBigDecimalUtil.mul(rate, BigDecimal.valueOf(100));
-		}
-
-		DailyCountOrder obj = new DailyCountOrder();
-		obj.setRate(true);
-		obj.setTotalDay(BigDecimal.valueOf(total));
-		obj.setTotalValid(BigDecimal.valueOf(count));
-		obj.setTotal(rate);
-		obj.setType(typeEnum);
-		obj.setUpdateDate(new Date());
-		obj.setDay(TimeUtil.parse(preDay));
-		obj.setId(StringUtil.Md5(preDay + typeEnum.name()));
-		dailyCountOrderDao.save(obj);
-	}
-
-	/**
-	 * 缁熻鐢宠瘔璁㈠崟鏈鐞嗘暟閲�
-	 * 
-	 * @param preDay
-	 * @param typeEnum
-	 * @throws Exception
-	 */
-	private void addLastOrderUntreatedNum(String preDay, DailyCountOrderEnum typeEnum) throws Exception {
-		Integer num = lostOrderService.countLostOrderNum(preDay, LostOrder.RESULT_CODE_VERFING);
-		if (num == null)
-			num = 0;
-
-		DailyCountOrder obj = new DailyCountOrder();
-		obj.setTotal(BigDecimal.valueOf(num));
-		obj.setType(typeEnum);
-		obj.setUpdateDate(new Date());
-		obj.setDay(TimeUtil.parse(preDay));
-		obj.setId(StringUtil.Md5(preDay + typeEnum.name()));
-		dailyCountOrderDao.save(obj);
-	}
-
-	/**
-	 * 缁熻鐢宠瘔璁㈠崟 澶勭悊澶辫触
-	 * 
-	 * @param preDay
-	 * @param typeEnum
-	 * @throws Exception
-	 */
-	private void addLastOrderFailNum(String preDay, DailyCountOrderEnum typeEnum) throws Exception {
-		Integer num = lostOrderService.countLostOrderNum(preDay, LostOrder.RESULT_CODE_FAIL);
-		if (num == null)
-			num = 0;
-
-		DailyCountOrder obj = new DailyCountOrder();
-		obj.setTotal(BigDecimal.valueOf(num));
-		obj.setType(typeEnum);
-		obj.setUpdateDate(new Date());
-		obj.setDay(TimeUtil.parse(preDay));
-		obj.setId(StringUtil.Md5(preDay + typeEnum.name()));
-		dailyCountOrderDao.save(obj);
-	}
-
-	/**
-	 * 缁熻鐢宠瘔璁㈠崟 澶勭悊鎴愬姛
-	 * 
-	 * @param preDay
-	 * @param typeEnum
-	 * @throws Exception
-	 */
-	private void addLastOrderSucceedNum(String preDay, DailyCountOrderEnum typeEnum) throws Exception {
-		Integer num = lostOrderService.countLostOrderNum(preDay, LostOrder.RESULT_CODE_SUCCESS);
-		if (num == null)
-			num = 0;
-
-		DailyCountOrder obj = new DailyCountOrder();
-		obj.setTotal(BigDecimal.valueOf(num));
-		obj.setType(typeEnum);
-		obj.setUpdateDate(new Date());
-		obj.setDay(TimeUtil.parse(preDay));
-		obj.setId(StringUtil.Md5(preDay + typeEnum.name()));
-		dailyCountOrderDao.save(obj);
-	}
-
-	/**
-	 * 璁㈠崟鎵惧洖鎴愬姛缁熻閲戦
-	 * 
-	 * @param preDay
-	 * @throws Exception
-	 */
-	private void addLastOrderSucceedMoney(String preDay, DailyCountOrderEnum typeEnum) throws Exception {
-		BigDecimal money = lostOrderService.countAppealMoney(preDay);
-		if (money == null)
-			money = new BigDecimal("0");
-
-		DailyCountOrder obj = new DailyCountOrder();
-		obj.setTotal(money);
-		obj.setType(typeEnum);
-		obj.setUpdateDate(new Date());
-		obj.setDay(TimeUtil.parse(preDay));
-		obj.setId(StringUtil.Md5(preDay + typeEnum.name()));
-		dailyCountOrderDao.save(obj);
-	}
-}
+package com.yeshi.fanli.service.impl.count;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+import org.yeshi.utils.DateUtil;
+
+import com.yeshi.fanli.dao.user.count.DailyCountOrderDao;
+import com.yeshi.fanli.dto.order.CountOrderDTO;
+import com.yeshi.fanli.entity.admin.count.DailyCountOrder;
+import com.yeshi.fanli.entity.admin.count.DailyCountOrder.DailyCountOrderEnum;
+import com.yeshi.fanli.entity.bus.user.LostOrder;
+import com.yeshi.fanli.entity.bus.user.UserInfoRegister;
+import com.yeshi.fanli.entity.system.ChannelEnum;
+import com.yeshi.fanli.service.inter.count.DailyCountOrderService;
+import com.yeshi.fanli.service.inter.count.HongBaoV2CountService;
+import com.yeshi.fanli.service.inter.order.CommonOrderCountService;
+import com.yeshi.fanli.service.inter.order.LostOrderService;
+import com.yeshi.fanli.service.inter.order.UserOrderWeiQuanRecordService;
+import com.yeshi.fanli.service.inter.order.jd.JDOrderService;
+import com.yeshi.fanli.service.inter.order.pdd.PDDOrderService;
+import com.yeshi.fanli.service.inter.order.tb.TaoBaoOrderService;
+import com.yeshi.fanli.service.inter.user.UserInfoRegisterService;
+import com.yeshi.fanli.util.Constant;
+import org.yeshi.utils.MoneyBigDecimalUtil;
+import com.yeshi.fanli.util.StringUtil;
+import org.yeshi.utils.TimeUtil;
+
+@Service
+public class DailyCountOrderServiceImpl implements DailyCountOrderService {
+
+	@Resource
+	private DailyCountOrderDao dailyCountOrderDao;
+
+	@Resource
+	private HongBaoV2CountService hongBaoV2CountService;
+
+	@Resource
+	private CommonOrderCountService commonOrderCountService;
+
+	@Resource
+	private UserInfoRegisterService userInfoRegisterService;
+
+	@Resource
+	private UserOrderWeiQuanRecordService userOrderWeiQuanRecordService;
+
+	@Resource
+	private TaoBaoOrderService taoBaoOrderService;
+
+	@Resource
+	private JDOrderService jdOrderService;
+
+	@Resource
+	private PDDOrderService pddOrderService;
+
+	@Resource
+	private LostOrderService lostOrderService;
+
+	@Override
+	public List<DailyCountOrder> getDailyCountList(String type, Date startTime, Date endTime, String channel)
+			throws Exception {
+		// 鏌ヨ绫诲瀷
+		DailyCountOrderEnum typeEnum = getTypeEnum(type);
+		if (typeEnum == null) {
+			return null;
+		}
+
+		// 鍒濆鍖栨暟鎹�
+		initData(typeEnum);
+
+		return dailyCountOrderDao.query(typeEnum, startTime, endTime, channel);
+	}
+
+	/**
+	 * 鑾峰彇鏋氫妇绫诲瀷
+	 * 
+	 * @param type
+	 * @return
+	 */
+	private DailyCountOrderEnum getTypeEnum(String name) {
+		if (StringUtil.isNullOrEmpty(name)) {
+			return null;
+		}
+
+		DailyCountOrderEnum[] array = DailyCountOrderEnum.values();
+		for (int i = 0; i < array.length; i++) {
+			if (array[i].name().equals(name)) {
+				return array[i];
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * 鑾峰彇鏋氫妇绫诲瀷
+	 * 
+	 * @param type
+	 * @return
+	 */
+	@Override
+	public String getTypeEnumDesc(String name) {
+		if (StringUtil.isNullOrEmpty(name)) {
+			return "";
+		}
+
+		DailyCountOrderEnum[] array = DailyCountOrderEnum.values();
+		for (int i = 0; i < array.length; i++) {
+			if (array[i].name().equals(name)) {
+				return array[i].getDesc();
+			}
+		}
+
+		return "";
+	}
+
+	/**
+	 * 鍒濆鏁版嵁
+	 * 
+	 * @param typeEnum
+	 * @throws Exception
+	 */
+	@Override
+	public void initData(DailyCountOrderEnum typeEnum) throws Exception {
+		Date lastDate = null;
+		DailyCountOrder lastRecord = dailyCountOrderDao.getMaxDate(typeEnum);
+		if (lastRecord != null) {
+			lastDate = lastRecord.getUpdateDate();
+		} else {
+			lastDate = TimeUtil.parse("2018-01-20");
+		}
+
+		long min = DateUtil.dateDiffMin(lastDate, new Date());
+		if (min <= 10) { // 10鍒嗛挓浠ュ唴涓嶇粺璁�
+			return;
+		}
+		
+		Date today = new Date();
+		int betweenDays = DateUtil.daysBetween2(lastDate, today);
+		for (int i = 0; i <= betweenDays; i++) {
+			// 璁$畻鏃ユ湡
+			String preDay = DateUtil.plusDay(i, lastDate);
+			// 缁熻鏁版嵁
+			if (DailyCountOrderEnum.fanliOrderNum == typeEnum) {
+				addOrderNumCount(preDay, typeEnum, 1);
+			} else if (DailyCountOrderEnum.shareOrderNum == typeEnum) {
+				addOrderNumCount(preDay, typeEnum, 2);
+			} else if (DailyCountOrderEnum.inviteOrderNum == typeEnum) {
+				addOrderNumCount(preDay, typeEnum, 3);
+			} else if (DailyCountOrderEnum.channelOrderNum24H == typeEnum) {
+				addChannelOrderNum24H(preDay, typeEnum);
+			} else if (DailyCountOrderEnum.channelOrderNum == typeEnum) {
+				addChannelOrderNum(preDay, typeEnum);
+			} else if (DailyCountOrderEnum.channelOrderMoney == typeEnum) {
+				addChannelOrderMoney(preDay, typeEnum);
+			} else if (DailyCountOrderEnum.weiQuanOrderNum == typeEnum) {
+				addWeiQuanOrderNum(preDay, typeEnum);
+			} else if (DailyCountOrderEnum.weiQuanOrderMoney == typeEnum) {
+				addWeiQuanOrderMoney(preDay, typeEnum);
+			} else if (DailyCountOrderEnum.tbOrderTrackRate == typeEnum) {
+				addTBOrderTrackRate(preDay, typeEnum);
+			} else if (DailyCountOrderEnum.jdOrderTrackRate == typeEnum) {
+				addJDOrderTrackRate(preDay, typeEnum);
+			} else if (DailyCountOrderEnum.pddOrderTrackRate == typeEnum) {
+				addPDDOrderTrackRate(preDay, typeEnum);
+			} else if (DailyCountOrderEnum.lastOrderUntreatedNum == typeEnum) {
+				addLastOrderUntreatedNum(preDay, typeEnum);
+			} else if (DailyCountOrderEnum.lastOrderSucceedNum == typeEnum) {
+				addLastOrderSucceedNum(preDay, typeEnum);
+			} else if (DailyCountOrderEnum.lastOrderFailNum == typeEnum) {
+				addLastOrderFailNum(preDay, typeEnum);
+			} else if (DailyCountOrderEnum.lastOrderSucceedMoney == typeEnum) {
+				addLastOrderSucceedMoney(preDay, typeEnum);
+			}
+		}
+	}
+
+	/**
+	 * 缁熻璁㈠崟鏁伴噺
+	 * 
+	 * @param preDay
+	 * @param typeEnum
+	 * @param orderType
+	 * @throws Exception
+	 */
+	private void addOrderNumCount(String preDay, DailyCountOrderEnum typeEnum, int orderType) throws Exception {
+		Long count = hongBaoV2CountService.countOrderByTypeAndDate(orderType, preDay);
+		if (count == null)
+			count = 0L;
+
+		DailyCountOrder obj = new DailyCountOrder();
+		obj.setTotal(BigDecimal.valueOf(count));
+		obj.setType(typeEnum);
+		obj.setUpdateDate(new Date());
+		obj.setDay(TimeUtil.parse(preDay));
+		obj.setId(StringUtil.Md5(preDay + typeEnum.name()));
+		dailyCountOrderDao.save(obj);
+	}
+
+	/**
+	 * 缁熻鍚勪釜娓犻亾璁㈠崟鏁版嵁
+	 * 
+	 * @param preDay
+	 * @param typeEnum
+	 * @throws Exception
+	 */
+	private void addChannelOrderNum(String preDay, DailyCountOrderEnum typeEnum) throws Exception {
+		List<UserInfoRegister> listRegister = null;
+		// 缁熻褰撴棩璁㈠崟
+		List<CountOrderDTO> listOrder = commonOrderCountService.countValidOrderByDay(preDay);
+
+		if (listOrder != null && listOrder.size() > 0) {
+			List<Long> listUid = new ArrayList<>();
+			for (CountOrderDTO countOrderDTO : listOrder) {
+				listUid.add(countOrderDTO.getUid());
+			}
+			listRegister = userInfoRegisterService.listByMultipleUids(listUid);
+		}
+
+		// 缁熻鍚勪釜娓犻亾
+		ChannelEnum[] channels = ChannelEnum.values();
+		for (int i = 0; i < channels.length; i++) {
+			long count = 0;
+			String channelVlaue = channels[i].getVlaue();
+			if (listOrder != null && listOrder.size() > 0 && listRegister != null && listRegister.size() > 0) {
+				for (CountOrderDTO dto : listOrder) {
+					Long orderUid = dto.getUid();
+					if (orderUid == null) {
+						continue;
+					}
+
+					for (UserInfoRegister register : listRegister) {
+						Long uid = register.getId();
+						String vlaue = register.getChannel();
+						// 娓犻亾 銆佺敤鎴穒d鍖归厤
+						if (channelVlaue.equalsIgnoreCase(vlaue) && uid.longValue() == orderUid.longValue()) {
+							count++;
+							break;
+						}
+					}
+				}
+			}
+
+			DailyCountOrder obj = new DailyCountOrder();
+			obj.setTotal(BigDecimal.valueOf(count));
+			obj.setType(typeEnum);
+			obj.setChannel(channels[i].name());
+			obj.setUpdateDate(new Date());
+			obj.setDay(TimeUtil.parse(preDay));
+			obj.setId(StringUtil.Md5(preDay + channels[i].name() + typeEnum.name()));
+			dailyCountOrderDao.save(obj);
+		}
+	}
+
+	/**
+	 * 缁熻鏂颁汉24H鍐呬笅鍗曟暟閲�
+	 * 
+	 * @param preDay
+	 * @param typeEnum
+	 * @throws Exception
+	 */
+	private void addChannelOrderNum24H(String preDay, DailyCountOrderEnum typeEnum) throws Exception {
+		ChannelEnum[] channels = ChannelEnum.values();
+		for (int i = 0; i < channels.length; i++) {
+			int count = 0;
+
+			List<UserInfoRegister> list = userInfoRegisterService.listByChannelAndDay(channels[i].getVlaue(), preDay);
+			if (list != null && list.size() > 0) {
+				for (UserInfoRegister user : list) {
+					Date limitDay = DateUtil.plusDayDate(1, user.getCreateTime());
+					Integer total = commonOrderCountService.countOderByUidAndDate(limitDay, user.getId());
+					if (total != null)
+						count += total;
+				}
+			}
+
+			DailyCountOrder obj = new DailyCountOrder();
+			obj.setTotal(BigDecimal.valueOf(count));
+			obj.setType(typeEnum);
+			obj.setChannel(channels[i].name());
+			obj.setUpdateDate(new Date());
+			obj.setDay(TimeUtil.parse(preDay));
+			obj.setId(StringUtil.Md5(preDay + channels[i].name() + typeEnum.name()));
+			dailyCountOrderDao.save(obj);
+		}
+	}
+
+	/**
+	 * 缁熻娓犻亾閲戦
+	 * 
+	 * @param preDay
+	 * @param typeEnum
+	 * @throws Exception
+	 */
+	public void addChannelOrderMoney(String preDay, DailyCountOrderEnum typeEnum) throws Exception {
+		List<UserInfoRegister> listRegister = null;
+		// 鏌ヨ璁㈠崟浣i噾
+		List<CountOrderDTO> listOrder = commonOrderCountService.countCommissionByDay(preDay);
+
+		if (listOrder != null && listOrder.size() > 0) {
+			List<Long> listUid = new ArrayList<>();
+			for (CountOrderDTO countOrderDTO : listOrder) {
+				listUid.add(countOrderDTO.getUid());
+			}
+			listRegister = userInfoRegisterService.listByMultipleUids(listUid);
+		}
+
+		ChannelEnum[] channels = ChannelEnum.values();
+		for (int i = 0; i < channels.length; i++) {
+			BigDecimal money = new BigDecimal(0);
+			String channelVlaue = channels[i].getVlaue();
+
+			if (listOrder != null && listOrder.size() > 0 && listRegister != null && listRegister.size() > 0) {
+				for (CountOrderDTO dto : listOrder) {
+					Long orderUid = dto.getUid();
+					BigDecimal commission = dto.getCommission();
+					if (commission == null || orderUid == null) {
+						continue;
+					}
+
+					for (UserInfoRegister register : listRegister) {
+						Long uid = register.getId();
+						String vlaue = register.getChannel();
+						// 娓犻亾 銆佺敤鎴穒d鍖归厤
+						if (channelVlaue.equalsIgnoreCase(vlaue) && uid.longValue() == orderUid.longValue()) {
+							money = MoneyBigDecimalUtil.add(money, commission);
+						}
+					}
+				}
+			}
+
+			DailyCountOrder obj = new DailyCountOrder();
+			obj.setTotal(money);
+			obj.setType(typeEnum);
+			obj.setChannel(channels[i].name());
+			obj.setUpdateDate(new Date());
+			obj.setDay(TimeUtil.parse(preDay));
+			obj.setId(StringUtil.Md5(preDay + channels[i].name() + typeEnum.name()));
+			dailyCountOrderDao.save(obj);
+		}
+	}
+
+	/**
+	 * 缁熻缁存潈璁㈠崟鏁伴噺
+	 * 
+	 * @param preDay
+	 * @param typeEnum
+	 * @throws Exception
+	 */
+	private void addWeiQuanOrderNum(String preDay, DailyCountOrderEnum typeEnum) throws Exception {
+		Integer count = userOrderWeiQuanRecordService.countWeiQaunOrderNumberByDate(preDay);
+		if (count == null)
+			count = 0;
+
+		DailyCountOrder obj = new DailyCountOrder();
+		obj.setTotal(BigDecimal.valueOf(count));
+		obj.setType(typeEnum);
+		obj.setUpdateDate(new Date());
+		obj.setDay(TimeUtil.parse(preDay));
+		obj.setId(StringUtil.Md5(preDay + typeEnum.name()));
+		dailyCountOrderDao.save(obj);
+	}
+
+	/**
+	 * 鏌ヨ缁存潈閲戦
+	 * 
+	 * @param preDay
+	 * @param typeEnum
+	 * @throws Exception
+	 */
+	private void addWeiQuanOrderMoney(String preDay, DailyCountOrderEnum typeEnum) throws Exception {
+		BigDecimal money = userOrderWeiQuanRecordService.countWeiQaunOrderMoneyByDate(preDay);
+		if (money == null)
+			money = new BigDecimal(0);
+
+		DailyCountOrder obj = new DailyCountOrder();
+		obj.setTotal(money);
+		obj.setType(typeEnum);
+		obj.setUpdateDate(new Date());
+		obj.setDay(TimeUtil.parse(preDay));
+		obj.setId(StringUtil.Md5(preDay + typeEnum.name()));
+		dailyCountOrderDao.save(obj);
+	}
+
+	/**
+	 * 娣樺疂璁㈠崟璺熻釜鐜�
+	 * 
+	 * @param preDay
+	 * @param typeEnum
+	 * @throws Exception
+	 */
+	private void addTBOrderTrackRate(String preDay, DailyCountOrderEnum typeEnum) throws Exception {
+		// 缁熻璺熻釜鍒版暟鎹�
+		Long count = commonOrderCountService.countOrderBySourceTypeAndDay(Constant.SOURCE_TYPE_TAOBAO, preDay);
+
+		Long total = taoBaoOrderService.countOrderByDay(preDay);
+
+		// 璁$畻姣斾緥
+		BigDecimal rate = new BigDecimal(0);
+		if (total != null && total > 0 && count != null && count > 0) {
+			rate = MoneyBigDecimalUtil.div(BigDecimal.valueOf(count), BigDecimal.valueOf(total));
+			rate = MoneyBigDecimalUtil.mul(rate, BigDecimal.valueOf(100));
+		}
+
+		DailyCountOrder obj = new DailyCountOrder();
+		obj.setRate(true);
+		obj.setTotalDay(BigDecimal.valueOf(total));
+		obj.setTotalValid(BigDecimal.valueOf(count));
+		obj.setTotal(rate);
+		obj.setType(typeEnum);
+		obj.setUpdateDate(new Date());
+		obj.setDay(TimeUtil.parse(preDay));
+		obj.setId(StringUtil.Md5(preDay + typeEnum.name()));
+		dailyCountOrderDao.save(obj);
+	}
+
+	/**
+	 * 浜笢璁㈠崟璺熻釜鐜�
+	 * 
+	 * @param preDay
+	 * @param typeEnum
+	 * @throws Exception
+	 */
+	private void addJDOrderTrackRate(String preDay, DailyCountOrderEnum typeEnum) throws Exception {
+		// 缁熻璺熻釜鍒版暟鎹�
+		Long count = commonOrderCountService.countOrderBySourceTypeAndDay(Constant.SOURCE_TYPE_JD, preDay);
+
+		Long total = jdOrderService.countOrderByDay(preDay);
+
+		// 璁$畻姣斾緥
+		BigDecimal rate = new BigDecimal(0);
+		if (total != null && total > 0 && count != null && count > 0) {
+			rate = MoneyBigDecimalUtil.div(BigDecimal.valueOf(count), BigDecimal.valueOf(total));
+			rate = MoneyBigDecimalUtil.mul(rate, BigDecimal.valueOf(100));
+		}
+
+		DailyCountOrder obj = new DailyCountOrder();
+		obj.setRate(true);
+		obj.setTotalDay(BigDecimal.valueOf(total));
+		obj.setTotalValid(BigDecimal.valueOf(count));
+		obj.setTotal(rate);
+		obj.setType(typeEnum);
+		obj.setUpdateDate(new Date());
+		obj.setDay(TimeUtil.parse(preDay));
+		obj.setId(StringUtil.Md5(preDay + typeEnum.name()));
+		dailyCountOrderDao.save(obj);
+	}
+
+	/**
+	 * 鎷煎澶氳鍗曡窡韪巼
+	 * 
+	 * @param preDay
+	 * @param typeEnum
+	 * @throws Exception
+	 */
+	private void addPDDOrderTrackRate(String preDay, DailyCountOrderEnum typeEnum) throws Exception {
+		// 缁熻璺熻釜鍒版暟鎹�
+		Long count = commonOrderCountService.countOrderBySourceTypeAndDay(Constant.SOURCE_TYPE_PDD, preDay);
+
+		Long total = pddOrderService.countOrderByDay(preDay);
+		// 璁$畻姣斾緥
+		BigDecimal rate = new BigDecimal(0);
+		if (total != null && total > 0 && count != null && count > 0) {
+			rate = MoneyBigDecimalUtil.div(BigDecimal.valueOf(count), BigDecimal.valueOf(total));
+			rate = MoneyBigDecimalUtil.mul(rate, BigDecimal.valueOf(100));
+		}
+
+		DailyCountOrder obj = new DailyCountOrder();
+		obj.setRate(true);
+		obj.setTotalDay(BigDecimal.valueOf(total));
+		obj.setTotalValid(BigDecimal.valueOf(count));
+		obj.setTotal(rate);
+		obj.setType(typeEnum);
+		obj.setUpdateDate(new Date());
+		obj.setDay(TimeUtil.parse(preDay));
+		obj.setId(StringUtil.Md5(preDay + typeEnum.name()));
+		dailyCountOrderDao.save(obj);
+	}
+
+	/**
+	 * 缁熻鐢宠瘔璁㈠崟鏈鐞嗘暟閲�
+	 * 
+	 * @param preDay
+	 * @param typeEnum
+	 * @throws Exception
+	 */
+	private void addLastOrderUntreatedNum(String preDay, DailyCountOrderEnum typeEnum) throws Exception {
+		Integer num = lostOrderService.countLostOrderNum(preDay, LostOrder.RESULT_CODE_VERFING);
+		if (num == null)
+			num = 0;
+
+		DailyCountOrder obj = new DailyCountOrder();
+		obj.setTotal(BigDecimal.valueOf(num));
+		obj.setType(typeEnum);
+		obj.setUpdateDate(new Date());
+		obj.setDay(TimeUtil.parse(preDay));
+		obj.setId(StringUtil.Md5(preDay + typeEnum.name()));
+		dailyCountOrderDao.save(obj);
+	}
+
+	/**
+	 * 缁熻鐢宠瘔璁㈠崟 澶勭悊澶辫触
+	 * 
+	 * @param preDay
+	 * @param typeEnum
+	 * @throws Exception
+	 */
+	private void addLastOrderFailNum(String preDay, DailyCountOrderEnum typeEnum) throws Exception {
+		Integer num = lostOrderService.countLostOrderNum(preDay, LostOrder.RESULT_CODE_FAIL);
+		if (num == null)
+			num = 0;
+
+		DailyCountOrder obj = new DailyCountOrder();
+		obj.setTotal(BigDecimal.valueOf(num));
+		obj.setType(typeEnum);
+		obj.setUpdateDate(new Date());
+		obj.setDay(TimeUtil.parse(preDay));
+		obj.setId(StringUtil.Md5(preDay + typeEnum.name()));
+		dailyCountOrderDao.save(obj);
+	}
+
+	/**
+	 * 缁熻鐢宠瘔璁㈠崟 澶勭悊鎴愬姛
+	 * 
+	 * @param preDay
+	 * @param typeEnum
+	 * @throws Exception
+	 */
+	private void addLastOrderSucceedNum(String preDay, DailyCountOrderEnum typeEnum) throws Exception {
+		Integer num = lostOrderService.countLostOrderNum(preDay, LostOrder.RESULT_CODE_SUCCESS);
+		if (num == null)
+			num = 0;
+
+		DailyCountOrder obj = new DailyCountOrder();
+		obj.setTotal(BigDecimal.valueOf(num));
+		obj.setType(typeEnum);
+		obj.setUpdateDate(new Date());
+		obj.setDay(TimeUtil.parse(preDay));
+		obj.setId(StringUtil.Md5(preDay + typeEnum.name()));
+		dailyCountOrderDao.save(obj);
+	}
+
+	/**
+	 * 璁㈠崟鎵惧洖鎴愬姛缁熻閲戦
+	 * 
+	 * @param preDay
+	 * @throws Exception
+	 */
+	private void addLastOrderSucceedMoney(String preDay, DailyCountOrderEnum typeEnum) throws Exception {
+		BigDecimal money = lostOrderService.countAppealMoney(preDay);
+		if (money == null)
+			money = new BigDecimal("0");
+
+		DailyCountOrder obj = new DailyCountOrder();
+		obj.setTotal(money);
+		obj.setType(typeEnum);
+		obj.setUpdateDate(new Date());
+		obj.setDay(TimeUtil.parse(preDay));
+		obj.setId(StringUtil.Md5(preDay + typeEnum.name()));
+		dailyCountOrderDao.save(obj);
+	}
+}

--
Gitblit v1.8.0