|
@@ -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;
|
|
|
+ }
|
|
|
}
|