123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784 |
- package com.ydd.app.service.impl;
- import com.alibaba.fastjson.JSONObject;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
- import com.ydd.api.DeliveryService;
- import com.ydd.app.dto.*;
- import com.ydd.app.service.ApiOrderNewService;
- import com.ydd.app.service.OpenApiOrderService;
- import com.ydd.app.vo.OrderLocationVo;
- import com.ydd.app.vo.OrderCreateVo;
- import com.ydd.app.vo.PushOrderVo;
- 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.enums.WaimaiTypeEnums;
- 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.CancelOrderUtils;
- import com.ydd.module.domain.*;
- import com.ydd.module.dto.CancelOrderDto;
- import com.ydd.module.dto.CouponDto;
- import com.ydd.module.enums.*;
- import com.ydd.module.expection.CustomAppException;
- import com.ydd.module.service.*;
- import com.ydd.third.common.utils.CoordinateUtils;
- import com.ydd.third.common.vo.ResObject;
- import com.ydd.third.common.vo.huolalavo.HirtualPhoneInfo;
- import com.ydd.third.common.vo.vo.order.*;
- import lombok.RequiredArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.collections4.CollectionUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.data.redis.core.RedisTemplate;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import org.springframework.transaction.interceptor.TransactionAspectSupport;
- import java.math.BigDecimal;
- import java.util.Arrays;
- import java.util.Date;
- import java.util.List;
- import java.util.Objects;
- import java.util.concurrent.TimeUnit;
- import java.util.stream.Collectors;
- /**
- * 订单类开放接口 ServiceImpl
- *
- * @author 叶君翔
- * @date 2022/04/08 15:20
- */
- @Slf4j
- @Service
- @RequiredArgsConstructor(onConstructor_ = @Autowired)
- public class OpenApiOrderServiceImpl implements OpenApiOrderService {
- private final IOrderService iOrderService;
- private final IOrderLogService iOrderLogService;
- private final IProductService iProductService;
- private final IShopService iShopService;
- private final IDspDeliveryService iDspDeliveryService;
- private final IShopDeliveryBindService iShopDeliveryBindService;
- private final IOrderDeliveryService iOrderDeliveryService;
- private final ApiOrderNewService apiOrderNewService;
- private final IOrderTipService iOrderTipService;
- // redis控制台
- private final RedisTemplate redisTemplate;
- private final RedisCache redisCache;
- private final DeliveryService client;
- private final IShopWaimaiService iShopWaimaiService;
- private final IDspWaimaiService iDspWaimaiService;
- private final IMerchantService iMerchantService;
- private final IMemberService iMemberService;
- @Override
- public ResponseResult pushOrder(OrderPushReq pushReq) {
- // 特殊必填处理
- ResponseResult result = specialJudge(pushReq);
- if (result.getCode() != ResponseResultCodeEnum.SUCCESS.getCode()) {
- return result;
- }
- Merchant merchant = iMerchantService.getOne(new QueryWrapper<Merchant>().eq("deleted", 0).eq("app_id", pushReq.getAppId()));
- if (Objects.isNull(merchant)) {
- return ResponseResult.error(ResponseResultCodeEnum.APP_ID_ERR);
- }
- Member member = iMemberService.getOne(new QueryWrapper<Member>().eq("deleted", 0)
- .eq("merchant_id", merchant.getId()).eq("member_type", MemberTypeEnum.MERCHANT.getType()));
- Order order = iOrderService.getOne(new QueryWrapper<Order>().eq("deleted", 0).eq("out_order_sn", pushReq.getOutOrderSn()));
- if (order == null) {
- order = new Order();
- }
- // 添加订单其它属性
- order.setMemberId(member.getId());
- order.setMerchantId(merchant.getId());
- order.setOutOrderSn(pushReq.getOutOrderSn());
- order.setProductId(pushReq.getCategoryId().longValue());
- Product product = iProductService.getById(order.getProductId());
- order.setProductName(product.getName());
- order.setWeight(pushReq.getWeight());
- if (StringUtils.isNotBlank(pushReq.getRemark())) {
- order.setTakeRemark(pushReq.getRemark());
- }
- order.setReceiptContactName(pushReq.getReceiverName());
- order.setReceiptPhone(pushReq.getReceiverPhone());
- order.setReceiptProvinceName(pushReq.getReceiverProvinceName());
- order.setReceiptCityName(pushReq.getReceiverCityName());
- if (StringUtils.isNotBlank(pushReq.getReceiverDistrictName())) {
- order.setReceiptDistrictName(pushReq.getReceiverDistrictName());
- }
- order.setReceiptAddress(pushReq.getReceiverAddress());
- if (StringUtils.isNotBlank(pushReq.getReceiverHouseNumber())) {
- order.setReceiptStreet(pushReq.getReceiverHouseNumber());
- }
- order.setReceiptLng(pushReq.getReceiverLng());
- order.setReceiptLat(pushReq.getReceiverLat());
- order.setReceiptCityCode(pushReq.getReceiverCityCode());
- order.setDeliveryStatus(DeliveryStatusEnum.ORDERS_TO_BE_BILLED.getStatus());
- if (StringUtils.isNotBlank(pushReq.getShopCode())) {
- Shop shop = iShopService.getOne(new QueryWrapper<Shop>().eq("deleted", 0).eq("code", pushReq.getShopCode()));
- if (shop != null) {
- order.setShopId(shop.getId());
- order.setShopName(shop.getName());
- order.setSendProvinceName(shop.getProvinceName());
- order.setSendCityName(shop.getCityName());
- order.setSendDistrictName(shop.getDistrictName());
- order.setSendAddress(shop.getAddress());
- order.setSendContactName(shop.getContactName());
- order.setSendPhone(shop.getMobile());
- order.setSendLng(shop.getLng());
- order.setSendLat(shop.getLat());
- order.setSendStreet(shop.getStreet());
- order.setSendCityCode(shop.getCityCode());
- }else {
- return ResponseResult.error(ResponseResultCodeEnum.SHOP_NOT_EXIST);
- }
- } else {
- order.setShopId(member.getShopId());
- Shop shop = iShopService.getById(order.getShopId());
- order.setShopName(shop.getName());
- order.setSendContactName(pushReq.getSendName());
- order.setSendPhone(pushReq.getSendPhone());
- order.setSendProvinceName(pushReq.getSendProvinceName());
- order.setSendCityName(pushReq.getSendCityName());
- if (StringUtils.isNotBlank(pushReq.getSendDistrictName())) {
- order.setSendDistrictName(pushReq.getSendDistrictName());
- }
- order.setSendAddress(pushReq.getSendAddress());
- if (StringUtils.isNotBlank(pushReq.getSendHouseNumber())) {
- order.setSendStreet(pushReq.getSendHouseNumber());
- }
- order.setSendLng(pushReq.getSendLng());
- order.setSendLat(pushReq.getSendLat());
- order.setSendCityCode(pushReq.getSendCityCode());
- }
- order.setLbDaySeq(pushReq.getDaySeq());
- order.setOrderSn(SnCodeUtils.createSn());
- if (order.getId() == null) {
- iOrderService.save(order);
- } else {
- iOrderService.updateById(order);
- }
- PushOrderVo vo = new PushOrderVo();
- vo.setOutOrderSn(pushReq.getOutOrderSn());
- vo.setOrderSn(order.getOrderSn());
- result.setData(vo);
- return result;
- }
- private ResponseResult specialJudge(OrderPushReq orderDto) {
- ResponseResult result = ResponseResult.success();
- if (StringUtils.isBlank(orderDto.getShopCode())) {
- if (StringUtils.isBlank(orderDto.getSendName())) {
- return ResponseResult.error(ResponseResultCodeEnum.FIELD_EMPTY, "发件人名称", null);
- }
- if (StringUtils.isBlank(orderDto.getSendPhone())) {
- return ResponseResult.error(ResponseResultCodeEnum.FIELD_EMPTY, "发件人联系电话", null);
- }
- if (StringUtils.isBlank(orderDto.getSendProvinceName())) {
- return ResponseResult.error(ResponseResultCodeEnum.FIELD_EMPTY, "发件人所在省", null);
- }
- if (StringUtils.isBlank(orderDto.getSendCityName())) {
- return ResponseResult.error(ResponseResultCodeEnum.FIELD_EMPTY, "发件人所在市", null);
- }
- if (StringUtils.isBlank(orderDto.getSendAddress())) {
- return ResponseResult.error(ResponseResultCodeEnum.FIELD_EMPTY, "发件人详细地址", null);
- }
- if (StringUtils.isBlank(orderDto.getSendLng())) {
- return ResponseResult.error(ResponseResultCodeEnum.FIELD_EMPTY, "发件人纬度", null);
- }
- if (StringUtils.isBlank(orderDto.getSendLat())) {
- return ResponseResult.error(ResponseResultCodeEnum.FIELD_EMPTY, "发件人经度", null);
- }
- if (StringUtils.isBlank(orderDto.getSendCityCode())) {
- return ResponseResult.error(ResponseResultCodeEnum.FIELD_EMPTY, "发件人测试code", null);
- }
- }
- return result;
- }
- @Override
- @Transactional(rollbackFor = Exception.class)
- public ResponseResult cancelOrder(OrderCancelReq cancelReq) {
- ResponseResult result = ResponseResult.success();
- if (StringUtils.isBlank(cancelReq.getOrderSn()) || StringUtils.isBlank(cancelReq.getOutOrderSn())) {
- return ResponseResult.error(ResponseResultCodeEnum.FIELD_EMPTY, "猎豹订单号", null);
- }
- if (StringUtils.isBlank(cancelReq.getOutOrderSn())) {
- return ResponseResult.error(ResponseResultCodeEnum.FIELD_EMPTY, "接入方订单编号", null);
- }
- Order order = iOrderService.selectOrderBySn(cancelReq.getOrderSn(), cancelReq.getOutOrderSn());
- if (Objects.isNull(order)) {
- return ResponseResult.error(ResponseResultCodeEnum.ORDER_NOT_EXIST);
- }
- Integer orderStatus = DeliveryStatusEnum.CANCEL.status;
- if (orderStatus.equals(order.getDeliveryStatus())) {
- return ResponseResult.error(ResponseResultCodeEnum.ORDER_HAS_BEEN_CANCEL);
- }
- if (1 != cancelReq.getCancelType() && 4 != cancelReq.getCancelType()) {
- return ResponseResult.error(ResponseResultCodeEnum.ORDER_CANCEL_TYPE_NOT_EXIST);
- }
- order.setCancelType(cancelReq.getCancelType());
- int count = 0;
- ResponseResult responseResult = new ResponseResult();
- try {
- boolean flag = (order.getDeliveryStatus().equals(DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status) || order.getDeliveryStatus().equals(DeliveryStatusEnum.TO_BE_DELIVERED.status))
- || order.getDeliveryStatus().equals(DeliveryStatusEnum.IN_DELIVERY.status);
- if (flag) {
- if (redisTemplate.hasKey(order.getOrderSn() + "_cancel")) {
- Long size = redisTemplate.opsForList().size(order.getOrderSn() + "_cancel");
- if (size != null) {
- for (long i = 0; i < size; i++) {
- OrderResultVo vo = (OrderResultVo) redisTemplate.opsForList().rightPop(order.getOrderSn() + "_cancel");
- responseResult = cancelThirdOrder(order, vo.getDeliveryId(), count, vo.getAptOrderId(), vo.getPhone(), cancelReq.getCancelType(), cancelReq.getCancelReason());
- }
- }
- } else if (order.getDeliveryStatus().intValue() >= DeliveryStatusEnum.TO_BE_DELIVERED.status.intValue()) {
- cancelOrder(order, cancelReq.getCancelReason(), orderStatus);
- responseResult = cancelThirdOrder(order,order.getDeliveryId(),count,order.getAptOrderId(),order.getAptPhone(), cancelReq.getCancelType(),order.getCancelReason());
- } else if (order.getDeliveryStatus().intValue() == DeliveryStatusEnum.ORDERS_TO_BE_BILLED.status.intValue()) {
- cancelOrder(order, cancelReq.getCancelReason(), orderStatus);
- } else if (order.getDeliveryStatus().equals(DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status)) {
- cancelOrder(order, cancelReq.getCancelReason(), orderStatus);
- List<OrderDelivery> list = iOrderDeliveryService.list(new QueryWrapper<OrderDelivery>().eq("order_sn", order.getOrderSn()).ne("delivery_id",19).ge("delivery_status",DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status));
- if(CollectionUtils.isNotEmpty(list)){
- for(OrderDelivery orderDelivery:list){
- responseResult = cancelThirdOrder(order,orderDelivery.getDeliveryId(),count,null,null, cancelReq.getCancelType(),cancelReq.getCancelReason());
- }
- }
- }
- } else if (order.getStatus().equals(PayStatusEnum.NO_PAYED.status) && order.getDeliveryStatus().equals(DeliveryStatusEnum.ORDERS_TO_BE_BILLED.status)) {
- cancelOrder(order, cancelReq.getCancelReason(), orderStatus);
- } else if (DeliveryStatusEnum.ABNORMAL.status.equals(order.getDeliveryStatus()) && DeliveryStatusEnum.CANCEL.status.equals(orderStatus)) {
- cancelOrder(order, cancelReq.getCancelReason(), orderStatus);
- }
- } catch (Exception e) {
- count += 1;
- // 回滚事务
- TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
- }
- if (count > 0 || responseResult.getCode() == ResponseResultCodeEnum.FAIL.getCode()) {
- return ResponseResult.error(ResponseResultCodeEnum.FAIL);
- }
- return result;
- }
- public ResponseResult cancelThirdOrder(Order order,Long deliveryId,int result,Integer aptOrderId,String aptPhone,Integer cancelType,String cancenlResonMsg){
- ResponseResult responseResult = new ResponseResult();
- responseResult.setCode(ResponseResultCodeEnum.SUCCESS.getCode());
- DspDelivery delivery = iDspDeliveryService.getById(deliveryId);
- OrderDelivery orderDelivery = iOrderDeliveryService.getOne(new QueryWrapper<OrderDelivery>().eq("order_sn", order.getOrderSn()).eq("delivery_id", deliveryId));
- // 违约金处理
- BigDecimal deductFee = BigDecimal.ZERO;
- if (DeliveryStatusEnum.CANCEL.status.equals(orderDelivery.getDeliveryStatus())) {
- // 三方平台已取消
- cancelSf(deductFee, order,deliveryId,"");
- } else {
- //调用配送平台取消接口
- ResObject<CancelOrderResultVo> resObject = getCancelOrderResultVoResObject(orderDelivery.getChildOrderSn(), orderDelivery.getOutTradeNo(), orderDelivery.getUuptOpenId(), aptOrderId,
- aptPhone, order.getId(), delivery, cancelType, cancenlResonMsg);
- if (resObject.getCode() != 0) {
- result += 1;
- orderDelivery.setCancelResult(resObject.getMsg());
- iOrderDeliveryService.update(orderDelivery, new UpdateWrapper<OrderDelivery>().eq("order_sn", order.getOrderSn()).eq("delivery_id", deliveryId));
- if(resObject.getCode() !=2011&&!orderDelivery.getDeliveryName().contains("达达")){
- responseResult.setCode(ResponseResultCodeEnum.FAIL.getCode());
- }
- }
- if (resObject.getData() != null&&!DeliveryTypeEnums.SHAN_SONG.getType().equals(delivery.getType())) {
- deductFee = resObject.getData().getDeductFee() == null ? BigDecimal.ZERO : resObject.getData().getDeductFee();
- if (deductFee.compareTo(BigDecimal.ZERO) > 0) {
- redisCache.setCacheObject("deuctFee_"+order.getOrderSn(), deductFee);
- redisCache.expire("deuctFee_"+order.getOrderSn(),2, TimeUnit.HOURS);
- }
- }
- //商家取消订单 顺丰是实时处理不回调
- if (DeliveryTypeEnums.SHUN_FENG.getType().equals(delivery.getType()) || DeliveryTypeEnums.FENG_NIAO.getType().equals(delivery.getType())
- || DeliveryTypeEnums.FENG_NIAO_PT.getType().equals(delivery.getType())
- || DeliveryTypeEnums.MEI_TUAN_ZB.getType().equals(delivery.getType())
- || DeliveryTypeEnums.MEI_TUAN_SG_ZB.getType().equals(delivery.getType())) {
- cancelSf(deductFee, order,deliveryId,resObject.getMsg());
- }
- if (result > 0) {
- responseResult.setCode(ResponseResultCodeEnum.FAIL.getCode());
- }
- }
- return responseResult;
- }
- public void cancelOrder(Order order, String cancelReason, Integer orderStatus) {
- order.setStatus(PayStatusEnum.CANCEL.status);
- order.setDeliveryStatus(orderStatus);
- order.setCancelReason(cancelReason);
- iOrderService.updateById(order);
- iOrderLogService.addOrderLog(order.getId(), order.getDeliveryStatus());
- }
- private void cancelSf(BigDecimal deductFee, Order order,Long deliveryId,String cancelResult) {
- OrderDelivery orderDelivery = new OrderDelivery();
- orderDelivery.setDeliveryStatus(DeliveryStatusEnum.CANCEL.status);
- orderDelivery.setCancelTime(new Date());
- orderDelivery.setCancelResult(cancelResult);
- iOrderDeliveryService.update(orderDelivery, new UpdateWrapper<OrderDelivery>().eq("order_sn", order.getOrderSn()).eq("delivery_id", deliveryId));
- int count = iOrderDeliveryService.count(new QueryWrapper<OrderDelivery>().eq("order_sn", order.getOrderSn())
- .ne("delivery_status", DeliveryStatusEnum.CANCEL.status).ne("out_trade_no", -1).isNotNull("out_trade_no"));
- BigDecimal result = redisCache.getCacheObject(order.getOrderSn());
- if (result != null) {
- deductFee = result;
- redisCache.deleteObject(order.getOrderSn());
- }
- if (count == 0) {
- order = iOrderService.getById(order.getId());
- if (order.getRefundMoney().compareTo(BigDecimal.ZERO) == 0) {
- order.setRefundMoney(order.getPayAmount().subtract(deductFee));
- List<OrderTip> orderTips = iOrderTipService.list(new QueryWrapper<OrderTip>().eq("order_no", order.getOrderSn()).eq("status", PayStatusEnum.PAYED.status));
- BigDecimal refundMoney = order.getPayAmount().subtract(deductFee);
- BigDecimal tips = orderTips.stream().map(OrderTip::getAmount).reduce(BigDecimal.ZERO, BigDecimalUtils::sum);
- refundMoney = refundMoney.subtract(tips);
- apiOrderNewService.refundTip(orderTips, "加小费退款", order.getMemberId(), order.getMerchantId());
- apiOrderNewService.refund(order.getOrderSn(), refundMoney, "取消订单退款", order.getMemberId(), order.getMerchantId());
- redisTemplate.delete(order.getOrderSn()+"to_recive:");
- }
- iOrderService.updateById(order);
- }
- }
- private ResObject<CancelOrderResultVo> getCancelOrderResultVoResObject(String orderNo, String outTradeNo, String uuptOpenId, Integer aptOrderId, String aptPhone,
- Long orderId, DspDelivery delivery, Integer cancelType,String cancenlResonMsg) {
- OrderDelivery orderDelivery = iOrderDeliveryService.getOne(new QueryWrapper<OrderDelivery>().eq("child_order_sn", orderNo));
- CancelOrderDto dto = new CancelOrderDto();
- dto.setOrderSn(orderNo);
- dto.setReason(OrderCancelTypeEnum.getNameByType(cancelType));
- dto.setCancelCode(cancelType);
- dto.setCancenlResonMsg(cancenlResonMsg);
- dto.setOutTradeNo(outTradeNo);
- dto.setUuptOpenId(uuptOpenId);
- dto.setAptOrderId(aptOrderId);
- dto.setAptPhone(aptPhone);
- dto.setKfAccessToken(orderDelivery.getKfToken());
- // 美团众包
- dto.setZbOrderSn(orderDelivery.getOutTradeNo());
- dto.setZbAccessToken(orderDelivery.getZbToken());
- // 美团在我们平台的订单id
- dto.setOrderId(orderId);
- dto.setIsMine(orderDelivery.getIsMine());
- // 货拉拉订单状态
- dto.setHllStatus(orderDelivery.getHllStatus());
- //顺丰需要shopId delivery配送平台信息
- CancelOrderVo orderVo = CancelOrderUtils.createOrderVo(dto, delivery);
- Order order = iOrderService.getById(orderId);
- if (order.getMerchantId() != null && orderDelivery.getIsMine().equals(1)) {
- ShopDeliveryBind shopDeliveryBind = iShopDeliveryBindService.getShopDeliveryBind(order.getMerchantId(), order.getShopId(), delivery.getId(), delivery.getType());
- if (shopDeliveryBind != null) {
- orderVo.setAccessToken(shopDeliveryBind.getAuthToken());
- orderVo.setMerchantId(shopDeliveryBind.getThirdShopId());
- }
- }
- //订单取消返回结果
- ResObject<CancelOrderResultVo> resObject = client.cancelOrder(orderVo);
- if (resObject.getCode() != 0) {
- try {
- log.info("<===========>重新发起取消开始********************");
- TimeUnit.SECONDS.sleep(5);
- resObject = client.cancelOrder(orderVo);
- } catch (Exception e) {
- }
- log.error("取消订单失败" + JSONObject.toJSONString(orderVo));
- }
- return resObject;
- }
- @Override
- public ResponseResult riderLocation(OrderLocationReq locationReq) {
- ResponseResult result = ResponseResult.success();
- if (StringUtils.isBlank(locationReq.getOrderSn()) || StringUtils.isBlank(locationReq.getOutOrderSn())) {
- return ResponseResult.error(ResponseResultCodeEnum.FIELD_EMPTY, "订单号", null);
- }
- Order order = iOrderService.selectOrderBySn(locationReq.getOrderSn(), locationReq.getOutOrderSn());
- if (Objects.isNull(order)) {
- return ResponseResult.error(ResponseResultCodeEnum.ORDER_NOT_EXIST);
- }
- boolean flag = order.getDeliveryStatus() > DeliveryStatusEnum.IN_DELIVERY.getStatus() ||
- DeliveryStatusEnum.CANCEL.status.equals(order.getDeliveryStatus()) || DeliveryStatusEnum.ABNORMAL.status.equals(order.getDeliveryStatus());
- OrderDelivery orderDelivery = iOrderDeliveryService.getOne(new QueryWrapper<OrderDelivery>()
- .eq("deleted", 0)
- .eq("order_sn", order.getOrderSn())
- .eq("delivery_id", order.getDeliveryId()));
- DspDelivery delivery = iDspDeliveryService.findById(order.getDeliveryId());
- if (flag || Objects.isNull(delivery) || Objects.isNull(orderDelivery)) {
- return ResponseResult.error(ResponseResultCodeEnum.ORDER_STATUS_FAIL);
- }
- OrderLocationVo vo = getRiderLocation(order, orderDelivery, delivery);
- if (Objects.isNull(vo)) {
- return ResponseResult.error(ResponseResultCodeEnum.FAIL);
- }else {
- result.setData(vo);
- }
- return result;
- }
- private OrderLocationVo getRiderLocation(Order order, OrderDelivery orderDelivery, DspDelivery delivery) {
- OrderLocationVo locationVo = new OrderLocationVo();
- if (DeliveryTypeEnums.DADA.getType().equals(delivery.getType())&&orderDelivery!=null) {
- OrderQueryVo orderQueryVo = new OrderQueryVo();
- orderQueryVo.setLbClient(DeliveryTypeEnums.DADA.getName());
- orderQueryVo.setOrderNo(orderDelivery.getChildOrderSn());
- orderQueryVo.setIsDirectDelivery(0);
- if (orderDelivery.getIsMine() == 1L){
- ShopDeliveryBind shopDeliveryBind = iShopDeliveryBindService.getShopDeliveryBind(order.getMerchantId(), order.getShopId(), delivery.getId(), delivery.getType());
- if (shopDeliveryBind != null){
- orderQueryVo.setMerchantId(shopDeliveryBind.getThirdShopId());
- }
- }
- ResObject<OrderQueryResultVo> resObject = client.queryOrderInfo(orderQueryVo);
- if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
- String riderLat = resObject.getData().getRiderLat().toString();
- String riderLng = resObject.getData().getRiderLng().toString();
- locationVo.setShipperLat(riderLat);
- locationVo.setShipperLng(riderLng);
- locationVo.setShipperName(resObject.getData().getRiderName());
- locationVo.setShipperPhone(resObject.getData().getRiderPhone());
- }
- } else if (DeliveryTypeEnums.DADA_YZ.getType().equals(delivery.getType())&&orderDelivery!=null) {
- OrderQueryVo orderQueryVo = new OrderQueryVo();
- orderQueryVo.setLbClient(DeliveryTypeEnums.DADA_YZ.getName());
- orderQueryVo.setOrderNo(orderDelivery.getChildOrderSn());
- orderQueryVo.setIsDirectDelivery(1);
- if (orderDelivery.getIsMine() == 1){
- ShopDeliveryBind shopDeliveryBind = iShopDeliveryBindService.getShopDeliveryBind(order.getMerchantId(), order.getShopId(), delivery.getId(), delivery.getType());
- if (shopDeliveryBind != null){
- orderQueryVo.setMerchantId(shopDeliveryBind.getThirdShopId());
- }
- }
- ResObject<OrderQueryResultVo> resObject = client.queryOrderInfo(orderQueryVo);
- if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
- String riderLat = resObject.getData().getRiderLat().toString();
- String riderLng = resObject.getData().getRiderLng().toString();
- locationVo.setShipperLat(riderLat);
- locationVo.setShipperLng(riderLng);
- locationVo.setShipperName(resObject.getData().getRiderName());
- locationVo.setShipperPhone(resObject.getData().getRiderPhone());
- }
- } else if (DeliveryTypeEnums.UUPT.getType().equals(delivery.getType())) {
- OrderQueryVo orderQueryVo = new OrderQueryVo();
- orderQueryVo.setLbClient(DeliveryTypeEnums.UUPT.getName());
- orderQueryVo.setOrderNo(order.getOutTradeNo());
- orderQueryVo.setUuptOpenId(order.getUuptOpenId());
- ResObject<OrderQueryResultVo> resObject = client.queryOrderInfo(orderQueryVo);
- if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
- if(resObject.getData().getRiderLat() != null){
- double[] receiverGps = CoordinateUtils.bd09_To_Gcj02(resObject.getData().getRiderLat().doubleValue(), resObject.getData().getRiderLng().doubleValue());
- locationVo.setShipperLat(receiverGps[0] + "");
- locationVo.setShipperLng(receiverGps[1] + "");
- locationVo.setShipperName(resObject.getData().getRiderName());
- locationVo.setShipperPhone(resObject.getData().getRiderPhone());
- }
- }
- } else if (DeliveryTypeEnums.AIPT.getType().equals(delivery.getType())) {
- OrderQueryVo orderQueryVo = new OrderQueryVo();
- orderQueryVo.setLbClient(DeliveryTypeEnums.AIPT.getName());
- orderQueryVo.setAptOrderId(order.getAptOrderId());
- orderQueryVo.setAptPhone(order.getAptPhone());
- if (order.getDeliveryStatus() > DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status) {
- ResObject<OrderQueryResultVo> resObject = client.queryOrderInfo(orderQueryVo);
- if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
- if(resObject.getData().getRiderLat() != null){
- double[] receiverGps = CoordinateUtils.bd09_To_Gcj02(resObject.getData().getRiderLat().doubleValue(), resObject.getData().getRiderLng().doubleValue());
- locationVo.setShipperLat(receiverGps[0] + "");
- locationVo.setShipperLng(receiverGps[1] + "");
- locationVo.setShipperName(resObject.getData().getRiderName());
- locationVo.setShipperPhone(resObject.getData().getRiderPhone());
- }
- }
- }
- } else if (DeliveryTypeEnums.FENG_NIAO.getType().equals(delivery.getType())&&orderDelivery!=null) {
- if (order.getDeliveryStatus() > DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status) {
- OrderQueryVo orderQueryVo = new OrderQueryVo();
- orderQueryVo.setLbClient(DeliveryTypeEnums.FENG_NIAO.getName());
- orderQueryVo.setOrderNo(orderDelivery.getChildOrderSn());
- orderQueryVo.setAccessToken(delivery.getAuthToken());
- orderQueryVo.setMerchantId(delivery.getShopId());
- ResObject<OrderQueryResultVo> resObject = client.queryOrderInfo(orderQueryVo);
- if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
- locationVo.setShipperName(resObject.getData().getRiderName());
- locationVo.setShipperPhone(resObject.getData().getRiderPhone());
- }
- RiderLocationVo riderLocationVo = new RiderLocationVo();
- riderLocationVo.setLbClient(DeliveryTypeEnums.FENG_NIAO.getName());
- riderLocationVo.setOrderNo(orderDelivery.getChildOrderSn());
- riderLocationVo.setAccessToken(delivery.getAuthToken());
- riderLocationVo.setMerchantId(delivery.getShopId());
- ResObject<RiderLocationResultVo> res = client.getRiderLocation(riderLocationVo);
- if (DeletedEnum.NO.getValue().equals(res.getCode())) {
- String riderLat = res.getData().getLat().toString();
- String riderLng = res.getData().getLng().toString();
- locationVo.setShipperLat(riderLat);
- locationVo.setShipperLng(riderLng);
- }
- }
- } else if (DeliveryTypeEnums.MEI_TUAN.getType().equals(delivery.getType())) {
- if (order.getDeliveryStatus() > DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status) {
- RiderLocationVo orderQueryVo = new RiderLocationVo();
- orderQueryVo.setLbClient(DeliveryTypeEnums.MEI_TUAN.getName());
- // 美团订单号
- orderQueryVo.setOrderNo(order.getOutTradeNo());
- // 我们平台订单号
- orderQueryVo.setDeliveryId(order.getId());
- ResObject<RiderLocationResultVo> resObject = client.getRiderLocation(orderQueryVo);
- if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
- String riderLat = resObject.getData().getLat().toString();
- String riderLng = resObject.getData().getLng().toString();
- locationVo.setShipperLat(riderLat);
- locationVo.setShipperLng(riderLng);
- }
- OrderQueryVo orderQuery = new OrderQueryVo();
- orderQuery.setLbClient(DeliveryTypeEnums.MEI_TUAN.getName());
- // 美团订单号
- orderQuery.setOrderNo(order.getOutTradeNo());
- // 我们平台订单号
- orderQuery.setDeliveryId(order.getId());
- ResObject<OrderQueryResultVo> resObject1 = client.queryOrderInfo(orderQuery);
- if (DeletedEnum.NO.getValue().equals(resObject1.getCode())) {
- locationVo.setShipperName(resObject1.getData().getRiderName());
- locationVo.setShipperPhone(resObject1.getData().getRiderPhone());
- }
- }
- } else if (DeliveryTypeEnums.MEI_TUAN_ZB.getType().equals(delivery.getType())) {
- if (order.getDeliveryStatus() > DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status) {
- RiderLocationVo orderQueryVo = new RiderLocationVo();
- orderQueryVo.setLbClient(DeliveryTypeEnums.MEI_TUAN_ZB.getName());
- // 美团订单号
- orderQueryVo.setOrderNo(orderDelivery.getOutTradeNo());
- // token
- orderQueryVo.setAccessToken(orderDelivery.getZbToken());
- ResObject<RiderLocationResultVo> resObject = client.getRiderLocation(orderQueryVo);
- if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
- String riderLat = resObject.getData().getLat().toString();
- String riderLng = resObject.getData().getLng().toString();
- locationVo.setShipperLat(riderLat);
- locationVo.setShipperLng(riderLng);
- }
- }
- }
- else if (DeliveryTypeEnums.SHAN_SONG.getType().equals(delivery.getType())&&orderDelivery!=null) {
- OrderQueryVo orderQueryVo = new OrderQueryVo();
- orderQueryVo.setLbClient(DeliveryTypeEnums.SHAN_SONG.getName());
- orderQueryVo.setOrderNo(orderDelivery.getChildOrderSn());
- orderQueryVo.setIssOrderNo(order.getOutTradeNo());
- if (orderDelivery.getIsMine() == 1){
- orderQueryVo.setIsShansongSH(true);
- ShopDeliveryBind shopDeliveryBind = iShopDeliveryBindService.getShopDeliveryBind(order.getMerchantId(), order.getShopId(), delivery.getId(), delivery.getType());
- if (shopDeliveryBind != null){
- orderQueryVo.setAccessToken(shopDeliveryBind.getAuthToken());
- }
- }
- if (order.getDeliveryStatus() > DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status) {
- ResObject<OrderQueryResultVo> resObject = client.queryOrderInfo(orderQueryVo);
- if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
- if(resObject.getData().getRiderLat() != null){
- double[] receiverGps = CoordinateUtils.bd09_To_Gcj02(resObject.getData().getRiderLat().doubleValue(), resObject.getData().getRiderLng().doubleValue());
- locationVo.setShipperLat(receiverGps[0] + "");
- locationVo.setShipperLng(receiverGps[1] + "");
- locationVo.setShipperName(resObject.getData().getRiderName());
- locationVo.setShipperPhone(resObject.getData().getRiderPhone());
- }
- }
- }
- }
- else if (DeliveryTypeEnums.KUAI_FU.getType().equals(delivery.getType())&&orderDelivery!=null) {
- OrderQueryVo orderQueryVo = new OrderQueryVo();
- orderQueryVo.setLbClient(DeliveryTypeEnums.KUAI_FU.getName());
- orderQueryVo.setOrderNo(orderDelivery.getChildOrderSn());
- orderQueryVo.setIssOrderNo(order.getOutTradeNo());
- // 现在快服相关信息
- orderQueryVo.setAccessToken(orderDelivery.getKfToken());
- orderQueryVo.setKfOpenId(orderDelivery.getKfOpenId());
- orderQueryVo.setIsMine(orderDelivery.getIsMine() );
- if (order.getDeliveryStatus() > DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status) {
- ResObject<OrderQueryResultVo> resObject = client.queryOrderInfo(orderQueryVo);
- if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
- if(resObject.getData().getRiderLat() != null){
- double[] receiverGps = CoordinateUtils.bd09_To_Gcj02(resObject.getData().getRiderLat().doubleValue(), resObject.getData().getRiderLng().doubleValue());
- locationVo.setShipperLat(receiverGps[0] + "");
- locationVo.setShipperLng(receiverGps[1] + "");
- locationVo.setShipperName(resObject.getData().getRiderName());
- locationVo.setShipperPhone(resObject.getData().getRiderPhone());
- }
- }
- }
- }else if (DeliveryTypeEnums.HUO_LA_LA.getType().equals(delivery.getType())&&orderDelivery!=null){
- OrderQueryVo orderQueryVo = new OrderQueryVo();
- orderQueryVo.setLbClient(DeliveryTypeEnums.HUO_LA_LA.getName());
- orderQueryVo.setIssOrderNo(orderDelivery.getOutTradeNo());
- orderQueryVo.setAccessToken(delivery.getAuthToken());
- ResObject<OrderQueryResultVo> orderInfo = client.queryOrderInfo(orderQueryVo);
- if (orderInfo!=null) {
- locationVo.setShipperName(orderInfo.getData().getRiderName());
- locationVo.setShipperPhone(orderInfo.getData().getRiderPhone());
- List<HirtualPhoneInfo> list = orderInfo.getData().getHllPhones();
- if(!org.springframework.util.CollectionUtils.isEmpty(list)){
- for(HirtualPhoneInfo info:list ){
- if(info.getUser_phone_no().equals(order.getSendPhone())){
- locationVo.setShipperPhone(info.getConnect_phone_no());
- }
- }
- }else{
- String phone = client.bindVirtualPhone(delivery.getAuthToken(),orderDelivery.getOutTradeNo(),order.getSendPhone());
- locationVo.setShipperPhone(phone);
- }
- String riderLat = orderInfo.getData().getRiderLat().toString();
- String riderLng = orderInfo.getData().getRiderLng().toString();
- locationVo.setShipperLat(riderLat);
- locationVo.setShipperLng(riderLng);
- }
- } else if (DeliveryTypeEnums.SHUN_FENG.getType().equals(delivery.getType())) {
- RiderLocationVo orderQueryVo = new RiderLocationVo();
- orderQueryVo.setLbClient(DeliveryTypeEnums.SHUN_FENG.getName());
- orderQueryVo.setOrderNo(order.getOutTradeNo());
- orderQueryVo.setOrderType(1);
- ResObject<RiderLocationResultVo> resObject = client.getRiderLocation(orderQueryVo);
- if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
- if(resObject.getData().getLat() != null){
- String riderLat = resObject.getData().getLat().toString();
- String riderLng = resObject.getData().getLng().toString();
- locationVo.setShipperLat(riderLat);
- locationVo.setShipperLng(riderLng);
- locationVo.setShipperName(resObject.getData().getName());
- locationVo.setShipperPhone(resObject.getData().getPhone());
- }
- }
- } else if (DeliveryTypeEnums.MEI_TUAN_SG_ZB.getType().equals(delivery.getType())) {
- if (order.getDeliveryStatus() > DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status) {
- DspWaimai waiMai = iDspWaimaiService.findOne(WaimaiTypeEnums.MEI_TUAN.getType());
- ShopWaimai shopWaimai = iShopWaimaiService.findByToken(order.getShopId(), waiMai.getId(),orderDelivery.getZbToken());
- RiderLocationVo orderQueryVo = new RiderLocationVo();
- orderQueryVo.setLbClient(DeliveryTypeEnums.MEI_TUAN_SG_ZB.getName());
- // 美团订单号
- orderQueryVo.setOrderNo(orderDelivery.getOutTradeNo());
- // token
- orderQueryVo.setAccessToken(orderDelivery.getZbToken());
- orderQueryVo.setThirdShopId(shopWaimai.getThirdShopId());
- ResObject<RiderLocationResultVo> resObject = client.getRiderLocation(orderQueryVo);
- if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
- String riderLat = resObject.getData().getLat().toString();
- String riderLng = resObject.getData().getLng().toString();
- locationVo.setShipperLat(riderLat);
- locationVo.setShipperLng(riderLng);
- }
- }
- }else if (DeliveryTypeEnums.FENG_NIAO_PT.getType().equals(delivery.getType())&&orderDelivery!=null) {
- if (order.getDeliveryStatus() > DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status) {
- OrderQueryVo orderQueryVo = new OrderQueryVo();
- orderQueryVo.setLbClient(DeliveryTypeEnums.FENG_NIAO_PT.getName());
- orderQueryVo.setOrderNo(orderDelivery.getChildOrderSn());
- orderQueryVo.setAccessToken(delivery.getAuthToken());
- orderQueryVo.setMerchantId(delivery.getShopId());
- ResObject<OrderQueryResultVo> resObject = client.queryOrderInfo(orderQueryVo);
- if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
- locationVo.setShipperName(resObject.getData().getRiderName());
- locationVo.setShipperPhone(resObject.getData().getRiderPhone());
- }
- RiderLocationVo riderLocationVo = new RiderLocationVo();
- riderLocationVo.setLbClient(DeliveryTypeEnums.FENG_NIAO_PT.getName());
- riderLocationVo.setOrderNo(orderDelivery.getChildOrderSn());
- riderLocationVo.setAccessToken(delivery.getAuthToken());
- riderLocationVo.setMerchantId(delivery.getShopId());
- ResObject<RiderLocationResultVo> res = client.getRiderLocation(riderLocationVo);
- if (DeletedEnum.NO.getValue().equals(res.getCode())) {
- String riderLat = res.getData().getLat().toString();
- String riderLng = res.getData().getLng().toString();
- locationVo.setShipperLat(riderLat);
- locationVo.setShipperLng(riderLng);
- }
- }
- }
- return locationVo;
- }
- @Override
- public ResponseResult createOrder(OrderCreateReq orderCreateReq) {
- // 计价结果缓存到redis, 10分钟有效, 过时需重新计价
- if (!redisCache.hasKey(RedisKeyConstant.VALUATION_RESULT + orderCreateReq.getOutOrderSn())) {
- return ResponseResult.error(ResponseResultCodeEnum.VALUATION_INVALID);
- }
- OrderReq orderReq = redisCache.getCacheObject(RedisKeyConstant.VALUATION_RESULT + orderCreateReq.getOutOrderSn());
- List<ValuationRes> valuationResList = orderReq.getValuationRes();
- if (CollectionUtils.isEmpty(valuationResList)) {
- return ResponseResult.error(ResponseResultCodeEnum.VALUATION_INVALID);
- }
- List<String> deliveryIds = Arrays.asList(orderCreateReq.getDeliveryIdStr().split(","));
- List<ValuationRes> valuationRes = valuationResList.stream().filter(item -> deliveryIds.contains(String.valueOf(item.getDeliveryType()))).collect(Collectors.toList());
- if (CollectionUtils.isEmpty(valuationRes)) {
- return ResponseResult.error(ResponseResultCodeEnum.DELIVERY_ID_INVALID);
- }
- orderReq.setValuationRes(valuationRes);
- try {
- Object result = apiOrderNewService.createOrder(orderReq.getMemberId(), orderReq, 1);
- if ("amount_not_enough".equals(result)) {
- return ResponseResult.error(ResponseResultCodeEnum.AMOUNT_NOT_ENOUGH);
- } else if ("ok".equals(result)) {
- OrderCreateVo orderCreateVo = OrderCreateVo.builder().orderSn(orderReq.getOrderNo()).outOrderSn(orderCreateReq.getOutOrderSn()).build();
- return ResponseResult.success(orderCreateVo);
- }
- } catch (CustomAppException e) {
- return ResponseResult.error(ResponseResultCodeEnum.ORDER_CREATE_ERR.getCode(), e.getMessage());
- } catch (Exception e) {
- return ResponseResult.error(ResponseResultCodeEnum.ORDER_CREATE_ERR, null);
- }
- return ResponseResult.error(ResponseResultCodeEnum.ORDER_CREATE_ERR);
- }
- }
|