package com.yeshi.fanli.service.impl.order;
|
|
import java.io.Serializable;
|
import java.math.BigDecimal;
|
import java.util.HashMap;
|
import java.util.Iterator;
|
import java.util.List;
|
import java.util.Map;
|
|
import javax.annotation.Resource;
|
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Propagation;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import com.yeshi.fanli.dao.mybatis.HongBaoManageMapper;
|
import com.yeshi.fanli.dao.mybatis.ThreeSaleGiftMapper;
|
import com.yeshi.fanli.dao.mybatis.ThreeSaleMapper;
|
import com.yeshi.fanli.dao.mybatis.order.OrderItemMapper;
|
import com.yeshi.fanli.dao.mybatis.order.OrderMapper;
|
import com.yeshi.fanli.dao.order.OrderItemDao;
|
import com.yeshi.fanli.entity.bus.user.HongBao;
|
import com.yeshi.fanli.entity.bus.user.Order;
|
import com.yeshi.fanli.entity.bus.user.OrderItem;
|
import com.yeshi.fanli.entity.bus.user.ThreeSaleGift;
|
import com.yeshi.fanli.entity.bus.user.UserInfo;
|
import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
|
import com.yeshi.fanli.exception.OrderItemException;
|
import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService;
|
import com.yeshi.fanli.service.inter.hongbao.HongBaoService;
|
import com.yeshi.fanli.service.inter.hongbao.ThreeSaleGiftService;
|
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.user.AccountDetailsService;
|
import com.yeshi.fanli.service.inter.user.AccountMessageService;
|
import com.yeshi.fanli.service.inter.user.MoneyRecordService;
|
import com.yeshi.fanli.service.inter.user.UserInfoService;
|
import com.yeshi.fanli.util.Constant;
|
import com.yeshi.fanli.util.RedisManager;
|
import com.yeshi.fanli.util.factory.ThreeSaleGiftFactory;
|
import com.yeshi.fanli.util.taobao.TaoBaoOrderUtil;
|
|
@Service
|
public class OrderItemServcieImpl implements OrderItemServcie {
|
|
@Resource
|
private OrderItemDao dao;
|
|
@Resource
|
private ThreeSaleSerivce threeSaleSerivce;
|
|
@Resource
|
private HongBaoManageService hongBaoManageService;
|
|
@Resource
|
private ThreeSaleGiftService threeSaleGiftService;
|
|
@Resource
|
private HongBaoService hongBaoService;
|
|
@Resource
|
private UserInfoService userInfoService;
|
|
@Resource
|
private AccountDetailsService accountDetailsService;
|
|
@Resource
|
private AccountMessageService accountMessageService;
|
|
@Resource
|
private OrderService orderService;
|
|
@Resource
|
private OrderItemServcie orderItemServcie;
|
|
@Resource
|
private MoneyRecordService moneyRecordService;
|
|
@Resource
|
private OrderItemMapper orderItemMapper;
|
|
@Resource
|
private OrderMapper orderMapper;
|
|
@Resource
|
private HongBaoManageMapper hongBaoManageMapper;
|
|
@Resource
|
private ThreeSaleMapper threeSaleMapper;
|
|
@Resource
|
private ThreeSaleGiftMapper threeSaleGiftMapper;
|
|
@Resource
|
private RedisManager redisManager;
|
|
@Transactional(propagation = Propagation.REQUIRES_NEW)
|
public void saveOrUpdate(List<OrderItem> list) {
|
Map<String, Integer> countMap = new HashMap<String, Integer>();
|
Map<String, List<OrderItem>> orderItemListMap = new HashMap<String, List<OrderItem>>();
|
Map<String, String> convertMap = hongBaoManageService.convertMap();
|
|
if (list != null)
|
list.stream().forEach(orderItem -> {
|
// 统计主订单下面有多少个子订单
|
orderItem.setFanTime(0L);
|
orderItem.setIsGift(false);
|
String orderId = orderItem.getOrderId();
|
Integer count = countMap.get(orderId);
|
if (count == null) {
|
int sum = getCountByOrderId(orderId);
|
count = sum;
|
countMap.put(orderId, sum);
|
}
|
// 新产生的订单
|
if (count == 0) {
|
UserInfo boss = threeSaleSerivce.getBoss(orderItem.getUserInfo().getId());
|
if (boss != null) {
|
orderItem.setIsGift(true);
|
}
|
// 保存子订单
|
dao.save(orderItem);
|
if (boss != null) {
|
if (boss.getRank() != 0) {
|
// 一级分销返利
|
BigDecimal rate = new BigDecimal(convertMap.get("sale_6_" + boss.getRank()))
|
.divide(BigDecimal.valueOf(100));
|
ThreeSaleGift threeSaleGift1 = ThreeSaleGiftFactory.create(orderItem, boss, rate);
|
threeSaleGiftService.save(threeSaleGift1);
|
UserInfo boss2 = threeSaleSerivce.getBoss(boss.getId());
|
if (boss2 != null) {
|
// 二级分销返利
|
if (boss2.getRank() != 0) {
|
BigDecimal rate2 = new BigDecimal(convertMap.get("sale_7_" + boss2.getRank()))
|
.divide(BigDecimal.valueOf(100));
|
ThreeSaleGift threeSaleGift2 = ThreeSaleGiftFactory.create(orderItem, boss2, rate2);
|
threeSaleGiftService.save(threeSaleGift2);
|
}
|
}
|
}
|
}
|
} else if (count > 0) { // 原来就在数据库中的订单
|
List<OrderItem> findOrderItemList = orderItemListMap.get(orderId);
|
if (findOrderItemList == null) {
|
findOrderItemList = findOrderItem(orderId);
|
orderItemListMap.put(orderId, findOrderItemList);
|
}
|
Iterator<OrderItem> iterator = findOrderItemList.iterator();
|
while (iterator.hasNext()) {
|
// 已经保存在数据库中的数据
|
OrderItem oldItemOrder = iterator.next();
|
// 不处理退款状态
|
if (oldItemOrder.getState() == OrderItem.STATE_TUIKUAN) {
|
continue;
|
}
|
if (oldItemOrder.getAuctionId().equals(orderItem.getAuctionId())
|
&& (oldItemOrder.getPayMoney().compareTo(orderItem.getPayMoney()) == 0
|
|| orderItem.getState().intValue() == OrderItem.STATE_TUIKUAN)) {
|
oldItemOrder.setFanMoney(orderItem.getFanMoney());
|
// 处理退款状态
|
System.out.println("订单号:" + oldItemOrder.getOrderId());
|
if (oldItemOrder.getState() != OrderItem.STATE_TUIKUAN
|
&& orderItem.getState() == OrderItem.STATE_TUIKUAN) {
|
oldItemOrder.setRefundTime(System.currentTimeMillis());
|
oldItemOrder.setState(OrderItem.STATE_TUIKUAN);
|
} else if (orderItem.getState() == OrderItem.STATE_JIESUAN
|
&& oldItemOrder.getState() == OrderItem.STATE_YIZHIFU) {
|
// 处理正常状态
|
oldItemOrder.setSettlementTime(orderItem.getSettlementTime());
|
oldItemOrder.setState(orderItem.getState());
|
}
|
dao.update(oldItemOrder);
|
// 更新分销状态
|
if (oldItemOrder.getIsGift()) {
|
threeSaleGiftService.update(oldItemOrder);
|
}
|
iterator.remove();
|
// 测试,暂时删除
|
break;
|
}
|
}
|
}
|
});
|
|
}
|
|
private List<OrderItem> findOrderItem(String orderId) {
|
return dao.list("from OrderItem oi where oi.orderId = ? ", new Serializable[] { orderId });
|
}
|
|
private int getCountByOrderId(String orderId) {
|
return (int) dao.getCount("select count(*) from OrderItem oi where oi.orderId = ?",
|
new Serializable[] { orderId });
|
}
|
|
@Override
|
public List<OrderItem> findOrderItemList(long uid, int page) {
|
return dao.list("from OrderItem o where o.userInfo.id = ? order by createTime desc",
|
(page - 1) * Constant.PAGE_SIZE, Constant.PAGE_SIZE, new Serializable[] { uid });
|
}
|
|
@Override
|
public int getCount(long uid) {
|
return (int) dao.getCount("select count(*) from OrderItem o where o.userInfo.id = ?",
|
new Serializable[] { uid });
|
}
|
|
@Override
|
public OrderItem getOne(long id) {
|
|
return dao.find(OrderItem.class, id);
|
|
}
|
|
@Override
|
public List<OrderItem> findSettlement(long currentTimeMillis) {
|
String day = hongBaoManageService.get("orderItem_unlock_time");
|
long unlockTime = 1296000000;
|
if (day != null) {
|
unlockTime = Integer.parseInt(day) * 86400000;
|
}
|
|
List<OrderItem> list = dao.list(
|
"from OrderItem oi where oi.state=2 and oi.settlementTime+? <= ? and oi.version=2",
|
new Serializable[] { unlockTime, currentTimeMillis });
|
return list;
|
}
|
|
@Override
|
public OrderItem conver(HongBao hb) {
|
|
Order order = hb.getOrder();
|
if (order == null) {
|
return null;
|
}
|
int state = hb.getState();
|
int orderItemState = getOrderItemState(state);
|
BigDecimal payMoney = hb.getPayMoney();
|
BigDecimal flmoney = hb.getMoney();
|
String hql = "from OrderItem oi where oi.order.id = ? and oi.payMoney = ? and oi.fanMoney = ? ";
|
if (orderItemState == 0) {
|
hql += "and (oi.state = 1 or oi.state=2)";
|
} else {
|
hql += "and oi.state=" + orderItemState;
|
}
|
List<OrderItem> list = dao.list(hql, 0, 1, new Serializable[] { order.getId(), payMoney, flmoney });
|
if (list.size() == 0) {
|
return null;
|
}
|
return list.get(0);
|
}
|
|
private int getOrderItemState(int hbState) {
|
int state = 0;
|
if (hbState == Constant.HB_GET) {
|
state = 2;
|
} else if (hbState == Constant.HB_GOT) {
|
state = 3;
|
} else if (hbState == Constant.HB_DISABLE) {
|
state = -1;
|
}
|
return state;
|
}
|
|
@Override
|
public void update(OrderItem orderItem) {
|
dao.update(orderItem);
|
}
|
|
@Override
|
public void synOldOrder(List<TaoBaoOrder> tborderList) {
|
BigDecimal rate = hongBaoManageService.getFanLiRate();
|
Map<String, Order> map = new HashMap<String, Order>();
|
tborderList.stream().forEach((tbo) -> {
|
Order order = map.get(tbo.getOrderId());
|
if (order == null) {
|
order = orderService.findOrderByOrderIdAndTypeAndVersion(tbo.getOrderId(), 1, 1);
|
map.put(tbo.getOrderId(), order);
|
}
|
if (order != null && order.getOrderItemList().size() == 0) {
|
List<HongBao> hongBaoList = hongBaoService.findHongBaoByOrderList(order.getId());
|
if (hongBaoList.size() == 0) {
|
return;
|
}
|
HongBao hongBao = hongBaoList.get(0);
|
|
OrderItem orderItem = TaoBaoOrderUtil.convert(tbo, order, rate,
|
redisManager.getTBImg(tbo.getAuctionId()));
|
|
if (orderItem != null) {
|
if (order.getState() != -1 && hongBao.getState() == Constant.HB_GOT) {
|
orderItem.setState(3);
|
}
|
dao.save(orderItem);
|
}
|
}
|
});
|
}
|
|
@Override
|
public List<OrderItem> findByOrderId(long orderId) {
|
return orderItemMapper.selectOrderItemByOrder(orderId);
|
}
|
|
@Transactional
|
@Override
|
public void processOrderItem(String orderId, List<TaoBaoOrder> orderList) {
|
List<OrderItem> orderItemList = orderItemMapper.findOrderByOrderIdAndTypeAndVersion(orderId, 1, 2);
|
BigDecimal rate = hongBaoManageService.getFanLiRate();
|
Order order = orderMapper.selectOrderByOrderId(orderId);
|
// 尚未插入子订单
|
if (orderItemList == null || orderItemList.size() == 0) {
|
for (TaoBaoOrder taoBaoOrder : orderList) {
|
|
OrderItem orderItem = TaoBaoOrderUtil.convert(taoBaoOrder, order, rate,
|
redisManager.getTBImg(taoBaoOrder.getAuctionId()));
|
|
orderItem.setFanTime(0L);
|
orderItem.setIsGift(false);
|
UserInfo boss = threeSaleMapper.selectBoss(order.getUserInfo().getId());
|
if (boss != null)
|
orderItem.setIsGift(true);
|
// 存入数据库
|
orderItemMapper.insertSelective(orderItem);
|
|
if (boss != null) {
|
if (boss.getRank() != 0) {
|
// 一级分销返利
|
BigDecimal childRate = new BigDecimal(
|
hongBaoManageMapper.selectByKey("sale_6_" + boss.getRank()).getValue())
|
.divide(BigDecimal.valueOf(100));
|
ThreeSaleGift threeSaleGift1 = ThreeSaleGiftFactory.create(orderItem, boss, childRate);
|
threeSaleGiftMapper.insertSelective(threeSaleGift1);
|
UserInfo boss2 = threeSaleMapper.selectBoss(boss.getId());
|
if (boss2 != null) {
|
// 二级分销返利
|
if (boss2.getRank() != 0) {
|
BigDecimal rate2 = new BigDecimal(
|
hongBaoManageMapper.selectByKey("sale_7_" + boss.getRank()).getValue())
|
.divide(BigDecimal.valueOf(100));
|
ThreeSaleGift threeSaleGift2 = ThreeSaleGiftFactory.create(orderItem, boss2, rate2);
|
threeSaleGiftMapper.insertSelective(threeSaleGift2);
|
}
|
}
|
}
|
}
|
|
}
|
} else {// 已经插入子订单
|
// 数量不对等
|
if (orderItemList.size() != orderList.size()) {
|
return;
|
}
|
|
for (int i = 0; i < orderItemList.size(); i++) {
|
// 订单信息与子订单信息不对等
|
if (orderItemList.get(i).getAuctionId().longValue() != orderList.get(i).getAuctionId()
|
|| orderItemList.get(i).getPayMoney().compareTo(orderList.get(i).getPayment()) != 0)
|
return;
|
}
|
|
// 排序
|
|
for (int i = 0; i < orderList.size(); i++) {
|
|
OrderItem newOrderItem = TaoBaoOrderUtil.convert(orderList.get(i), order, rate,
|
redisManager.getTBImg(orderList.get(i).getAuctionId()));
|
|
OrderItem oldOrderItem = orderItemList.get(i);
|
if (oldOrderItem.getState() == OrderItem.STATE_TUIKUAN) {
|
continue;
|
}
|
|
if (newOrderItem.getState() == OrderItem.STATE_TUIKUAN) {
|
OrderItem updateOrderItem = new OrderItem();
|
updateOrderItem.setId(oldOrderItem.getId());
|
updateOrderItem.setRefundTime(System.currentTimeMillis());
|
updateOrderItem.setState(OrderItem.STATE_TUIKUAN);
|
updateOrderItem.setPrePayMoney(
|
orderList.get(i).getPrice().multiply(new BigDecimal(orderList.get(i).getCount())));
|
orderItemMapper.updateByPrimaryKeySelective(updateOrderItem);
|
} else if (newOrderItem.getState() == OrderItem.STATE_JIESUAN
|
&& oldOrderItem.getState() == OrderItem.STATE_YIZHIFU) {
|
OrderItem updateOrderItem = new OrderItem();
|
// 处理正常状态
|
updateOrderItem.setId(oldOrderItem.getId());
|
updateOrderItem.setSettlementTime(newOrderItem.getSettlementTime());
|
updateOrderItem.setState(newOrderItem.getState());
|
updateOrderItem.setPrePayMoney(
|
orderList.get(i).getPrice().multiply(new BigDecimal(orderList.get(i).getCount())));
|
orderItemMapper.updateByPrimaryKeySelective(updateOrderItem);
|
}
|
|
// 更新分销状态
|
if (oldOrderItem.getIsGift()) {
|
oldOrderItem.setFanMoney(newOrderItem.getFanMoney());
|
oldOrderItem.setState(newOrderItem.getState());
|
threeSaleGiftService.updateByOrderItem(oldOrderItem);
|
}
|
}
|
|
}
|
}
|
|
@Transactional
|
@Override
|
public OrderItem addOrderItem(TaoBaoOrder taoBaoOrder, Order order, BigDecimal rate) throws OrderItemException {
|
|
OrderItem orderItem = TaoBaoOrderUtil.convert(taoBaoOrder, order, rate,
|
redisManager.getTBImg(taoBaoOrder.getAuctionId()));
|
|
orderItem.setFanTime(0L);
|
orderItem.setIsGift(false);
|
UserInfo boss = threeSaleMapper.selectBoss(order.getUserInfo().getId());
|
if (boss != null)
|
orderItem.setIsGift(true);
|
// 存入数据库
|
orderItemMapper.insertSelective(orderItem);
|
|
if (boss != null) {
|
if (boss.getRank() != 0) {
|
// 一级分销返利
|
BigDecimal childRate = new BigDecimal(
|
hongBaoManageMapper.selectByKey("sale_6_" + boss.getRank()).getValue())
|
.divide(BigDecimal.valueOf(100));
|
ThreeSaleGift threeSaleGift1 = ThreeSaleGiftFactory.create(orderItem, boss, childRate);
|
threeSaleGiftMapper.insertSelective(threeSaleGift1);
|
UserInfo boss2 = threeSaleMapper.selectBoss(boss.getId());
|
if (boss2 != null) {
|
// 二级分销返利
|
if (boss2.getRank() != 0) {
|
BigDecimal rate2 = new BigDecimal(
|
hongBaoManageMapper.selectByKey("sale_7_" + boss.getRank()).getValue())
|
.divide(BigDecimal.valueOf(100));
|
ThreeSaleGift threeSaleGift2 = ThreeSaleGiftFactory.create(orderItem, boss2, rate2);
|
threeSaleGiftMapper.insertSelective(threeSaleGift2);
|
}
|
}
|
}
|
}
|
|
return orderItem;
|
}
|
|
@Transactional
|
@Override
|
public void updateOrderItem(TaoBaoOrder taoBaoOrder, Long orderItemId, BigDecimal rate) throws OrderItemException {
|
OrderItem oldOrderItem = orderItemMapper.selectByPrimaryKey(orderItemId);
|
Order order = orderMapper.selectOrderByOrderId(oldOrderItem.getOrderId());
|
OrderItem newOrderItem = TaoBaoOrderUtil.convert(taoBaoOrder, order, rate,
|
redisManager.getTBImg(taoBaoOrder.getAuctionId()));
|
|
// 测试的时候注释掉
|
if (oldOrderItem.getState() == OrderItem.STATE_TUIKUAN) {
|
return;
|
}
|
|
if (newOrderItem.getState() == OrderItem.STATE_TUIKUAN) {
|
OrderItem updateOrderItem = new OrderItem();
|
updateOrderItem.setId(oldOrderItem.getId());
|
updateOrderItem.setRefundTime(System.currentTimeMillis());
|
updateOrderItem.setState(OrderItem.STATE_TUIKUAN);
|
updateOrderItem.setPrePayMoney(taoBaoOrder.getPrice().multiply(new BigDecimal(taoBaoOrder.getCount())));
|
orderItemMapper.updateByPrimaryKeySelective(updateOrderItem);
|
} else if (newOrderItem.getState() == OrderItem.STATE_JIESUAN
|
&& oldOrderItem.getState() == OrderItem.STATE_YIZHIFU) {
|
OrderItem updateOrderItem = new OrderItem();
|
// 处理正常状态
|
updateOrderItem.setId(oldOrderItem.getId());
|
updateOrderItem.setSettlementTime(newOrderItem.getSettlementTime());
|
updateOrderItem.setState(newOrderItem.getState());
|
updateOrderItem.setPrePayMoney(taoBaoOrder.getPrice().multiply(new BigDecimal(taoBaoOrder.getCount())));
|
updateOrderItem.setPayMoney(newOrderItem.getPayMoney());
|
updateOrderItem.setFanMoney(newOrderItem.getFanMoney());
|
orderItemMapper.updateByPrimaryKeySelective(updateOrderItem);
|
}
|
|
// else if (newOrderItem.getState() == OrderItem.STATE_JIESUAN) {
|
// OrderItem updateOrderItem = new OrderItem();
|
// // 处理正常状态
|
// updateOrderItem.setId(oldOrderItem.getId());
|
// // updateOrderItem.setSettlementTime(newOrderItem.getSettlementTime());
|
// // updateOrderItem.setState(newOrderItem.getState());
|
// updateOrderItem.setPrePayMoney(taoBaoOrder.getPrice().multiply(new BigDecimal(taoBaoOrder.getCount())));
|
// updateOrderItem.setPayMoney(newOrderItem.getPayMoney());
|
// updateOrderItem.setFanMoney(newOrderItem.getFanMoney());
|
// orderItemMapper.updateByPrimaryKeySelective(updateOrderItem);
|
// }
|
|
// 更新分销状态
|
if (oldOrderItem.getIsGift()) {
|
oldOrderItem.setFanMoney(newOrderItem.getFanMoney());
|
oldOrderItem.setState(newOrderItem.getState());
|
threeSaleGiftService.updateByOrderItem(oldOrderItem);
|
}
|
}
|
|
@Override
|
public void updateSelective(OrderItem orderItem) {
|
orderItemMapper.updateByPrimaryKeySelective(orderItem);
|
|
}
|
|
@Override
|
public List<OrderItem> getOrderItemByOrderId(String orderId) {
|
return orderItemMapper.getOrderItemByOrderId(orderId);
|
|
}
|
|
@Override
|
public OrderItem selectByPrimaryKey(Long id) {
|
return orderItemMapper.selectByPrimaryKey(id);
|
|
}
|
|
}
|