|
@@ -1,14 +1,18 @@
|
|
|
package com.sckw.order.dubbo;
|
|
package com.sckw.order.dubbo;
|
|
|
|
|
|
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
import com.sckw.core.utils.StringUtils;
|
|
import com.sckw.core.utils.StringUtils;
|
|
|
import com.sckw.core.web.response.HttpResult;
|
|
import com.sckw.core.web.response.HttpResult;
|
|
|
import com.sckw.order.api.dubbo.RemoteTradeOrderAmountService;
|
|
import com.sckw.order.api.dubbo.RemoteTradeOrderAmountService;
|
|
|
|
|
+import com.sckw.order.api.model.AddressActualAmountParam;
|
|
|
import com.sckw.order.api.model.UpdateAddressActualAmountParam;
|
|
import com.sckw.order.api.model.UpdateAddressActualAmountParam;
|
|
|
import com.sckw.order.api.model.UpdateAddressEntrustAmountParam;
|
|
import com.sckw.order.api.model.UpdateAddressEntrustAmountParam;
|
|
|
import com.sckw.order.enums.DeliveryTypeEnum;
|
|
import com.sckw.order.enums.DeliveryTypeEnum;
|
|
|
|
|
+import com.sckw.order.enums.OrderAddressTypeEnum;
|
|
|
import com.sckw.order.enums.OrderStatusEnum;
|
|
import com.sckw.order.enums.OrderStatusEnum;
|
|
|
import com.sckw.order.model.KwoTradeOrder;
|
|
import com.sckw.order.model.KwoTradeOrder;
|
|
|
import com.sckw.order.model.KwoTradeOrderAmount;
|
|
import com.sckw.order.model.KwoTradeOrderAmount;
|
|
|
|
|
+import com.sckw.order.serivce.KwoTradeOrderAddressService;
|
|
|
import com.sckw.order.serivce.KwoTradeOrderAmountService;
|
|
import com.sckw.order.serivce.KwoTradeOrderAmountService;
|
|
|
import com.sckw.order.serivce.KwoTradeOrderService;
|
|
import com.sckw.order.serivce.KwoTradeOrderService;
|
|
|
import com.sckw.redis.constant.RedisConstant;
|
|
import com.sckw.redis.constant.RedisConstant;
|
|
@@ -19,7 +23,10 @@ import org.apache.dubbo.config.annotation.DubboService;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
|
|
+import java.util.List;
|
|
|
|
|
+import java.util.Map;
|
|
|
import java.util.Objects;
|
|
import java.util.Objects;
|
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* @author: yzc
|
|
* @author: yzc
|
|
@@ -33,6 +40,7 @@ public class RemoteTradeOrderAmountServiceImpl implements RemoteTradeOrderAmount
|
|
|
|
|
|
|
|
private final KwoTradeOrderService tradeOrderService;
|
|
private final KwoTradeOrderService tradeOrderService;
|
|
|
private final KwoTradeOrderAmountService tradeOrderAmountService;
|
|
private final KwoTradeOrderAmountService tradeOrderAmountService;
|
|
|
|
|
+ private final KwoTradeOrderAddressService tradeOrderAddressService;
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@@ -88,39 +96,47 @@ public class RemoteTradeOrderAmountServiceImpl implements RemoteTradeOrderAmount
|
|
|
if (Objects.isNull(tOrderId)) {
|
|
if (Objects.isNull(tOrderId)) {
|
|
|
return HttpResult.error("贸易订单id不能为空!");
|
|
return HttpResult.error("贸易订单id不能为空!");
|
|
|
}
|
|
}
|
|
|
- Long tAddressId = param.getTAddressId();
|
|
|
|
|
- if (Objects.isNull(tAddressId)) {
|
|
|
|
|
- return HttpResult.error("贸易订单地址id不能为空!");
|
|
|
|
|
|
|
+ List<AddressActualAmountParam> addressActualAmountParams = param.getAddressActualAmountParams();
|
|
|
|
|
+ if (CollUtil.isEmpty(addressActualAmountParams) || addressActualAmountParams.size() != 2) {
|
|
|
|
|
+ return HttpResult.error("地址实际成交量参数有误!");
|
|
|
}
|
|
}
|
|
|
- BigDecimal actualLoadAmount = param.getActualLoadAmount();
|
|
|
|
|
- BigDecimal actualUnloadAmount = param.getActualUnloadAmount();
|
|
|
|
|
- if (Objects.isNull(actualLoadAmount) || Objects.isNull(actualUnloadAmount)) {
|
|
|
|
|
- return HttpResult.error("实装实卸量不能为空!");
|
|
|
|
|
|
|
+ Map<Long, BigDecimal> map = addressActualAmountParams.stream().collect(Collectors.toMap
|
|
|
|
|
+ (AddressActualAmountParam::getTAddressId, AddressActualAmountParam::getActualAmount, (k1, k2) -> k1));
|
|
|
|
|
+ if (map.size() != 2) {
|
|
|
|
|
+ return HttpResult.error("地址实际成交量参数有误!");
|
|
|
}
|
|
}
|
|
|
Long updateBy = param.getUpdateBy();
|
|
Long updateBy = param.getUpdateBy();
|
|
|
String updateByName = param.getUpdateByName();
|
|
String updateByName = param.getUpdateByName();
|
|
|
if (Objects.isNull(updateBy) || StringUtils.isBlank(updateByName)) {
|
|
if (Objects.isNull(updateBy) || StringUtils.isBlank(updateByName)) {
|
|
|
return HttpResult.error("操作人信息不能为空!");
|
|
return HttpResult.error("操作人信息不能为空!");
|
|
|
}
|
|
}
|
|
|
- String lockKey = String.format(RedisConstant.TORDER_ADDRESS_UPDATE_ACTUAL_AMOUNT, tAddressId);
|
|
|
|
|
|
|
+ KwoTradeOrder order = tradeOrderService.getById(tOrderId);
|
|
|
|
|
+ if (Objects.isNull(order)) {
|
|
|
|
|
+ return HttpResult.error("订单不存在!");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!Objects.equals(order.getStatus(), OrderStatusEnum.EXECUTING.getCode())) {
|
|
|
|
|
+ return HttpResult.error("执行中的订单才可物流托运!");
|
|
|
|
|
+ }
|
|
|
|
|
+ Map<String, Long> addressTypeMap = tradeOrderAddressService.getByIdsAndTOrderId(map.keySet(), tOrderId);
|
|
|
|
|
+ String addressType = Objects.equals(order.getDeliveryType(), DeliveryTypeEnum.ISSUE.getType()) ? OrderAddressTypeEnum.LOAD.getType() : OrderAddressTypeEnum.UNLOAD.getType();
|
|
|
|
|
+ Long addressId = addressTypeMap.get(addressType);
|
|
|
|
|
+ if (Objects.isNull(addressId)) {
|
|
|
|
|
+ return HttpResult.error("未查询到订单交付类型对应的地址实际成交量参数!");
|
|
|
|
|
+ }
|
|
|
|
|
+ BigDecimal actualAmount = map.get(addressId);
|
|
|
|
|
+ if (Objects.isNull(actualAmount)) {
|
|
|
|
|
+ return HttpResult.error("地址实际成交量不能为空!");
|
|
|
|
|
+ }
|
|
|
|
|
+ KwoTradeOrderAmount orderAmount = tradeOrderAmountService.getByOrderIdAndTaddressId(tOrderId, addressId);
|
|
|
|
|
+ if (Objects.isNull(orderAmount)) {
|
|
|
|
|
+ return HttpResult.error("地址下分配量信息不存在!");
|
|
|
|
|
+ }
|
|
|
|
|
+ String lockKey = String.format(RedisConstant.TORDER_ADDRESS_UPDATE_ACTUAL_AMOUNT, addressId);
|
|
|
if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 5L, 10L))) {
|
|
if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 5L, 10L))) {
|
|
|
return HttpResult.error("业务繁忙,请稍后再试!");
|
|
return HttpResult.error("业务繁忙,请稍后再试!");
|
|
|
}
|
|
}
|
|
|
try {
|
|
try {
|
|
|
- KwoTradeOrder order = tradeOrderService.getById(tOrderId);
|
|
|
|
|
- if (Objects.isNull(order)) {
|
|
|
|
|
- return HttpResult.error("订单不存在!");
|
|
|
|
|
- }
|
|
|
|
|
- if (!Objects.equals(order.getStatus(), OrderStatusEnum.EXECUTING.getCode())) {
|
|
|
|
|
- return HttpResult.error("执行中的订单才可物流托运!");
|
|
|
|
|
- }
|
|
|
|
|
- KwoTradeOrderAmount orderAmount = tradeOrderAmountService.getByOrderIdAndTaddressId(tOrderId, tAddressId);
|
|
|
|
|
- if (Objects.isNull(orderAmount)) {
|
|
|
|
|
- return HttpResult.error("地址下分配量信息不存在!");
|
|
|
|
|
- }
|
|
|
|
|
- BigDecimal addActualAmount = Objects.equals(order.getDeliveryType(), DeliveryTypeEnum.ISSUE.getType())
|
|
|
|
|
- ? actualLoadAmount : actualUnloadAmount;
|
|
|
|
|
- orderAmount.setActualAmount(Objects.isNull(orderAmount.getActualAmount()) ? addActualAmount : orderAmount.getActualAmount().add(addActualAmount))
|
|
|
|
|
|
|
+ orderAmount.setActualAmount(Objects.isNull(orderAmount.getActualAmount()) ? actualAmount : orderAmount.getActualAmount().add(actualAmount))
|
|
|
.setUpdateBy(param.getUpdateBy());
|
|
.setUpdateBy(param.getUpdateBy());
|
|
|
tradeOrderAmountService.updateById(orderAmount);
|
|
tradeOrderAmountService.updateById(orderAmount);
|
|
|
//更新mongodb??
|
|
//更新mongodb??
|