|
@@ -1,60 +1,36 @@
|
|
|
package com.ym.mec.biz.service.impl;
|
|
|
|
|
|
|
|
|
-import static com.ym.mec.biz.dal.enums.GroupType.GOODS_SELL;
|
|
|
-import static com.ym.mec.biz.dal.enums.GroupType.MUSIC;
|
|
|
-import static com.ym.mec.biz.dal.enums.OrderDetailTypeEnum.*;
|
|
|
-import static com.ym.mec.biz.dal.enums.OrderDetailTypeEnum.ORGAN_SHARE_PROFIT;
|
|
|
-
|
|
|
-import java.math.BigDecimal;
|
|
|
-import java.math.RoundingMode;
|
|
|
-import java.util.*;
|
|
|
-import java.util.function.Consumer;
|
|
|
-import java.util.function.Function;
|
|
|
-import java.util.function.Supplier;
|
|
|
-import java.util.stream.Collectors;
|
|
|
-
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
-import com.ym.mec.biz.dal.dto.ComplementGoodsDto;
|
|
|
+import com.ym.mec.biz.dal.dao.*;
|
|
|
import com.ym.mec.biz.dal.entity.*;
|
|
|
-import com.ym.mec.biz.dal.mapper.GoodsSubMapper;
|
|
|
+import com.ym.mec.biz.dal.enums.*;
|
|
|
import com.ym.mec.biz.dal.page.MusicGroupShippingAddressQueryInfo;
|
|
|
import com.ym.mec.biz.service.*;
|
|
|
import com.ym.mec.common.api.CommonResult;
|
|
|
+import com.ym.mec.common.dal.BaseDAO;
|
|
|
import com.ym.mec.common.dto.OrderCreate;
|
|
|
import com.ym.mec.common.dto.PmsProductDto;
|
|
|
import com.ym.mec.common.dto.PmsProductQueryParamDto;
|
|
|
import com.ym.mec.common.dto.ReturnApplyDto;
|
|
|
import com.ym.mec.common.exception.BizException;
|
|
|
import com.ym.mec.common.page.PageInfo;
|
|
|
-import com.ym.mec.common.page.WrapperUtil;
|
|
|
+import com.ym.mec.common.service.impl.BaseServiceImpl;
|
|
|
import com.ym.mec.mall.MallFeignService;
|
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
-import org.springframework.transaction.annotation.Isolation;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
-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.SporadicChargeInfoDao;
|
|
|
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
|
|
|
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDetailDao;
|
|
|
-import com.ym.mec.biz.dal.dao.StudentRepairDao;
|
|
|
-import com.ym.mec.biz.dal.enums.AccountType;
|
|
|
-import com.ym.mec.biz.dal.enums.GoodsType;
|
|
|
-import com.ym.mec.biz.dal.enums.KitGroupPurchaseTypeEnum;
|
|
|
-import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
|
|
|
-import com.ym.mec.biz.dal.enums.OrderTypeEnum;
|
|
|
-import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
|
|
|
-import com.ym.mec.biz.dal.enums.ReturnFeeEnum;
|
|
|
-import com.ym.mec.biz.dal.enums.SellStatus;
|
|
|
-import com.ym.mec.biz.dal.enums.SellTypeEnum;
|
|
|
-import com.ym.mec.biz.dal.enums.SporadicChargeTypeEnum;
|
|
|
-import com.ym.mec.common.dal.BaseDAO;
|
|
|
-import com.ym.mec.common.service.impl.BaseServiceImpl;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
+import java.util.*;
|
|
|
+import java.util.function.Function;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+import static com.ym.mec.biz.dal.enums.GroupType.GOODS_SELL;
|
|
|
+import static com.ym.mec.biz.dal.enums.GroupType.MUSIC;
|
|
|
|
|
|
@Service
|
|
|
public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> implements SellOrderService {
|
|
@@ -71,8 +47,6 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
|
|
|
@Autowired
|
|
|
private SysUserCashAccountLogService sysUserCashAccountLogService;
|
|
|
@Autowired
|
|
|
- private GoodsService goodsService;
|
|
|
- @Autowired
|
|
|
private StudentPaymentOrderDetailDao studentPaymentOrderDetailDao;
|
|
|
@Autowired
|
|
|
private SporadicChargeInfoDao sporadicChargeInfoDao;
|
|
@@ -99,188 +73,6 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
|
|
|
return sellOrderDao;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- /* @Override
|
|
|
- @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
|
|
|
- public List<SellOrder> addSellOrder(Long orderId, String musicGroupId, List<Integer> goodsIds, BigDecimal totalAmount, BigDecimal balance, BigDecimal couponRemitFee) {
|
|
|
- if (goodsIds == null || goodsIds.size() <= 0) {
|
|
|
- return null;
|
|
|
- }
|
|
|
- if (balance == null) {
|
|
|
- balance = BigDecimal.ZERO;
|
|
|
- }
|
|
|
- StudentPaymentOrder order = studentPaymentOrderDao.get(orderId);
|
|
|
- BigDecimal totalActualAmount = order.getActualAmount() == null ? BigDecimal.ZERO : order.getActualAmount();
|
|
|
- MusicGroup musicGroup = new MusicGroup();
|
|
|
- if (StringUtils.isNotBlank(musicGroupId)) {
|
|
|
- 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.getDiscountPrice());
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- //商品总价值去掉优惠券减免
|
|
|
-// if(goodsTotalPrice.compareTo(couponRemitFee) <= 0){
|
|
|
-// goodsTotalPrice = BigDecimal.ZERO;
|
|
|
-// }else {
|
|
|
-// goodsTotalPrice = goodsTotalPrice.subtract(couponRemitFee);
|
|
|
-// }
|
|
|
-
|
|
|
- //已分配的商品余额
|
|
|
- BigDecimal hasRouteBalance = BigDecimal.ZERO;
|
|
|
- //已分配的商品现金
|
|
|
- BigDecimal hasRouteActualAmount = BigDecimal.ZERO;
|
|
|
- //商品占用的的余额
|
|
|
- BigDecimal goodsTotalBalance = totalAmount.compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO : goodsTotalPrice.multiply(balance).divide(totalAmount, 2, BigDecimal.ROUND_DOWN);
|
|
|
- //商品占用的总现金
|
|
|
- BigDecimal goodsTotalActualAmount = totalAmount.compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO : goodsTotalPrice.multiply(totalActualAmount).divide(totalAmount, 2, BigDecimal.ROUND_DOWN);
|
|
|
- AccountType accountType = sysPaymentConfigService.checkAccountType(PaymentChannelEnum.valueOf(order.getPaymentChannel()), order.getMerNos(), order.getTenantId());
|
|
|
-
|
|
|
- List<SellOrder> sellOrderList = goodsService.subtractStock(goodsIds, accountType);
|
|
|
- BigDecimal freeCouponRemitFee = couponRemitFee;
|
|
|
- for (int j = 0; j < goodsIds.size(); j++) {
|
|
|
- Integer goodsId = goodsIds.get(j);
|
|
|
- BigDecimal goodsPrice = BigDecimal.ZERO;
|
|
|
- Goods nowGoods = new Goods();
|
|
|
- for (Goods goods : goodies) {
|
|
|
- if (goods.getId().equals(goodsId)) {
|
|
|
- nowGoods = goods;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- goodsPrice = nowGoods.getDiscountPrice();
|
|
|
- //扣除减免金额
|
|
|
-// if(couponRemitFee.compareTo(BigDecimal.ZERO) > 0){
|
|
|
-// if(j == goodsIds.size() - 1){
|
|
|
-// goodsPrice = goodsPrice.subtract(freeCouponRemitFee);
|
|
|
-// }else {
|
|
|
-// //获取比例
|
|
|
-// BigDecimal divide = goodsPrice.divide(goodsPrice.add(couponRemitFee), 6, BigDecimal.ROUND_HALF_UP);
|
|
|
-// //分摊金额
|
|
|
-// BigDecimal scale = couponRemitFee.multiply(divide).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
-// freeCouponRemitFee = freeCouponRemitFee.subtract(scale);
|
|
|
-// goodsPrice = goodsPrice.subtract(scale);
|
|
|
-// }
|
|
|
-// }
|
|
|
-
|
|
|
- //当前商品占用的总优惠券减免
|
|
|
- BigDecimal couponBalance = goodsTotalPrice.compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO :
|
|
|
- couponRemitFee.multiply(goodsPrice).divide(goodsTotalPrice, 2, BigDecimal.ROUND_DOWN);
|
|
|
- //当前商品占用的总余额
|
|
|
- BigDecimal goodsBalance = goodsTotalPrice.compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO :
|
|
|
- goodsTotalBalance.multiply(goodsPrice).divide(goodsTotalPrice, 2, BigDecimal.ROUND_DOWN);
|
|
|
- //当前商品占用的总现金
|
|
|
- BigDecimal goodsActualAmount = goodsTotalPrice.compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO :
|
|
|
- goodsTotalActualAmount.multiply(goodsPrice).divide(goodsTotalPrice, 2, BigDecimal.ROUND_DOWN);
|
|
|
-
|
|
|
- if (i == goodsNum) {
|
|
|
- couponBalance = couponRemitFee.subtract(freeCouponRemitFee);
|
|
|
- goodsBalance = goodsTotalBalance.subtract(hasRouteBalance);
|
|
|
- goodsActualAmount = goodsTotalActualAmount.subtract(hasRouteActualAmount);
|
|
|
- }
|
|
|
- freeCouponRemitFee = freeCouponRemitFee.subtract(couponBalance);
|
|
|
- hasRouteBalance = hasRouteBalance.add(goodsBalance);
|
|
|
- hasRouteActualAmount = hasRouteActualAmount.add(goodsActualAmount);
|
|
|
- i++;
|
|
|
-
|
|
|
- int complementGoodsNum = nowGoods.getComplementGoodsIdList() == null ? 1 : nowGoods.getComplementGoodsIdList().split(",").length;
|
|
|
- BigDecimal complementPrice = nowGoods.getDiscountPrice();
|
|
|
- Map<Integer, BigDecimal> complementGoodsPrice = new HashMap<>();
|
|
|
- complementGoodsPrice.put(nowGoods.getId(), nowGoods.getDiscountPrice());
|
|
|
- if (nowGoods.getComplementGoodsIdList() != null) {
|
|
|
- List<Goods> complementGoodies = goodsDao.findGoodsByIds(nowGoods.getComplementGoodsIdList());
|
|
|
- complementGoodsPrice = complementGoodies.stream().collect(Collectors.toMap(Goods::getId, Goods::getDiscountPrice));
|
|
|
- complementPrice = complementGoodies.stream().map(Goods::getDiscountPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- }
|
|
|
-
|
|
|
- BigDecimal hasRouteSellOrderActualAmount = BigDecimal.ZERO;
|
|
|
- BigDecimal hasRouteSellOrderBalance = BigDecimal.ZERO;
|
|
|
- BigDecimal hasRouteCouponBalance = BigDecimal.ZERO;
|
|
|
- for (SellOrder sellOrder : sellOrderList) {
|
|
|
- if (!goodsId.equals(sellOrder.getParentGoodsId()) && !goodsId.equals(sellOrder.getGoodsId())) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- if (sellOrder.getHasRoute()) {
|
|
|
- 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(goodsActualAmount).divide(complementPrice, 2, BigDecimal.ROUND_DOWN);
|
|
|
- sellOrderBalance = complementGoodsPrice.get(sellOrder.getGoodsId()).multiply(new BigDecimal(sellOrder.getNum())).multiply(goodsBalance).divide(complementPrice, 2, BigDecimal.ROUND_DOWN);
|
|
|
- }
|
|
|
-
|
|
|
- complementGoodsNum = complementGoodsNum - sellOrder.getNum();
|
|
|
- if (complementGoodsNum <= 0) {
|
|
|
- sellOrderActualAmount = goodsActualAmount.subtract(hasRouteSellOrderActualAmount);
|
|
|
- sellOrderBalance = goodsBalance.subtract(hasRouteSellOrderBalance);
|
|
|
- }
|
|
|
- hasRouteSellOrderActualAmount = hasRouteSellOrderActualAmount.add(sellOrderActualAmount);
|
|
|
- hasRouteSellOrderBalance = hasRouteSellOrderBalance.add(sellOrderBalance);
|
|
|
-
|
|
|
- sellOrder.setExpectAmount(sellOrderActualAmount.add(sellOrderBalance));
|
|
|
- sellOrder.setBalanceAmount(sellOrderBalance);
|
|
|
-// sellOrder.setCouponRemitAmount(sellOrderCouponBalance);
|
|
|
- sellOrder.setActualAmount(sellOrderActualAmount);
|
|
|
- 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);
|
|
|
- }
|
|
|
- sellOrder.setHasRoute(true);
|
|
|
- if (complementGoodsNum <= 0) {
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if (sellOrderList.size() > 0) {
|
|
|
- //如果有优惠券金额
|
|
|
- if (couponRemitFee.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
- BigDecimal reduce = sellOrderList.stream().map(e -> e.getExpectAmount()).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- List<SellOrder> sellOrders = sellOrderList.stream().filter(e -> e.getExpectAmount().compareTo(BigDecimal.ZERO) > 0).collect(Collectors.toList());
|
|
|
- //可用优惠券金额
|
|
|
- BigDecimal subCouponMarketAmount = couponRemitFee;
|
|
|
- for (int j = 0; j < sellOrders.size(); j++) {
|
|
|
- SellOrder sellOrder = sellOrders.get(j);
|
|
|
- //如果是最后一件商品
|
|
|
- if (j == sellOrders.size() - 1) {
|
|
|
- sellOrder.setCouponRemitAmount(subCouponMarketAmount);
|
|
|
- } else {
|
|
|
- //获取比例
|
|
|
- BigDecimal ratioAmount = sellOrder.getExpectAmount().divide(reduce, 6, BigDecimal.ROUND_HALF_UP);
|
|
|
- //获取分配的减免金额
|
|
|
- BigDecimal multiply = couponRemitFee.multiply(ratioAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
- subCouponMarketAmount = subCouponMarketAmount.subtract(multiply);
|
|
|
- sellOrder.setCouponRemitAmount(multiply);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- sellOrderDao.batchInsert(sellOrderList);
|
|
|
- }
|
|
|
- return sellOrderList;
|
|
|
- }
|
|
|
-*/
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void addOrderDetail2SellOrder(List<StudentPaymentOrderDetail> orderDetails,
|
|
@@ -295,10 +87,10 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
|
|
|
//获取比例
|
|
|
BigDecimal totalRatioAmount = BigDecimal.ZERO;
|
|
|
if(studentPaymentOrder.getExpectAmount().compareTo(BigDecimal.ZERO) > 0){
|
|
|
- totalRatioAmount = detailTotalPrice.divide(studentPaymentOrder.getExpectAmount(), 6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ totalRatioAmount = detailTotalPrice.divide(studentPaymentOrder.getExpectAmount(), 6, RoundingMode.DOWN);
|
|
|
}
|
|
|
//获取分配的余额
|
|
|
- BigDecimal balancePaymentAmount = studentPaymentOrder.getBalancePaymentAmount().multiply(totalRatioAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal balancePaymentAmount = studentPaymentOrder.getBalancePaymentAmount().multiply(totalRatioAmount).setScale(2, RoundingMode.DOWN);
|
|
|
//获取总优惠券金额
|
|
|
BigDecimal detailTotalRemitPrice = goodsOrderDetails.stream().map(StudentPaymentOrderDetail::getRemitFee).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
|
@@ -316,12 +108,12 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
|
|
|
//获取支付金额比例
|
|
|
BigDecimal ratioAmount = BigDecimal.ZERO;
|
|
|
if(detailTotalPrice.compareTo(BigDecimal.ZERO) > 0){
|
|
|
- ratioAmount = orderDetail.getPrice().divide(detailTotalPrice, 6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ ratioAmount = orderDetail.getPrice().divide(detailTotalPrice, 6, RoundingMode.DOWN);
|
|
|
}
|
|
|
BigDecimal ratioCouponAmount = BigDecimal.ZERO;
|
|
|
if (detailTotalRemitPrice.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
//获取优惠券金额比例
|
|
|
- ratioCouponAmount = orderDetail.getRemitFee().divide(detailTotalRemitPrice, 6, BigDecimal.ROUND_HALF_UP);
|
|
|
+ ratioCouponAmount = orderDetail.getRemitFee().divide(detailTotalRemitPrice, 6, RoundingMode.DOWN);
|
|
|
}
|
|
|
//获取分配的余额
|
|
|
BigDecimal detailBalance;
|
|
@@ -338,13 +130,13 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
|
|
|
detailActualAmount = subDetailActualAmount;
|
|
|
} else {
|
|
|
//获取分配的余额
|
|
|
- detailBalance = balancePaymentAmount.multiply(ratioAmount).setScale(2, BigDecimal.ROUND_DOWN);
|
|
|
+ detailBalance = balancePaymentAmount.multiply(ratioAmount).setScale(2, RoundingMode.DOWN);
|
|
|
subDetailBalance = subDetailBalance.subtract(detailBalance);
|
|
|
//获取分配的优惠券金额
|
|
|
- couponRemitFee = detailTotalRemitPrice.multiply(ratioCouponAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ couponRemitFee = detailTotalRemitPrice.multiply(ratioCouponAmount).setScale(2, RoundingMode.DOWN);
|
|
|
subDetailCouponRemitFee = subDetailCouponRemitFee.subtract(couponRemitFee);
|
|
|
//获取剩余待分配的现金
|
|
|
- detailActualAmount = totalDetailActualAmount.multiply(ratioAmount).setScale(2, BigDecimal.ROUND_DOWN);
|
|
|
+ detailActualAmount = totalDetailActualAmount.multiply(ratioAmount).setScale(2, RoundingMode.DOWN);
|
|
|
subDetailActualAmount = subDetailActualAmount.subtract(detailActualAmount);
|
|
|
}
|
|
|
List<Integer> goodsIds = Arrays.asList(orderDetail.getGoodsIdList().split(",")).stream().map(Integer::parseInt).collect(Collectors.toList());
|
|
@@ -354,132 +146,6 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
|
|
|
this.batchInsert(sellOrders);
|
|
|
//同步销售订单到商城
|
|
|
this.syncSellOrder2Mall(sellOrders, studentPaymentOrder);
|
|
|
-
|
|
|
-/*
|
|
|
- BigDecimal goodsTotalPrice = orderDetail.getGoodsList().stream().map(Goods::getGroupPurchasePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- 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;
|
|
|
- if (goodsTotalPrice.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
- expectAmount = goods.getGroupPurchasePrice().multiply(orderDetail.getPrice()).divide(goodsTotalPrice, 2, BigDecimal.ROUND_DOWN);
|
|
|
- balance = goods.getGroupPurchasePrice().multiply(detailBalance).divide(goodsTotalPrice, 2, BigDecimal.ROUND_DOWN);
|
|
|
- }
|
|
|
- if (j == orderDetail.getGoodsList().size()) {
|
|
|
- expectAmount = orderDetail.getPrice().subtract(routePrice);
|
|
|
- balance = detailBalance.subtract(routeBalance);
|
|
|
- }
|
|
|
- routePrice = routePrice.add(expectAmount);
|
|
|
- routeBalance = routeBalance.add(balance);
|
|
|
- j++;
|
|
|
-
|
|
|
- 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);
|
|
|
- }
|
|
|
-
|
|
|
- BigDecimal hasRouteSellOrderExpectAmount = BigDecimal.ZERO;
|
|
|
- BigDecimal hasRouteSellOrderBalance = BigDecimal.ZERO;
|
|
|
- for (SellOrder sellOrder : sellOrderList) {
|
|
|
- if (!goods.getId().equals(sellOrder.getParentGoodsId()) && !goods.getId().equals(sellOrder.getGoodsId())) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- if (sellOrder.getHasRoute()) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- sellOrder.setTenantId(tenantId);
|
|
|
- BigDecimal sellOrderExpectAmount = BigDecimal.ZERO;
|
|
|
- BigDecimal sellOrderBalance = BigDecimal.ZERO;
|
|
|
- if (complementPrice.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
- sellOrderExpectAmount = complementGoodsPrice.get(sellOrder.getGoodsId()).multiply(new BigDecimal(sellOrder.getNum())).multiply(expectAmount).divide(complementPrice, 2, BigDecimal.ROUND_DOWN);
|
|
|
- sellOrderBalance = complementGoodsPrice.get(sellOrder.getGoodsId()).multiply(new BigDecimal(sellOrder.getNum())).multiply(balance).divide(complementPrice, 2, BigDecimal.ROUND_DOWN);
|
|
|
- }
|
|
|
- complementGoodsNum = complementGoodsNum - sellOrder.getNum();
|
|
|
- if (complementGoodsNum <= 0) {
|
|
|
- sellOrderExpectAmount = expectAmount.subtract(hasRouteSellOrderExpectAmount);
|
|
|
- sellOrderBalance = balance.subtract(hasRouteSellOrderBalance);
|
|
|
- }
|
|
|
- hasRouteSellOrderExpectAmount = hasRouteSellOrderExpectAmount.add(sellOrderExpectAmount);
|
|
|
- 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(sellOrderExpectAmount.subtract(sellOrderBalance));
|
|
|
- sellOrder.setBalanceAmount(sellOrderBalance);
|
|
|
- sellOrder.setExpectAmount(sellOrderExpectAmount);
|
|
|
-// sellOrder.setCouponRemitAmount(goods.getGroupPurchasePrice().subtract(sellOrderExpectAmount));
|
|
|
- sellOrder.setNum(1);
|
|
|
- sellOrder.setUserId(studentPaymentOrder.getUserId());
|
|
|
- sellOrder.setPaymentChannel(studentPaymentOrder.getPaymentChannel());
|
|
|
- sellOrder.setMerNo(studentPaymentOrder.getMerNos());
|
|
|
- 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);
|
|
|
- }
|
|
|
- sellOrder.setHasRoute(true);
|
|
|
- if (complementGoodsNum <= 0) {
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- sellOrders.addAll(sellOrderList);
|
|
|
- }
|
|
|
- if (sellOrders.size() > 0) {
|
|
|
- //如果有优惠券金额
|
|
|
- if (musicRemitFee.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
- BigDecimal reduce = sellOrders.stream().map(e -> e.getExpectAmount()).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- List<SellOrder> sellOrderList = sellOrders.stream().filter(e -> e.getExpectAmount().compareTo(BigDecimal.ZERO) > 0).collect(Collectors.toList());
|
|
|
- //可用优惠券金额
|
|
|
- BigDecimal subCouponMarketAmount = musicRemitFee;
|
|
|
- for (int j = 0; j < sellOrderList.size(); j++) {
|
|
|
- SellOrder sellOrder = sellOrderList.get(j);
|
|
|
- //如果是最后一件商品
|
|
|
- if (j == sellOrderList.size() - 1) {
|
|
|
- sellOrder.setCouponRemitAmount(subCouponMarketAmount);
|
|
|
- } else {
|
|
|
- //获取比例
|
|
|
- BigDecimal ratioAmount = sellOrder.getExpectAmount().divide(reduce, 6, BigDecimal.ROUND_HALF_UP);
|
|
|
- //获取分配的减免金额
|
|
|
- BigDecimal multiply = musicRemitFee.multiply(ratioAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
- subCouponMarketAmount = subCouponMarketAmount.subtract(multiply);
|
|
|
- sellOrder.setCouponRemitAmount(multiply);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- sellOrderDao.batchInsert(sellOrders);
|
|
|
- }*/
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -591,33 +257,6 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
|
|
|
orderItemCreate.setProductSkuId(e.getGoodsSkuId().longValue());
|
|
|
orderItemCreate.setRealAmount(e.getExpectAmount());
|
|
|
orderItems.add(orderItemCreate);
|
|
|
- /*List<GoodsSub> list = goodsSubService.lambdaQuery().eq(GoodsSub::getGoodsId, e.getParentGoodsId()).list();
|
|
|
- if(CollectionUtils.isEmpty(list)){
|
|
|
- throw new RuntimeException("子商品不存在,请联系管理员");
|
|
|
- }
|
|
|
- BigDecimal totalPrice = e.getExpectAmount().divide(new BigDecimal(e.getNum()), 2, RoundingMode.HALF_UP);
|
|
|
- //总金额按比例分配
|
|
|
- //待分配
|
|
|
- BigDecimal waitRemitFee = totalPrice;
|
|
|
- BigDecimal totalAmount = WrapperUtil.sumList(list, GoodsSub::getGoodsPrice);
|
|
|
- for (int i = 0; i < list.size(); i++) {
|
|
|
- GoodsSub goodsDto = list.get(i);
|
|
|
- OrderCreate.OrderItem orderItemCreate = new OrderCreate.OrderItem();
|
|
|
- orderItemCreate.setProductQuantity(e.getNum());
|
|
|
- orderItemCreate.setProductSkuId(goodsDto.getSku().longValue());
|
|
|
- //如果是最后一件商品
|
|
|
- if (i == list.size() - 1) {
|
|
|
- orderItemCreate.setRealAmount(waitRemitFee);
|
|
|
- } else {
|
|
|
- //获取比例
|
|
|
- BigDecimal ratioAmount = goodsDto.getGoodsPrice().divide(totalAmount, 6, RoundingMode.HALF_UP);
|
|
|
- //获取分配的金额
|
|
|
- BigDecimal multiply = ratioAmount.multiply(totalPrice).setScale(2, RoundingMode.HALF_UP);
|
|
|
- orderItemCreate.setRealAmount(multiply);
|
|
|
- waitRemitFee = waitRemitFee.subtract(multiply);
|
|
|
- }
|
|
|
- orderItems.add(orderItemCreate);*/
|
|
|
-// }
|
|
|
}
|
|
|
return orderItems;
|
|
|
}
|
|
@@ -773,7 +412,7 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
|
|
|
|
|
|
if (goodsTotalPrice.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
goodsRatioAmount = order.getGroupType() == MUSIC ?nowGoods.getGroupPurchasePrice():nowGoods.getDiscountPrice()
|
|
|
- .divide(goodsTotalPrice, 6, RoundingMode.HALF_UP);
|
|
|
+ .divide(goodsTotalPrice, 6, RoundingMode.DOWN);
|
|
|
}
|
|
|
if(i == goodies.size() - 1){
|
|
|
expectAmount = subExpectTotalAmount;
|
|
@@ -781,11 +420,11 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
|
|
|
remitAmount = subCouponRemitAmount;
|
|
|
actualAmount = subTotalActualAmount;
|
|
|
}else {
|
|
|
- expectAmount = goodsRatioAmount.multiply(expectTotalAmount).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ expectAmount = goodsRatioAmount.multiply(expectTotalAmount).setScale(2, RoundingMode.DOWN);
|
|
|
subExpectTotalAmount = subExpectTotalAmount.subtract(expectAmount);
|
|
|
- goodsBalance = goodsRatioAmount.multiply(totalBalance).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ goodsBalance = goodsRatioAmount.multiply(totalBalance).setScale(2, RoundingMode.DOWN);
|
|
|
subTotalBalance = subTotalBalance.subtract(goodsBalance);
|
|
|
- remitAmount = goodsRatioAmount.multiply(couponRemitAmount).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ remitAmount = goodsRatioAmount.multiply(couponRemitAmount).setScale(2, RoundingMode.DOWN);
|
|
|
subCouponRemitAmount = subCouponRemitAmount.subtract(remitAmount);
|
|
|
actualAmount = expectAmount.subtract(goodsBalance).subtract(remitAmount);
|
|
|
subTotalActualAmount = subTotalActualAmount.subtract(actualAmount);
|
|
@@ -819,7 +458,7 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
|
|
|
//获取比例
|
|
|
BigDecimal ratioAmount = BigDecimal.ZERO;
|
|
|
if(complementPrice.compareTo(BigDecimal.ZERO) > 0){
|
|
|
- ratioAmount = goodsSub.getGoodsPrice().divide(complementPrice, 6, RoundingMode.HALF_UP);
|
|
|
+ ratioAmount = goodsSub.getGoodsPrice().divide(complementPrice, 6, RoundingMode.DOWN);
|
|
|
}
|
|
|
if (j == goodsSubs.size() - 1){
|
|
|
sellOrder.setExpectAmount(subExpectAmount);
|
|
@@ -827,16 +466,16 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
|
|
|
sellOrder.setActualAmount(subActualAmount);
|
|
|
sellOrder.setCouponRemitAmount(subRemitAmount);
|
|
|
}else {
|
|
|
- BigDecimal decimal = expectAmount.multiply(ratioAmount).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal decimal = expectAmount.multiply(ratioAmount).setScale(2, RoundingMode.DOWN);
|
|
|
sellOrder.setExpectAmount(decimal);
|
|
|
subExpectAmount = subExpectAmount.subtract(decimal);
|
|
|
- BigDecimal balance = goodsBalance.multiply(ratioAmount).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal balance = goodsBalance.multiply(ratioAmount).setScale(2, RoundingMode.DOWN);
|
|
|
sellOrder.setBalanceAmount(balance);
|
|
|
subGoodsBalance = subGoodsBalance.subtract(balance);
|
|
|
- BigDecimal actual = actualAmount.multiply(ratioAmount).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal actual = actualAmount.multiply(ratioAmount).setScale(2, RoundingMode.DOWN);
|
|
|
sellOrder.setActualAmount(actual);
|
|
|
subActualAmount = subActualAmount.subtract(actual);
|
|
|
- BigDecimal remit = remitAmount.multiply(ratioAmount).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal remit = remitAmount.multiply(ratioAmount).setScale(2, RoundingMode.DOWN);
|
|
|
sellOrder.setCouponRemitAmount(remit);
|
|
|
subRemitAmount = subRemitAmount.subtract(remit);
|
|
|
}
|
|
@@ -882,6 +521,12 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
+ public void batchUpdate(List<SellOrder> sellOrderList) {
|
|
|
+ sellOrderDao.batchUpdate(sellOrderList);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public List<SellOrder> initSellOrder(StudentPaymentOrder order, String musicGroupId, List<Integer> goodsIds,
|
|
|
KitGroupPurchaseTypeEnum kitGroupPurchaseType,Boolean saveFlag) {
|
|
|
if (CollectionUtils.isEmpty(goodsIds)) {
|
|
@@ -907,13 +552,13 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
|
|
|
//商品总付款
|
|
|
BigDecimal detailTotalPrice = orderDetails.stream().map(StudentPaymentOrderDetail::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
//商品销售占的余额
|
|
|
- BigDecimal detailTotalBalance = detailTotalPrice.multiply(totalBalance).divide(totalPrice, 2, BigDecimal.ROUND_DOWN);
|
|
|
+ BigDecimal detailTotalBalance = detailTotalPrice.multiply(totalBalance).divide(totalPrice, 2, RoundingMode.DOWN);
|
|
|
|
|
|
if(detailTotalBalance.subtract(cloudBalanceIncome).compareTo(BigDecimal.ZERO) < 0) {
|
|
|
detailTotalBalance = cloudBalanceIncome;
|
|
|
}
|
|
|
|
|
|
- BigDecimal actualAmount = detailTotalPrice.multiply(order.getActualAmount()).divide(totalPrice, 2, BigDecimal.ROUND_DOWN);
|
|
|
+ BigDecimal actualAmount = detailTotalPrice.multiply(order.getActualAmount()).divide(totalPrice, 2, RoundingMode.DOWN);
|
|
|
|
|
|
if(actualAmount.subtract(cloudIncome).compareTo(BigDecimal.ZERO) < 0){
|
|
|
actualAmount = cloudIncome;
|