|  | @@ -1,18 +1,33 @@
 | 
	
		
			
				|  |  |  package com.ym.mec.biz.service.impl;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import com.alibaba.fastjson.JSON;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dao.GoodsDao;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dao.MusicGroupDao;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.dao.SellOrderDao;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.entity.*;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.enums.GoodsType;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.enums.SellTypeEnum;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.service.*;
 | 
	
		
			
				|  |  |  import com.ym.mec.common.dal.BaseDAO;
 | 
	
		
			
				|  |  |  import com.ym.mec.common.service.impl.BaseServiceImpl;
 | 
	
		
			
				|  |  |  import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  |  import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import java.math.BigDecimal;
 | 
	
		
			
				|  |  | +import java.util.*;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  @Service
 | 
	
		
			
				|  |  |  public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> implements SellOrderService {
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private SellOrderDao sellOrderDao;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private GoodsDao goodsDao;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private StudentPaymentOrderDao studentPaymentOrderDao;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private MusicGroupDao musicGroupDao;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public BaseDAO<Integer, SellOrder> getDAO() {
 | 
	
	
		
			
				|  | @@ -20,4 +35,88 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public List<SellOrder> addSellOrder(Long orderId, String musicGroupId, List<Integer> goodsIds, BigDecimal totalAmount, BigDecimal balance) {
 | 
	
		
			
				|  |  | +        if (goodsIds == null || goodsIds.size() <= 0) {
 | 
	
		
			
				|  |  | +            return null;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (balance == null) {
 | 
	
		
			
				|  |  | +            balance = BigDecimal.ZERO;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        StudentPaymentOrder order = studentPaymentOrderDao.get(orderId);
 | 
	
		
			
				|  |  | +        MusicGroup musicGroup = new MusicGroup();
 | 
	
		
			
				|  |  | +        if (musicGroupId != null) {
 | 
	
		
			
				|  |  | +            musicGroup = musicGroupDao.get(musicGroupId);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        int goodsNum = goodsIds.size();
 | 
	
		
			
				|  |  | +        BigDecimal goodsTotalPrice = BigDecimal.ZERO;
 | 
	
		
			
				|  |  | +        List<Goods> goodies = goodsDao.getGoodies(goodsIds);
 | 
	
		
			
				|  |  | +        int i = 1;
 | 
	
		
			
				|  |  | +        for (Integer goodsId : goodsIds) {
 | 
	
		
			
				|  |  | +            for (Goods goods : goodies) {
 | 
	
		
			
				|  |  | +                if (goods.getId().equals(goodsId)) {
 | 
	
		
			
				|  |  | +                    goodsTotalPrice = goodsTotalPrice.add(goods.getGroupPurchasePrice());
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        BigDecimal hasRouteBalance = BigDecimal.ZERO;
 | 
	
		
			
				|  |  | +        BigDecimal goodsTotalBalance = goodsTotalPrice.multiply(balance).divide(totalAmount, 2, BigDecimal.ROUND_HALF_UP);
 | 
	
		
			
				|  |  | +        List<SellOrder> sellOrders = new ArrayList<>();
 | 
	
		
			
				|  |  | +        for (Integer goodsId : goodsIds) {
 | 
	
		
			
				|  |  | +            SellOrder sellOrder = new SellOrder();
 | 
	
		
			
				|  |  | +            BigDecimal goodsPrice = BigDecimal.ZERO;
 | 
	
		
			
				|  |  | +            Goods nowGoods = new Goods();
 | 
	
		
			
				|  |  | +            for (Goods goods : goodies) {
 | 
	
		
			
				|  |  | +                if (goods.getId().equals(goodsId)) {
 | 
	
		
			
				|  |  | +                    nowGoods = goods;
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            goodsPrice = nowGoods.getGroupPurchasePrice();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            BigDecimal goodsBalance = goodsTotalBalance.multiply(goodsPrice).divide(totalAmount, 2, BigDecimal.ROUND_HALF_UP);
 | 
	
		
			
				|  |  | +            if (i == goodsNum) {
 | 
	
		
			
				|  |  | +                goodsBalance = goodsTotalBalance.subtract(hasRouteBalance);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            hasRouteBalance = hasRouteBalance.add(goodsBalance);
 | 
	
		
			
				|  |  | +            sellOrder.setGoodsId(goodsId);
 | 
	
		
			
				|  |  | +            sellOrder.setGoodsName(nowGoods.getName());
 | 
	
		
			
				|  |  | +            sellOrder.setExpectAmount(goodsPrice);
 | 
	
		
			
				|  |  | +            sellOrder.setBalanceAmount(goodsBalance);
 | 
	
		
			
				|  |  | +            sellOrder.setActualAmount(goodsPrice.subtract(goodsBalance));
 | 
	
		
			
				|  |  | +            Map<String, BigDecimal> CostMap = new HashMap<>();
 | 
	
		
			
				|  |  | +            CostMap.put("sellCost", nowGoods.getDiscountPrice());
 | 
	
		
			
				|  |  | +            if (nowGoods.getAgreeCostPrice() != null) {
 | 
	
		
			
				|  |  | +                CostMap.put("SellCost2", nowGoods.getAgreeCostPrice());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            sellOrder.setSellCost2(JSON.toJSONString(CostMap));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            sellOrder.setOrganId(order.getOrganId());
 | 
	
		
			
				|  |  | +            sellOrder.setCooperationOrganId(musicGroup.getCooperationOrganId());
 | 
	
		
			
				|  |  | +            sellOrder.setTransNo(order.getTransNo());
 | 
	
		
			
				|  |  | +            sellOrder.setOrderId(order.getId());
 | 
	
		
			
				|  |  | +            sellOrder.setOrderNo(order.getOrderNo());
 | 
	
		
			
				|  |  | +            sellOrder.setSellCost(nowGoods.getDiscountPrice());
 | 
	
		
			
				|  |  | +            sellOrder.setNum(1);
 | 
	
		
			
				|  |  | +            sellOrder.setUserId(order.getUserId());
 | 
	
		
			
				|  |  | +            sellOrder.setPaymentChannel(order.getPaymentChannel());
 | 
	
		
			
				|  |  | +            sellOrder.setMerNo(order.getMerNos());
 | 
	
		
			
				|  |  | +            sellOrder.setSellTime(order.getCreateTime());
 | 
	
		
			
				|  |  | +            sellOrder.setCreateIme(new Date());
 | 
	
		
			
				|  |  | +            sellOrder.setUpdateTime(new Date());
 | 
	
		
			
				|  |  | +            if (nowGoods.getType().equals(GoodsType.INSTRUMENT)) {
 | 
	
		
			
				|  |  | +                sellOrder.setType(SellTypeEnum.INSTRUMENT);
 | 
	
		
			
				|  |  | +            } else if (nowGoods.getType().equals(GoodsType.ACCESSORIES)) {
 | 
	
		
			
				|  |  | +                sellOrder.setType(SellTypeEnum.ACCESSORIES);
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +                sellOrder.setType(SellTypeEnum.OTHER);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            sellOrders.add(sellOrder);
 | 
	
		
			
				|  |  | +            i++;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        sellOrderDao.batchInsert(sellOrders);
 | 
	
		
			
				|  |  | +        return sellOrders;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  }
 |