|
@@ -27,10 +27,7 @@ import org.springframework.scheduling.annotation.Scheduled;
|
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
-import java.util.Date;
|
|
|
|
|
-import java.util.List;
|
|
|
|
|
-import java.util.Map;
|
|
|
|
|
-import java.util.Objects;
|
|
|
|
|
|
|
+import java.util.*;
|
|
|
import java.util.concurrent.LinkedBlockingQueue;
|
|
import java.util.concurrent.LinkedBlockingQueue;
|
|
|
import java.util.concurrent.ThreadPoolExecutor;
|
|
import java.util.concurrent.ThreadPoolExecutor;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
import java.util.concurrent.TimeUnit;
|
|
@@ -66,49 +63,89 @@ public class TradeOrderTask {
|
|
|
if (CollUtil.isNotEmpty(kwoTradeOrders)) {
|
|
if (CollUtil.isNotEmpty(kwoTradeOrders)) {
|
|
|
for (KwoTradeOrder kwoTradeOrder : kwoTradeOrders) {
|
|
for (KwoTradeOrder kwoTradeOrder : kwoTradeOrders) {
|
|
|
List<KwtLogisticsOrderVO> logisticOrderList = transportRemoteService.getLogisticOrderList(new OrderFinishParam(kwoTradeOrder.getId()));
|
|
List<KwtLogisticsOrderVO> logisticOrderList = transportRemoteService.getLogisticOrderList(new OrderFinishParam(kwoTradeOrder.getId()));
|
|
|
- if (logisticOrderList.stream().anyMatch(d -> Objects.equals(d.getStatus(), LogisticsOrderV1Enum.NEARING_COMPLETION.getCode()))) {
|
|
|
|
|
- continue;
|
|
|
|
|
- }
|
|
|
|
|
- threadPoolExecutor.execute(() -> {
|
|
|
|
|
- try {
|
|
|
|
|
- List<KwoTradeOrderUnit> orderUnits = kwoTradeOrderUnitMapper.selectList(new LambdaQueryWrapper<KwoTradeOrderUnit>().eq(KwoTradeOrderUnit::getTOrderId, kwoTradeOrder.getId())
|
|
|
|
|
- .eq(KwoTradeOrderUnit::getDelFlag, 0)
|
|
|
|
|
- );
|
|
|
|
|
- if (CollUtil.isEmpty(orderUnits) || orderUnits.size() < 2) {
|
|
|
|
|
- log.error("订单异常,未找到关联企业。订单id {}", kwoTradeOrder.getId());
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
- Map<String, KwoTradeOrderUnit> unitMap = orderUnits.stream().collect(Collectors.toMap(KwoTradeOrderUnit::getUnitType, Function.identity(), (a, b) -> a));
|
|
|
|
|
- BigDecimal sum;
|
|
|
|
|
- if (Objects.equals(kwoTradeOrder.getChargeType(), 1)) {
|
|
|
|
|
- //按装货量
|
|
|
|
|
- sum = logisticOrderList.stream().map(KwtLogisticsOrderVO::getLoadAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
|
- } else {
|
|
|
|
|
- sum = logisticOrderList.stream().map(KwtLogisticsOrderVO::getUnloadAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
|
|
|
+ //没有订单
|
|
|
|
|
+ if (CollUtil.isEmpty(logisticOrderList)) {
|
|
|
|
|
+ threadPoolExecutor.execute(() -> {
|
|
|
|
|
+ log.info("没有物流订单结算");
|
|
|
|
|
+ try {
|
|
|
|
|
+ List<KwoTradeOrderUnit> orderUnits = kwoTradeOrderUnitMapper.selectList(new LambdaQueryWrapper<KwoTradeOrderUnit>().eq(KwoTradeOrderUnit::getTOrderId, kwoTradeOrder.getId())
|
|
|
|
|
+ .eq(KwoTradeOrderUnit::getDelFlag, 0)
|
|
|
|
|
+ );
|
|
|
|
|
+ if (CollUtil.isEmpty(orderUnits) || orderUnits.size() < 2) {
|
|
|
|
|
+ log.error("订单异常,未找到关联企业。订单id {}", kwoTradeOrder.getId());
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ Map<String, KwoTradeOrderUnit> unitMap = orderUnits.stream().collect(Collectors.toMap(KwoTradeOrderUnit::getUnitType, Function.identity(), (a, b) -> a));
|
|
|
|
|
+ BigDecimal sum = new BigDecimal("0");
|
|
|
|
|
+
|
|
|
|
|
+ KwoTradeOrderGoods kwoTradeOrderGoods = kwoTradeOrderGoodsMapper.selectOne(new LambdaQueryWrapper<KwoTradeOrderGoods>()
|
|
|
|
|
+ .eq(KwoTradeOrderGoods::getDelFlag, 0)
|
|
|
|
|
+ .eq(KwoTradeOrderGoods::getTOrderId, kwoTradeOrder.getId())
|
|
|
|
|
+ .last("limit 1")
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ //更新贸易订单状态
|
|
|
|
|
+ WalletFreeze walletFreeze = new WalletFreeze();
|
|
|
|
|
+ walletFreeze.setBuyEntId(unitMap.getOrDefault("1", new KwoTradeOrderUnit()).getEntId());
|
|
|
|
|
+ walletFreeze.setSaleEntId(unitMap.getOrDefault("2", new KwoTradeOrderUnit()).getEntId());
|
|
|
|
|
+ walletFreeze.setMoney(NumberUtil.mul(sum, kwoTradeOrderGoods.getUnitPrice()));
|
|
|
|
|
+ walletFreeze.setTTradeOrderId(kwoTradeOrder.getId());
|
|
|
|
|
+ walletFreeze.setOrderNo(kwoTradeOrder.getTOrderNo());
|
|
|
|
|
+ log.info("结算 {}", JSONObject.toJSONString(walletFreeze));
|
|
|
|
|
+ BaseResult<Boolean> booleanBaseResult = paymentDubboService.dealMoney(walletFreeze);
|
|
|
|
|
+ log.info("结算结果:{}", JSONObject.toJSONString(booleanBaseResult));
|
|
|
|
|
+
|
|
|
|
|
+ kwoTradeOrder.setStatus(TradeOrderStatusEnum.SUCCESS.getCode());
|
|
|
|
|
+ kwoTradeOrderMapper.updateById(kwoTradeOrder);
|
|
|
|
|
+ } catch (Exception ex) {
|
|
|
|
|
+ log.error("更新订单异常{}", ex.getMessage());
|
|
|
}
|
|
}
|
|
|
- KwoTradeOrderGoods kwoTradeOrderGoods = kwoTradeOrderGoodsMapper.selectOne(new LambdaQueryWrapper<KwoTradeOrderGoods>()
|
|
|
|
|
- .eq(KwoTradeOrderGoods::getDelFlag, 0)
|
|
|
|
|
- .eq(KwoTradeOrderGoods::getTOrderId, kwoTradeOrder.getId())
|
|
|
|
|
- .last("limit 1")
|
|
|
|
|
- );
|
|
|
|
|
|
|
+ });
|
|
|
|
|
+ } else {
|
|
|
|
|
+ if (logisticOrderList.stream().allMatch(d -> Arrays.asList(LogisticsOrderV1Enum.COMPLETED.getCode(), LogisticsOrderV1Enum.REJECT_ORDER.getCode()).contains(d.getStatus()))) {
|
|
|
|
|
+ threadPoolExecutor.execute(() -> {
|
|
|
|
|
+ try {
|
|
|
|
|
+ List<KwoTradeOrderUnit> orderUnits = kwoTradeOrderUnitMapper.selectList(new LambdaQueryWrapper<KwoTradeOrderUnit>().eq(KwoTradeOrderUnit::getTOrderId, kwoTradeOrder.getId())
|
|
|
|
|
+ .eq(KwoTradeOrderUnit::getDelFlag, 0)
|
|
|
|
|
+ );
|
|
|
|
|
+ if (CollUtil.isEmpty(orderUnits) || orderUnits.size() < 2) {
|
|
|
|
|
+ log.error("订单异常,未找到关联企业。订单id {}", kwoTradeOrder.getId());
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ Map<String, KwoTradeOrderUnit> unitMap = orderUnits.stream().collect(Collectors.toMap(KwoTradeOrderUnit::getUnitType, Function.identity(), (a, b) -> a));
|
|
|
|
|
+ BigDecimal sum;
|
|
|
|
|
+ if (Objects.equals(kwoTradeOrder.getChargeType(), 1)) {
|
|
|
|
|
+ //按装货量
|
|
|
|
|
+ sum = logisticOrderList.stream().map(KwtLogisticsOrderVO::getLoadAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ sum = logisticOrderList.stream().map(KwtLogisticsOrderVO::getUnloadAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
|
+ }
|
|
|
|
|
+ KwoTradeOrderGoods kwoTradeOrderGoods = kwoTradeOrderGoodsMapper.selectOne(new LambdaQueryWrapper<KwoTradeOrderGoods>()
|
|
|
|
|
+ .eq(KwoTradeOrderGoods::getDelFlag, 0)
|
|
|
|
|
+ .eq(KwoTradeOrderGoods::getTOrderId, kwoTradeOrder.getId())
|
|
|
|
|
+ .last("limit 1")
|
|
|
|
|
+ );
|
|
|
|
|
|
|
|
- //更新贸易订单状态
|
|
|
|
|
- WalletFreeze walletFreeze = new WalletFreeze();
|
|
|
|
|
- walletFreeze.setBuyEntId(unitMap.getOrDefault("1", new KwoTradeOrderUnit()).getEntId());
|
|
|
|
|
- walletFreeze.setSaleEntId(unitMap.getOrDefault("2", new KwoTradeOrderUnit()).getEntId());
|
|
|
|
|
- walletFreeze.setMoney(NumberUtil.mul(sum, kwoTradeOrderGoods.getUnitPrice()));
|
|
|
|
|
- walletFreeze.setTTradeOrderId(kwoTradeOrder.getId());
|
|
|
|
|
- walletFreeze.setOrderNo(kwoTradeOrder.getTOrderNo());
|
|
|
|
|
- log.info("结算 {}", JSONObject.toJSONString(walletFreeze));
|
|
|
|
|
- BaseResult<Boolean> booleanBaseResult = paymentDubboService.dealMoney(walletFreeze);
|
|
|
|
|
- log.info("结算结果:{}", JSONObject.toJSONString(booleanBaseResult));
|
|
|
|
|
|
|
+ //更新贸易订单状态
|
|
|
|
|
+ WalletFreeze walletFreeze = new WalletFreeze();
|
|
|
|
|
+ walletFreeze.setBuyEntId(unitMap.getOrDefault("1", new KwoTradeOrderUnit()).getEntId());
|
|
|
|
|
+ walletFreeze.setSaleEntId(unitMap.getOrDefault("2", new KwoTradeOrderUnit()).getEntId());
|
|
|
|
|
+ walletFreeze.setMoney(NumberUtil.mul(sum, kwoTradeOrderGoods.getUnitPrice()));
|
|
|
|
|
+ walletFreeze.setTTradeOrderId(kwoTradeOrder.getId());
|
|
|
|
|
+ walletFreeze.setOrderNo(kwoTradeOrder.getTOrderNo());
|
|
|
|
|
+ log.info("结算 {}", JSONObject.toJSONString(walletFreeze));
|
|
|
|
|
+ BaseResult<Boolean> booleanBaseResult = paymentDubboService.dealMoney(walletFreeze);
|
|
|
|
|
+ log.info("结算结果:{}", JSONObject.toJSONString(booleanBaseResult));
|
|
|
|
|
|
|
|
- kwoTradeOrder.setStatus(TradeOrderStatusEnum.SUCCESS.getCode());
|
|
|
|
|
- kwoTradeOrderMapper.updateById(kwoTradeOrder);
|
|
|
|
|
- } catch (Exception ex) {
|
|
|
|
|
- log.error("更新订单异常{}", ex.getMessage());
|
|
|
|
|
|
|
+ kwoTradeOrder.setStatus(TradeOrderStatusEnum.SUCCESS.getCode());
|
|
|
|
|
+ kwoTradeOrderMapper.updateById(kwoTradeOrder);
|
|
|
|
|
+ } catch (Exception ex) {
|
|
|
|
|
+ log.error("更新订单异常{}", ex.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
}
|
|
}
|
|
|
- });
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|