yujian
2019-01-22 88b54772dbcf5ecab1e2316e4e4626ac901b8908
fanli/src/main/java/com/yeshi/fanli/service/impl/hongbao/HongBaoServiceImpl.java
@@ -2,15 +2,18 @@
import java.io.Serializable;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.apache.ibatis.annotations.Param;
import net.sf.json.JSONObject;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
@@ -22,6 +25,7 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.yeshi.utils.DateUtil;
import com.yeshi.fanli.dao.hongbao.HongBaoDao;
import com.yeshi.fanli.dao.mybatis.AccountDetailsMapper;
@@ -33,6 +37,7 @@
import com.yeshi.fanli.dao.mybatis.ThreeSaleMapper;
import com.yeshi.fanli.dao.mybatis.UserInfoMapper;
import com.yeshi.fanli.dao.mybatis.hongbao.HongBaoMapper;
import com.yeshi.fanli.dao.mybatis.money.UserMoneyDetailMapper;
import com.yeshi.fanli.dao.mybatis.order.OrderItemMapper;
import com.yeshi.fanli.dao.mybatis.order.OrderMapper;
import com.yeshi.fanli.entity.admin.OrderAdmin;
@@ -47,8 +52,10 @@
import com.yeshi.fanli.entity.bus.user.ThreeSaleGift;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.common.Config;
import com.yeshi.fanli.entity.money.UserMoneyDetail;
import com.yeshi.fanli.entity.taobao.OrderVital;
import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
import com.yeshi.fanli.exception.money.UserMoneyDetailException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.config.SystemConfigService;
@@ -59,7 +66,6 @@
import com.yeshi.fanli.service.inter.hongbao.ThreeSaleSerivce;
import com.yeshi.fanli.service.inter.order.OrderItemServcie;
import com.yeshi.fanli.service.inter.order.OrderService;
import com.yeshi.fanli.service.inter.push.PushService;
import com.yeshi.fanli.service.inter.user.AccountDetailsService;
import com.yeshi.fanli.service.inter.user.AccountMessageService;
import com.yeshi.fanli.service.inter.user.MoneyRecordService;
@@ -75,11 +81,10 @@
import com.yeshi.fanli.util.factory.AccountDetailsFactory;
import com.yeshi.fanli.util.factory.AccountMessageFactory;
import com.yeshi.fanli.util.factory.HongBaoFactory;
import com.yeshi.fanli.util.factory.UserMoneyDetailFactory;
import com.yeshi.fanli.util.push.XiaoMiPushUtil;
import com.yeshi.fanli.util.taobao.TaoBaoOrderUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import net.sf.json.JSONObject;
@Service
public class HongBaoServiceImpl implements HongBaoService {
@@ -164,6 +169,9 @@
   @Resource
   private UserNotificationService userNotificationService;
   @Resource
   private UserMoneyDetailMapper userMoneyDetailMapper;
   private static final String NEW_USER_HONGBAO = "new_user_hongbao";
@@ -441,6 +449,18 @@
      AccountDetails ac = AccountDetailsFactory.create("+" + money, AccountDetailsFactory.XINREN, null, null, form);
      accountDetailsMapper.insertSelective(ac);
      // 新版资金明细
      try {
         UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createNewerHongBao(hongBao);
         userMoneyDetail.setId(ac.getId());
         userMoneyDetailMapper.insert(userMoneyDetail);
      } catch (UserMoneyDetailException e) {
         try {
            LogHelper.errorDetailInfo(e);
         } catch (Exception e1) {
            e1.printStackTrace();
         }
      }
      userInfoMapper.addHongBaoByUid(form.getId(), new BigDecimal(money));
      userNotificationService.newerHongBao(form.getId(), new BigDecimal(money));
@@ -870,8 +890,8 @@
   @Transactional
   public void updateHongBao(HongBao hongBao, TaoBaoOrder taoBaoOrder) {
      BigDecimal rate = new BigDecimal(hongBaoManageMapper.selectByKey("hongbao_goods_proportion").getValue())
            .divide(new BigDecimal(100));
      BigDecimal proportion = hongBaoManageService.getFanLiRate();
      BigDecimal rate = proportion.divide(new BigDecimal(100));
      // 更新红包项
      HongBao updateHongBao = new HongBao();
      updateHongBao.setId(hongBao.getId());
@@ -976,127 +996,6 @@
         System.out.println("订单:" + order);
   }
   @Transactional
   @Override
   public void addHongBao(Order order, TaoBaoOrder taoBaoOrder, Long orderItemId) {
      OrderItem orderItem = orderItemMapper.selectByPrimaryKey(orderItemId);
      // 订单返利比例
      BigDecimal baseRate = new BigDecimal(hongBaoManageMapper.selectByKey("hongbao_goods_proportion").getValue())
            .divide(new BigDecimal(100));
      // 创建红包
      JSONObject data = new JSONObject();
      HongBao hongBao = null;
      if (taoBaoOrder.getOrderState().equalsIgnoreCase("订单结算"))
         // 订单结算应该取结算金额与预估收入
         hongBao = HongBaoFactory.createHongBao(MoneyBigDecimalUtil.mul(baseRate, taoBaoOrder.geteIncome()),
               data.toString(), order.getId(), null, order.getUserInfo(), 1, taoBaoOrder.getSettlement(),
               taoBaoOrder.getAuctionId());
      else
         hongBao = HongBaoFactory.createHongBao(MoneyBigDecimalUtil.mul(baseRate, taoBaoOrder.getEstimate()),
               data.toString(), order.getId(), null, order.getUserInfo(), 1, taoBaoOrder.getPayment(),
               taoBaoOrder.getAuctionId());
      hongBao.setOrderId(taoBaoOrder.getOrderId());
      hongBao.setOrderItemId(orderItem.getId());
      hongBao.setPreGettime(0L);
      if (taoBaoOrder.getOrderState().equalsIgnoreCase("订单结算")
            && !StringUtil.isNullOrEmpty(taoBaoOrder.getSettlementTime()))
         hongBao.setBalanceTime(
               new Date(TimeUtil.convertToTimeTemp(taoBaoOrder.getSettlementTime(), "yyyy-MM-dd HH:mm:ss")));
      UserInfo boss = threeSaleMapper.selectBoss(order.getUserInfo().getId());
      if (boss != null) {
         hongBao.setHasChild(true);
      }
      hongBaoMapper.insertSelective(hongBao);
      // 通知用户订单被统计
      if (!taoBaoOrder.getOrderState().equalsIgnoreCase("订单失效")) {
         try {
            userNotificationService.orderFanliStatisticed(hongBao.getUserInfo().getId(), order.getOrderId());
         } catch (Exception e) {
         }
      }
      // 提成订单不处理失效订单
      if (taoBaoOrder.getOrderState().equalsIgnoreCase("订单失效"))
         return;
      if (boss != null) {
         // 计算上级返利金额
         HongBaoManage hbm = hongBaoManageMapper
               .selectByKey("sale_6_" + (boss.getRank() == null ? 0 : boss.getRank()));
         BigDecimal rate = null;
         if (hbm == null)
            rate = new BigDecimal(0);
         else
            rate = new BigDecimal(hbm.getValue()).divide(new BigDecimal(100));
         if (rate.compareTo(new BigDecimal(0)) > 0) {
            HongBao hongBao2 = null;
            if (taoBaoOrder.getOrderState().equalsIgnoreCase("订单结算")) {
               // 订单结算应该取结算金额与预估收入
               hongBao2 = HongBaoFactory.createHongBao(
                     MoneyBigDecimalUtil.mul(rate, MoneyBigDecimalUtil.mul(taoBaoOrder.geteIncome(), baseRate)),
                     null, hongBao, boss, Constant.ONESALE);
            } else {
               hongBao2 = HongBaoFactory.createHongBao(
                     MoneyBigDecimalUtil.mul(rate, MoneyBigDecimalUtil.mul(taoBaoOrder.getEstimate(), baseRate)),
                     null, hongBao, boss, Constant.ONESALE);
            }
            HongBaoFactory.createHongBao(
                  MoneyBigDecimalUtil.mul(rate, MoneyBigDecimalUtil.mul(taoBaoOrder.getEstimate(), baseRate)),
                  null, hongBao, boss, Constant.ONESALE);
            // 设置订单号
            hongBao2.setOrderId(taoBaoOrder.getOrderId());
            hongBaoMapper.insertSelective(hongBao2);
            try {
               // 通知提成订单被统计
               userNotificationService.tiChengStatisticed(hongBao2.getUserInfo().getId(), hongBao2.getOrderId(),
                     hongBao2.getMoney());
            } catch (Exception e) {
            }
         }
         UserInfo boss2 = threeSaleMapper.selectBoss(boss.getId());
         // 计算上上级返利
         if (boss2 != null) {
            hbm = hongBaoManageMapper.selectByKey("sale_7_" + (boss.getRank() == null ? 0 : boss.getRank()));
            if (hbm == null)
               rate = new BigDecimal(0);
            else
               rate = new BigDecimal(hbm.getValue()).divide(new BigDecimal(100));
            if (rate.compareTo(new BigDecimal(0)) > 0) {
               // 订单结算应该取结算金额与预估收入
               HongBao hongBao3 = null;
               if (taoBaoOrder.getOrderState().equalsIgnoreCase("订单结算"))
                  hongBao3 = HongBaoFactory.createHongBao(
                        MoneyBigDecimalUtil.mul(rate,
                              MoneyBigDecimalUtil.mul(taoBaoOrder.geteIncome(), baseRate)),
                        null, hongBao, boss2, Constant.TWOSALE);
               else
                  hongBao3 = HongBaoFactory.createHongBao(
                        MoneyBigDecimalUtil.mul(rate,
                              MoneyBigDecimalUtil.mul(taoBaoOrder.getEstimate(), baseRate)),
                        null, hongBao, boss2, Constant.TWOSALE);
               // 设置返利订单号
               hongBao3.setOrderId(taoBaoOrder.getOrderId());
               hongBaoMapper.insertSelective(hongBao3);
               try {
                  // 通知提成订单被统计
                  userNotificationService.tiChengStatisticed(hongBao3.getUserInfo().getId(),
                        hongBao3.getOrderId(), hongBao3.getMoney());
               } catch (Exception e) {
               }
            }
         }
      }
   }
   @Override
   public BigDecimal getTotalTiChengMoney(Long uid) {
@@ -1205,8 +1104,179 @@
   @Override
   public int getTotalTiChengCount(Long uid) {
      return hongBaoMapper.getTotalTiChengCount(uid);
   }
   @Override
   public List<Map<String, Object>> count24HOderByChannel(String channel, Integer type, String years,
         String startTime, String endTime) throws Exception{
      return hongBaoMapper.count24HOderByChannel(channel, type, years, startTime, endTime);
   }
   @Override
   public List<Map<String, Object>> countHistoryOderByChannel(String channel, Integer type, String years,
         String startTime, String endTime) throws Exception{
      return hongBaoMapper.countHistoryOderByChannel(channel, type, years,
            startTime, endTime);
   }
   public List<Object> dayFactory(String startTime, String endTime, List<Map<String, Object>> list) throws Exception {
      List<Object> listObject = new ArrayList<Object>();
      if (startTime.equals(endTime)) {
         Map<String, Object> map = list.get(0);
         Object payMoney = map.get("payMoney");
         Object countOrder = map.get("countOrder");
         Object commision = map.get("commision");
         if (payMoney == null) {
            map.put("payMoney", 0);
         }
         if (countOrder == null) {
            map.put("countOrder", 0);
         }
         if (commision == null) {
            map.put("commision", 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<String, Object> mapObject = new HashMap<String, Object>();
         Object payMoney = null;
         Object countOrder = null;
         Object commision = null;
         for (int j = 0; j < list.size(); j++) {
            Map<String, Object> map = list.get(j);
            Object createDate = map.get("showDate");
            String month = createDate.toString();
            if (plusDay.equalsIgnoreCase(month)) {
               payMoney = map.get("payMoney");
               countOrder = map.get("countOrder");
               commision = map.get("commision");
               break;
            }
         }
         if (payMoney == null) {
            payMoney = 0;
         }
         mapObject.put("payMoney", payMoney);
         if (countOrder == null) {
            countOrder = 0;
         }
         mapObject.put("countOrder", countOrder);
         if (commision == null) {
             commision = 0;
         }
         mapObject.put("commision", commision);
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
           SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd");
         Date parseDate = sdf.parse(plusDay.toString());
         mapObject.put("showDate", sdf2.format(parseDate));
         listObject.add(mapObject);
         if (plusDay.equals(endTime)) {
            break; // 时间结束
         }
      }
      return listObject;
   }
   public List<Object> monthFactory(List<Map<String, Object>> list) {
      List<Object> listObject = new ArrayList<Object>();
      // 12 个月处理
      for (int i = 1; i <= 12; i++) {
         Map<String, Object> mapObject = new HashMap<String, Object>();
         Object payMoney = null;
         Object countOrder = null;
         Object commision = null;
         for (int j = 0; j < list.size(); j++) {
            Map<String, Object> map = list.get(j);
            Object createDate = map.get("showDate");
            String month = createDate.toString();
            if ((i+"").equalsIgnoreCase(month) || i == Integer.parseInt(month)) {
               payMoney = map.get("payMoney");
               countOrder = map.get("countOrder");
               commision = map.get("commision");
               break;
            }
         }
         if (payMoney == null) {
            payMoney = 0;
         }
         mapObject.put("payMoney", payMoney);
         if (countOrder == null) {
            countOrder = 0;
         }
         mapObject.put("countOrder", countOrder);
         if (commision == null) {
             commision = 0;
         }
         mapObject.put("commision", commision);
         mapObject.put("showDate", i + "月");
         listObject.add(mapObject);
      }
      return listObject;
   }
   public List<Object> yearFactory(List<Map<String, Object>> list) {
      List<Object> listObject = new ArrayList<Object>();
      for (int i = 0; i < list.size(); i++) {
         Map<String, Object> map = list.get(i);
         Object payMoney =  map.get("payMoney");
         Object countOrder =  map.get("countOrder");
         Object commision = map.get("commision");
         if (payMoney == null) {
            payMoney = 0;
         }
         map.put("payMoney", payMoney);
         if (countOrder == null) {
            countOrder = 0;
         }
         map.put("countOrder", countOrder);
         if (commision == null) {
             commision = 0;
         }
         map.put("commision", commision);
         listObject.add(map);
      }
      return listObject;
   }
}