|
@@ -34,6 +34,7 @@ import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
|
public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<Integer, ReplacementInstrumentActivity> implements ReplacementInstrumentActivityService {
|
|
@@ -71,6 +72,12 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
|
|
|
private ReplacementInstrumentCooperationDao replacementInstrumentCooperationDao;
|
|
|
@Autowired
|
|
|
private GoodsDao goodsDao;
|
|
|
+ @Autowired
|
|
|
+ private GoodsService goodsService;
|
|
|
+ @Autowired
|
|
|
+ private SysPaymentConfigService sysPaymentConfigService;
|
|
|
+ @Autowired
|
|
|
+ private SellOrderDao sellOrderDao;
|
|
|
|
|
|
private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
|
|
|
|
@@ -178,6 +185,10 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
|
|
|
ReplacementInstrumentActivity replacementInstrumentActivity = replacementInstrumentActivityDao.getLock(replacementPayDto.getId());
|
|
|
Integer userId = replacementInstrumentActivity.getUserId();
|
|
|
|
|
|
+ if (replacementInstrumentActivity.getGoodsId() == null) {
|
|
|
+ throw new BizException("数据维护中,请稍后再支付");
|
|
|
+ }
|
|
|
+
|
|
|
//处理关闭订单
|
|
|
if (replacementInstrumentActivity.getPayStatus().equals(1) && replacementPayDto.getRePay()) {
|
|
|
StudentPaymentOrder oldOrder = studentPaymentOrderService.getUserReplacementIngOrder(userId, replacementInstrumentActivity.getId());
|
|
@@ -338,6 +349,8 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
|
|
|
rechargeDetail.setChannel(studentPaymentOrder.getPaymentChannel());
|
|
|
sysUserCashAccountDetailService.insert(paymentDetail);
|
|
|
}
|
|
|
+ //添加sell_order
|
|
|
+ addSellOrder(studentPaymentOrder, replacementInstrumentActivity);
|
|
|
try {
|
|
|
contractService.transferProduceContract(userId, null);
|
|
|
} catch (Exception e) {
|
|
@@ -394,4 +407,56 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
|
|
|
pageInfo.setRows(dataList);
|
|
|
return pageInfo;
|
|
|
}
|
|
|
+
|
|
|
+ private List<SellOrder> addSellOrder(StudentPaymentOrder order, ReplacementInstrumentActivity replacementInstrumentActivity) {
|
|
|
+ if (replacementInstrumentActivity.getGoodsId() == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ List<Goods> goodies = new ArrayList<>();
|
|
|
+ Goods goods = goodsDao.get(replacementInstrumentActivity.getInstrumentsId());
|
|
|
+ goodies.add(goods);
|
|
|
+ if (goods.getComplementGoodsIdList() != null) {
|
|
|
+ goodies = goodsDao.findGoodsByIds(goods.getComplementGoodsIdList());
|
|
|
+ }
|
|
|
+ Map<Integer, BigDecimal> groupPurchasePriceMap = goodies.stream().collect(Collectors.toMap(Goods::getId, Goods::getGroupPurchasePrice));
|
|
|
+ BigDecimal goodsTotalPrice = goodies.stream().map(Goods::getGroupPurchasePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ AccountType accountType = sysPaymentConfigService.checkAccountType(PaymentChannelEnum.valueOf(order.getPaymentChannel()), order.getMerNos());
|
|
|
+
|
|
|
+ List<Integer> goodsIds = new ArrayList<>();
|
|
|
+ List<SellOrder> sellOrders = goodsService.subtractStock(goodsIds, accountType);
|
|
|
+
|
|
|
+ BigDecimal hasRouteSellOrderExpectAmount = BigDecimal.ZERO; //已分配预计金额
|
|
|
+ BigDecimal hasRouteSellOrderBalance = BigDecimal.ZERO; //已分配余额
|
|
|
+
|
|
|
+ int i = 1;
|
|
|
+ for (SellOrder sellOrder : sellOrders) {
|
|
|
+ BigDecimal sellOrderExpectAmount = order.getExpectAmount().compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO : groupPurchasePriceMap.get(sellOrder.getGoodsId()).multiply(order.getExpectAmount()).divide(goodsTotalPrice, 2, BigDecimal.ROUND_DOWN);
|
|
|
+ BigDecimal sellOrderBalance = order.getExpectAmount().compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO : groupPurchasePriceMap.get(sellOrder.getGoodsId()).multiply(order.getBalancePaymentAmount()).divide(goodsTotalPrice, 2, BigDecimal.ROUND_DOWN);
|
|
|
+ if (i == sellOrders.size()) {
|
|
|
+ sellOrderExpectAmount = order.getExpectAmount().subtract(hasRouteSellOrderExpectAmount);
|
|
|
+ sellOrderBalance = order.getBalancePaymentAmount().subtract(hasRouteSellOrderBalance);
|
|
|
+ }
|
|
|
+ sellOrder.setOrganId(order.getOrganId());
|
|
|
+ sellOrder.setTransNo(order.getTransNo());
|
|
|
+ sellOrder.setOrderId(order.getId());
|
|
|
+ sellOrder.setCooperationOrganId(replacementInstrumentActivity.getCooperationOrganId());
|
|
|
+ sellOrder.setOrderNo(order.getOrderNo());
|
|
|
+ sellOrder.setActualAmount(sellOrderExpectAmount.subtract(sellOrderBalance));
|
|
|
+ sellOrder.setBalanceAmount(sellOrderBalance);
|
|
|
+ sellOrder.setExpectAmount(sellOrderExpectAmount);
|
|
|
+ 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());
|
|
|
+ i++;
|
|
|
+ }
|
|
|
+ if (sellOrders.size() > 0) {
|
|
|
+ sellOrderDao.batchInsert(sellOrders);
|
|
|
+ }
|
|
|
+ return sellOrders;
|
|
|
+ }
|
|
|
}
|