|
@@ -1,5 +1,6 @@
|
|
|
package com.ym.mec.biz.service.impl;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.ym.mec.biz.dal.dao.*;
|
|
|
import com.ym.mec.biz.dal.dto.StudentVisitDto;
|
|
@@ -26,6 +27,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
+import java.util.stream.Stream;
|
|
|
|
|
|
@Service
|
|
|
public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectChange> implements SubjectChangeService {
|
|
@@ -62,6 +64,12 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
|
|
|
private StudentRegistrationService studentRegistrationService;
|
|
|
@Autowired
|
|
|
private ContractService contractService;
|
|
|
+ @Autowired
|
|
|
+ private SysPaymentConfigService sysPaymentConfigService;
|
|
|
+ @Autowired
|
|
|
+ private StudentPaymentOrderDao studentPaymentOrderDao;
|
|
|
+ @Autowired
|
|
|
+ private SellOrderService sellOrderService;
|
|
|
|
|
|
private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
|
|
|
|
@@ -218,6 +226,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
|
|
|
}
|
|
|
Date nowDate = new Date();
|
|
|
SubjectChange studentOriginal = getStudentOriginal(subjectChange.getStudentId(), subjectChange.getMusicGroupId());
|
|
|
+ subjectChange.setOriginalOrderId(studentOriginal.getOrderId());
|
|
|
subjectChange.setOriginalCost(studentOriginal.getOriginalCost());
|
|
|
subjectChange.setStatus(SubjectChangeStatusEnum.WAIT_PAY);
|
|
|
MusicGroup musicGroup = musicGroupDao.get(subjectChange.getMusicGroupId());
|
|
@@ -258,24 +267,30 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
|
|
|
subjectChange.setVersion(0);
|
|
|
subjectChangeDao.insert(subjectChange);
|
|
|
|
|
|
-// if (amountMargin.compareTo(BigDecimal.ZERO) <= 0) {
|
|
|
-// String orderNo = idGeneratorService.generatorId("payment") + "";
|
|
|
-// StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
|
|
|
-// studentPaymentOrder.setUserId(subjectChange.getStudentId());
|
|
|
-// studentPaymentOrder.setGroupType(GroupType.SUBJECT_CHANGE);
|
|
|
-// studentPaymentOrder.setOrderNo(orderNo);
|
|
|
-// studentPaymentOrder.setType(OrderTypeEnum.SUBJECT_CHANGE);
|
|
|
-// studentPaymentOrder.setExpectAmount(BigDecimal.ZERO);
|
|
|
-// studentPaymentOrder.setActualAmount(BigDecimal.ZERO);
|
|
|
-// studentPaymentOrder.setBalancePaymentAmount(BigDecimal.ZERO);
|
|
|
-// studentPaymentOrder.setStatus(DealStatusEnum.SUCCESS);
|
|
|
-// studentPaymentOrder.setMusicGroupId(subjectChange.getId().toString());
|
|
|
-// studentPaymentOrder.setPaymentChannel("BALANCE");
|
|
|
-// studentPaymentOrder.setUpdateTime(nowDate);
|
|
|
-// studentPaymentOrder.setOrganId(subjectChange.getOrganId());
|
|
|
-// studentPaymentOrder.setRoutingOrganId(subjectChange.getOrganId());
|
|
|
-// studentPaymentOrderService.insert(studentPaymentOrder);
|
|
|
-// }
|
|
|
+ if (amountMargin.compareTo(BigDecimal.ZERO) <= 0 && StringUtils.isNotBlank(goodsIds)) {
|
|
|
+ String orderNo = idGeneratorService.generatorId("payment") + "";
|
|
|
+ StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
|
|
|
+ studentPaymentOrder.setUserId(subjectChange.getStudentId());
|
|
|
+ studentPaymentOrder.setGroupType(GroupType.SUBJECT_CHANGE);
|
|
|
+ studentPaymentOrder.setOrderNo(orderNo);
|
|
|
+ studentPaymentOrder.setType(OrderTypeEnum.SUBJECT_CHANGE);
|
|
|
+ studentPaymentOrder.setExpectAmount(BigDecimal.ZERO);
|
|
|
+ studentPaymentOrder.setActualAmount(BigDecimal.ZERO);
|
|
|
+ studentPaymentOrder.setBalancePaymentAmount(BigDecimal.ZERO);
|
|
|
+ studentPaymentOrder.setStatus(DealStatusEnum.SUCCESS);
|
|
|
+ studentPaymentOrder.setMusicGroupId(subjectChange.getId().toString());
|
|
|
+ studentPaymentOrder.setPaymentChannel("BALANCE");
|
|
|
+ studentPaymentOrder.setUpdateTime(nowDate);
|
|
|
+ studentPaymentOrder.setOrganId(subjectChange.getOrganId());
|
|
|
+ studentPaymentOrder.setRoutingOrganId(subjectChange.getOrganId());
|
|
|
+ studentPaymentOrderService.insert(studentPaymentOrder);
|
|
|
+ List<Integer> goodsIdList = Arrays.stream(goodsIds.split(",")).map(Integer::parseInt).collect(Collectors.toList());
|
|
|
+
|
|
|
+ //退原订单商品
|
|
|
+ sellOrderService.refundByOrderId(subjectChange.getOriginalOrderId().longValue());
|
|
|
+ //添加新订单
|
|
|
+ this.addSellOrder(studentPaymentOrder.getId(), subjectChange.getMusicGroupId(), goodsIdList, BigDecimal.ZERO, BigDecimal.ZERO);
|
|
|
+ }
|
|
|
return subjectChange;
|
|
|
}
|
|
|
|
|
@@ -330,6 +345,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
|
|
|
subjectChange.setOrganId(musicGroup.getOrganId());
|
|
|
subjectChange.setCooperationOrganId(musicGroup.getCooperationOrganId());
|
|
|
subjectChange.setMusicGroupId(musicGroupId);
|
|
|
+ subjectChange.setOrderId(details.get(0).getPaymentOrderId().intValue());
|
|
|
String accessoriesIds = "";
|
|
|
BigDecimal accessoriesPrice = BigDecimal.ZERO;
|
|
|
for (StudentPaymentOrderDetail detail : details) {
|
|
@@ -412,6 +428,20 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
|
|
|
if (this.update(subjectChange) <= 0) {
|
|
|
throw new BizException("维修单更新失败");
|
|
|
}
|
|
|
+ String goodsIds = "";
|
|
|
+ if (subjectChange.getChangeMusical() != null) {
|
|
|
+ goodsIds += subjectChange.getChangeMusical() + "";
|
|
|
+ }
|
|
|
+ if (subjectChange.getChangeAccessories() != null) {
|
|
|
+ goodsIds += StringUtils.isNotBlank(goodsIds) ? "," + subjectChange.getChangeAccessories() : subjectChange.getChangeAccessories();
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(goodsIds)) {
|
|
|
+ List<Integer> goodsIdList = Arrays.stream(goodsIds.split(",")).map(Integer::parseInt).collect(Collectors.toList());
|
|
|
+ //退原订单商品
|
|
|
+ sellOrderService.refundByOrderId(subjectChange.getOriginalOrderId().longValue());
|
|
|
+ //添加新订单
|
|
|
+ this.addSellOrder(studentPaymentOrder.getId(), subjectChange.getMusicGroupId(), goodsIdList, studentPaymentOrder.getExpectAmount(), studentPaymentOrder.getBalancePaymentAmount());
|
|
|
+ }
|
|
|
|
|
|
//插入交易明细
|
|
|
BigDecimal amount = studentPaymentOrder.getActualAmount();
|
|
@@ -512,4 +542,111 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
|
|
|
}
|
|
|
return subjectChange;
|
|
|
}
|
|
|
+
|
|
|
+ @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 (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.getGroupPurchasePrice());
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ BigDecimal hasRouteBalance = BigDecimal.ZERO;
|
|
|
+ BigDecimal goodsTotalBalance = balance == null ? BigDecimal.ZERO : balance;
|
|
|
+ List<SellOrder> sellOrders = new ArrayList<>();
|
|
|
+
|
|
|
+ AccountType accountType = sysPaymentConfigService.checkAccountType(PaymentChannelEnum.valueOf(order.getPaymentChannel()), order.getMerNos());
|
|
|
+
|
|
|
+ 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(goodsTotalPrice, 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.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);
|
|
|
+ }
|
|
|
+
|
|
|
+ StockType goodsStockType = StockType.INTERNAL;
|
|
|
+ for (Goods goods : goodies) {
|
|
|
+ if (goods.getId().equals(goodsId)) {
|
|
|
+ goodsStockType = goods.getStockType();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //库存类型
|
|
|
+ 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
|
|
|
+
|
|
|
+ sellOrders.add(sellOrder);
|
|
|
+ i++;
|
|
|
+ }
|
|
|
+ sellOrderDao.batchInsert(sellOrders);
|
|
|
+ return sellOrders;
|
|
|
+ }
|
|
|
}
|