|
|
@@ -105,46 +105,50 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
|
|
|
Long id = param.getTOrderId();
|
|
|
Long updateBy = param.getUpdateBy();
|
|
|
String lockKey = String.format(RedisConstant.GOODS_UPDATE_AMOUNT_KEY, id);
|
|
|
- if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 3L, 3L))) {
|
|
|
+ if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 10L, 30L))) {
|
|
|
return HttpResult.error("业务繁忙,请稍后再试!");
|
|
|
}
|
|
|
- KwoTradeOrder order = kwoTradeOrderService.getById(id);
|
|
|
- if (Objects.isNull(order)) {
|
|
|
- return HttpResult.error("订单不存在!");
|
|
|
- }
|
|
|
- if (!Objects.equals(String.valueOf(order.getStatus()), DictEnum.TORDER_STATUS_4.getValue())) {
|
|
|
- return HttpResult.error("执行中的订单才可物流托运!");
|
|
|
- }
|
|
|
- BigDecimal amount = order.getAmount();
|
|
|
- BigDecimal addEntrustAmount = order.getEntrustAmount();
|
|
|
- if (Objects.nonNull(param.getEntrustAmount())) {
|
|
|
- addEntrustAmount = addEntrustAmount.add(param.getActualAmount());
|
|
|
- if (amount.compareTo(addEntrustAmount) < 0) {
|
|
|
- return HttpResult.error("物流已委托总量不可大于订单总量!");
|
|
|
+ try {
|
|
|
+ KwoTradeOrder order = kwoTradeOrderService.getById(id);
|
|
|
+ if (Objects.isNull(order)) {
|
|
|
+ return HttpResult.error("订单不存在!");
|
|
|
}
|
|
|
- }
|
|
|
- BigDecimal addActualAmount = order.getActualAmount();
|
|
|
- if (Objects.nonNull(param.getActualAmount())) {
|
|
|
- addActualAmount = addActualAmount.add(param.getActualAmount());
|
|
|
- if (amount.compareTo(addActualAmount) < 0) {
|
|
|
- return HttpResult.error("物流实际交付总量不可大于订单总量!");
|
|
|
+ if (!Objects.equals(String.valueOf(order.getStatus()), DictEnum.TORDER_STATUS_4.getValue())) {
|
|
|
+ return HttpResult.error("执行中的订单才可物流托运!");
|
|
|
}
|
|
|
+ BigDecimal amount = order.getAmount();
|
|
|
+ BigDecimal addEntrustAmount = order.getEntrustAmount();
|
|
|
+ if (Objects.nonNull(param.getEntrustAmount())) {
|
|
|
+ addEntrustAmount = addEntrustAmount.add(param.getActualAmount());
|
|
|
+ if (amount.compareTo(addEntrustAmount) < 0) {
|
|
|
+ return HttpResult.error("物流已委托总量不可大于订单总量!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ BigDecimal addActualAmount = order.getActualAmount();
|
|
|
+ if (Objects.nonNull(param.getActualAmount())) {
|
|
|
+ addActualAmount = addActualAmount.add(param.getActualAmount());
|
|
|
+ if (amount.compareTo(addActualAmount) < 0) {
|
|
|
+ return HttpResult.error("物流实际交付总量不可大于订单总量!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ order.setEntrustAmount(addEntrustAmount).setActualAmount(addActualAmount).setUpdateBy(param.getUpdateBy());
|
|
|
+ //已履约量等于订单总量自动完结订单
|
|
|
+ if (amount.compareTo(addActualAmount) == 0) {
|
|
|
+ order.setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_5.getValue()));
|
|
|
+ KwoTradeOrderTrack track = new KwoTradeOrderTrack();
|
|
|
+ track.setTOrderId(order.getId()).setTOrderNo(order.getTOrderNo()).setStatus(order.getStatus())
|
|
|
+ .setCreateBy(updateBy).setUpdateBy(updateBy);
|
|
|
+ kwoTradeOrderTrackService.insert(track);
|
|
|
+ }
|
|
|
+ kwoTradeOrderService.updateById(order);
|
|
|
+ //更新mongodb
|
|
|
+ SckwTradeOrder updateParam = new SckwTradeOrder();
|
|
|
+ updateParam.setTOrderId(order.getId()).setEntrustAmount(addEntrustAmount).setActualAmount(addActualAmount)
|
|
|
+ .setStatus(order.getStatus()).setUpdateBy(param.getUpdateBy()).setUpdateByName(param.getUpdateByName()).setUpdateTime(new Date());
|
|
|
+ saveMongoDb(3, updateParam);
|
|
|
+ } finally {
|
|
|
+ RedissonUtils.unlock(lockKey);
|
|
|
}
|
|
|
- order.setEntrustAmount(addEntrustAmount).setActualAmount(addActualAmount).setUpdateBy(param.getUpdateBy());
|
|
|
- //已履约量等于订单总量自动完结订单
|
|
|
- if (amount.compareTo(addActualAmount) == 0) {
|
|
|
- order.setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_5.getValue()));
|
|
|
- KwoTradeOrderTrack track = new KwoTradeOrderTrack();
|
|
|
- track.setTOrderId(order.getId()).setTOrderNo(order.getTOrderNo()).setStatus(order.getStatus())
|
|
|
- .setCreateBy(updateBy).setUpdateBy(updateBy);
|
|
|
- kwoTradeOrderTrackService.insert(track);
|
|
|
- }
|
|
|
- kwoTradeOrderService.updateById(order);
|
|
|
- //更新mongodb
|
|
|
- SckwTradeOrder updateParam = new SckwTradeOrder();
|
|
|
- updateParam.setTOrderId(order.getId()).setEntrustAmount(addEntrustAmount).setActualAmount(addActualAmount)
|
|
|
- .setStatus(order.getStatus()).setUpdateBy(param.getUpdateBy()).setUpdateByName(param.getUpdateByName()).setUpdateTime(new Date());
|
|
|
- saveMongoDb(3, updateParam);
|
|
|
return HttpResult.ok();
|
|
|
}
|
|
|
|