OpenApiOrderServiceImpl.java 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784
  1. package com.ydd.app.service.impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  5. import com.ydd.api.DeliveryService;
  6. import com.ydd.app.dto.*;
  7. import com.ydd.app.service.ApiOrderNewService;
  8. import com.ydd.app.service.OpenApiOrderService;
  9. import com.ydd.app.vo.OrderLocationVo;
  10. import com.ydd.app.vo.OrderCreateVo;
  11. import com.ydd.app.vo.PushOrderVo;
  12. import com.ydd.common.constant.RedisKeyConstant;
  13. import com.ydd.common.core.domain.ResponseResult;
  14. import com.ydd.common.core.redis.RedisCache;
  15. import com.ydd.common.enums.DeliveryTypeEnums;
  16. import com.ydd.common.enums.ResponseResultCodeEnum;
  17. import com.ydd.common.enums.WaimaiTypeEnums;
  18. import com.ydd.common.utils.SnCodeUtils;
  19. import com.ydd.common.utils.StringUtils;
  20. import com.ydd.ecloud.core.enums.DeletedEnum;
  21. import com.ydd.ecloud.core.utils.BigDecimalUtils;
  22. import com.ydd.module.CancelOrderUtils;
  23. import com.ydd.module.domain.*;
  24. import com.ydd.module.dto.CancelOrderDto;
  25. import com.ydd.module.dto.CouponDto;
  26. import com.ydd.module.enums.*;
  27. import com.ydd.module.expection.CustomAppException;
  28. import com.ydd.module.service.*;
  29. import com.ydd.third.common.utils.CoordinateUtils;
  30. import com.ydd.third.common.vo.ResObject;
  31. import com.ydd.third.common.vo.huolalavo.HirtualPhoneInfo;
  32. import com.ydd.third.common.vo.vo.order.*;
  33. import lombok.RequiredArgsConstructor;
  34. import lombok.extern.slf4j.Slf4j;
  35. import org.apache.commons.collections4.CollectionUtils;
  36. import org.springframework.beans.factory.annotation.Autowired;
  37. import org.springframework.data.redis.core.RedisTemplate;
  38. import org.springframework.stereotype.Service;
  39. import org.springframework.transaction.annotation.Transactional;
  40. import org.springframework.transaction.interceptor.TransactionAspectSupport;
  41. import java.math.BigDecimal;
  42. import java.util.Arrays;
  43. import java.util.Date;
  44. import java.util.List;
  45. import java.util.Objects;
  46. import java.util.concurrent.TimeUnit;
  47. import java.util.stream.Collectors;
  48. /**
  49. * 订单类开放接口 ServiceImpl
  50. *
  51. * @author 叶君翔
  52. * @date 2022/04/08 15:20
  53. */
  54. @Slf4j
  55. @Service
  56. @RequiredArgsConstructor(onConstructor_ = @Autowired)
  57. public class OpenApiOrderServiceImpl implements OpenApiOrderService {
  58. private final IOrderService iOrderService;
  59. private final IOrderLogService iOrderLogService;
  60. private final IProductService iProductService;
  61. private final IShopService iShopService;
  62. private final IDspDeliveryService iDspDeliveryService;
  63. private final IShopDeliveryBindService iShopDeliveryBindService;
  64. private final IOrderDeliveryService iOrderDeliveryService;
  65. private final ApiOrderNewService apiOrderNewService;
  66. private final IOrderTipService iOrderTipService;
  67. // redis控制台
  68. private final RedisTemplate redisTemplate;
  69. private final RedisCache redisCache;
  70. private final DeliveryService client;
  71. private final IShopWaimaiService iShopWaimaiService;
  72. private final IDspWaimaiService iDspWaimaiService;
  73. private final IMerchantService iMerchantService;
  74. private final IMemberService iMemberService;
  75. @Override
  76. public ResponseResult pushOrder(OrderPushReq pushReq) {
  77. // 特殊必填处理
  78. ResponseResult result = specialJudge(pushReq);
  79. if (result.getCode() != ResponseResultCodeEnum.SUCCESS.getCode()) {
  80. return result;
  81. }
  82. Merchant merchant = iMerchantService.getOne(new QueryWrapper<Merchant>().eq("deleted", 0).eq("app_id", pushReq.getAppId()));
  83. if (Objects.isNull(merchant)) {
  84. return ResponseResult.error(ResponseResultCodeEnum.APP_ID_ERR);
  85. }
  86. Member member = iMemberService.getOne(new QueryWrapper<Member>().eq("deleted", 0)
  87. .eq("merchant_id", merchant.getId()).eq("member_type", MemberTypeEnum.MERCHANT.getType()));
  88. Order order = iOrderService.getOne(new QueryWrapper<Order>().eq("deleted", 0).eq("out_order_sn", pushReq.getOutOrderSn()));
  89. if (order == null) {
  90. order = new Order();
  91. }
  92. // 添加订单其它属性
  93. order.setMemberId(member.getId());
  94. order.setMerchantId(merchant.getId());
  95. order.setOutOrderSn(pushReq.getOutOrderSn());
  96. order.setProductId(pushReq.getCategoryId().longValue());
  97. Product product = iProductService.getById(order.getProductId());
  98. order.setProductName(product.getName());
  99. order.setWeight(pushReq.getWeight());
  100. if (StringUtils.isNotBlank(pushReq.getRemark())) {
  101. order.setTakeRemark(pushReq.getRemark());
  102. }
  103. order.setReceiptContactName(pushReq.getReceiverName());
  104. order.setReceiptPhone(pushReq.getReceiverPhone());
  105. order.setReceiptProvinceName(pushReq.getReceiverProvinceName());
  106. order.setReceiptCityName(pushReq.getReceiverCityName());
  107. if (StringUtils.isNotBlank(pushReq.getReceiverDistrictName())) {
  108. order.setReceiptDistrictName(pushReq.getReceiverDistrictName());
  109. }
  110. order.setReceiptAddress(pushReq.getReceiverAddress());
  111. if (StringUtils.isNotBlank(pushReq.getReceiverHouseNumber())) {
  112. order.setReceiptStreet(pushReq.getReceiverHouseNumber());
  113. }
  114. order.setReceiptLng(pushReq.getReceiverLng());
  115. order.setReceiptLat(pushReq.getReceiverLat());
  116. order.setReceiptCityCode(pushReq.getReceiverCityCode());
  117. order.setDeliveryStatus(DeliveryStatusEnum.ORDERS_TO_BE_BILLED.getStatus());
  118. if (StringUtils.isNotBlank(pushReq.getShopCode())) {
  119. Shop shop = iShopService.getOne(new QueryWrapper<Shop>().eq("deleted", 0).eq("code", pushReq.getShopCode()));
  120. if (shop != null) {
  121. order.setShopId(shop.getId());
  122. order.setShopName(shop.getName());
  123. order.setSendProvinceName(shop.getProvinceName());
  124. order.setSendCityName(shop.getCityName());
  125. order.setSendDistrictName(shop.getDistrictName());
  126. order.setSendAddress(shop.getAddress());
  127. order.setSendContactName(shop.getContactName());
  128. order.setSendPhone(shop.getMobile());
  129. order.setSendLng(shop.getLng());
  130. order.setSendLat(shop.getLat());
  131. order.setSendStreet(shop.getStreet());
  132. order.setSendCityCode(shop.getCityCode());
  133. }else {
  134. return ResponseResult.error(ResponseResultCodeEnum.SHOP_NOT_EXIST);
  135. }
  136. } else {
  137. order.setShopId(member.getShopId());
  138. Shop shop = iShopService.getById(order.getShopId());
  139. order.setShopName(shop.getName());
  140. order.setSendContactName(pushReq.getSendName());
  141. order.setSendPhone(pushReq.getSendPhone());
  142. order.setSendProvinceName(pushReq.getSendProvinceName());
  143. order.setSendCityName(pushReq.getSendCityName());
  144. if (StringUtils.isNotBlank(pushReq.getSendDistrictName())) {
  145. order.setSendDistrictName(pushReq.getSendDistrictName());
  146. }
  147. order.setSendAddress(pushReq.getSendAddress());
  148. if (StringUtils.isNotBlank(pushReq.getSendHouseNumber())) {
  149. order.setSendStreet(pushReq.getSendHouseNumber());
  150. }
  151. order.setSendLng(pushReq.getSendLng());
  152. order.setSendLat(pushReq.getSendLat());
  153. order.setSendCityCode(pushReq.getSendCityCode());
  154. }
  155. order.setLbDaySeq(pushReq.getDaySeq());
  156. order.setOrderSn(SnCodeUtils.createSn());
  157. if (order.getId() == null) {
  158. iOrderService.save(order);
  159. } else {
  160. iOrderService.updateById(order);
  161. }
  162. PushOrderVo vo = new PushOrderVo();
  163. vo.setOutOrderSn(pushReq.getOutOrderSn());
  164. vo.setOrderSn(order.getOrderSn());
  165. result.setData(vo);
  166. return result;
  167. }
  168. private ResponseResult specialJudge(OrderPushReq orderDto) {
  169. ResponseResult result = ResponseResult.success();
  170. if (StringUtils.isBlank(orderDto.getShopCode())) {
  171. if (StringUtils.isBlank(orderDto.getSendName())) {
  172. return ResponseResult.error(ResponseResultCodeEnum.FIELD_EMPTY, "发件人名称", null);
  173. }
  174. if (StringUtils.isBlank(orderDto.getSendPhone())) {
  175. return ResponseResult.error(ResponseResultCodeEnum.FIELD_EMPTY, "发件人联系电话", null);
  176. }
  177. if (StringUtils.isBlank(orderDto.getSendProvinceName())) {
  178. return ResponseResult.error(ResponseResultCodeEnum.FIELD_EMPTY, "发件人所在省", null);
  179. }
  180. if (StringUtils.isBlank(orderDto.getSendCityName())) {
  181. return ResponseResult.error(ResponseResultCodeEnum.FIELD_EMPTY, "发件人所在市", null);
  182. }
  183. if (StringUtils.isBlank(orderDto.getSendAddress())) {
  184. return ResponseResult.error(ResponseResultCodeEnum.FIELD_EMPTY, "发件人详细地址", null);
  185. }
  186. if (StringUtils.isBlank(orderDto.getSendLng())) {
  187. return ResponseResult.error(ResponseResultCodeEnum.FIELD_EMPTY, "发件人纬度", null);
  188. }
  189. if (StringUtils.isBlank(orderDto.getSendLat())) {
  190. return ResponseResult.error(ResponseResultCodeEnum.FIELD_EMPTY, "发件人经度", null);
  191. }
  192. if (StringUtils.isBlank(orderDto.getSendCityCode())) {
  193. return ResponseResult.error(ResponseResultCodeEnum.FIELD_EMPTY, "发件人测试code", null);
  194. }
  195. }
  196. return result;
  197. }
  198. @Override
  199. @Transactional(rollbackFor = Exception.class)
  200. public ResponseResult cancelOrder(OrderCancelReq cancelReq) {
  201. ResponseResult result = ResponseResult.success();
  202. if (StringUtils.isBlank(cancelReq.getOrderSn()) || StringUtils.isBlank(cancelReq.getOutOrderSn())) {
  203. return ResponseResult.error(ResponseResultCodeEnum.FIELD_EMPTY, "猎豹订单号", null);
  204. }
  205. if (StringUtils.isBlank(cancelReq.getOutOrderSn())) {
  206. return ResponseResult.error(ResponseResultCodeEnum.FIELD_EMPTY, "接入方订单编号", null);
  207. }
  208. Order order = iOrderService.selectOrderBySn(cancelReq.getOrderSn(), cancelReq.getOutOrderSn());
  209. if (Objects.isNull(order)) {
  210. return ResponseResult.error(ResponseResultCodeEnum.ORDER_NOT_EXIST);
  211. }
  212. Integer orderStatus = DeliveryStatusEnum.CANCEL.status;
  213. if (orderStatus.equals(order.getDeliveryStatus())) {
  214. return ResponseResult.error(ResponseResultCodeEnum.ORDER_HAS_BEEN_CANCEL);
  215. }
  216. if (1 != cancelReq.getCancelType() && 4 != cancelReq.getCancelType()) {
  217. return ResponseResult.error(ResponseResultCodeEnum.ORDER_CANCEL_TYPE_NOT_EXIST);
  218. }
  219. order.setCancelType(cancelReq.getCancelType());
  220. int count = 0;
  221. ResponseResult responseResult = new ResponseResult();
  222. try {
  223. boolean flag = (order.getDeliveryStatus().equals(DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status) || order.getDeliveryStatus().equals(DeliveryStatusEnum.TO_BE_DELIVERED.status))
  224. || order.getDeliveryStatus().equals(DeliveryStatusEnum.IN_DELIVERY.status);
  225. if (flag) {
  226. if (redisTemplate.hasKey(order.getOrderSn() + "_cancel")) {
  227. Long size = redisTemplate.opsForList().size(order.getOrderSn() + "_cancel");
  228. if (size != null) {
  229. for (long i = 0; i < size; i++) {
  230. OrderResultVo vo = (OrderResultVo) redisTemplate.opsForList().rightPop(order.getOrderSn() + "_cancel");
  231. responseResult = cancelThirdOrder(order, vo.getDeliveryId(), count, vo.getAptOrderId(), vo.getPhone(), cancelReq.getCancelType(), cancelReq.getCancelReason());
  232. }
  233. }
  234. } else if (order.getDeliveryStatus().intValue() >= DeliveryStatusEnum.TO_BE_DELIVERED.status.intValue()) {
  235. cancelOrder(order, cancelReq.getCancelReason(), orderStatus);
  236. responseResult = cancelThirdOrder(order,order.getDeliveryId(),count,order.getAptOrderId(),order.getAptPhone(), cancelReq.getCancelType(),order.getCancelReason());
  237. } else if (order.getDeliveryStatus().intValue() == DeliveryStatusEnum.ORDERS_TO_BE_BILLED.status.intValue()) {
  238. cancelOrder(order, cancelReq.getCancelReason(), orderStatus);
  239. } else if (order.getDeliveryStatus().equals(DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status)) {
  240. cancelOrder(order, cancelReq.getCancelReason(), orderStatus);
  241. 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));
  242. if(CollectionUtils.isNotEmpty(list)){
  243. for(OrderDelivery orderDelivery:list){
  244. responseResult = cancelThirdOrder(order,orderDelivery.getDeliveryId(),count,null,null, cancelReq.getCancelType(),cancelReq.getCancelReason());
  245. }
  246. }
  247. }
  248. } else if (order.getStatus().equals(PayStatusEnum.NO_PAYED.status) && order.getDeliveryStatus().equals(DeliveryStatusEnum.ORDERS_TO_BE_BILLED.status)) {
  249. cancelOrder(order, cancelReq.getCancelReason(), orderStatus);
  250. } else if (DeliveryStatusEnum.ABNORMAL.status.equals(order.getDeliveryStatus()) && DeliveryStatusEnum.CANCEL.status.equals(orderStatus)) {
  251. cancelOrder(order, cancelReq.getCancelReason(), orderStatus);
  252. }
  253. } catch (Exception e) {
  254. count += 1;
  255. // 回滚事务
  256. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  257. }
  258. if (count > 0 || responseResult.getCode() == ResponseResultCodeEnum.FAIL.getCode()) {
  259. return ResponseResult.error(ResponseResultCodeEnum.FAIL);
  260. }
  261. return result;
  262. }
  263. public ResponseResult cancelThirdOrder(Order order,Long deliveryId,int result,Integer aptOrderId,String aptPhone,Integer cancelType,String cancenlResonMsg){
  264. ResponseResult responseResult = new ResponseResult();
  265. responseResult.setCode(ResponseResultCodeEnum.SUCCESS.getCode());
  266. DspDelivery delivery = iDspDeliveryService.getById(deliveryId);
  267. OrderDelivery orderDelivery = iOrderDeliveryService.getOne(new QueryWrapper<OrderDelivery>().eq("order_sn", order.getOrderSn()).eq("delivery_id", deliveryId));
  268. // 违约金处理
  269. BigDecimal deductFee = BigDecimal.ZERO;
  270. if (DeliveryStatusEnum.CANCEL.status.equals(orderDelivery.getDeliveryStatus())) {
  271. // 三方平台已取消
  272. cancelSf(deductFee, order,deliveryId,"");
  273. } else {
  274. //调用配送平台取消接口
  275. ResObject<CancelOrderResultVo> resObject = getCancelOrderResultVoResObject(orderDelivery.getChildOrderSn(), orderDelivery.getOutTradeNo(), orderDelivery.getUuptOpenId(), aptOrderId,
  276. aptPhone, order.getId(), delivery, cancelType, cancenlResonMsg);
  277. if (resObject.getCode() != 0) {
  278. result += 1;
  279. orderDelivery.setCancelResult(resObject.getMsg());
  280. iOrderDeliveryService.update(orderDelivery, new UpdateWrapper<OrderDelivery>().eq("order_sn", order.getOrderSn()).eq("delivery_id", deliveryId));
  281. if(resObject.getCode() !=2011&&!orderDelivery.getDeliveryName().contains("达达")){
  282. responseResult.setCode(ResponseResultCodeEnum.FAIL.getCode());
  283. }
  284. }
  285. if (resObject.getData() != null&&!DeliveryTypeEnums.SHAN_SONG.getType().equals(delivery.getType())) {
  286. deductFee = resObject.getData().getDeductFee() == null ? BigDecimal.ZERO : resObject.getData().getDeductFee();
  287. if (deductFee.compareTo(BigDecimal.ZERO) > 0) {
  288. redisCache.setCacheObject("deuctFee_"+order.getOrderSn(), deductFee);
  289. redisCache.expire("deuctFee_"+order.getOrderSn(),2, TimeUnit.HOURS);
  290. }
  291. }
  292. //商家取消订单 顺丰是实时处理不回调
  293. if (DeliveryTypeEnums.SHUN_FENG.getType().equals(delivery.getType()) || DeliveryTypeEnums.FENG_NIAO.getType().equals(delivery.getType())
  294. || DeliveryTypeEnums.FENG_NIAO_PT.getType().equals(delivery.getType())
  295. || DeliveryTypeEnums.MEI_TUAN_ZB.getType().equals(delivery.getType())
  296. || DeliveryTypeEnums.MEI_TUAN_SG_ZB.getType().equals(delivery.getType())) {
  297. cancelSf(deductFee, order,deliveryId,resObject.getMsg());
  298. }
  299. if (result > 0) {
  300. responseResult.setCode(ResponseResultCodeEnum.FAIL.getCode());
  301. }
  302. }
  303. return responseResult;
  304. }
  305. public void cancelOrder(Order order, String cancelReason, Integer orderStatus) {
  306. order.setStatus(PayStatusEnum.CANCEL.status);
  307. order.setDeliveryStatus(orderStatus);
  308. order.setCancelReason(cancelReason);
  309. iOrderService.updateById(order);
  310. iOrderLogService.addOrderLog(order.getId(), order.getDeliveryStatus());
  311. }
  312. private void cancelSf(BigDecimal deductFee, Order order,Long deliveryId,String cancelResult) {
  313. OrderDelivery orderDelivery = new OrderDelivery();
  314. orderDelivery.setDeliveryStatus(DeliveryStatusEnum.CANCEL.status);
  315. orderDelivery.setCancelTime(new Date());
  316. orderDelivery.setCancelResult(cancelResult);
  317. iOrderDeliveryService.update(orderDelivery, new UpdateWrapper<OrderDelivery>().eq("order_sn", order.getOrderSn()).eq("delivery_id", deliveryId));
  318. int count = iOrderDeliveryService.count(new QueryWrapper<OrderDelivery>().eq("order_sn", order.getOrderSn())
  319. .ne("delivery_status", DeliveryStatusEnum.CANCEL.status).ne("out_trade_no", -1).isNotNull("out_trade_no"));
  320. BigDecimal result = redisCache.getCacheObject(order.getOrderSn());
  321. if (result != null) {
  322. deductFee = result;
  323. redisCache.deleteObject(order.getOrderSn());
  324. }
  325. if (count == 0) {
  326. order = iOrderService.getById(order.getId());
  327. if (order.getRefundMoney().compareTo(BigDecimal.ZERO) == 0) {
  328. order.setRefundMoney(order.getPayAmount().subtract(deductFee));
  329. List<OrderTip> orderTips = iOrderTipService.list(new QueryWrapper<OrderTip>().eq("order_no", order.getOrderSn()).eq("status", PayStatusEnum.PAYED.status));
  330. BigDecimal refundMoney = order.getPayAmount().subtract(deductFee);
  331. BigDecimal tips = orderTips.stream().map(OrderTip::getAmount).reduce(BigDecimal.ZERO, BigDecimalUtils::sum);
  332. refundMoney = refundMoney.subtract(tips);
  333. apiOrderNewService.refundTip(orderTips, "加小费退款", order.getMemberId(), order.getMerchantId());
  334. apiOrderNewService.refund(order.getOrderSn(), refundMoney, "取消订单退款", order.getMemberId(), order.getMerchantId());
  335. redisTemplate.delete(order.getOrderSn()+"to_recive:");
  336. }
  337. iOrderService.updateById(order);
  338. }
  339. }
  340. private ResObject<CancelOrderResultVo> getCancelOrderResultVoResObject(String orderNo, String outTradeNo, String uuptOpenId, Integer aptOrderId, String aptPhone,
  341. Long orderId, DspDelivery delivery, Integer cancelType,String cancenlResonMsg) {
  342. OrderDelivery orderDelivery = iOrderDeliveryService.getOne(new QueryWrapper<OrderDelivery>().eq("child_order_sn", orderNo));
  343. CancelOrderDto dto = new CancelOrderDto();
  344. dto.setOrderSn(orderNo);
  345. dto.setReason(OrderCancelTypeEnum.getNameByType(cancelType));
  346. dto.setCancelCode(cancelType);
  347. dto.setCancenlResonMsg(cancenlResonMsg);
  348. dto.setOutTradeNo(outTradeNo);
  349. dto.setUuptOpenId(uuptOpenId);
  350. dto.setAptOrderId(aptOrderId);
  351. dto.setAptPhone(aptPhone);
  352. dto.setKfAccessToken(orderDelivery.getKfToken());
  353. // 美团众包
  354. dto.setZbOrderSn(orderDelivery.getOutTradeNo());
  355. dto.setZbAccessToken(orderDelivery.getZbToken());
  356. // 美团在我们平台的订单id
  357. dto.setOrderId(orderId);
  358. dto.setIsMine(orderDelivery.getIsMine());
  359. // 货拉拉订单状态
  360. dto.setHllStatus(orderDelivery.getHllStatus());
  361. //顺丰需要shopId delivery配送平台信息
  362. CancelOrderVo orderVo = CancelOrderUtils.createOrderVo(dto, delivery);
  363. Order order = iOrderService.getById(orderId);
  364. if (order.getMerchantId() != null && orderDelivery.getIsMine().equals(1)) {
  365. ShopDeliveryBind shopDeliveryBind = iShopDeliveryBindService.getShopDeliveryBind(order.getMerchantId(), order.getShopId(), delivery.getId(), delivery.getType());
  366. if (shopDeliveryBind != null) {
  367. orderVo.setAccessToken(shopDeliveryBind.getAuthToken());
  368. orderVo.setMerchantId(shopDeliveryBind.getThirdShopId());
  369. }
  370. }
  371. //订单取消返回结果
  372. ResObject<CancelOrderResultVo> resObject = client.cancelOrder(orderVo);
  373. if (resObject.getCode() != 0) {
  374. try {
  375. log.info("<===========>重新发起取消开始********************");
  376. TimeUnit.SECONDS.sleep(5);
  377. resObject = client.cancelOrder(orderVo);
  378. } catch (Exception e) {
  379. }
  380. log.error("取消订单失败" + JSONObject.toJSONString(orderVo));
  381. }
  382. return resObject;
  383. }
  384. @Override
  385. public ResponseResult riderLocation(OrderLocationReq locationReq) {
  386. ResponseResult result = ResponseResult.success();
  387. if (StringUtils.isBlank(locationReq.getOrderSn()) || StringUtils.isBlank(locationReq.getOutOrderSn())) {
  388. return ResponseResult.error(ResponseResultCodeEnum.FIELD_EMPTY, "订单号", null);
  389. }
  390. Order order = iOrderService.selectOrderBySn(locationReq.getOrderSn(), locationReq.getOutOrderSn());
  391. if (Objects.isNull(order)) {
  392. return ResponseResult.error(ResponseResultCodeEnum.ORDER_NOT_EXIST);
  393. }
  394. boolean flag = order.getDeliveryStatus() > DeliveryStatusEnum.IN_DELIVERY.getStatus() ||
  395. DeliveryStatusEnum.CANCEL.status.equals(order.getDeliveryStatus()) || DeliveryStatusEnum.ABNORMAL.status.equals(order.getDeliveryStatus());
  396. OrderDelivery orderDelivery = iOrderDeliveryService.getOne(new QueryWrapper<OrderDelivery>()
  397. .eq("deleted", 0)
  398. .eq("order_sn", order.getOrderSn())
  399. .eq("delivery_id", order.getDeliveryId()));
  400. DspDelivery delivery = iDspDeliveryService.findById(order.getDeliveryId());
  401. if (flag || Objects.isNull(delivery) || Objects.isNull(orderDelivery)) {
  402. return ResponseResult.error(ResponseResultCodeEnum.ORDER_STATUS_FAIL);
  403. }
  404. OrderLocationVo vo = getRiderLocation(order, orderDelivery, delivery);
  405. if (Objects.isNull(vo)) {
  406. return ResponseResult.error(ResponseResultCodeEnum.FAIL);
  407. }else {
  408. result.setData(vo);
  409. }
  410. return result;
  411. }
  412. private OrderLocationVo getRiderLocation(Order order, OrderDelivery orderDelivery, DspDelivery delivery) {
  413. OrderLocationVo locationVo = new OrderLocationVo();
  414. if (DeliveryTypeEnums.DADA.getType().equals(delivery.getType())&&orderDelivery!=null) {
  415. OrderQueryVo orderQueryVo = new OrderQueryVo();
  416. orderQueryVo.setLbClient(DeliveryTypeEnums.DADA.getName());
  417. orderQueryVo.setOrderNo(orderDelivery.getChildOrderSn());
  418. orderQueryVo.setIsDirectDelivery(0);
  419. if (orderDelivery.getIsMine() == 1L){
  420. ShopDeliveryBind shopDeliveryBind = iShopDeliveryBindService.getShopDeliveryBind(order.getMerchantId(), order.getShopId(), delivery.getId(), delivery.getType());
  421. if (shopDeliveryBind != null){
  422. orderQueryVo.setMerchantId(shopDeliveryBind.getThirdShopId());
  423. }
  424. }
  425. ResObject<OrderQueryResultVo> resObject = client.queryOrderInfo(orderQueryVo);
  426. if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
  427. String riderLat = resObject.getData().getRiderLat().toString();
  428. String riderLng = resObject.getData().getRiderLng().toString();
  429. locationVo.setShipperLat(riderLat);
  430. locationVo.setShipperLng(riderLng);
  431. locationVo.setShipperName(resObject.getData().getRiderName());
  432. locationVo.setShipperPhone(resObject.getData().getRiderPhone());
  433. }
  434. } else if (DeliveryTypeEnums.DADA_YZ.getType().equals(delivery.getType())&&orderDelivery!=null) {
  435. OrderQueryVo orderQueryVo = new OrderQueryVo();
  436. orderQueryVo.setLbClient(DeliveryTypeEnums.DADA_YZ.getName());
  437. orderQueryVo.setOrderNo(orderDelivery.getChildOrderSn());
  438. orderQueryVo.setIsDirectDelivery(1);
  439. if (orderDelivery.getIsMine() == 1){
  440. ShopDeliveryBind shopDeliveryBind = iShopDeliveryBindService.getShopDeliveryBind(order.getMerchantId(), order.getShopId(), delivery.getId(), delivery.getType());
  441. if (shopDeliveryBind != null){
  442. orderQueryVo.setMerchantId(shopDeliveryBind.getThirdShopId());
  443. }
  444. }
  445. ResObject<OrderQueryResultVo> resObject = client.queryOrderInfo(orderQueryVo);
  446. if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
  447. String riderLat = resObject.getData().getRiderLat().toString();
  448. String riderLng = resObject.getData().getRiderLng().toString();
  449. locationVo.setShipperLat(riderLat);
  450. locationVo.setShipperLng(riderLng);
  451. locationVo.setShipperName(resObject.getData().getRiderName());
  452. locationVo.setShipperPhone(resObject.getData().getRiderPhone());
  453. }
  454. } else if (DeliveryTypeEnums.UUPT.getType().equals(delivery.getType())) {
  455. OrderQueryVo orderQueryVo = new OrderQueryVo();
  456. orderQueryVo.setLbClient(DeliveryTypeEnums.UUPT.getName());
  457. orderQueryVo.setOrderNo(order.getOutTradeNo());
  458. orderQueryVo.setUuptOpenId(order.getUuptOpenId());
  459. ResObject<OrderQueryResultVo> resObject = client.queryOrderInfo(orderQueryVo);
  460. if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
  461. if(resObject.getData().getRiderLat() != null){
  462. double[] receiverGps = CoordinateUtils.bd09_To_Gcj02(resObject.getData().getRiderLat().doubleValue(), resObject.getData().getRiderLng().doubleValue());
  463. locationVo.setShipperLat(receiverGps[0] + "");
  464. locationVo.setShipperLng(receiverGps[1] + "");
  465. locationVo.setShipperName(resObject.getData().getRiderName());
  466. locationVo.setShipperPhone(resObject.getData().getRiderPhone());
  467. }
  468. }
  469. } else if (DeliveryTypeEnums.AIPT.getType().equals(delivery.getType())) {
  470. OrderQueryVo orderQueryVo = new OrderQueryVo();
  471. orderQueryVo.setLbClient(DeliveryTypeEnums.AIPT.getName());
  472. orderQueryVo.setAptOrderId(order.getAptOrderId());
  473. orderQueryVo.setAptPhone(order.getAptPhone());
  474. if (order.getDeliveryStatus() > DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status) {
  475. ResObject<OrderQueryResultVo> resObject = client.queryOrderInfo(orderQueryVo);
  476. if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
  477. if(resObject.getData().getRiderLat() != null){
  478. double[] receiverGps = CoordinateUtils.bd09_To_Gcj02(resObject.getData().getRiderLat().doubleValue(), resObject.getData().getRiderLng().doubleValue());
  479. locationVo.setShipperLat(receiverGps[0] + "");
  480. locationVo.setShipperLng(receiverGps[1] + "");
  481. locationVo.setShipperName(resObject.getData().getRiderName());
  482. locationVo.setShipperPhone(resObject.getData().getRiderPhone());
  483. }
  484. }
  485. }
  486. } else if (DeliveryTypeEnums.FENG_NIAO.getType().equals(delivery.getType())&&orderDelivery!=null) {
  487. if (order.getDeliveryStatus() > DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status) {
  488. OrderQueryVo orderQueryVo = new OrderQueryVo();
  489. orderQueryVo.setLbClient(DeliveryTypeEnums.FENG_NIAO.getName());
  490. orderQueryVo.setOrderNo(orderDelivery.getChildOrderSn());
  491. orderQueryVo.setAccessToken(delivery.getAuthToken());
  492. orderQueryVo.setMerchantId(delivery.getShopId());
  493. ResObject<OrderQueryResultVo> resObject = client.queryOrderInfo(orderQueryVo);
  494. if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
  495. locationVo.setShipperName(resObject.getData().getRiderName());
  496. locationVo.setShipperPhone(resObject.getData().getRiderPhone());
  497. }
  498. RiderLocationVo riderLocationVo = new RiderLocationVo();
  499. riderLocationVo.setLbClient(DeliveryTypeEnums.FENG_NIAO.getName());
  500. riderLocationVo.setOrderNo(orderDelivery.getChildOrderSn());
  501. riderLocationVo.setAccessToken(delivery.getAuthToken());
  502. riderLocationVo.setMerchantId(delivery.getShopId());
  503. ResObject<RiderLocationResultVo> res = client.getRiderLocation(riderLocationVo);
  504. if (DeletedEnum.NO.getValue().equals(res.getCode())) {
  505. String riderLat = res.getData().getLat().toString();
  506. String riderLng = res.getData().getLng().toString();
  507. locationVo.setShipperLat(riderLat);
  508. locationVo.setShipperLng(riderLng);
  509. }
  510. }
  511. } else if (DeliveryTypeEnums.MEI_TUAN.getType().equals(delivery.getType())) {
  512. if (order.getDeliveryStatus() > DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status) {
  513. RiderLocationVo orderQueryVo = new RiderLocationVo();
  514. orderQueryVo.setLbClient(DeliveryTypeEnums.MEI_TUAN.getName());
  515. // 美团订单号
  516. orderQueryVo.setOrderNo(order.getOutTradeNo());
  517. // 我们平台订单号
  518. orderQueryVo.setDeliveryId(order.getId());
  519. ResObject<RiderLocationResultVo> resObject = client.getRiderLocation(orderQueryVo);
  520. if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
  521. String riderLat = resObject.getData().getLat().toString();
  522. String riderLng = resObject.getData().getLng().toString();
  523. locationVo.setShipperLat(riderLat);
  524. locationVo.setShipperLng(riderLng);
  525. }
  526. OrderQueryVo orderQuery = new OrderQueryVo();
  527. orderQuery.setLbClient(DeliveryTypeEnums.MEI_TUAN.getName());
  528. // 美团订单号
  529. orderQuery.setOrderNo(order.getOutTradeNo());
  530. // 我们平台订单号
  531. orderQuery.setDeliveryId(order.getId());
  532. ResObject<OrderQueryResultVo> resObject1 = client.queryOrderInfo(orderQuery);
  533. if (DeletedEnum.NO.getValue().equals(resObject1.getCode())) {
  534. locationVo.setShipperName(resObject1.getData().getRiderName());
  535. locationVo.setShipperPhone(resObject1.getData().getRiderPhone());
  536. }
  537. }
  538. } else if (DeliveryTypeEnums.MEI_TUAN_ZB.getType().equals(delivery.getType())) {
  539. if (order.getDeliveryStatus() > DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status) {
  540. RiderLocationVo orderQueryVo = new RiderLocationVo();
  541. orderQueryVo.setLbClient(DeliveryTypeEnums.MEI_TUAN_ZB.getName());
  542. // 美团订单号
  543. orderQueryVo.setOrderNo(orderDelivery.getOutTradeNo());
  544. // token
  545. orderQueryVo.setAccessToken(orderDelivery.getZbToken());
  546. ResObject<RiderLocationResultVo> resObject = client.getRiderLocation(orderQueryVo);
  547. if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
  548. String riderLat = resObject.getData().getLat().toString();
  549. String riderLng = resObject.getData().getLng().toString();
  550. locationVo.setShipperLat(riderLat);
  551. locationVo.setShipperLng(riderLng);
  552. }
  553. }
  554. }
  555. else if (DeliveryTypeEnums.SHAN_SONG.getType().equals(delivery.getType())&&orderDelivery!=null) {
  556. OrderQueryVo orderQueryVo = new OrderQueryVo();
  557. orderQueryVo.setLbClient(DeliveryTypeEnums.SHAN_SONG.getName());
  558. orderQueryVo.setOrderNo(orderDelivery.getChildOrderSn());
  559. orderQueryVo.setIssOrderNo(order.getOutTradeNo());
  560. if (orderDelivery.getIsMine() == 1){
  561. orderQueryVo.setIsShansongSH(true);
  562. ShopDeliveryBind shopDeliveryBind = iShopDeliveryBindService.getShopDeliveryBind(order.getMerchantId(), order.getShopId(), delivery.getId(), delivery.getType());
  563. if (shopDeliveryBind != null){
  564. orderQueryVo.setAccessToken(shopDeliveryBind.getAuthToken());
  565. }
  566. }
  567. if (order.getDeliveryStatus() > DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status) {
  568. ResObject<OrderQueryResultVo> resObject = client.queryOrderInfo(orderQueryVo);
  569. if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
  570. if(resObject.getData().getRiderLat() != null){
  571. double[] receiverGps = CoordinateUtils.bd09_To_Gcj02(resObject.getData().getRiderLat().doubleValue(), resObject.getData().getRiderLng().doubleValue());
  572. locationVo.setShipperLat(receiverGps[0] + "");
  573. locationVo.setShipperLng(receiverGps[1] + "");
  574. locationVo.setShipperName(resObject.getData().getRiderName());
  575. locationVo.setShipperPhone(resObject.getData().getRiderPhone());
  576. }
  577. }
  578. }
  579. }
  580. else if (DeliveryTypeEnums.KUAI_FU.getType().equals(delivery.getType())&&orderDelivery!=null) {
  581. OrderQueryVo orderQueryVo = new OrderQueryVo();
  582. orderQueryVo.setLbClient(DeliveryTypeEnums.KUAI_FU.getName());
  583. orderQueryVo.setOrderNo(orderDelivery.getChildOrderSn());
  584. orderQueryVo.setIssOrderNo(order.getOutTradeNo());
  585. // 现在快服相关信息
  586. orderQueryVo.setAccessToken(orderDelivery.getKfToken());
  587. orderQueryVo.setKfOpenId(orderDelivery.getKfOpenId());
  588. orderQueryVo.setIsMine(orderDelivery.getIsMine() );
  589. if (order.getDeliveryStatus() > DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status) {
  590. ResObject<OrderQueryResultVo> resObject = client.queryOrderInfo(orderQueryVo);
  591. if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
  592. if(resObject.getData().getRiderLat() != null){
  593. double[] receiverGps = CoordinateUtils.bd09_To_Gcj02(resObject.getData().getRiderLat().doubleValue(), resObject.getData().getRiderLng().doubleValue());
  594. locationVo.setShipperLat(receiverGps[0] + "");
  595. locationVo.setShipperLng(receiverGps[1] + "");
  596. locationVo.setShipperName(resObject.getData().getRiderName());
  597. locationVo.setShipperPhone(resObject.getData().getRiderPhone());
  598. }
  599. }
  600. }
  601. }else if (DeliveryTypeEnums.HUO_LA_LA.getType().equals(delivery.getType())&&orderDelivery!=null){
  602. OrderQueryVo orderQueryVo = new OrderQueryVo();
  603. orderQueryVo.setLbClient(DeliveryTypeEnums.HUO_LA_LA.getName());
  604. orderQueryVo.setIssOrderNo(orderDelivery.getOutTradeNo());
  605. orderQueryVo.setAccessToken(delivery.getAuthToken());
  606. ResObject<OrderQueryResultVo> orderInfo = client.queryOrderInfo(orderQueryVo);
  607. if (orderInfo!=null) {
  608. locationVo.setShipperName(orderInfo.getData().getRiderName());
  609. locationVo.setShipperPhone(orderInfo.getData().getRiderPhone());
  610. List<HirtualPhoneInfo> list = orderInfo.getData().getHllPhones();
  611. if(!org.springframework.util.CollectionUtils.isEmpty(list)){
  612. for(HirtualPhoneInfo info:list ){
  613. if(info.getUser_phone_no().equals(order.getSendPhone())){
  614. locationVo.setShipperPhone(info.getConnect_phone_no());
  615. }
  616. }
  617. }else{
  618. String phone = client.bindVirtualPhone(delivery.getAuthToken(),orderDelivery.getOutTradeNo(),order.getSendPhone());
  619. locationVo.setShipperPhone(phone);
  620. }
  621. String riderLat = orderInfo.getData().getRiderLat().toString();
  622. String riderLng = orderInfo.getData().getRiderLng().toString();
  623. locationVo.setShipperLat(riderLat);
  624. locationVo.setShipperLng(riderLng);
  625. }
  626. } else if (DeliveryTypeEnums.SHUN_FENG.getType().equals(delivery.getType())) {
  627. RiderLocationVo orderQueryVo = new RiderLocationVo();
  628. orderQueryVo.setLbClient(DeliveryTypeEnums.SHUN_FENG.getName());
  629. orderQueryVo.setOrderNo(order.getOutTradeNo());
  630. orderQueryVo.setOrderType(1);
  631. ResObject<RiderLocationResultVo> resObject = client.getRiderLocation(orderQueryVo);
  632. if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
  633. if(resObject.getData().getLat() != null){
  634. String riderLat = resObject.getData().getLat().toString();
  635. String riderLng = resObject.getData().getLng().toString();
  636. locationVo.setShipperLat(riderLat);
  637. locationVo.setShipperLng(riderLng);
  638. locationVo.setShipperName(resObject.getData().getName());
  639. locationVo.setShipperPhone(resObject.getData().getPhone());
  640. }
  641. }
  642. } else if (DeliveryTypeEnums.MEI_TUAN_SG_ZB.getType().equals(delivery.getType())) {
  643. if (order.getDeliveryStatus() > DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status) {
  644. DspWaimai waiMai = iDspWaimaiService.findOne(WaimaiTypeEnums.MEI_TUAN.getType());
  645. ShopWaimai shopWaimai = iShopWaimaiService.findByToken(order.getShopId(), waiMai.getId(),orderDelivery.getZbToken());
  646. RiderLocationVo orderQueryVo = new RiderLocationVo();
  647. orderQueryVo.setLbClient(DeliveryTypeEnums.MEI_TUAN_SG_ZB.getName());
  648. // 美团订单号
  649. orderQueryVo.setOrderNo(orderDelivery.getOutTradeNo());
  650. // token
  651. orderQueryVo.setAccessToken(orderDelivery.getZbToken());
  652. orderQueryVo.setThirdShopId(shopWaimai.getThirdShopId());
  653. ResObject<RiderLocationResultVo> resObject = client.getRiderLocation(orderQueryVo);
  654. if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
  655. String riderLat = resObject.getData().getLat().toString();
  656. String riderLng = resObject.getData().getLng().toString();
  657. locationVo.setShipperLat(riderLat);
  658. locationVo.setShipperLng(riderLng);
  659. }
  660. }
  661. }else if (DeliveryTypeEnums.FENG_NIAO_PT.getType().equals(delivery.getType())&&orderDelivery!=null) {
  662. if (order.getDeliveryStatus() > DeliveryStatusEnum.ORDERS_TO_BE_RECEIVED.status) {
  663. OrderQueryVo orderQueryVo = new OrderQueryVo();
  664. orderQueryVo.setLbClient(DeliveryTypeEnums.FENG_NIAO_PT.getName());
  665. orderQueryVo.setOrderNo(orderDelivery.getChildOrderSn());
  666. orderQueryVo.setAccessToken(delivery.getAuthToken());
  667. orderQueryVo.setMerchantId(delivery.getShopId());
  668. ResObject<OrderQueryResultVo> resObject = client.queryOrderInfo(orderQueryVo);
  669. if (DeletedEnum.NO.getValue().equals(resObject.getCode())) {
  670. locationVo.setShipperName(resObject.getData().getRiderName());
  671. locationVo.setShipperPhone(resObject.getData().getRiderPhone());
  672. }
  673. RiderLocationVo riderLocationVo = new RiderLocationVo();
  674. riderLocationVo.setLbClient(DeliveryTypeEnums.FENG_NIAO_PT.getName());
  675. riderLocationVo.setOrderNo(orderDelivery.getChildOrderSn());
  676. riderLocationVo.setAccessToken(delivery.getAuthToken());
  677. riderLocationVo.setMerchantId(delivery.getShopId());
  678. ResObject<RiderLocationResultVo> res = client.getRiderLocation(riderLocationVo);
  679. if (DeletedEnum.NO.getValue().equals(res.getCode())) {
  680. String riderLat = res.getData().getLat().toString();
  681. String riderLng = res.getData().getLng().toString();
  682. locationVo.setShipperLat(riderLat);
  683. locationVo.setShipperLng(riderLng);
  684. }
  685. }
  686. }
  687. return locationVo;
  688. }
  689. @Override
  690. public ResponseResult createOrder(OrderCreateReq orderCreateReq) {
  691. // 计价结果缓存到redis, 10分钟有效, 过时需重新计价
  692. if (!redisCache.hasKey(RedisKeyConstant.VALUATION_RESULT + orderCreateReq.getOutOrderSn())) {
  693. return ResponseResult.error(ResponseResultCodeEnum.VALUATION_INVALID);
  694. }
  695. OrderReq orderReq = redisCache.getCacheObject(RedisKeyConstant.VALUATION_RESULT + orderCreateReq.getOutOrderSn());
  696. List<ValuationRes> valuationResList = orderReq.getValuationRes();
  697. if (CollectionUtils.isEmpty(valuationResList)) {
  698. return ResponseResult.error(ResponseResultCodeEnum.VALUATION_INVALID);
  699. }
  700. List<String> deliveryIds = Arrays.asList(orderCreateReq.getDeliveryIdStr().split(","));
  701. List<ValuationRes> valuationRes = valuationResList.stream().filter(item -> deliveryIds.contains(String.valueOf(item.getDeliveryType()))).collect(Collectors.toList());
  702. if (CollectionUtils.isEmpty(valuationRes)) {
  703. return ResponseResult.error(ResponseResultCodeEnum.DELIVERY_ID_INVALID);
  704. }
  705. orderReq.setValuationRes(valuationRes);
  706. try {
  707. Object result = apiOrderNewService.createOrder(orderReq.getMemberId(), orderReq, 1);
  708. if ("amount_not_enough".equals(result)) {
  709. return ResponseResult.error(ResponseResultCodeEnum.AMOUNT_NOT_ENOUGH);
  710. } else if ("ok".equals(result)) {
  711. OrderCreateVo orderCreateVo = OrderCreateVo.builder().orderSn(orderReq.getOrderNo()).outOrderSn(orderCreateReq.getOutOrderSn()).build();
  712. return ResponseResult.success(orderCreateVo);
  713. }
  714. } catch (CustomAppException e) {
  715. return ResponseResult.error(ResponseResultCodeEnum.ORDER_CREATE_ERR.getCode(), e.getMessage());
  716. } catch (Exception e) {
  717. return ResponseResult.error(ResponseResultCodeEnum.ORDER_CREATE_ERR, null);
  718. }
  719. return ResponseResult.error(ResponseResultCodeEnum.ORDER_CREATE_ERR);
  720. }
  721. }