|
|
@@ -10,10 +10,7 @@ import com.sckw.core.utils.StringUtils;
|
|
|
import com.sckw.core.web.response.HttpResult;
|
|
|
import com.sckw.mongo.model.SckwTradeOrder;
|
|
|
import com.sckw.order.api.dubbo.TradeOrderInfoService;
|
|
|
-import com.sckw.order.api.model.ContractSignCompletedParam;
|
|
|
-import com.sckw.order.api.model.OrderDetailRes;
|
|
|
-import com.sckw.order.api.model.UpdateOrderAmountParam;
|
|
|
-import com.sckw.order.api.model.UpdateOrderStatusParam;
|
|
|
+import com.sckw.order.api.model.*;
|
|
|
import com.sckw.order.model.KwoTradeOrder;
|
|
|
import com.sckw.order.model.KwoTradeOrderContract;
|
|
|
import com.sckw.order.model.KwoTradeOrderTrack;
|
|
|
@@ -92,19 +89,30 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
|
|
|
SckwTradeOrder updateParam = new SckwTradeOrder();
|
|
|
updateParam.setTOrderId(order.getId()).setStatus(order.getStatus()).setUpdateBy(param.getUpdateBy())
|
|
|
.setUpdateByName(param.getUpdateByName()).setUpdateTime(new Date());
|
|
|
- saveMongoDb(3, updateParam);
|
|
|
+ saveMongoDb(updateParam);
|
|
|
return HttpResult.ok();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
public HttpResult updateOrderAmount(UpdateOrderAmountParam param) {
|
|
|
- if (Objects.isNull(param.getUpdateBy()) || StringUtils.isBlank(param.getUpdateByName())) {
|
|
|
- return HttpResult.error("操作人信息不能为空!");
|
|
|
- }
|
|
|
+ return HttpResult.ok();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public HttpResult createOrCancelLogisticsOrder(CreateOrCancelLogisticsOrderParam param) {
|
|
|
Long id = param.getTOrderId();
|
|
|
+ BigDecimal entrustAmount = param.getEntrustAmount();
|
|
|
Long updateBy = param.getUpdateBy();
|
|
|
- String lockKey = String.format(RedisConstant.GOODS_UPDATE_AMOUNT_KEY, id);
|
|
|
+ String updateByName = param.getUpdateByName();
|
|
|
+ if (Objects.isNull(updateBy) || StringUtils.isBlank(updateByName)) {
|
|
|
+ return HttpResult.error("操作人信息不能为空!");
|
|
|
+ }
|
|
|
+ if (Objects.isNull(entrustAmount)) {
|
|
|
+ return HttpResult.error("任务量不能为空!");
|
|
|
+ }
|
|
|
+ String lockKey = String.format(RedisConstant.TORDER_UPDATE_AMOUNT_KEY, id);
|
|
|
if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 10L, 30L))) {
|
|
|
return HttpResult.error("业务繁忙,请稍后再试!");
|
|
|
}
|
|
|
@@ -116,40 +124,76 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
|
|
|
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 totalEntrustAmount = Objects.isNull(order.getEntrustAmount()) ? entrustAmount : entrustAmount.add(order.getEntrustAmount());
|
|
|
+ if (order.getAmount().compareTo(totalEntrustAmount) < 0) {
|
|
|
+ return HttpResult.error("物流已委托总量不可大于订单总量!");
|
|
|
+ }
|
|
|
+ order.setEntrustAmount(totalEntrustAmount).setUpdateBy(param.getUpdateBy());
|
|
|
+ kwoTradeOrderService.updateById(order);
|
|
|
+ //更新mongodb
|
|
|
+ SckwTradeOrder updateParam = new SckwTradeOrder();
|
|
|
+ updateParam.setTOrderId(order.getId()).setEntrustAmount(totalEntrustAmount)
|
|
|
+ .setUpdateBy(param.getUpdateBy()).setUpdateByName(param.getUpdateByName()).setUpdateTime(new Date());
|
|
|
+ saveMongoDb(updateParam);
|
|
|
+ return HttpResult.ok();
|
|
|
+ } finally {
|
|
|
+ RedissonUtils.unlock(lockKey);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public HttpResult completeLogisticsOrder(CompleteLogisticsOrderParam param) {
|
|
|
+ Long id = param.getTOrderId();
|
|
|
+ BigDecimal entrustAmount = param.getEntrustAmount();
|
|
|
+ BigDecimal actualLoadAmount = param.getActualLoadAmount();
|
|
|
+ BigDecimal actualUnloadAmount = param.getActualUnloadAmount();
|
|
|
+ Long updateBy = param.getUpdateBy();
|
|
|
+ String updateByName = param.getUpdateByName();
|
|
|
+ if (Objects.isNull(updateBy) || StringUtils.isBlank(updateByName)) {
|
|
|
+ return HttpResult.error("操作人信息不能为空!");
|
|
|
+ }
|
|
|
+ if (Objects.isNull(entrustAmount) || Objects.isNull(actualLoadAmount) || Objects.isNull(actualUnloadAmount)) {
|
|
|
+ return HttpResult.error("任务量或装卸量不能为空!");
|
|
|
+ }
|
|
|
+ String lockKey = String.format(RedisConstant.TORDER_UPDATE_AMOUNT_KEY, id);
|
|
|
+ if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 10L, 30L))) {
|
|
|
+ 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("执行中的订单才可物流托运!");
|
|
|
}
|
|
|
- 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);
|
|
|
+ BigDecimal totalEntrustAmount = Objects.isNull(order.getEntrustAmount()) ? entrustAmount : order.getEntrustAmount().add(entrustAmount);
|
|
|
+ BigDecimal totalActualAmount;
|
|
|
+ if (Objects.equals(order.getDeliveryType(), DictEnum.DELIVERY_TYPE_0.getValue())) {
|
|
|
+ totalActualAmount = Objects.isNull(order.getActualAmount()) ? actualLoadAmount : order.getActualAmount().add(actualLoadAmount);
|
|
|
+ } else {
|
|
|
+ totalActualAmount = Objects.isNull(order.getActualAmount()) ? actualUnloadAmount : order.getActualAmount().add(actualUnloadAmount);
|
|
|
}
|
|
|
+ order.setEntrustAmount(totalEntrustAmount).setActualAmount(totalActualAmount).setUpdateBy(param.getUpdateBy());
|
|
|
+ //todo 自动完结订单规则缺少
|
|
|
+// 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)
|
|
|
+ updateParam.setTOrderId(order.getId()).setEntrustAmount(totalEntrustAmount).setActualAmount(totalActualAmount)
|
|
|
.setStatus(order.getStatus()).setUpdateBy(param.getUpdateBy()).setUpdateByName(param.getUpdateByName()).setUpdateTime(new Date());
|
|
|
- saveMongoDb(3, updateParam);
|
|
|
+ saveMongoDb(updateParam);
|
|
|
+ return HttpResult.ok();
|
|
|
} finally {
|
|
|
RedissonUtils.unlock(lockKey);
|
|
|
}
|
|
|
- return HttpResult.ok();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -186,23 +230,20 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
|
|
|
tradeOrders.add(updateParam);
|
|
|
});
|
|
|
kwoTradeOrderTrackService.insertBatch(tracks);
|
|
|
- tradeOrders.forEach(e -> {
|
|
|
- saveMongoDb(3, e);
|
|
|
- });
|
|
|
+ tradeOrders.forEach(this::saveMongoDb);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @desc: mq保存mongodb
|
|
|
* @author: yzc
|
|
|
* @date: 2023-07-17 8:43
|
|
|
- * @Param method:
|
|
|
* @Param order:
|
|
|
* @return: void
|
|
|
*/
|
|
|
- private void saveMongoDb(Integer method, Object order) {
|
|
|
+ private void saveMongoDb(Object order) {
|
|
|
SckwBusSum busSum = new SckwBusSum();
|
|
|
busSum.setBusSumType("tradeOrder");
|
|
|
- busSum.setMethod(method);
|
|
|
+ busSum.setMethod(3);
|
|
|
busSum.setObject(order);
|
|
|
streamBridge.send("sckw-busSum", JSON.toJSONString(busSum));
|
|
|
}
|