|
@@ -1,23 +1,38 @@
|
|
|
package com.ydd.app.service.impl;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
-import com.ydd.app.dto.OrderValuationDto;
|
|
|
-import com.ydd.app.dto.OrderValuationReq;
|
|
|
-import com.ydd.app.dto.ValuationRes;
|
|
|
+import com.ydd.api.DeliveryService;
|
|
|
+import com.ydd.app.OrderEntityUtils;
|
|
|
+import com.ydd.app.QueryAmountEntityUtils;
|
|
|
+import com.ydd.app.dto.*;
|
|
|
import com.ydd.app.response.OrderValuationResponse;
|
|
|
import com.ydd.app.service.OpenApiOrderValuationService;
|
|
|
import com.ydd.app.vo.OrderValuationVo;
|
|
|
import com.ydd.common.constant.BillingConstant;
|
|
|
+import com.ydd.common.constant.RedisKeyConstant;
|
|
|
import com.ydd.common.core.domain.ResponseResult;
|
|
|
+import com.ydd.common.core.redis.RedisCache;
|
|
|
import com.ydd.common.enums.DeliveryTypeEnums;
|
|
|
import com.ydd.common.enums.ResponseResultCodeEnum;
|
|
|
+import com.ydd.common.utils.DateUtils;
|
|
|
import com.ydd.common.utils.SnCodeUtils;
|
|
|
import com.ydd.common.utils.StringUtils;
|
|
|
+import com.ydd.ecloud.core.enums.DeletedEnum;
|
|
|
import com.ydd.ecloud.core.utils.BigDecimalUtils;
|
|
|
+import com.ydd.module.constants.AppConstant;
|
|
|
import com.ydd.module.domain.*;
|
|
|
import com.ydd.module.dto.*;
|
|
|
import com.ydd.module.enums.*;
|
|
|
import com.ydd.module.service.*;
|
|
|
+import com.ydd.module.utils.CommonUtils;
|
|
|
+import com.ydd.system.domain.SysConfig;
|
|
|
+import com.ydd.system.service.ISysConfigService;
|
|
|
+import com.ydd.third.common.config.DeliveryConfig;
|
|
|
+import com.ydd.third.common.vo.ResObject;
|
|
|
+import com.ydd.third.common.vo.shop.AmountResultVo;
|
|
|
+import com.ydd.third.common.vo.shop.QueryAmount;
|
|
|
+import com.ydd.third.common.vo.vo.order.OrderResultVo;
|
|
|
+import com.ydd.third.common.vo.vo.order.OrderVo;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
@@ -28,6 +43,7 @@ import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -66,6 +82,17 @@ public class OpenApiOrderValuationServiceImpl implements OpenApiOrderValuationSe
|
|
|
|
|
|
private final IMemberConfigService iMemberConfigService;
|
|
|
|
|
|
+ private final DeliveryConfig deliveryConfig;
|
|
|
+
|
|
|
+ private final ISysConfigService iSysConfigService;
|
|
|
+
|
|
|
+ private final DeliveryService client;
|
|
|
+
|
|
|
+ private final IShopDeliveryBindService iShopDeliveryBindService;
|
|
|
+
|
|
|
+ private final RedisCache redisCache;
|
|
|
+
|
|
|
+
|
|
|
@Override
|
|
|
public ResponseResult valuation(OrderValuationReq valuationReq) {
|
|
|
OrderValuationDto valuationDto = new OrderValuationDto();
|
|
@@ -95,7 +122,7 @@ public class OpenApiOrderValuationServiceImpl implements OpenApiOrderValuationSe
|
|
|
types = deliveryDetailDtoList.stream().map(PackageDeliveryDetailDto::getDeliveryType).collect(Collectors.toList());
|
|
|
}
|
|
|
}
|
|
|
- // 获取门店屏蔽运力
|
|
|
+ // 获取门店屏蔽运力(开放平台门店)
|
|
|
List<Integer> disableDeliveryTypes = iShopDeliveryDisableService.list(new QueryWrapper<ShopDeliveryDisable>()
|
|
|
.eq("shop_id", valuationDto.getShopId()).eq("deleted", 0))
|
|
|
.stream().map(ShopDeliveryDisable::getDeliveryType).collect(Collectors.toList());
|
|
@@ -123,8 +150,9 @@ public class OpenApiOrderValuationServiceImpl implements OpenApiOrderValuationSe
|
|
|
List<PackageCommissionDetailDto> commissionDetailDtoList = iPackageCommissionDetailService.getCommissionListByPackageIdAndDeliveryType(commissionPackageId, deliveryTypes);
|
|
|
packageCommissionMap = commissionDetailDtoList.stream().collect(Collectors.groupingBy(PackageCommissionDetailDto::getDeliveryType));
|
|
|
}
|
|
|
+ OrderReq orderReq = this.convertToOrderReq(valuationDto);
|
|
|
// 计价
|
|
|
- List<ValuationRes> list = this.getValuationResList(member, valuationDto, deliveryInfos, packageDeliveryDto, packageDiscountMap, packageCommissionMap);
|
|
|
+ List<ValuationRes> list = this.getValuationResList(orderReq, valuationDto, deliveryInfos, packageDeliveryDto, packageDiscountMap, packageCommissionMap);
|
|
|
// 默认价格优先
|
|
|
list.sort(Comparator.comparing(ValuationRes::getDeliveryAmount));
|
|
|
// 运力包发单类型为自定义, 则先按照sort排,再按价格排
|
|
@@ -137,7 +165,10 @@ public class OpenApiOrderValuationServiceImpl implements OpenApiOrderValuationSe
|
|
|
if (packageDeliveryDto != null) {
|
|
|
billList = this.setBillingDuration(packageDeliveryDto, billList);
|
|
|
}
|
|
|
- // todo: 计价结果缓存到redis, 10分钟有效
|
|
|
+ orderReq.setMemberId(member.getId());
|
|
|
+ orderReq.setValuationRes(billList);
|
|
|
+ // 计价结果缓存到redis, 10分钟有效, 到时需重新计价
|
|
|
+ redisCache.setCacheObject(RedisKeyConstant.VALUATION_RESULT + valuationDto.getOutOrderSn(), orderReq, AppConstant.VALUATION_RESULT_EFFECTIVE_MINUTES, TimeUnit.MINUTES);
|
|
|
// 数据转换
|
|
|
List<OrderValuationVo> valuationVos = this.convertResult(billList);
|
|
|
OrderValuationResponse response = OrderValuationResponse.builder().valuationList(valuationVos).outOrderSn(valuationReq.getOutOrderSn()).build();
|
|
@@ -145,8 +176,21 @@ public class OpenApiOrderValuationServiceImpl implements OpenApiOrderValuationSe
|
|
|
}
|
|
|
|
|
|
private List<OrderValuationVo> convertResult(List<ValuationRes> billList) {
|
|
|
- // todo: 数据转换
|
|
|
- return null;
|
|
|
+ List<OrderValuationVo> valuationVos = Lists.newArrayList();
|
|
|
+ for (ValuationRes valuationRes : billList) {
|
|
|
+ OrderValuationVo valuationVo = new OrderValuationVo();
|
|
|
+ valuationVo.setDeliveryId(valuationRes.getDeliveryType());
|
|
|
+ valuationVo.setDeliveryName(valuationRes.getName());
|
|
|
+ valuationVo.setDistance(valuationRes.getDesc());
|
|
|
+ if (valuationRes.getDeliveryAmount() != null) {
|
|
|
+ valuationVo.setDeliveryAmount(valuationRes.getDeliveryAmount().setScale(2, BigDecimal.ROUND_HALF_UP));
|
|
|
+ // 暂时第三方
|
|
|
+ valuationVo.setDiscountAmount(BigDecimal.ZERO);
|
|
|
+ valuationVo.setNeedPayAmount(valuationVo.getDeliveryAmount().subtract(valuationVo.getDiscountAmount()));
|
|
|
+ }
|
|
|
+ valuationVos.add(valuationVo);
|
|
|
+ }
|
|
|
+ return valuationVos;
|
|
|
}
|
|
|
|
|
|
private List<ValuationRes> handleBillList(Long memberId, List<ValuationRes> list) {
|
|
@@ -172,9 +216,11 @@ public class OpenApiOrderValuationServiceImpl implements OpenApiOrderValuationSe
|
|
|
Optional<ValuationRes> optional = billList.stream().filter(item -> !item.getDeliveryType().equals(DeliveryTypeEnums.SHAN_SONG.getType())).findFirst();
|
|
|
if (optional.isPresent()) {
|
|
|
String desc = optional.get().getDesc();
|
|
|
+ String distance = optional.get().getDistance();
|
|
|
for (ValuationRes res1 : billList) {
|
|
|
if (DeliveryTypeEnums.SHAN_SONG.getType().equals(res1.getDeliveryType())) {
|
|
|
res1.setDesc(desc);
|
|
|
+ res1.setDistance(distance);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -182,15 +228,16 @@ public class OpenApiOrderValuationServiceImpl implements OpenApiOrderValuationSe
|
|
|
return billList;
|
|
|
}
|
|
|
|
|
|
- private List<ValuationRes> getValuationResList(Member member, OrderValuationDto valuationDto, List<DeliveryInfo> deliveryInfos, PackageDeliveryDto packageDeliveryDto, Map<Integer, List<PackageDiscountDetailDto>> packageDiscountMap, Map<Integer, List<PackageCommissionDetailDto>> packageCommissionMap) {
|
|
|
+ private List<ValuationRes> getValuationResList(OrderReq orderReq, OrderValuationDto valuationDto, List<DeliveryInfo> deliveryInfos, PackageDeliveryDto packageDeliveryDto, Map<Integer, List<PackageDiscountDetailDto>> packageDiscountMap, Map<Integer, List<PackageCommissionDetailDto>> packageCommissionMap) {
|
|
|
List<ValuationRes> valuationResList = Lists.newArrayList();
|
|
|
- for (DeliveryInfo info : deliveryInfos) {
|
|
|
+ for (DeliveryInfo deliveryInfo : deliveryInfos) {
|
|
|
+// OrderReq orderReq = this.convertToOrderReq(valuationDto);
|
|
|
// 计价
|
|
|
- ValuationRes valuationRes = this.doValuation(valuationDto, info, valuationDto.getMerchantId(), valuationDto.getShopId());
|
|
|
- if (valuationRes == null) {
|
|
|
+ ValuationRes valuationRes = this.doValuation(orderReq, deliveryInfo, valuationDto.getMerchantId(), valuationDto.getShopId());
|
|
|
+ if (Objects.isNull(valuationRes)) {
|
|
|
continue;
|
|
|
}
|
|
|
- valuationRes.setPreferredDelivery(info.getPreferredDelivery());
|
|
|
+ valuationRes.setPreferredDelivery(deliveryInfo.getPreferredDelivery());
|
|
|
valuationRes.setOriginalMoney(valuationRes.getDeliveryAmount());
|
|
|
// 设置排序
|
|
|
if (packageDeliveryDto != null && PackageDeliveryTypeEnum.CUSTOM.type.equals(packageDeliveryDto.getType())) {
|
|
@@ -198,15 +245,16 @@ public class OpenApiOrderValuationServiceImpl implements OpenApiOrderValuationSe
|
|
|
}
|
|
|
// 设置优惠
|
|
|
if (packageDiscountMap.size() > 0) {
|
|
|
- this.setDiscountInfo(packageDiscountMap.get(info.getType()), valuationRes);
|
|
|
+ this.setDiscountInfo(packageDiscountMap.get(deliveryInfo.getType()), valuationRes);
|
|
|
}
|
|
|
// 设置佣金
|
|
|
if (packageCommissionMap.size() > 0) {
|
|
|
- this.setCommissionInfo(packageCommissionMap.get(info.getType()), valuationRes);
|
|
|
+ this.setCommissionInfo(packageCommissionMap.get(deliveryInfo.getType()), valuationRes);
|
|
|
}
|
|
|
- valuationRes.setIsMerchant(info.getIsMerchant());
|
|
|
+ valuationRes.setIsMerchant(deliveryInfo.getIsMerchant());
|
|
|
if (valuationRes.getIsMine() == 0) {
|
|
|
// 校验余额是否充足
|
|
|
+ Member member = iMemberService.getOne(new QueryWrapper<Member>().eq("member_type", MemberTypeEnum.MERCHANT.type).eq("merchant_id", valuationDto.getMerchantId()));
|
|
|
if (member.getAmount().compareTo(valuationRes.getDeliveryAmount()) >= 0) {
|
|
|
valuationRes.setIsEnough(StatusEnum.SHOW.status);
|
|
|
}
|
|
@@ -216,11 +264,243 @@ public class OpenApiOrderValuationServiceImpl implements OpenApiOrderValuationSe
|
|
|
return valuationResList;
|
|
|
}
|
|
|
|
|
|
- private ValuationRes doValuation(OrderValuationDto valuationDto, DeliveryInfo info, Long merchantId, Long shopId) {
|
|
|
- // todo: 计价主逻辑
|
|
|
+ private OrderReq convertToOrderReq(OrderValuationDto valuationDto) {
|
|
|
+ OrderReq orderReq = new OrderReq();
|
|
|
+ BeanUtils.copyProperties(valuationDto, orderReq);
|
|
|
+
|
|
|
+ AddressReq sendAddress = new AddressReq();
|
|
|
+ sendAddress.setContact(valuationDto.getSendName());
|
|
|
+ sendAddress.setPhone(valuationDto.getSendPhone());
|
|
|
+ sendAddress.setProvinceName(valuationDto.getSendProvinceName());
|
|
|
+ sendAddress.setCityName(valuationDto.getSendCityName());
|
|
|
+ sendAddress.setDistrictName(valuationDto.getSendDistrictName());
|
|
|
+ sendAddress.setAddress(valuationDto.getSendAddress());
|
|
|
+ sendAddress.setStreet(valuationDto.getSendHouseNumber());
|
|
|
+ sendAddress.setLng(valuationDto.getSendLng());
|
|
|
+ sendAddress.setLat(valuationDto.getSendLat());
|
|
|
+ sendAddress.setCityCode(valuationDto.getSendCityCode());
|
|
|
+ orderReq.setSendAddress(sendAddress);
|
|
|
+
|
|
|
+ AddressReq receiptAddress = new AddressReq();
|
|
|
+ receiptAddress.setContact(valuationDto.getReceiverName());
|
|
|
+ receiptAddress.setPhone(valuationDto.getReceiverPhone());
|
|
|
+ receiptAddress.setProvinceName(valuationDto.getReceiverProvinceName());
|
|
|
+ receiptAddress.setCityName(valuationDto.getReceiverCityName());
|
|
|
+ receiptAddress.setDistrictName(valuationDto.getReceiverDistrictName());
|
|
|
+ receiptAddress.setAddress(valuationDto.getReceiverAddress());
|
|
|
+ receiptAddress.setStreet(valuationDto.getReceiverHouseNumber());
|
|
|
+ receiptAddress.setLng(valuationDto.getReceiverLng());
|
|
|
+ receiptAddress.setLat(valuationDto.getReceiverLat());
|
|
|
+ receiptAddress.setCityCode(valuationDto.getReceiverCityCode());
|
|
|
+ orderReq.setReceiptAddress(receiptAddress);
|
|
|
+
|
|
|
+ orderReq.setOrderNo(valuationDto.getOrderSn());
|
|
|
+ orderReq.setDaySeq(valuationDto.getDaySeq());
|
|
|
+ orderReq.setProduct(valuationDto.getProduct());
|
|
|
+ orderReq.setProductId(valuationDto.getCategoryId());
|
|
|
+ orderReq.setWeight(valuationDto.getWeight());
|
|
|
+
|
|
|
+ if (StringUtils.isNotBlank(valuationDto.getShopCode())) {
|
|
|
+ orderReq.setShopId(valuationDto.getShopId());
|
|
|
+ orderReq.setShopName(valuationDto.getShopName());
|
|
|
+ }
|
|
|
+ orderReq.setIsMine(0);
|
|
|
+ orderReq.setPlatformType(0);
|
|
|
+ orderReq.setTransport(0);
|
|
|
+ // 对接开放接口的均为余额支付
|
|
|
+ orderReq.setPaymentType(PaymentTypeEnum.BALANCE.type);
|
|
|
+ orderReq.setTakeRemark(valuationDto.getRemark());
|
|
|
+ // 对接开放接口均为自选运力
|
|
|
+ orderReq.setDeliveryType(2);
|
|
|
+ // 对接开放接口均为立即取件,取件时间为当前
|
|
|
+ orderReq.setTakeType(0);
|
|
|
+ orderReq.setTakeTime(DateUtils.format(new Date(), DateUtils.YYYY_MM_DD_HH_MM_SS));
|
|
|
+
|
|
|
+ return orderReq;
|
|
|
+ }
|
|
|
+
|
|
|
+ private ValuationRes doValuation(OrderReq orderReq, DeliveryInfo delivery, Long merchantId, Long shopId) {
|
|
|
+ orderReq.setOrderSn(SnCodeUtils.createSn());
|
|
|
+ orderReq.setAmount(orderReq.getProductAmount());
|
|
|
+ OrderVo orderVo = OrderEntityUtils.createOrderVo(orderReq, delivery, deliveryConfig.isTest());
|
|
|
+ // 获取用户配置
|
|
|
+ MemberConfig memberConfig = iMemberConfigService.getShopMemberConfig(shopId, null);
|
|
|
+ if (memberConfig != null && memberConfig.getSyncGoodsDetailToDelivery().equals(DeletedEnum.YES.getValue())) {
|
|
|
+ // 是否同步订单商品给骑手
|
|
|
+ orderVo.setMtGoods(Lists.newArrayList());
|
|
|
+ }
|
|
|
+ orderVo.setIsMine(delivery.getIsMine());
|
|
|
+ if (DeliveryTypeEnums.FENG_NIAO.getType().equals(delivery.getType()) || DeliveryTypeEnums.MEI_TUAN.getType().equals(delivery.getType())
|
|
|
+ || DeliveryTypeEnums.FENG_NIAO_PT.getType().equals(delivery.getType())) {
|
|
|
+ ShopDelivery shopDelivery = iShopDeliveryService.findOne(shopId, delivery.getId());
|
|
|
+ if (shopDelivery == null || !BindStatusEnum.BIND.status.equals(shopDelivery.getBindStatus())) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+// if ((DeliveryTypeEnums.FENG_NIAO.getType().equals(delivery.getType())
|
|
|
+// || DeliveryTypeEnums.MEI_TUAN.getType().equals(delivery.getType())
|
|
|
+// ||DeliveryTypeEnums.FENG_NIAO_PT.getType().equals(delivery.getType()))
|
|
|
+// && DefaultShopEnum.SHOW.status.equals(defaultShop)) {
|
|
|
+// return null;
|
|
|
+// }
|
|
|
+
|
|
|
+ if ((DeliveryTypeEnums.FENG_NIAO.getType().equals(delivery.getType())||DeliveryTypeEnums.FENG_NIAO_PT.getType().equals(delivery.getType())) && shopId == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ // 美团跑腿未绑定不参与计价
|
|
|
+ if ((DeliveryTypeEnums.MEI_TUAN_ZB.getType().equals(delivery.getType()) ||DeliveryTypeEnums.MEI_TUAN_SG_ZB.getType().equals(delivery.getType())) && delivery.getIsMine() == 0){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ if ((DeliveryTypeEnums.MEI_TUAN_ZB.getType().equals(delivery.getType()) || DeliveryTypeEnums.MEI_TUAN_SG_ZB.getType().equals(delivery.getType()))){
|
|
|
+ SysConfig sysConfig = iSysConfigService.selectSysConfigByKey("MT_PT");
|
|
|
+ if (sysConfig.getConfigValue().equals("yes") && shopId != 1626){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ResObject<OrderResultVo> resObject = client.queryOrderDeliverFee(orderVo);
|
|
|
+ if (resObject.getCode() == 0) {
|
|
|
+ ValuationRes res = new ValuationRes();
|
|
|
+ transResObject(res, delivery, resObject, orderReq, orderVo);
|
|
|
+ // 判断是否是自己平台,查询金额是否充足 (对接开放平台暂时无自运力逻辑, 此处保留防止需求变更)
|
|
|
+ if (delivery.getIsMine() == 1 && !delivery.getType().equals(DeliveryTypeEnums.KUAI_FU.getType())
|
|
|
+ && !delivery.getType().equals(DeliveryTypeEnums.MEI_TUAN_ZB.getType())
|
|
|
+ && !DeliveryTypeEnums.MEI_TUAN_ZB.getType().equals(delivery.getType())) {
|
|
|
+ QueryAmount queryAmount = QueryAmountEntityUtils.queryAmount(delivery, merchantId, delivery.getIsMine());
|
|
|
+ ResObject<AmountResultVo> amountRes = client.queryAmount(queryAmount);
|
|
|
+ if (amountRes.getCode() == 0) {
|
|
|
+ // 更新余额
|
|
|
+ AmountResultVo vo = amountRes.getData();
|
|
|
+ this.updateAmount(delivery, merchantId, shopId, vo.getBalanceAmount());
|
|
|
+ if (vo.getBalanceAmount().compareTo(res.getDeliveryAmount()) >= 0) {
|
|
|
+ res.setIsEnough(StatusEnum.SHOW.status);
|
|
|
+ res.setIsMine(1);
|
|
|
+ } else {
|
|
|
+ //uupt需重新计价
|
|
|
+ res.setIsMine(0);
|
|
|
+ orderVo.setIsMine(0);
|
|
|
+ if (DeliveryTypeEnums.UUPT.getName().equals(orderVo.getLbClient())||DeliveryTypeEnums.SHAN_SONG.getName().equals(orderVo.getLbClient())) {
|
|
|
+ orderVo.setOpenId("");
|
|
|
+ resObject = client.queryOrderDeliverFee(orderVo);
|
|
|
+ if (resObject.getCode() == 0) {
|
|
|
+ transResObject(res, delivery, resObject, orderReq, orderVo);
|
|
|
+ } else {
|
|
|
+ res = null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (DeliveryTypeEnums.DADA.getType().equals(delivery.getType()) || DeliveryTypeEnums.DADA_YZ.getType().equals(delivery.getType())){
|
|
|
+ // 达达/优质余额不足,重新计价
|
|
|
+ log.info("余额不足----" + DeliveryTypeEnums.getNameByType(delivery.getType()) + "余额不足,重新计价");
|
|
|
+ ShopDelivery sd = iShopDeliveryService.getOne(new QueryWrapper<ShopDelivery>().eq("merchant_id", merchantId).eq("delivery_id", delivery.getId())
|
|
|
+ .eq("deleted", IsDeleteEnum.NORMAL.status).eq("shop_id", shopId).eq("bind_status",1));
|
|
|
+ if (sd != null && sd.getThirdShopId() != null) {
|
|
|
+ orderVo.setShopNo(sd.getThirdShopId());
|
|
|
+ delivery.setShopId(sd.getThirdShopId());
|
|
|
+ } else {
|
|
|
+ // 如果默认店铺被删了,则取列表第一个
|
|
|
+ List<ShopDelivery> deliveries = iShopDeliveryService.list(new QueryWrapper<ShopDelivery>().eq("merchant_id", merchantId).eq("delivery_id", delivery.getId())
|
|
|
+ .eq("deleted", IsDeleteEnum.NORMAL.status).isNotNull("third_shop_id"));
|
|
|
+ if (CollectionUtils.isNotEmpty(deliveries)){
|
|
|
+ orderVo.setShopNo(deliveries.get(0).getThirdShopId());
|
|
|
+ delivery.setShopId(deliveries.get(0).getThirdShopId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ orderVo.setMerchantId(null);
|
|
|
+ resObject = client.queryOrderDeliverFee(orderVo);
|
|
|
+ if (resObject.getCode() == 0) {
|
|
|
+ transResObject(res, delivery, resObject, orderReq, orderVo);
|
|
|
+ }else{
|
|
|
+ res = null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 顺丰自运力余额不足,转猎豹平台重写计价
|
|
|
+ if (DeliveryTypeEnums.SHUN_FENG.getName().equals(orderVo.getLbClient())) {
|
|
|
+ delivery.setIsMine(0);
|
|
|
+ delivery.setThirdShopId(null);
|
|
|
+ OrderVo reOrderVo = OrderEntityUtils.createOrderVo(orderReq, delivery, deliveryConfig.isTest());
|
|
|
+ reOrderVo.setIsMine(delivery.getIsMine());
|
|
|
+ resObject = client.queryOrderDeliverFee(reOrderVo);
|
|
|
+ if (resObject.getCode() == 0) {
|
|
|
+ transResObject(res, delivery, resObject, orderReq, orderVo);
|
|
|
+ }else{
|
|
|
+ res = null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (delivery.getIsMine() == 1 && delivery.getType().equals(DeliveryTypeEnums.KUAI_FU.getType())) {
|
|
|
+ if (!resObject.getData().getFeStatus().equals("1")) {
|
|
|
+
|
|
|
+ res.setIsMine(0);
|
|
|
+ orderVo.setIsMine(0);
|
|
|
+ orderVo.setAccessToken(null);
|
|
|
+ orderVo.setOpenId(null);
|
|
|
+ resObject = client.queryOrderDeliverFee(orderVo);
|
|
|
+ if (resObject.getCode() == 0) {
|
|
|
+ transResObject(res, delivery, resObject, orderReq, orderVo);
|
|
|
+ }else{
|
|
|
+ res = null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return res;
|
|
|
+ }
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
+ private void updateAmount(DeliveryInfo delivery, Long merchantId, Long shopId, BigDecimal balanceAmount) {
|
|
|
+ if (DeliveryTypeEnums.DADA.getType().equals(delivery.getType())
|
|
|
+ || DeliveryTypeEnums.DADA_YZ.getType().equals(delivery.getType())
|
|
|
+ || DeliveryTypeEnums.FENG_NIAO.getType().equals(delivery.getType())
|
|
|
+ || DeliveryTypeEnums.SHUN_FENG.getType().equals(delivery.getType())
|
|
|
+ || DeliveryTypeEnums.MEI_TUAN_ZB.getType().equals(delivery.getType())) {
|
|
|
+ ShopDeliveryBind shopDeliveryBind = iShopDeliveryBindService.getOne(new QueryWrapper<ShopDeliveryBind>()
|
|
|
+ .eq("merchant_id", merchantId).eq("shop_id", shopId).eq("delivery_id", delivery.getId())
|
|
|
+ .eq("deleted", IsDeleteEnum.NORMAL.status).eq("bind_status", 1));
|
|
|
+ // 门店模式变更余额
|
|
|
+ if (shopDeliveryBind != null) {
|
|
|
+ iShopDeliveryBindService.updateShopAmount(shopDeliveryBind.getMerchantId(), shopDeliveryBind.getDeliveryId(), shopDeliveryBind.getThirdShopId(), balanceAmount);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ ShopDeliveryBind shopDeliveryBind = iShopDeliveryBindService.getOne(new QueryWrapper<ShopDeliveryBind>()
|
|
|
+ .eq("merchant_id", merchantId).eq("delivery_id", delivery.getId())
|
|
|
+ .eq("deleted", IsDeleteEnum.NORMAL.status).isNull("shop_id")
|
|
|
+ .eq("bind_status", 1));
|
|
|
+ // 商户模式变更余额
|
|
|
+ if (shopDeliveryBind != null) {
|
|
|
+ iShopDeliveryBindService.updateMerchantAmount(shopDeliveryBind.getId(), balanceAmount);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void transResObject(ValuationRes res, DeliveryInfo delivery, ResObject<OrderResultVo> resObject, OrderReq orderReq, OrderVo orderVo) {
|
|
|
+ res.setDeliveryId(delivery.getId());
|
|
|
+ res.setName(delivery.getName());
|
|
|
+ res.setLogo(delivery.getLogo());
|
|
|
+ res.setDesc(CommonUtils.change2Km((int) resObject.getData().getDistance()));
|
|
|
+ res.setDistance(String.valueOf(resObject.getData().getDistance()));
|
|
|
+ res.setDeliveryAmount(resObject.getData().getDeliverFee());
|
|
|
+ res.setIsEnough(StatusEnum.STOP.status);
|
|
|
+ res.setTotalMoney(resObject.getData().getTotalMoney());
|
|
|
+ res.setNeedPaymoney(resObject.getData().getNeedPaymoney());
|
|
|
+ res.setPriceToken(resObject.getData().getPriceToken());
|
|
|
+ // res.setDeliveryInfo(delivery);
|
|
|
+ res.setOrderSn(orderReq.getOrderSn());
|
|
|
+ res.setIsMine(orderVo.getIsMine());
|
|
|
+ res.setOrderNo(orderReq.getOrderNo());
|
|
|
+ res.setCityId(resObject.getData().getCityId());
|
|
|
+ res.setCityInfoRevision(resObject.getData().getCityInfoRevision());
|
|
|
+ res.setOrderVehicleId(resObject.getData().getOrderVehicleId());
|
|
|
+ res.setTotalPriceFen(resObject.getData().getHllAmount());
|
|
|
+ res.setOrderNumber(resObject.getData().getDeliveryOrderNo());//闪送订单号
|
|
|
+ res.setShopId(delivery.getShopId());
|
|
|
+ res.setThirdShopId(delivery.getThirdShopId());
|
|
|
+ res.setAuthToken(delivery.getAuthToken());
|
|
|
+ res.setPhone(delivery.getPhone());
|
|
|
+ res.setDeliveryType(delivery.getType());
|
|
|
+ }
|
|
|
+
|
|
|
private void setBillingSort(PackageDeliveryDto packageDeliveryDto, ValuationRes valuationRes) {
|
|
|
List<PackageDeliveryDetailDto> deliveryDetailDtoList = packageDeliveryDto.getPackageDeliveryDetailDtoList();
|
|
|
if (CollectionUtils.isNotEmpty(deliveryDetailDtoList)) {
|