package com.hehenian.biz.service.bid.color.impl;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.hehenian.biz.common.account.dataobject.AccountUserDo;
import com.hehenian.biz.common.activity.dataobject.ActivityConfig;
import com.hehenian.biz.common.activity.dataobject.ActivityOrderDo;
import com.hehenian.biz.common.activity.dataobject.ActivityTradeDo;
import com.hehenian.biz.common.bid.IAutoBidAmountService;
import com.hehenian.biz.common.util.CalculateUtils;
import com.hehenian.biz.common.util.DateUtil;
import com.hehenian.biz.common.util.StringUtil;
import com.hehenian.biz.component.account.IUserComponent;
import com.hehenian.biz.component.activity.IActivityOrderComponent;
import com.hehenian.biz.component.activity.IActivityTradeComponent;
@Service("colorlifeBidAmountService")
public class ColorlifeBidAmountServiceImpl implements IAutoBidAmountService {
@Autowired
private IActivityTradeComponent activityTradeComponent;
@Autowired
private IUserComponent userComponent;
@Autowired
private IActivityOrderComponent activityOrderComponent;
@Autowired
private ActivityConfig activityConfig;
@Override
public double getAutoBidAmount(long userId, Date bidDate) {
Map<String, Object> parameterMap = new HashMap<String, Object>();
parameterMap.put("fromUserId", userId);
// 取用户
AccountUserDo accountUser = userComponent.getById(userId);
if (null == accountUser) {
return 0d;
}
// 查询用户是否有订单, 有订单用户表示参加活动
List<ActivityOrderDo> orderList = activityOrderComponent
.getByUserId(userId);
if (null == orderList || orderList.isEmpty()) {
return accountUser.getUsableSum();// 未参加活动给可用金额
}
// 取最小未扣款记录
List<ActivityTradeDo> unDeductTradeDoList = activityTradeComponent
.selectLastUnDeductActivityTrade(parameterMap);
if (null == unDeductTradeDoList || unDeductTradeDoList.size() < 1) { // 未生成扣款记录返回用户可用余额
return accountUser.getUsableSum();
}
// 冻结日期
double freezeDays = StringUtil.strToInt(activityConfig.getFreezeDays());
double freezeAmount = 0;
for (ActivityTradeDo unDeductTradeDo : unDeductTradeDoList) {
Date endDate = unDeductTradeDo.getTradeTime();
// 扣款日7天内扣留扣款金额
long diffDay = DateUtil.diffDays(bidDate, endDate);
if (diffDay < freezeDays) {
freezeAmount = CalculateUtils.add(freezeAmount, unDeductTradeDo.getAmount());
}
}
return CalculateUtils.sub(accountUser.getUsableSum(), freezeAmount);
}
}