package com.yeshi.fanli.service.impl.count; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.Resource; import org.springframework.stereotype.Service; import org.yeshi.utils.DateUtil; import com.yeshi.fanli.dao.mybatis.order.CommonOrderCountMapper; import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoOrderMapper; import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoWeiQuanOrderMapper; import com.yeshi.fanli.service.inter.order.CommonOrderCountService; @Service public class CommonOrderCountServiceImpl implements CommonOrderCountService { @Resource private TaoBaoWeiQuanOrderMapper taoBaoWeiQuanOrderMapper; @Resource private TaoBaoOrderMapper taoBaoOrderMapper; @Resource private CommonOrderCountMapper commonOrderCountMapper; @Override public Long countByState(Integer state) { return commonOrderCountMapper.countByState(state); } public List> dayFactory(String startTime, String endTime, List> list) throws Exception { List> listObject = new ArrayList>(); if (startTime.equals(endTime)) { Map map = list.get(0); Object total = map.get("showValue"); if (total == null) { map.put("showValue", 0); } listObject.add(map); return listObject; } String plusDay = ""; for (int i = 0; i < 1000; i++) { if (i == 0) { plusDay = startTime; } else { plusDay = DateUtil.plusDay(i, startTime); } Map mapObject = new HashMap(); Object total = null; for (int j = 0; j < list.size(); j++) { Map map = list.get(j); Object createDate = map.get("showDate"); String month = createDate.toString(); if (plusDay.equalsIgnoreCase(month)) { total = map.get("showValue"); break; } } if (total == null) { total = 0; } mapObject.put("showValue", total); mapObject.put("showDate", plusDay); listObject.add(mapObject); if (plusDay.equals(endTime)) { break; // 时间结束 } } return listObject; } public List> monthFactory(List> list) { List> listObject = new ArrayList>(); // 12 个月处理 for (int i = 1; i <= 12; i++) { Map mapObject = new HashMap(); Object total = null; for (int j = 0; j < list.size(); j++) { Map map = list.get(j); Object createDate = map.get("showDate"); String month = createDate.toString(); if ((i + "").equalsIgnoreCase(month) || i == Integer.parseInt(month)) { total = map.get("showValue"); break; } } if (total == null) { total = 0; } mapObject.put("showValue", total); if (i <10) { mapObject.put("showDate", "0"+ i); } else { mapObject.put("showDate", i); } listObject.add(mapObject); } return listObject; } public List> yearFactory(List> list) { List> listObject = new ArrayList>(); for (int i = 0; i < list.size(); i++) { Map map = list.get(i); Object total = map.get("showValue"); if (total == null) { total = 0; } map.put("showValue", total); listObject.add(map); } return listObject; } @Override public List> getTrackAccuracyRate(Integer dateType, String year, String startTime, String endTime) throws Exception{ List> result_list = null; // 用户订单 List> listTotal = commonOrderCountMapper.countOrderNumber(dateType, year, startTime, endTime); if (listTotal == null || listTotal.size() == 0) { return result_list; } // 淘宝联盟 List> type_list = taoBaoOrderMapper.countOrderNumber(dateType, year, startTime, endTime); if (type_list == null || type_list.size() == 0) { return null; } switch (dateType){ case 1: // 按天处理 result_list = dayFactory(startTime, endTime, type_list); break; case 2: // 按月处理 result_list = monthFactory(type_list); break; case 3: result_list = yearFactory(type_list); break; default: break; } DecimalFormat df = new DecimalFormat("#.00"); for (int i = 0; i < result_list.size(); i++) { double proportion = 0; Map resultMap = result_list.get(i); Object showDate = resultMap.get("showDate"); for (int j = 0; j < listTotal.size(); j++) { Map innerMap = listTotal.get(j); Object innerDate = innerMap.get("showDate"); if (innerDate != null && innerDate.toString().equals(showDate.toString())) { Object innerValue = innerMap.get("showValue"); long innerData = Long.parseLong(innerValue.toString()); Object showValue = resultMap.get("showValue"); long showData = Long.parseLong(showValue.toString()); if (showData > 0) { proportion = innerData/(double)showData; } break; // 结束内部循环 } } resultMap.put("showValue", Double.parseDouble(df.format(proportion *100))); } return result_list; } @Override public List> countWeiQaunOrderMoney(Integer dateType, String year, String startTime, String endTime) throws Exception{ return taoBaoWeiQuanOrderMapper.countWeiQaunOrderMoney(dateType, year, startTime, endTime); } @Override public List> countWeiQaunOrderNumber(Integer dateType, String year, String startTime, String endTime) throws Exception{ return taoBaoWeiQuanOrderMapper.countWeiQaunOrderNumber(dateType, year, startTime, endTime); } @Override public Map countOrderNumberBySettleTime(Long uid, Integer state, Integer day) { return commonOrderCountMapper.countOrderNumberBySettleTime(uid, state, day); } /** * 根据结算时间筛选 上个月已结算的订订单数量 * @param uid * @return */ @Override public Map lastMonthSettleOrderNumber(Long uid) { return countOrderNumberBySettleTime(uid, 2, 4); // 根据 } }