|
@@ -289,7 +289,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
|
|
|
List<Integer> goodsIdList = Arrays.stream(goodsIds.split(",")).map(Integer::parseInt).collect(Collectors.toList());
|
|
|
|
|
|
//退原订单商品
|
|
|
- sellOrderService.refundByOrderId(subjectChange.getOriginalOrderId().longValue());
|
|
|
+ sellOrderService.refundByOrderId(subjectChange.getOriginalOrderId().longValue(), false);
|
|
|
//添加新订单
|
|
|
this.addSellOrder(studentPaymentOrder.getId(), subjectChange.getMusicGroupId(), goodsIdList, BigDecimal.ZERO, BigDecimal.ZERO);
|
|
|
}
|
|
@@ -316,25 +316,39 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
|
|
|
SubjectChange subjectChange = new SubjectChange();
|
|
|
SubjectChange studentLastChange = subjectChangeDao.getStudentLastChange(studentId, musicGroupId);
|
|
|
if (studentLastChange != null) {
|
|
|
+ Set<Integer> refundSellOrderGoodsIds = getRefundGoodsId(subjectChange.getOrderId().longValue());
|
|
|
subjectChange.setStudentId(studentLastChange.getStudentId());
|
|
|
subjectChange.setOrderId(studentLastChange.getOrderId());
|
|
|
subjectChange.setCooperationOrganId(studentLastChange.getCooperationOrganId());
|
|
|
subjectChange.setMusicGroupId(studentLastChange.getMusicGroupId());
|
|
|
subjectChange.setOriginalCourseFee(studentLastChange.getChangeCourseFee());
|
|
|
subjectChange.setKitGroupPurchaseType(studentLastChange.getKitGroupPurchaseType());
|
|
|
- subjectChange.setOriginalCost(studentLastChange.getChangeCost());
|
|
|
|
|
|
- if (studentLastChange.getChangeMusical() != null) {
|
|
|
+ BigDecimal originalCost = BigDecimal.ZERO;
|
|
|
+ if (studentLastChange.getChangeMusical() != null && !refundSellOrderGoodsIds.contains(studentLastChange.getChangeMusical())) {
|
|
|
subjectChange.setOriginalMusical(studentLastChange.getChangeMusical());
|
|
|
subjectChange.setOriginalMusicalGoods(goodsDao.get(studentLastChange.getChangeMusical()));
|
|
|
subjectChange.setOriginalMusicalPrice(studentLastChange.getChangeMusicalPrice());
|
|
|
}
|
|
|
|
|
|
if (studentLastChange.getChangeAccessories() != null) {
|
|
|
- subjectChange.setOriginalAccessories(studentLastChange.getChangeAccessories());
|
|
|
- subjectChange.setOriginalAccessoriesGoods(goodsDao.findGoodsByIds(studentLastChange.getChangeAccessories()));
|
|
|
- subjectChange.setOriginalAccessoriesPrice(studentLastChange.getChangeAccessoriesPrice());
|
|
|
+ String[] goodsIdArr = studentLastChange.getChangeAccessories().split(",");
|
|
|
+ String accessoriesId = "";
|
|
|
+ for (String goodsId : goodsIdArr) {
|
|
|
+ if (refundSellOrderGoodsIds.contains(Integer.parseInt(goodsId))) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ accessoriesId += StringUtils.isBlank(accessoriesId) ? goodsId : "," + goodsId;
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(accessoriesId)) {
|
|
|
+ subjectChange.setOriginalAccessories(accessoriesId);
|
|
|
+ List<Goods> accessoriesGoods = goodsDao.findGoodsByIds(accessoriesId);
|
|
|
+ subjectChange.setOriginalAccessoriesGoods(accessoriesGoods);
|
|
|
+ BigDecimal price = accessoriesGoods.stream().map(Goods::getGroupPurchasePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ subjectChange.setOriginalAccessoriesPrice(price);
|
|
|
+ }
|
|
|
}
|
|
|
+ subjectChange.setOriginalCost(originalCost);
|
|
|
return subjectChange;
|
|
|
}
|
|
|
//2.1不存在历史的更换
|
|
@@ -342,6 +356,9 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
|
|
|
if (details.size() <= 0) {
|
|
|
return null;
|
|
|
}
|
|
|
+
|
|
|
+ Set<Integer> refundSellOrderGoodsIds = getRefundGoodsId(details.get(0).getPaymentOrderId());
|
|
|
+
|
|
|
MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
|
|
|
subjectChange.setStudentId(studentId);
|
|
|
subjectChange.setOrganId(musicGroup.getOrganId());
|
|
@@ -355,10 +372,12 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
|
|
|
subjectChange.setOriginalCourseFee(detail.getPrice());
|
|
|
} else if (detail.getType().equals(OrderDetailTypeEnum.MUSICAL)) {
|
|
|
subjectChange.setKitGroupPurchaseType(detail.getKitGroupPurchaseType());
|
|
|
- int goodsId = Integer.parseInt(detail.getGoodsIdList());
|
|
|
- subjectChange.setOriginalMusical(goodsId);
|
|
|
- subjectChange.setOriginalMusicalGoods(goodsDao.get(goodsId));
|
|
|
- subjectChange.setOriginalMusicalPrice(detail.getPrice());
|
|
|
+ Integer goodsId = Integer.parseInt(detail.getGoodsIdList());
|
|
|
+ if (!refundSellOrderGoodsIds.contains(goodsId)) {
|
|
|
+ subjectChange.setOriginalMusical(goodsId);
|
|
|
+ subjectChange.setOriginalMusicalGoods(goodsDao.get(goodsId));
|
|
|
+ subjectChange.setOriginalMusicalPrice(detail.getPrice());
|
|
|
+ }
|
|
|
} else {
|
|
|
if (StringUtils.isNotBlank(detail.getGoodsIdList())) {
|
|
|
accessoriesPrice = accessoriesPrice.add(detail.getPrice());
|
|
@@ -367,9 +386,20 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
|
|
|
}
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(accessoriesIds)) {
|
|
|
- subjectChange.setOriginalAccessories(accessoriesIds);
|
|
|
- subjectChange.setOriginalAccessoriesGoods(goodsDao.findGoodsByIds(accessoriesIds));
|
|
|
- subjectChange.setOriginalAccessoriesPrice(accessoriesPrice);
|
|
|
+ String[] goodsIdArr = accessoriesIds.split(",");
|
|
|
+ String accessoriesId = "";
|
|
|
+ for (String goodsId : goodsIdArr) {
|
|
|
+ if (refundSellOrderGoodsIds.contains(Integer.parseInt(goodsId))) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ accessoriesId += StringUtils.isBlank(accessoriesId) ? goodsId : "," + goodsId;
|
|
|
+ }
|
|
|
+
|
|
|
+ subjectChange.setOriginalAccessories(accessoriesId);
|
|
|
+ List<Goods> accessoriesGoods = goodsDao.findGoodsByIds(accessoriesId);
|
|
|
+ subjectChange.setOriginalAccessoriesGoods(accessoriesGoods);
|
|
|
+ BigDecimal price = accessoriesGoods.stream().map(Goods::getGroupPurchasePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ subjectChange.setOriginalAccessoriesPrice(price);
|
|
|
}
|
|
|
Long orderId = details.get(0).getPaymentOrderId();
|
|
|
//2.2 计算销售成本
|
|
@@ -378,6 +408,14 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
|
|
|
return subjectChange;
|
|
|
}
|
|
|
|
|
|
+ private Set<Integer> getRefundGoodsId(Long orderId) {
|
|
|
+ List<SellOrder> refundSellOrders = sellOrderService.getRefundSellOrder(orderId);
|
|
|
+ Set<Integer> refundSellOrderGoodsIds = refundSellOrders.stream().filter(e -> e.getParentGoodsId() == null).map(SellOrder::getGoodsId).collect(Collectors.toSet());
|
|
|
+ Set<Integer> refundSellOrderParentGoodsId = refundSellOrders.stream().filter(e -> e.getParentGoodsId() != null).map(SellOrder::getParentGoodsId).collect(Collectors.toSet());
|
|
|
+ refundSellOrderGoodsIds.addAll(refundSellOrderParentGoodsId);
|
|
|
+ return refundSellOrderGoodsIds;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public Boolean orderCallback(StudentPaymentOrder studentPaymentOrder) {
|
|
@@ -440,7 +478,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
|
|
|
if (StringUtils.isNotBlank(goodsIds)) {
|
|
|
List<Integer> goodsIdList = Arrays.stream(goodsIds.split(",")).map(Integer::parseInt).collect(Collectors.toList());
|
|
|
//退原订单商品
|
|
|
- sellOrderService.refundByOrderId(subjectChange.getOriginalOrderId().longValue());
|
|
|
+ sellOrderService.refundByOrderId(subjectChange.getOriginalOrderId().longValue(), false);
|
|
|
//添加新订单
|
|
|
this.addSellOrder(studentPaymentOrder.getId(), subjectChange.getMusicGroupId(), goodsIdList, studentPaymentOrder.getExpectAmount(), studentPaymentOrder.getBalancePaymentAmount());
|
|
|
}
|