|
@@ -19,6 +19,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
|
public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> implements SellOrderService {
|
|
@@ -71,15 +72,11 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
|
|
|
|
|
|
BigDecimal hasRouteBalance = BigDecimal.ZERO;
|
|
|
BigDecimal goodsTotalBalance = goodsTotalPrice.multiply(balance).divide(totalAmount, 2, BigDecimal.ROUND_HALF_UP);
|
|
|
- List<SellOrder> sellOrders = new ArrayList<>();
|
|
|
-
|
|
|
AccountType accountType = sysPaymentConfigService.checkAccountType(PaymentChannelEnum.valueOf(order.getPaymentChannel()), order.getMerNos());
|
|
|
|
|
|
- //批次号 TODO
|
|
|
List<SellOrder> sellOrderList = goodsService.subtractStock(goodsIds, accountType);
|
|
|
|
|
|
for (Integer goodsId : goodsIds) {
|
|
|
- SellOrder sellOrder = new SellOrder();
|
|
|
BigDecimal goodsPrice = BigDecimal.ZERO;
|
|
|
Goods nowGoods = new Goods();
|
|
|
for (Goods goods : goodies) {
|
|
@@ -95,63 +92,64 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
|
|
|
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.setAccountType(accountType);
|
|
|
- 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);
|
|
|
+ i++;
|
|
|
+
|
|
|
+ int complementGoodsNum = nowGoods.getComplementGoodsIdList() == null ? 1 : nowGoods.getComplementGoodsIdList().split(",").length;
|
|
|
+ BigDecimal complementPrice = nowGoods.getGroupPurchasePrice();
|
|
|
+ Map<Integer, BigDecimal> complementGoodsPrice = new HashMap<>();
|
|
|
+ complementGoodsPrice.put(nowGoods.getId(), nowGoods.getGroupPurchasePrice());
|
|
|
+ if (nowGoods.getComplementGoodsIdList() != null) {
|
|
|
+ List<Goods> complementGoodies = goodsDao.findGoodsByIds(nowGoods.getComplementGoodsIdList());
|
|
|
+ complementGoodsPrice = complementGoodies.stream().collect(Collectors.toMap(Goods::getId, Goods::getGroupPurchasePrice));
|
|
|
+ complementPrice = complementGoodies.stream().map(Goods::getGroupPurchasePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
}
|
|
|
|
|
|
- StockType goodsStockType = StockType.INTERNAL;
|
|
|
- for (Goods goods : goodies) {
|
|
|
- if (goods.getId().equals(goodsId)) {
|
|
|
- goodsStockType = goods.getStockType();
|
|
|
- break;
|
|
|
+ BigDecimal hasRouteSellOrderActualAmount = BigDecimal.ZERO;
|
|
|
+ BigDecimal hasRouteSellOrderBalance = BigDecimal.ZERO;
|
|
|
+ for (SellOrder sellOrder : sellOrderList) {
|
|
|
+ if (!goodsId.equals(sellOrder.getParentGoodsId()) && !goodsId.equals(sellOrder.getParentGoodsId())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ BigDecimal sellOrderActualAmount = BigDecimal.ZERO;
|
|
|
+ BigDecimal sellOrderBalance = BigDecimal.ZERO;
|
|
|
+ if (complementPrice.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ sellOrderActualAmount = complementGoodsPrice.get(sellOrder.getGoodsId()).multiply(new BigDecimal(sellOrder.getNum())).multiply(goodsPrice).divide(complementPrice, 2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ sellOrderBalance = complementGoodsPrice.get(sellOrder.getGoodsId()).multiply(new BigDecimal(sellOrder.getNum())).multiply(goodsBalance).divide(complementPrice, 2, BigDecimal.ROUND_HALF_UP);
|
|
|
}
|
|
|
- }
|
|
|
- //库存类型
|
|
|
- if (goodsStockType.equals(StockType.ALL) && accountType.equals(AccountType.INTERNAL)) {
|
|
|
- sellOrder.setStockType(StockType.INTERNAL);
|
|
|
- } else if (goodsStockType.equals(StockType.ALL) && accountType.equals(AccountType.EXTERNAL)) {
|
|
|
- sellOrder.setStockType(StockType.EXTERNAL);
|
|
|
- } else {
|
|
|
- sellOrder.setStockType(goodsStockType);
|
|
|
- }
|
|
|
- //批次号 TODO
|
|
|
- //goodsService.subtractStock();
|
|
|
|
|
|
- sellOrders.add(sellOrder);
|
|
|
- i++;
|
|
|
+ complementGoodsNum = complementGoodsNum - sellOrder.getNum();
|
|
|
+ if (complementGoodsNum <= 0) {
|
|
|
+ sellOrderActualAmount = goodsPrice.subtract(hasRouteSellOrderActualAmount);
|
|
|
+ sellOrderBalance = goodsBalance.subtract(hasRouteSellOrderActualAmount);
|
|
|
+ }
|
|
|
+ hasRouteSellOrderActualAmount = hasRouteSellOrderActualAmount.add(sellOrderActualAmount);
|
|
|
+ hasRouteSellOrderBalance = hasRouteSellOrderBalance.add(sellOrderBalance);
|
|
|
+
|
|
|
+ sellOrder.setExpectAmount(sellOrderActualAmount);
|
|
|
+ sellOrder.setBalanceAmount(sellOrderBalance);
|
|
|
+ sellOrder.setActualAmount(sellOrderActualAmount.subtract(sellOrderBalance));
|
|
|
+ sellOrder.setOrganId(order.getOrganId());
|
|
|
+ sellOrder.setCooperationOrganId(musicGroup.getCooperationOrganId());
|
|
|
+ sellOrder.setTransNo(order.getTransNo());
|
|
|
+ sellOrder.setOrderId(order.getId());
|
|
|
+ sellOrder.setOrderNo(order.getOrderNo());
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- sellOrderDao.batchInsert(sellOrders);
|
|
|
- return sellOrders;
|
|
|
+ sellOrderDao.batchInsert(sellOrderList);
|
|
|
+ return sellOrderList;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -185,6 +183,9 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
|
|
|
BigDecimal routePrice = BigDecimal.ZERO;
|
|
|
BigDecimal routeBalance = BigDecimal.ZERO;
|
|
|
int j = 1;
|
|
|
+
|
|
|
+ List<Integer> goodsIds = orderDetail.getGoodsList().stream().map(Goods::getId).collect(Collectors.toList());
|
|
|
+ List<SellOrder> sellOrderList = goodsService.subtractStock(goodsIds, accountType);
|
|
|
for (Goods goods : orderDetail.getGoodsList()) {
|
|
|
BigDecimal expectAmount = BigDecimal.ZERO;
|
|
|
BigDecimal balance = BigDecimal.ZERO;
|
|
@@ -200,62 +201,75 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
|
|
|
routeBalance = routeBalance.add(balance);
|
|
|
j++;
|
|
|
|
|
|
- SellOrder sellOrder = new SellOrder();
|
|
|
- Map<String, BigDecimal> CostMap = new HashMap<>();
|
|
|
- CostMap.put("sellCost", goods.getDiscountPrice());
|
|
|
- if (goods.getAgreeCostPrice() != null) {
|
|
|
- CostMap.put("SellCost2", goods.getAgreeCostPrice());
|
|
|
- }
|
|
|
- sellOrder.setOrganId(studentPaymentOrder.getOrganId());
|
|
|
- sellOrder.setTransNo(studentPaymentOrder.getTransNo());
|
|
|
- sellOrder.setOrderId(studentPaymentOrder.getId());
|
|
|
- if (musicGroup != null) {
|
|
|
- sellOrder.setCooperationOrganId(musicGroup.getCooperationOrganId());
|
|
|
- sellOrder.setEduTeacherId(musicGroup.getEducationalTeacherId());
|
|
|
+ int complementGoodsNum = goods.getComplementGoodsIdList() == null ? 1 : goods.getComplementGoodsIdList().split(",").length;
|
|
|
+ BigDecimal complementPrice = goods.getGroupPurchasePrice();
|
|
|
+ Map<Integer, BigDecimal> complementGoodsPrice = new HashMap<>();
|
|
|
+ complementGoodsPrice.put(goods.getId(), goods.getGroupPurchasePrice());
|
|
|
+ if (goods.getComplementGoodsIdList() != null) {
|
|
|
+ List<Goods> complementGoodies = goodsDao.findGoodsByIds(goods.getComplementGoodsIdList());
|
|
|
+ complementGoodsPrice = complementGoodies.stream().collect(Collectors.toMap(Goods::getId, Goods::getGroupPurchasePrice));
|
|
|
+ complementPrice = complementGoodies.stream().map(Goods::getGroupPurchasePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
}
|
|
|
- sellOrder.setOrderNo(studentPaymentOrder.getOrderNo());
|
|
|
- sellOrder.setActualAmount(expectAmount.subtract(balance));
|
|
|
- sellOrder.setBalanceAmount(balance);
|
|
|
- sellOrder.setExpectAmount(expectAmount);
|
|
|
- sellOrder.setSellCost(goods.getDiscountPrice());
|
|
|
- sellOrder.setSellCost2(JSON.toJSONString(CostMap));
|
|
|
- sellOrder.setGoodsId(goods.getId());
|
|
|
- sellOrder.setGoodsName(goods.getName());
|
|
|
- sellOrder.setNum(1);
|
|
|
- sellOrder.setUserId(studentPaymentOrder.getUserId());
|
|
|
- sellOrder.setPaymentChannel(studentPaymentOrder.getPaymentChannel());
|
|
|
- sellOrder.setMerNo(studentPaymentOrder.getMerNos());
|
|
|
- sellOrder.setAccountType(accountType);
|
|
|
- sellOrder.setSellTime(studentPaymentOrder.getCreateTime());
|
|
|
- sellOrder.setCreateIme(new Date());
|
|
|
- sellOrder.setUpdateTime(new Date());
|
|
|
- if (goods.getType().equals(GoodsType.INSTRUMENT)) {
|
|
|
- sellOrder.setType(SellTypeEnum.INSTRUMENT);
|
|
|
- } else if (goods.getType().equals(GoodsType.ACCESSORIES)) {
|
|
|
- sellOrder.setType(SellTypeEnum.ACCESSORIES);
|
|
|
- } else {
|
|
|
- sellOrder.setType(SellTypeEnum.OTHER);
|
|
|
- }
|
|
|
- //租赁、免费的没有销售收入,有销售成本
|
|
|
- if (orderDetail.getType().equals(OrderDetailTypeEnum.MUSICAL) &&
|
|
|
- (orderDetail.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE) ||
|
|
|
- orderDetail.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.FREE)
|
|
|
- )) {
|
|
|
- sellOrder.setActualAmount(BigDecimal.ZERO);
|
|
|
- sellOrder.setBalanceAmount(BigDecimal.ZERO);
|
|
|
- sellOrder.setExpectAmount(BigDecimal.ZERO);
|
|
|
- }
|
|
|
- //库存类型
|
|
|
- if (goods.getStockType().equals(StockType.ALL) && accountType.equals(AccountType.INTERNAL)) {
|
|
|
- sellOrder.setStockType(StockType.INTERNAL);
|
|
|
- } else if (goods.getStockType().equals(StockType.ALL) && accountType.equals(AccountType.EXTERNAL)) {
|
|
|
- sellOrder.setStockType(StockType.EXTERNAL);
|
|
|
- } else {
|
|
|
- sellOrder.setStockType(goods.getStockType());
|
|
|
+
|
|
|
+ BigDecimal hasRouteSellOrderActualAmount = BigDecimal.ZERO;
|
|
|
+ BigDecimal hasRouteSellOrderBalance = BigDecimal.ZERO;
|
|
|
+ for (SellOrder sellOrder : sellOrderList) {
|
|
|
+ if (!goods.getId().equals(sellOrder.getParentGoodsId()) && !goods.getId().equals(sellOrder.getParentGoodsId())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ BigDecimal sellOrderActualAmount = BigDecimal.ZERO;
|
|
|
+ BigDecimal sellOrderBalance = BigDecimal.ZERO;
|
|
|
+ if (complementPrice.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ sellOrderActualAmount = complementGoodsPrice.get(sellOrder.getGoodsId()).multiply(new BigDecimal(sellOrder.getNum())).multiply(expectAmount).divide(complementPrice, 2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ sellOrderBalance = complementGoodsPrice.get(sellOrder.getGoodsId()).multiply(new BigDecimal(sellOrder.getNum())).multiply(balance).divide(complementPrice, 2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ }
|
|
|
+ complementGoodsNum = complementGoodsNum - sellOrder.getNum();
|
|
|
+ if (complementGoodsNum <= 0) {
|
|
|
+ sellOrderActualAmount = expectAmount.subtract(hasRouteSellOrderActualAmount);
|
|
|
+ sellOrderBalance = balance.subtract(hasRouteSellOrderActualAmount);
|
|
|
+ }
|
|
|
+ hasRouteSellOrderActualAmount = hasRouteSellOrderActualAmount.add(sellOrderActualAmount);
|
|
|
+ hasRouteSellOrderBalance = hasRouteSellOrderBalance.add(sellOrderBalance);
|
|
|
+
|
|
|
+ sellOrder.setOrganId(studentPaymentOrder.getOrganId());
|
|
|
+ sellOrder.setTransNo(studentPaymentOrder.getTransNo());
|
|
|
+ sellOrder.setOrderId(studentPaymentOrder.getId());
|
|
|
+ if (musicGroup != null) {
|
|
|
+ sellOrder.setCooperationOrganId(musicGroup.getCooperationOrganId());
|
|
|
+ sellOrder.setEduTeacherId(musicGroup.getEducationalTeacherId());
|
|
|
+ }
|
|
|
+ sellOrder.setOrderNo(studentPaymentOrder.getOrderNo());
|
|
|
+ sellOrder.setActualAmount(sellOrderActualAmount.subtract(sellOrderBalance));
|
|
|
+ sellOrder.setBalanceAmount(sellOrderBalance);
|
|
|
+ sellOrder.setExpectAmount(sellOrderActualAmount);
|
|
|
+ sellOrder.setNum(1);
|
|
|
+ sellOrder.setUserId(studentPaymentOrder.getUserId());
|
|
|
+ sellOrder.setPaymentChannel(studentPaymentOrder.getPaymentChannel());
|
|
|
+ sellOrder.setMerNo(studentPaymentOrder.getMerNos());
|
|
|
+ sellOrder.setAccountType(accountType);
|
|
|
+ sellOrder.setSellTime(studentPaymentOrder.getCreateTime());
|
|
|
+ sellOrder.setCreateIme(new Date());
|
|
|
+ sellOrder.setUpdateTime(new Date());
|
|
|
+ if (goods.getType().equals(GoodsType.INSTRUMENT)) {
|
|
|
+ sellOrder.setType(SellTypeEnum.INSTRUMENT);
|
|
|
+ } else if (goods.getType().equals(GoodsType.ACCESSORIES)) {
|
|
|
+ sellOrder.setType(SellTypeEnum.ACCESSORIES);
|
|
|
+ } else {
|
|
|
+ sellOrder.setType(SellTypeEnum.OTHER);
|
|
|
+ }
|
|
|
+ //租赁、免费的没有销售收入,有销售成本
|
|
|
+ if (orderDetail.getType().equals(OrderDetailTypeEnum.MUSICAL) &&
|
|
|
+ (orderDetail.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE) ||
|
|
|
+ orderDetail.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.FREE)
|
|
|
+ )) {
|
|
|
+ sellOrder.setActualAmount(BigDecimal.ZERO);
|
|
|
+ sellOrder.setBalanceAmount(BigDecimal.ZERO);
|
|
|
+ sellOrder.setExpectAmount(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
}
|
|
|
- //批次号 TODO
|
|
|
|
|
|
- sellOrders.add(sellOrder);
|
|
|
+ sellOrders.addAll(sellOrderList);
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
if (sellOrders.size() > 0) {
|