Commit 96a8ce97 by 徐康

Merge branch 'feature/xukang_20210527_麦咖啡p6v9一键下单'

parents 91b6c184 2bac8396
......@@ -3162,6 +3162,9 @@ public class OrderSdkAdapter {
if (StringUtils.isNotBlank(product.getSplitIndex())){
extInfo.setSplitIndex(product.getSplitIndex());
}
if (null != product.getProductGroupId()) {
extInfo.setProductGroupId(product.getProductGroupId());
}
extInfo.setStapleFood(product.getStapleFood());
extInfo.setOriginalGoodsUid(product.getOriginalGoodsUid());
......
......@@ -133,6 +133,8 @@ public class CreateOrderProductRequest extends BaseConfig {
*/
private Boolean isFixedProduct;
private Long productGroupId;
/**
* 套餐--6
*/
......
......@@ -97,6 +97,8 @@ public class OrderProductAddInfoDto extends BaseConfig {
*/
private String splitIndex;
private Long productGroupId;
/**
* 虚拟商品发券id
*/
......
......@@ -61,6 +61,8 @@ public class ShoppingCartConstant {
public static final int PRODUCT_GROUP_EMPTY= 109;
public static final String CART_PRODUCT_GROUP_EMPTY_STATE = "您选择的【$spuName】商品有未选商品";
public static final String CART_PRODUCT_NOT_MET_CONDITIONS = "您选择的【$spuName】不满足购买条件";
/**
* 可选商品价格校验失败
*/
......
......@@ -14,7 +14,9 @@ package com.freemud.sdk.api.assortment.shoppingcart.domain;
import lombok.Data;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Data
public class ShoppingCartGoodsResponseVo {
......@@ -63,6 +65,11 @@ public class ShoppingCartGoodsResponseVo {
* 前端用来提示的信息
*/
private String toastMsg;
/**
* 前端用来提示的信息
*/
Map<String, List<String>> toastMsgMap = new HashMap<>();
/**
* 购物车中商品价格或有效性是否发生变化
*/
......
......@@ -252,116 +252,6 @@ public interface ShoppingCartBaseService {
}
}
default BaseResponse<CheckCartRequest> checkAllCartGoodsForMCoffee(CheckCartRequest checkCartRequest) {
ShoppingCartAdapter shoppingCartAdapter = SDKCommonBaseContextWare.getBean(ShoppingCartAdapter.class);
ProductService productService = SDKCommonBaseContextWare.getBean(ProductService.class);
try {
ValidateShopProductRequest validateShopProductRequest = shoppingCartAdapter.getValidateShopProductRequest(checkCartRequest);
com.freemud.application.sdk.api.base.BaseResponse<ValiadShopProductResponse> valiadResponse = productService.validateShopProductAboutReason(validateShopProductRequest);
if (valiadResponse == null || !CartResponseConstant.SUCCESS.getCode().equals(valiadResponse.getCode()) || valiadResponse.getData()==null) {
checkCartRequest.getCartGoodsList().clear();
checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true);
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS);
return CartResponseUtil.error(valiadResponse.getMessage(),checkCartRequest);
}
ValiadShopProductResponse validateResult = valiadResponse.getData();
CartGoodsStates cartGoodsStates = new CartGoodsStates();
//非法商品(商品是否存在、商品是否处于上架状态)自动移除,返回前端提示
if (CollectionUtils.isNotEmpty(validateResult.getFailureList())){
List<String> invalidSpu = new ArrayList<>();
List<String> notFoundSpu = new ArrayList<>();
List<String> changePriceSpu = new ArrayList<>();
for (int i = 0; i < validateResult.getFailureList().size(); i++) {
ValiadShopProductResult validaProduct = validateResult.getFailureList().get(i);
for (CartGoods cartGoods : checkCartRequest.getCartGoodsList()) {
checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true);
if (cartGoods.getSkuId().equals(validaProduct.getSkuId())) {
String spuName = null == validaProduct.getProductType() ? (StringUtils.isNotEmpty(cartGoods.getSkuName()) ? cartGoods.getSkuName() :
StringUtils.isNotEmpty(cartGoods.getName()) ? cartGoods.getName() : "") : validaProduct.getProductType().getName();
if (PRODUCT_DOWN == validaProduct.getCode()) {
if (StringUtils.isNotEmpty(spuName)){
invalidSpu.add(spuName);
}
cartGoodsStates.setHasInvalidGoods(true);
cartGoods.setCartGoodsUid(null);
break;
}
if (PRODUCT_NOTFOUND == validaProduct.getCode()) {
if (StringUtils.isNotEmpty(spuName)) {
notFoundSpu.add(spuName);
}
cartGoodsStates.setHasInvalidGoods(true);
cartGoods.setCartGoodsUid(null);
break;
}
if (PRODUCT_PRICE_CHANGE == validaProduct.getCode()) {
if (StringUtils.isNotEmpty(spuName)) {
changePriceSpu.add(spuName);
}
List<ProductBeanDTO> productList = validateResult.getFailureList().stream().filter(f-> f.getCode() == PRODUCT_PRICE_CHANGE).map(ValiadShopProductResult::getProductType).collect(Collectors.toList());
shoppingCartAdapter.updateCartGoodsInfoNew(cartGoods, productList);
break;
}
}
}
}
String toastMsg = "";
if (CollectionUtils.isNotEmpty(invalidSpu)){
toastMsg = toastMsg.concat(CART_PRODUCT_INVALID_STATE.replace("$spuName",StringUtils.join(invalidSpu,",")));
}
if (CollectionUtils.isNotEmpty(notFoundSpu)){
toastMsg = toastMsg.concat(CART_PRODUCT_NOT_FOUND.replace("$spuName",StringUtils.join(notFoundSpu,",")));
}
if (CollectionUtils.isNotEmpty(changePriceSpu)){
toastMsg = toastMsg.concat(CART_PRODUCT_PRICE_CHANGE.replace("$spuName",StringUtils.join(changePriceSpu,",")));
}
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(toastMsg);
setToastMsgIfNotExist(checkCartRequest.getShoppingCartGoodsResponseVo(), ShoppingCartConstant.SHOPPING_CART_GOODS_CHANGE);
checkCartRequest.getCartGoodsList().removeIf(k -> StringUtils.isEmpty(k.getCartGoodsUid()));
}
List<ProductBeanDTO> productList = validateResult.getSuccessList().stream().map(ValiadShopProductResult::getProductType).collect(Collectors.toList());
for (CartGoods cartGoods : checkCartRequest.getCartGoodsList()) {
// 当goodsId为空或商品是商品券时直接跳过
if (StringUtils.isEmpty(cartGoods.getGoodsId()) || Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.COUPON_GOODS.getGoodsType())) {
continue;
}
shoppingCartAdapter.updateCartGoodsInfoNew(cartGoods, productList);
}
//校验商品券是否有当前点餐方式
cartGoodsStates = updateSpqCartGoodsInfo(checkCartRequest.getCartGoodsList(), checkCartRequest.getOrderWay(), checkCartRequest.getPartnerId(), checkCartRequest.getTrackingNo(), cartGoodsStates
, checkCartRequest.getStoreId());
// 点餐方式改变商品券发生变动
if (cartGoodsStates != null && cartGoodsStates.isOrderWayFlag()) {
setToastMsgIfNotExist(checkCartRequest.getShoppingCartGoodsResponseVo(), ShoppingCartConstant.ORDER_WAY_CHANGE);
}
//若商品详情赋值有异常,直接移除购物车
if (checkCartRequest.getCartGoodsList().stream().anyMatch(cart -> StringUtils.isEmpty(cart.getCartGoodsUid()))) {
checkCartRequest.getCartGoodsList().removeIf(k -> StringUtils.isEmpty(k.getCartGoodsUid()));
checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true);
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS);
}
// if (checkCartRequest.getCartGoodsList().stream().anyMatch(cart -> cart.getGoodsType().equals(GoodsTypeEnum.EXCEPTION_GOODS.getGoodsType()))) {
// checkCartRequest.getCartGoodsList().removeIf(k -> k.getGoodsType().equals(GoodsTypeEnum.EXCEPTION_GOODS.getGoodsType()));
// checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true);
// checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(ShoppingCartConstant.SHOPPING_CART_MATERIAL_ERROR);
// }
return CartResponseUtil.success(checkCartRequest);
} catch (Exception e) {
ErrorLog.printErrorLog("assortment-shoppingcart-sdk", checkCartRequest.getTrackingNo(), e.getMessage(), "checkAllCartGoods", checkCartRequest, e, Level.ERROR);
checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true);
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS);
return CartResponseUtil.error(e.getMessage(),checkCartRequest);
}
}
/**
* 更新购物车详细信息
* 并check购物车中商品是否价格变更、是否非法(例如商品下架)
......
......@@ -2769,6 +2769,7 @@ public class OrderAdapter {
createOrderProductDemoDto.setClassificationId(cartGoodsDetailDto.getClassificationId());
createOrderProductDemoDto.setClassificationName(cartGoodsDetailDto.getClassificationName());
createOrderProductDemoDto.setSplitIndex(cartGoodsDetailDto.getSplitIndex());
createOrderProductDemoDto.setProductGroupId(cartGoodsDetailDto.getProductGroupId());
if(CollectionUtils.isNotEmpty(cartGoodsDetailDto.getSpecialExtra())) {
createOrderProductDemoDto.setSpecialAttrs(new ArrayList<>());
cartGoodsDetailDto.getSpecialExtra().stream().forEach(o -> {
......
......@@ -98,7 +98,8 @@ public class WebAspect {
}
List<String> unauthorizedUrls = Arrays.asList(getNotFilterUrl(CommonRedisKeyConstant.SAAS_NOT_AUTHORIZED_URL, NOT_AUTHORIZED_KEY).split(","));
List<String> mcCafeUnauthorizedUrls = Arrays.asList("/MCoffee/mcCafePaySuccessCallback","/openStoreMCCafeQueryPaymentCallback","/MCoffee/mcCafeRefund",
"/maCafeQueryOrders","/mcCafeQueryOrderById","/reminder","/listFreeRider","/mcCafePollingPickUpCode","/mcCafe/statusOperate","/MCoffee/mcCafeRefundNotifyCallback");
"/maCafeQueryOrders","/mcCafeQueryOrderById","/reminder","/listFreeRider","/mcCafePollingPickUpCode","/mcCafe/statusOperate",
"/MCoffee/mcCafeRefundNotifyCallback","mcCafeQueryRecentOrder");
if (!unauthorizedUrls.contains(requestUrl) && StringUtils.isEmpty(userInfo.getUnionId())
&& mcCafeUnauthorizedUrls.stream().noneMatch(o -> requestUrl.contains(o))) {
throw new CommonServiceException(CommonResponseResult.USER_UNAUTHORIZED);
......
package cn.freemud.controller;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.*;
import cn.freemud.monitorcenter.tools.HealthUtil;
import cn.freemud.service.MCCafeOrderService;
import cn.freemud.service.OrderAdapterService;
import cn.freemud.service.Orderservice;
import com.freemud.application.sdk.api.log.ApiAnnotation;
import com.freemud.application.sdk.api.log.LogParams;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RequestMapping("/order")
@RestController
@Validated
public class McCafeController {
@Autowired
private Orderservice orderservice;
@Autowired
private MCCafeOrderService mcCafeOrderService;
@Autowired
private OrderAdapterService orderAdapterService;
/**
* 麦咖啡创建订单
*/
@ApiAnnotation(logMessage = "createMCCafeOrder")
@PostMapping("/MCoffee/createMCCafeOrder")
public BaseResponse createOrderMCCafe(@Validated @LogParams @RequestBody CreateOrderVo createOrderVo) {
return orderAdapterService.createMCCafeOrder(createOrderVo);
}
/**
* 麦咖啡订单支付成功后通知
*/
@ApiAnnotation(logMessage = "mcCafePaySuccessCallback")
@PostMapping({"/MCoffee/mcCafePaySuccessCallback","/openStoreMCCafeQueryPaymentCallback"})
public String mcCafePaySuccessCallback(@LogParams @RequestBody NewPaysuccessNoticeMessage message) {
return mcCafeOrderService.mcCafePaySuccessCallback(message);
}
/**
* 查询麦咖啡订单列表
*/
@ApiAnnotation(logMessage = "maCafeQueryOrders")
@PostMapping("/maCafeQueryOrders")
public BaseResponse maCafeQueryOrders(@Validated @LogParams @RequestBody McCafeQueryOrderVo queryOrderVo) {
return mcCafeOrderService.mcCafeQueryOrders(queryOrderVo);
}
/**
* 麦咖啡 获取订单详情
*/
@ApiAnnotation(logMessage = "mcCafeQueryOrderById")
@PostMapping("/mcCafeQueryOrderById")
public BaseResponse mcCafeQueryOrderById(@Validated @LogParams @RequestBody MaCafeQueryOrderVo queryOrderVo) {
return mcCafeOrderService.mcCafeQueryOrderById(queryOrderVo);
}
/**
* 麦咖啡用户申请退款
*/
@ApiAnnotation(logMessage = "mcCafeRefund")
@PostMapping("/MCoffee/mcCafeRefund")
public BaseResponse mcCafeRefund(@Validated @LogParams @RequestBody OrderRefundVo orderRefundVo) {
return mcCafeOrderService.orderRefund(orderRefundVo);
}
/**
* 退款回掉通知
*/
@ApiAnnotation(logMessage = "mcCafeRefundNotifyCallback")
@PostMapping("/MCoffee/mcCafeRefundNotifyCallback")
public String mcCafeRefundNotifyCallback(@LogParams @RequestBody RefundNotifyCallbackRequestVo requestVo) {
return mcCafeOrderService.mcCafeRefundNotifyCallback(requestVo);
}
/**
* 根据订单号查询订单状态和取餐码
*/
@ApiAnnotation(logMessage = "mcCafePollingPickUpCode")
@PostMapping("/mcCafePollingPickUpCode")
public BaseResponse mcCafePollingPickUpCode(@Validated @LogParams @RequestBody MaCafeQueryOrderVo vo) {
return mcCafeOrderService.mcCafePollingPickUpCode(vo);
}
/**
* 麦咖啡催单
*/
@ApiAnnotation(logMessage = "reminder")
@PostMapping("/reminder")
public BaseResponse reminder(@Validated @LogParams @RequestBody ReminderVo reminderVo) {
return mcCafeOrderService.reminder(reminderVo);
}
/**
* 麦咖啡根据订单号查询骑手位置
*/
@ApiAnnotation(logMessage = "listFreeRider")
@PostMapping("/listFreeRider")
public BaseResponse listFreeRider(@Validated @LogParams @RequestBody FreeRiderPositionVo vo) {
return mcCafeOrderService.listFreeRider(vo);
}
/**
* 查询麦咖啡最近已完成的一单
*/
@ApiAnnotation(logMessage = "mcCafeQueryRecentOrder")
@PostMapping("/mcCafeQueryRecentOrder")
public BaseResponse mcCafeQueryRecentOrder(@Validated @LogParams @RequestBody McCafeQueryOrderVo queryOrderVo) {
return mcCafeOrderService.mcCafeQueryRecentOrder(queryOrderVo);
}
}
......@@ -97,15 +97,6 @@ public class OrderController {
}
/**
* 麦咖啡创建订单
*/
@ApiAnnotation(logMessage = "createMCCafeOrder")
@PostMapping("/MCoffee/createMCCafeOrder")
public BaseResponse createOrderMCCafe(@Validated @LogParams @RequestBody CreateOrderVo createOrderVo) {
return orderAdapterService.createMCCafeOrder(createOrderVo);
}
/**
* 扫脸支付下单
*/
@ApiAnnotation(logMessage = "scanFaceCreateOrder")
......@@ -142,15 +133,6 @@ public class OrderController {
}
/**
* 麦咖啡订单支付成功后通知
*/
@ApiAnnotation(logMessage = "mcCafePaySuccessCallback")
@PostMapping({"/MCoffee/mcCafePaySuccessCallback","/openStoreMCCafeQueryPaymentCallback"})
public String mcCafePaySuccessCallback(@LogParams @RequestBody NewPaysuccessNoticeMessage message) {
return mcCafeOrderService.mcCafePaySuccessCallback(message);
}
/**
* 退款回掉通知
*/
@ApiAnnotation(logMessage = "refundNotifyCallback")
......@@ -169,15 +151,6 @@ public class OrderController {
}
/**
* 查询麦咖啡订单列表
*/
@ApiAnnotation(logMessage = "maCafeQueryOrders")
@PostMapping("/maCafeQueryOrders")
public BaseResponse maCafeQueryOrders(@Validated @LogParams @RequestBody McCafeQueryOrderVo queryOrderVo) {
return orderservice.mcCafeQueryOrders(queryOrderVo);
}
/**
* 围餐-预览订单
* @param queryOrderVo
* @return
......@@ -224,15 +197,6 @@ public class OrderController {
/**
* 麦咖啡 获取订单详情
*/
@ApiAnnotation(logMessage = "mcCafeQueryOrderById")
@PostMapping("/mcCafeQueryOrderById")
public BaseResponse mcCafeQueryOrderById(@Validated @LogParams @RequestBody MaCafeQueryOrderVo queryOrderVo) {
return orderservice.mcCafeQueryOrderById(queryOrderVo);
}
/**
* 取消支付订单
*/
@ApiAnnotation(logMessage = "cancelPayOrder")
......@@ -270,24 +234,6 @@ public class OrderController {
}
/**
* 麦咖啡用户申请退款
*/
@ApiAnnotation(logMessage = "mcCafeRefund")
@PostMapping("/MCoffee/mcCafeRefund")
public BaseResponse mcCafeRefund(@Validated @LogParams @RequestBody OrderRefundVo orderRefundVo) {
return mcCafeOrderService.orderRefund(orderRefundVo);
}
/**
* 退款回掉通知
*/
@ApiAnnotation(logMessage = "mcCafeRefundNotifyCallback")
@PostMapping("/MCoffee/mcCafeRefundNotifyCallback")
public String mcCafeRefundNotifyCallback(@LogParams @RequestBody RefundNotifyCallbackRequestVo requestVo) {
return mcCafeOrderService.mcCafeRefundNotifyCallback(requestVo);
}
/**
* 获取订单排队号
*/
@ApiAnnotation(logMessage = "queueIndex")
......@@ -373,33 +319,6 @@ public class OrderController {
}
/**
* 麦咖啡催单
*/
@ApiAnnotation(logMessage = "reminder")
@PostMapping("/reminder")
public BaseResponse reminder(@Validated @LogParams @RequestBody ReminderVo reminderVo) {
return orderservice.reminder(reminderVo);
}
/**
* 麦咖啡根据订单号查询骑手位置
*/
@ApiAnnotation(logMessage = "listFreeRider")
@PostMapping("/listFreeRider")
public BaseResponse listFreeRider(@Validated @LogParams @RequestBody FreeRiderPositionVo vo) {
return orderservice.listFreeRider(vo);
}
/**
* 根据订单号查询订单状态和取餐码
*/
@ApiAnnotation(logMessage = "mcCafePollingPickUpCode")
@PostMapping("/mcCafePollingPickUpCode")
public BaseResponse mcCafePollingPickUpCode(@Validated @LogParams @RequestBody MaCafeQueryOrderVo vo) {
return orderservice.mcCafePollingPickUpCode(vo);
}
/**
* timeOutRefund
* @param timeOutOrderVo
* @return
......
......@@ -186,6 +186,7 @@ public class ShoppingCartGoodsDto {
* 是否是套餐内固定商品
*/
private Boolean isFixedProduct;
private Long productGroupId;
/**
* 三方商品编号
......
package cn.freemud.entities.vo.mccafe;
import cn.freemud.entities.vo.CartGoods;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* All rights Reserved, Designed By sunary.site
*
* @version v1.0
* @Title: IntelliJ IDEA
* @Package cn.freemud.service.impl.mcoffee.entity
* @Description: 请简单描述下这个类是做什么用的
* @author: yu.sun
* @date: 2021-01-26 09:50:21
* @Copyright: 2019 www.freemud.cn Inc. All rights reserved.
*/
@Data
public class RecentGoodsInfoVo {
@NotEmpty(message = "spuId不能为空")
private String spuId;
private String skuId;
/**
* 数量
*/
@NotNull(message = "商品数量不可为空")
private Integer qty;
/**
* 商品的spuName
*/
private String spuName;
/**
* 商品的skuName
*/
private String skuName;
/**
* 套餐固定商品
*/
private List<ComboGoodsVo> productComboList;
/**
* 套餐可选商品
*/
private List<ComboGoodsVo> productGroupList;
/**
* 加料
*/
private List<MaterialGoodsVo> productMaterialList;
/**
* 麦咖啡定制属性
*/
private List<SpecialExtra> specialExtra;
@Data
public final static class ComboGoodsVo {
/**
* 麦咖啡多规格商品spuid
*/
private String spuId;
private String skuId;
private String productGroupId;
/**
* 商品的spuName
*/
private String spuName;
/**
* 商品的skuName
*/
private String skuName;
private Integer qty;
private List<SpecialExtra> specialExtra;
/**
* 麦咖啡多规格商品加料
*/
private List<MaterialGoodsVo> productMaterialList;
}
@Data
public final static class MaterialGoodsVo {
/**
* 加料商品ID
*/
private String spuId;
private String spuName;
/**
* 数量
*/
private Integer qty;
/**
* 麦咖啡入机键位
*/
private String customerCode;
}
@Data
public final static class SpecialExtra {
/**
* 属性Id
*/
private String attributeId;
/**
* 属性名
*/
private String attributeName;
private String attributeForeignName;
/**
* 麦咖啡特定属性入机code
*/
private String specialCode;
}
}
......@@ -40,5 +40,19 @@ public interface MCCafeOrderService {
*/
String mcCafeRefundNotifyCallback(RefundNotifyCallbackRequestVo message);
BaseResponse mcCafeQueryOrderById(MaCafeQueryOrderVo queryOrderVo);
BaseResponse mcCafeQueryOrders(McCafeQueryOrderVo queryOrderVo);
BaseResponse mcCafePollingPickUpCode(MaCafeQueryOrderVo vo);
BaseResponse reminder(ReminderVo reminderVo);
BaseResponse listFreeRider(FreeRiderPositionVo vo);
/**
* 查询麦咖啡最近已完成的一单
*/
BaseResponse mcCafeQueryRecentOrder(McCafeQueryOrderVo queryOrderVo);
}
......@@ -127,16 +127,6 @@ public interface Orderservice {
*/
BaseResponse queryOrderByConditions(QueryOrderByConditionsRequestVo queryOrderByConditionsRequestVo);
BaseResponse reminder(ReminderVo reminderVo);
BaseResponse listFreeRider(FreeRiderPositionVo vo);
BaseResponse mcCafeQueryOrderById(MaCafeQueryOrderVo queryOrderVo);
BaseResponse mcCafeQueryOrders(McCafeQueryOrderVo queryOrderVo);
BaseResponse mcCafePollingPickUpCode(MaCafeQueryOrderVo vo);
/**
* 通过订单号查询订单详情
*
......
......@@ -21,6 +21,7 @@ import cn.freemud.service.thirdparty.DeliveryFeiginClient;
import cn.freemud.service.thirdparty.EcologyAdminApplicationClient;
import cn.freemud.service.thirdparty.PosClient;
import cn.freemud.utils.DateTimeUtil;
import cn.freemud.utils.ExceptionUtils;
import cn.freemud.utils.LogUtil;
import cn.freemud.utils.ResponseUtil;
import com.alibaba.fastjson.JSON;
......@@ -462,19 +463,10 @@ public class ThirdDeliveryServiceImpl implements ThirdDeliveryService {
}
ecologyAdminApplicationClient.subscribeMessage(request);
} catch (Exception e) {
ApiLog.info("麦咖啡订阅消息推送失败" + orderId + getExceptionInfo(e));
ApiLog.info("麦咖啡订阅消息推送失败" + orderId + ExceptionUtils.getExceptionInfo(e));
}
}
private String getExceptionInfo(Exception e) {
StringBuilder sb = new StringBuilder();
StackTraceElement[] trace = e.getStackTrace();
for (StackTraceElement traceElement : trace) {
sb.append("\tat " + traceElement);
}
return sb.toString();
}
/**
* 配送消息推送
*/
......
......@@ -23,10 +23,11 @@ import cn.freemud.base.log.LogTreadLocal;
import cn.freemud.base.util.DateUtil;
import cn.freemud.constant.RedisKeyConstant;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.dto.MCCafeDeliveryBaseResponse;
import cn.freemud.entities.dto.PayAccessResponse;
import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.QueryOrdersResponseDto.DataBean.OrderBean;
import cn.freemud.entities.dto.delivery.CancelDeliveryResponseDto;
import cn.freemud.entities.dto.delivery.*;
import cn.freemud.entities.dto.order.CreateOrderOperateDto;
import cn.freemud.entities.dto.order.CreatePrepayRequestDto;
import cn.freemud.entities.dto.product.AttributeValue;
......@@ -40,6 +41,8 @@ import cn.freemud.entities.dto.user.OrderInfoRequest;
import cn.freemud.entities.dto.user.SendCouponForqujiaDtoResponseDto;
import cn.freemud.entities.dto.user.SendCouponForqujiaRequestDto;
import cn.freemud.entities.vo.*;
import cn.freemud.entities.vo.CreateDeliveryVo;
import cn.freemud.entities.vo.mccafe.RecentGoodsInfoVo;
import cn.freemud.enums.*;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.management.entities.dto.request.order.MCCafeCouponRequest;
......@@ -51,15 +54,13 @@ import cn.freemud.redis.RedisCache;
import cn.freemud.service.*;
import cn.freemud.service.mccafe.thirdparty.DeliveryFeiginMCCafeClient;
import cn.freemud.service.thirdparty.*;
import cn.freemud.utils.LogUtil;
import cn.freemud.utils.RedisUtil;
import cn.freemud.utils.ResponseUtil;
import cn.freemud.utils.ValidationCode;
import cn.freemud.utils.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.freemud.api.assortment.datamanager.entity.db.*;
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
import com.freemud.api.assortment.datamanager.enums.IappIdType;
import com.freemud.api.assortment.datamanager.manager.*;
import com.freemud.api.assortment.datamanager.manager.cache.CacheOpenPlatformPartnerWxappConfigManager;
import com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager;
......@@ -85,7 +86,9 @@ import com.freemud.application.sdk.api.paymentcenter.client.response.CodePayResp
import com.freemud.application.sdk.api.paymentcenter.client.response.SVCCardAmountResponse;
import com.freemud.application.sdk.api.paymentcenter.client.service.PaymentNewService;
import com.freemud.application.sdk.api.service.EmailAlertService;
import com.freemud.application.sdk.api.storecenter.request.GetListByCodesRequest;
import com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest;
import com.freemud.application.sdk.api.storecenter.response.GetListByCodesResponse;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.freemud.application.sdk.api.storecenter.service.StoreCenterService;
import com.freemud.sdk.api.assortment.message.config.MessageOfficialRefundPushMqConfig;
......@@ -96,6 +99,7 @@ import com.freemud.sdk.api.assortment.message.request.MessagePushOrderTemplateRe
import com.freemud.sdk.api.assortment.message.request.MessageTemplateRequest;
import com.freemud.sdk.api.assortment.message.service.IMessageTemplatePushService;
import com.freemud.sdk.api.assortment.order.enums.OldOrderAccountType;
import com.freemud.sdk.api.assortment.order.enums.OldOrderStatus;
import com.freemud.sdk.api.assortment.order.enums.OldOrderType;
import com.freemud.sdk.api.assortment.order.request.order.*;
import com.freemud.sdk.api.assortment.order.response.order.*;
......@@ -119,6 +123,8 @@ import ma.glasnost.orika.impl.DefaultMapperFactory;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.joda.time.DateTime;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
......@@ -131,6 +137,7 @@ import java.util.function.Function;
import java.util.stream.Collectors;
@Service
@Slf4j
public class MCCafeOrderServiceImpl implements MCCafeOrderService {
private final Integer RESPONSE_SUCCESS_CODE = 100;
......@@ -151,6 +158,8 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
private String cloud_print_exchange;
@Value("${saas.order.delivery.mcCafe.callBackUrl}")
private String deliveryCallBackUrl;
@Value("${mcCafe.quickOrder.interval}")
private String quickOrderInterval;
@Autowired
private DeliveryFeiginClient deliveryFeiginClient;
......@@ -163,8 +172,6 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
@Autowired
private OrderServiceImpl orderService;
@Autowired
private PromotionActivityClient promotionActivityClient;
@Autowired
private ShoppingCartClient shoppingCartClient;
@Autowired
private CustomerApplicationClient customerApplicationClient;
......@@ -173,17 +180,9 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
@Autowired
private BuriedPointService buriedPointService;
@Autowired
private CouponActivityService couponActivityService;
@Autowired
private MessageNoticeAdapter messageNoticeAdapter;
@Autowired
private OrderAdapter orderAdapter;
@Autowired
private ActivityAdapter activityAdapter;
@Autowired
private CouponAdapter couponAdapter;
@Autowired
private MealCacheManager mealCacheManager;
//聚合订单服务
@Autowired
private OrderCenterSdkService orderCenterSdkService;
......@@ -195,8 +194,6 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
@Autowired
private StoreCenterService storeCenterService;
@Autowired
private DeliveryService deliveryService;
@Autowired
private MQService mqService;
@Autowired
@Qualifier("messageTemplatePushOrderService")
......@@ -204,8 +201,6 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
@Autowired
private AssortmentOpenPlatformWxappManager openPlatformWxappManager;
@Autowired
private AssortmentOpenPlatformPartnerConfigManager openPlatformPartnerConfigManager;
@Autowired
private AssortmentCustomerInfoManager customerInfoManager;
@Autowired
private CheckMCCafeOrder checkMCCafeOrder;
......@@ -216,12 +211,8 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
@Autowired
private PaymentNewService paymentNewService;
@Autowired
private ActivityApplicationClient activityApplicationClient;
@Autowired
private AssortmentOpenPlatformWxappAuthorizerManager wxappAuthorizerManager;
@Autowired
private CacheOpenPlatformPartnerWxappConfigManager cacheOpenPlatformPartnerWxappConfigManager;
@Autowired
private OrderAdapterService orderAdapterService;
@Autowired
private AssortmentOpenPlatformPartnerManager assortmentOpenPlatformPartnerManager;
......@@ -238,7 +229,7 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
@Autowired
private CustomerExtendClient customerExtendClient;
@Autowired
private CacheOpenApiEncryptManager cacheOpenApiEncryptManager;
private AssortmentOpenPlatformPartnerConfigManager openPlatformPartnerConfigManager;
private static MapperFacade mapper = new DefaultMapperFactory.Builder().build().getMapperFacade();
......@@ -1393,6 +1384,426 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
return newSendPaySuccessNoticeMessage();
}
/**
* 麦咖啡查询订单详情
*
* @param queryOrderVo
* @return
*/
@Override
public BaseResponse mcCafeQueryOrderById(MaCafeQueryOrderVo queryOrderVo) {
AssortmentCustomerInfoVo userInfo = customerInfoManager.getCustomerInfoByObject(queryOrderVo.getSessionId());
if (userInfo == null || StringUtils.isEmpty(userInfo.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN);
}
String oid = queryOrderVo.getOid();
if (StringUtils.isBlank(oid)) {
return ResponseUtil.error(ResponseResult.PARAMETER_MISSING.getCode(), "oid不能为空");
}
BaseQueryOrderRequest baseQueryOrderRequest = new BaseQueryOrderRequest();
baseQueryOrderRequest.setOrderId(oid);
baseQueryOrderRequest.setTrackingNo(LogTreadLocal.getTrackingNo());
QueryOrderByIdResponse response = orderCenterSdkService.queryMCCafeOrderById(baseQueryOrderRequest);
if (!RESPONSE_SUCCESS_CODE.equals(response.getErrcode()) || response.getData() == null) {
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR);
}
QueryOrdersResponse.DataBean.OrderBean orderBean = response.getData();
String storeId = orderBean.getShopId();
StoreInfoRequest request = new StoreInfoRequest();
request.setPartnerId(queryOrderVo.getPartnerId());
request.setStoreCode(storeId);
StoreResponse storeInfo = storeCenterService.getStoreInfo(request, LogTreadLocal.getTrackingNo());
if (storeInfo != null && storeInfo.getBizVO() != null) {
StoreResponse.BizVO storeResponseDto = storeInfo.getBizVO();
orderBean.setShopAddress(storeResponseDto.getAddress());
orderBean.setShopPhone(storeResponseDto.getPhone());
orderBean.setShopImageUrl(storeResponseDto.getLogoUrl());
//默认骑手头像显示为门店首页图片
orderBean.setRiderPhoto(storeResponseDto.getLogoUrl());
orderBean.setShopPhone(storeResponseDto.getPhone());
orderBean.setLatitude(Double.valueOf(storeResponseDto.getLatitude()));
orderBean.setLongitude(Double.valueOf(storeResponseDto.getLongitude()));
}
BaseQueryOrderRequest var1 = new BaseQueryOrderRequest();
var1.setOrderId(orderBean.getOid());
var1.setTrackingNo(LogTreadLocal.getTrackingNo());
BaseOrderResponse baseOrderResponse = orderCenterSdkService.queryOrderQueueIndex(var1);
QueryOrderQueueIndexResponse response1 = new QueryOrderQueueIndexResponse();
response1.setErrcode(baseOrderResponse.getErrcode());
response1.setErrmsg(baseOrderResponse.getErrmsg());
if (RESPONSE_SUCCESS_CODE.equals(response1.getErrcode())) {
String queueIndex = response1.getData() == null ? "" : response1.getData().toString();
orderBean.setQueueIndex(queueIndex);
}
// 获取订单运单号,如果有运单则是第三方外卖单
if (orderBean.getAddInfo() != null && StringUtils.isNotEmpty(orderBean.getAddInfo().getDeliveryId())) {
hasThirdDelivery(orderBean);
}
// 查询订单的操作状态
OrderStatusTrackingInfoResponse statusTrackingInfoByOid = orderCenterSdkService.getOrderStatusTrackingInfoByOid(var1);
String string2 = JSONObject.toJSONString(statusTrackingInfoByOid);
JSONObject jsonObject2 = JSONObject.parseObject(string2);
OrderStatusTrackingInfoDto orderStatusTrackingInfoByOid = jsonObject2.toJavaObject(OrderStatusTrackingInfoDto.class);
if (RESPONSE_SUCCESS_CODE.equals(orderStatusTrackingInfoByOid.getErrcode())) {
orderStatusTracking(orderBean, orderStatusTrackingInfoByOid);
}
List<QueryOrderResponseVo> queryOrderResponseVos = orderAdapter.convent2QueryOrderResponseVos(Collections.singletonList(orderBean), userInfo.getWxAppId(), userInfo.getIappId());
if (CollectionUtils.isEmpty(queryOrderResponseVos)) {
throw new ServiceException(ResponseResult.ORDER_QUERYORDER_ERROR);
}
QueryOrderResponseVo queryOrderResponseVo = queryOrderResponseVos.get(0);
Optional<ProductVo> productVoOptional = queryOrderResponseVo.getProducts().stream()
.filter(o -> StringUtils.isNotBlank(o.getSplitIndex()))
.findFirst();
Map<String, Integer> existMap = new HashMap<>();
if (productVoOptional.isPresent()) {
int size = queryOrderResponseVo.getProducts().size();
List<ProductVo> productVoList = new ArrayList<>();
for (int i = 0; i < size; i++) {
ProductVo productVo = queryOrderResponseVo.getProducts().get(i);
if (StringUtils.isBlank(productVo.getSplitIndex())) {
productVoList.add(productVo);
} else {
if (existMap.get(productVo.getSplitIndex()) == null) {
existMap.put(productVo.getSplitIndex(), productVoList.size());
productVoList.add(productVo);
} else {
ProductVo productVoExists = productVoList.get(existMap.get(productVo.getSplitIndex()));
productVoExists.setOriginalTotalAmount(productVoExists.getOriginalTotalAmount() + productVo.getOriginalTotalAmount());
productVoExists.setSaleTotalAmount(productVoExists.getSaleTotalAmount() + productVo.getSaleTotalAmount());
productVoExists.setQty(productVoExists.getQty() + productVo.getQty());
}
}
}
queryOrderResponseVo.setProducts(productVoList);
}
//麦咖啡 预约外卖单重新封装取餐时间
if (OrderType.TAKE_OUT.getCode().equals(queryOrderResponseVo.getOrderType()) && StringUtils.isNotEmpty(queryOrderResponseVo.getReserveDeliveryTime())) {
Date reserveDeliveryTime = DateUtil.convert2Date(queryOrderResponseVo.getReserveDeliveryTime(), "yyyy-MM-dd HH:mm:ss");
queryOrderResponseVo.setReserveDeliveryTime(formatSpecialDate(reserveDeliveryTime));
}
if (OrderStatus.TAKE_ORDER.getCode().equals(queryOrderResponseVo.getOrderStatus())
|| OrderStatus.WAIT_PAY.getCode().equals(queryOrderResponseVo.getOrderStatus())) {
queryOrderResponseVo.setTakeCode("");
}
queryOrderResponseVo.setOrderTypeDesc(Optional.ofNullable(McCafeOrderTypeGather.getByCode(queryOrderResponseVo.getOrderType()))
.map(McCafeOrderTypeGather::getDesc).orElse(""));
queryOrderResponseVo.setIsCouponOrder(queryOrderResponseVo.getProducts().stream()
.filter(o -> !ProductTypeEnum.getVirtualProductType().contains(o.getProductType())).findAny().isPresent() ? 0 : 1);
//48小时自动退款描述
if (storeInfo != null && storeInfo.getBizVO() != null && storeInfo.getBizVO().getStoreConfig() != null
&& queryOrderResponseVo.getRefundStatus() != null && queryOrderResponseVo.getRefundStatus() == 1) {
Integer automaticRefund = storeInfo.getBizVO().getStoreConfig().getAutomaticRefund();
if (automaticRefund != null && automaticRefund == 1) {
queryOrderResponseVo.setRefundTips("若48小时内未成功退款,请联系商家人工处理");
} else {
queryOrderResponseVo.setRefundTips("若48小时内未成功退款,请联系商家人工处理");
}
}
return ResponseUtil.success(queryOrderResponseVo);
}
@Override
public BaseResponse mcCafeQueryOrders(McCafeQueryOrderVo queryOrderVo) {
AssortmentCustomerInfoVo userLoginInfoDto = customerInfoManager.getCustomerInfoByObject(queryOrderVo.getSessionId());
if (userLoginInfoDto == null || StringUtils.isBlank(userLoginInfoDto.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN);
}
if (StringUtils.isBlank(queryOrderVo.getStartDate())) {
queryOrderVo.setStartDate(DateUtil.convert2String(DateUtil.addMonths(new Date(), -1), "yyyy-MM-dd"));
}
if (StringUtils.isBlank(queryOrderVo.getEndDate())) {
queryOrderVo.setEndDate(DateUtil.convert2String(new Date(), "yyyy-MM-dd"));
}
if (CollectionUtils.isEmpty(queryOrderVo.getQueryOrderStatus())) {
return ResponseUtil.error(ResponseResult.PARAMETER_MISSING.getCode(), "查询订单状态不能为空");
}
if (CollectionUtils.isNotEmpty(queryOrderVo.getQueryOrderType())) {
if (CollectionUtils.isEmpty(OrderType.getByCode(queryOrderVo.getQueryOrderType()))) {
return ResponseUtil.error(ResponseResult.PARAMETER_MISSING.getCode(), "查询订单类型不存在");
}
}
String partnerId = queryOrderVo.getPartnerId();
String startDateStr = queryOrderVo.getStartDate() + " 00:00:00";
String endDateStr = queryOrderVo.getEndDate() + " 23:59:59";
Date startDate = DateUtil.convert2Date(startDateStr, "yyyy-MM-dd HH:mm:ss");
if (startDate == null) {
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR.getCode(), "查询订单开始时间格式不正确");
}
Date endDate = DateUtil.convert2Date(endDateStr, "yyyy-MM-dd HH:mm:ss");
if (endDate == null) {
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR.getCode(), "查询订单结束时间格式不正确");
}
if (startDate.getTime() < DateUtil.addMonths(new Date(), -3).getTime()) {
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR.getCode(), "只能查询3个月内的订单信息");
}
String userId = userLoginInfoDto.getMemberId();
queryOrderVo.setStartDate(startDateStr);
queryOrderVo.setEndDate(endDateStr);
QueryOrderVo vo = new QueryOrderVo();
BeanUtils.copyProperties(queryOrderVo, vo);
String channelType = this.getQueryOrderChannelType(vo, userLoginInfoDto);
QueryOrdersDto queryOrdersDto = orderAdapter.convent2QueryOrdersDtoMcCafe(queryOrderVo, userId, channelType);
QueryOrdersResponse queryOrderResponse;
try {
QueryOrdersRequest queryOrdersRequest2 = new QueryOrdersRequest();
BeanUtil.convertBean(queryOrdersDto, queryOrdersRequest2);
queryOrdersRequest2.setTrackingNo(LogTreadLocal.getTrackingNo());
queryOrderResponse = orderCenterSdkService.queryMCCafeOrders(queryOrdersRequest2);
} catch (Exception e) {
LogUtil.error("queryOrders_error", gson.toJson(queryOrdersDto), e);
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR);
}
if (queryOrderResponse == null || !RESPONSE_SUCCESS_CODE.equals(queryOrderResponse.getErrcode())) {
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR.getCode());
}
Map<String, Object> responseMap = Maps.newTreeMap();
//用户无订单数据
if (queryOrderResponse.getData() == null || queryOrderResponse.getData().getCount() == 0) {
responseMap.put("count", 0);
responseMap.put("list", new ArrayList<QueryOrderResponseVo>());
return ResponseUtil.success(responseMap);
}
List<QueryOrdersResponse.DataBean.OrderBean> orders = queryOrderResponse.getData().getOrders();
Set<String> shopIds = new HashSet<>();
// 过滤待支付订单
if (CollectionUtils.isNotEmpty(orders)) {
for (QueryOrdersResponse.DataBean.OrderBean orderBean : orders) {
if (!(OrderStatus.WAIT_PAY.getCode().equals(orderBean.getStatus()) || PayStatus.NOT_PAY.getCode().equals(orderBean.getPayStatus()))) {
shopIds.add(orderBean.getShopId());
}
}
}
String storeCodes = "";
for (String shopId : shopIds) {
storeCodes = shopId + "," + storeCodes;
}
GetListByCodesRequest request = new GetListByCodesRequest();
request.setPartnerId(partnerId);
request.setStoreCodes(storeCodes);
// 查询多个门店信息
GetListByCodesResponse storeInfoResponse = storeCenterService.getListByCodes(request, LogTreadLocal.getTrackingNo());
Map<String, StoreResponse.BizVO> storeMap = new HashMap<>();
if (storeInfoResponse != null && storeInfoResponse.getBizVO() != null && storeInfoResponse.getBizVO().getList() != null) {
for (StoreResponse.BizVO bizVO : storeInfoResponse.getBizVO().getList()) {
storeMap.put(bizVO.getStoreCode(), bizVO);
}
}
if (CollectionUtils.isNotEmpty(orders)) {
orders.forEach(orderBean -> {
StoreResponse.BizVO storeResponseDto = storeMap.get(orderBean.getShopId());
if (storeResponseDto != null) {
orderBean.setShopAddress(storeResponseDto.getAddress());
orderBean.setShopPhone(storeResponseDto.getPhone());
orderBean.setShopImageUrl(storeResponseDto.getLogoUrl());
//默认骑手头像显示为门店首页图片
orderBean.setRiderPhoto(storeResponseDto.getLogoUrl());
orderBean.setLatitude(Double.valueOf(storeResponseDto.getLatitude()));
orderBean.setLongitude(Double.valueOf(storeResponseDto.getLongitude()));
}
// 获取订单运单号,如果有运单则是第三方外卖单
if (orderBean.getAddInfo() != null && StringUtils.isNotEmpty(orderBean.getAddInfo().getDeliveryId())) {
hasThirdDelivery(orderBean);
}
orderBean.setQueueIndex("");
// 查询待取餐订单才需要查询排队人数和订单状态扭转记录
if (QueryOrderStatus.TAKE_MEAL.getCode().equals(orderBean.getOrderType())) {
// 查询订单的排队人数
BaseQueryOrderRequest var1 = new BaseQueryOrderRequest();
var1.setOrderId(orderBean.getOid());
var1.setTrackingNo(LogTreadLocal.getTrackingNo());
BaseOrderResponse baseOrderResponse = orderCenterSdkService.queryOrderQueueIndex(var1);
QueryOrderQueueIndexResponse response = new QueryOrderQueueIndexResponse();
response.setErrcode(baseOrderResponse.getErrcode());
response.setErrmsg(baseOrderResponse.getErrmsg());
response.setData(baseOrderResponse.getData() == null ? 0 : Integer.parseInt(baseOrderResponse.getData()));
if (RESPONSE_SUCCESS_CODE.equals(response.getErrcode())) {
String queueIndex = response.getData() == null ? "" : response.getData().toString();
orderBean.setQueueIndex(queueIndex);
}
// 查询订单的操作状态
BaseQueryOrderRequest var2 = new BaseQueryOrderRequest();
var2.setOrderId(orderBean.getOid());
var2.setTrackingNo(LogTreadLocal.getTrackingNo());
OrderStatusTrackingInfoResponse orderStatusTrackingInfoResponse = orderCenterSdkService.getOrderStatusTrackingInfoByOid(var2);
String string = JSONObject.toJSONString(orderStatusTrackingInfoResponse);
JSONObject jsonObject = JSONObject.parseObject(string);
OrderStatusTrackingInfoDto orderStatusTrackingInfoByOid = jsonObject.toJavaObject(OrderStatusTrackingInfoDto.class);
if (RESPONSE_SUCCESS_CODE.equals(orderStatusTrackingInfoByOid.getErrcode())) {
orderStatusTracking(orderBean, orderStatusTrackingInfoByOid);
}
}
if (OrderStatus.TAKE_ORDER.getCode().equals(orderBean.getStatus())
|| OrderStatus.WAIT_PAY.getCode().equals(orderBean.getStatus())) {
orderBean.setOtherCode("");
}
});
}
List<QueryOrderResponseVo> queryOrderResponseVos = orderAdapter.convent2QueryOrderResponseVos(orders, userLoginInfoDto.getWxAppId(), userLoginInfoDto.getIappId());
responseMap.put("count", queryOrderResponse.getData() == null ? 0 : queryOrderResponse.getData().getCount());
responseMap.put("list", queryOrderResponseVos);
//只有有订单时才显示用户自定义取餐信息
if (CollectionUtils.isNotEmpty(queryOrderResponseVos)) {
responseMap.put("definitionMsg", getDefinitionMsg(queryOrderVo.getPartnerId()));
}
return ResponseUtil.success(responseMap);
}
/**
* 获取商户自定义提示信息配置
*
* @param partnerId
* @return
*/
public String getDefinitionMsg(String partnerId) {
String definitionMsgKey = "partner_definition_msg";
AssortmentOpenPlatformPartnerConfig partnerConfig = openPlatformPartnerConfigManager.selectPartnerConfigByPartnerKey(partnerId, definitionMsgKey, 1);
if (partnerConfig == null) {
return null;
}
return partnerConfig.getPartnerValue();
}
/**
* 如果有第三方配送,返回值添加第三方配送信息
*/
private void hasThirdDelivery(QueryOrdersResponse.DataBean.OrderBean orderBean) {
String deliveryId = orderBean.getAddInfo().getDeliveryId();
if ("0".equals(deliveryId)) {
return;
}
// String trackingNo = LogTreadLocal.getTrackingNo();
QueryDeliveryBaseRequest queryDeliveryBaseRequest = new QueryDeliveryBaseRequest();
queryDeliveryBaseRequest.setDeliveryId(deliveryId);
queryDeliveryBaseRequest.setOpenDistance(1);
//变更查询配送信息换新接口 wanghanghang 20210129
//【ID1021981】C端小程序配送显示骑手、商家坐标地图、配送距离以及骑手姓名电话,支持直接拨打
DeliveryBaseResponse<DeliveryStatusAndRiderPositionDto> deliveryBaseResponse = deliveryFeiginClient.getDeliveryStatusAndRiderPosition(queryDeliveryBaseRequest);
// DeliveryResponseDto<DeliveryInfoDto> delivery = deliveryService.deliveryOrderOne(deliveryId, trackingNo);
if (RESPONSE_SUCCESS_CODE.equals(deliveryBaseResponse.getCode()) && deliveryBaseResponse.getData() != null) {
DeliveryStatusAndRiderPositionDto result = deliveryBaseResponse.getData();
orderBean.setDeliverStatus(result.getDevlieryStatus());
orderBean.setRiderName(result.getRiderName());
orderBean.setRiderPhone(result.getRiderPhone());
orderBean.setReceiveTime(result.getReceiveTime());
orderBean.setDepatchTime(result.getDepatchTime());
orderBean.setArriveShopTime(result.getArriveShopTime());
orderBean.setSendTime(result.getSendTime());
orderBean.setCompleteTime(result.getCompleteTime());
/** 只有配送状态是2 3 4 5时,返回三方坐标信息
* 此处如果是外卖单,则需要返回门店经纬度/用户经纬度/骑手经纬度
* 门店经纬度 = 配送返回信息为准,外卖单独新增门店经纬度字段,和配送信息接口统一 /queryOrderRider
* wanghanghang 20210129
*/
if (result.getDevlieryStatus().equals(DeliveryStatus.ALLOTRIDER.getCode()) ||
result.getDevlieryStatus().equals(DeliveryStatus.RIDERARRIVESTORE.getCode()) ||
result.getDevlieryStatus().equals(DeliveryStatus.RIDERGETMEAL.getCode()) ||
result.getDevlieryStatus().equals(DeliveryStatus.RIDERSTARTDELIVERY.getCode())
) {
orderBean.getAddInfo().setDeliverStatus(result.getDevlieryStatus());
orderBean.getAddInfo().setDistance(deliveryBaseResponse.getData().getDistance());
orderBean.getAddInfo().setDuration(deliveryBaseResponse.getData().getDuration());
orderBean.getAddInfo().setStoreDistance(deliveryBaseResponse.getData().getStoreDistance());
orderBean.getAddInfo().setStoreDuration(deliveryBaseResponse.getData().getStoreDuration());
orderBean.getAddInfo().setRiderName(result.getRiderName());
orderBean.getAddInfo().setRiderPhone(result.getRiderPhone());
orderBean.getAddInfo().setOrderId(orderBean.getOid());
orderBean.getAddInfo().setStorePhone(result.getStorePhone());
//门店经纬度
if (deliveryBaseResponse.getData().getStorePoint() != null) {
String[] storePoint = deliveryBaseResponse.getData().getStorePoint().split(",");
orderBean.getAddInfo().setShopLongitude(storePoint[0]);
orderBean.getAddInfo().setShopLatitude(storePoint[1]);
}
//骑手经纬度
if (deliveryBaseResponse.getData().getCurrentPoint() != null) {
String[] currentPoint = deliveryBaseResponse.getData().getCurrentPoint().split(",");
orderBean.getAddInfo().setRiderLongitude(currentPoint[0]);
orderBean.getAddInfo().setRiderLatitude(currentPoint[1]);
}
//用户经纬度
if (deliveryBaseResponse.getData().getDestPoint() != null) {
String[] destPoint = deliveryBaseResponse.getData().getDestPoint().split(",");
orderBean.getAddInfo().setDestLongitude(destPoint[0]);
orderBean.getAddInfo().setDestLatitude(destPoint[1]);
}
}
}
}
private void orderStatusTracking(QueryOrdersResponse.DataBean.OrderBean orderBean, OrderStatusTrackingInfoDto orderStatusTrackingInfoByOid) {
List<OrderStatusTrackingInfoDto.OrderStatusTrackingInfo> data = orderStatusTrackingInfoByOid.getData();
if (CollectionUtils.isNotEmpty(data)) {
for (OrderStatusTrackingInfoDto.OrderStatusTrackingInfo orderStatusTrackingInfo : data) {
Integer status = orderStatusTrackingInfo.getStatus();
String statusTime = orderStatusTrackingInfo.getStatusTime();
switch (status) {
case 1:
orderBean.setOperateTakeOrderTime(statusTime);
break;
case 2:
orderBean.setOperateWaitPayTime(statusTime);
break;
case 3:
orderBean.setOperateReceiptTime(statusTime);
break;
case 4:
orderBean.setOperateDistributionTime(statusTime);
break;
case 5:
orderBean.setOperateCompleteTime(statusTime);
break;
case 6:
orderBean.setOperateCalcelTime(statusTime);
break;
case 7:
orderBean.setOperatePefuseTime(statusTime);
break;
case 31:
orderBean.setOperateCompleteMakeTime(statusTime);
break;
default:
break;
}
}
}
}
public static String formatSpecialDate(Date date) {
if (date == null) {
return null;
}
DateTime now = new DateTime();
DateTime today_start = new DateTime(now.getYear(), now.getMonthOfYear(), now.getDayOfMonth(), 0, 0, 0);
DateTime today_end = today_start.plusDays(1);
DateTime tomorrow_start = today_start.plusDays(2);
if (date.after(today_start.toDate()) && date.before(today_end.toDate())) {
return String.format("%s", new DateTime(date).toString("HH:mm"));
} else if (date.after(today_end.toDate()) && date.before(tomorrow_start.toDate())) {
return String.format("明天%s%s", DateUtils.getDayWeek(date), new DateTime(date).toString("HH:mm"));
}
return new DateTime(date).toString("yyyy-MM-dd") + DateUtils.getDayWeek(date) + new DateTime(date).toString("HH:mm");
}
/**
* 取消配送
*
......@@ -1597,36 +2008,6 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
}
/**
* 开通会员卡
*
* @param partnerId 商户号
* @param ruleId 会员规则ID
* @param oid 订单号
* @param userId 用户ID
*/
private void activateMemberCard(String partnerId, String ruleId, String oid, String userId) {
PurchasePaidRequestDto purchasePaidRequestDto = new PurchasePaidRequestDto();
purchasePaidRequestDto.setPartnerId(partnerId);
purchasePaidRequestDto.setOperatorType(0);
purchasePaidRequestDto.setRuleId(ruleId);
purchasePaidRequestDto.setOrderId(oid);
purchasePaidRequestDto.setMemberId(userId);
// 尝试三次开通会员卡,中途成功则跳出
int count = 3;
for (int i = 1; i <= count; i++) {
BaseResponse baseResponse = customerApplicationClient.purchasePaid(purchasePaidRequestDto);
// 不以响应码为判断是否开通会员卡成功的标准
if (baseResponse != null && "SUCCESS".equals(baseResponse.getResult())) {
break;
}
// 尝试开通会员卡失败三次
if (i >= count) {
LogUtil.error("尝试开通会员卡失败" + count + "次", JSON.toJSONString(purchasePaidRequestDto), JSON.toJSONString(baseResponse));
}
}
}
/**
* 随单购月卡调会员发券与更新订单使用的优惠券与买的优惠券
* @param orderBean
*/
......@@ -1873,4 +2254,283 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
return true;
}
@Override
public BaseResponse mcCafePollingPickUpCode(MaCafeQueryOrderVo queryOrderVo) {
AssortmentCustomerInfoVo userLoginInfoDto = customerInfoManager.getCustomerInfoByObject(queryOrderVo.getSessionId());
if (userLoginInfoDto == null || StringUtils.isBlank(userLoginInfoDto.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN);
}
String oid = queryOrderVo.getOid();
if (StringUtils.isBlank(oid)) {
return ResponseUtil.error(ResponseResult.PARAMETER_MISSING.getCode(), "oid不能为空");
}
BaseQueryOrderRequest baseQueryOrderRequest = new BaseQueryOrderRequest();
baseQueryOrderRequest.setOrderId(oid);
baseQueryOrderRequest.setTrackingNo(LogTreadLocal.getTrackingNo());
QueryOrderByIdResponse response = orderCenterSdkService.queryOrderById(baseQueryOrderRequest);
if (!RESPONSE_SUCCESS_CODE.equals(response.getErrcode()) || response.getData() == null) {
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR);
}
QueryOrdersResponse.DataBean.OrderBean orderBean = response.getData();
OrderViewStatusDto orderViewStatusDesc = orderAdapter.getOrderViewStatusDesc(orderBean, userLoginInfoDto.getWxAppId());
Map<String, Object> responseMap = Maps.newTreeMap();
responseMap.put("orderStatus", orderViewStatusDesc.getOrderStatus());
responseMap.put("takeCode", "");
responseMap.put("queueIndex", "");
String extInfo = orderBean.getExtInfo();
OrderExtInfoDto orderExtInfoDto = null;
if (StringUtils.isNotBlank(extInfo)) {
orderExtInfoDto = gson.fromJson(extInfo, OrderExtInfoDto.class);
}
responseMap.put("payVoucher", orderExtInfoDto != null ? orderExtInfoDto.getPayTransId() : "");
//非外卖单才获取取餐码和排队人数
if (!OrderType.TAKE_OUT.getCode().equals(orderBean.getType())) {
if (!(OrderStatus.TAKE_ORDER.getCode().equals(orderBean.getStatus())
|| OrderStatus.WAIT_PAY.getCode().equals(orderBean.getStatus()))) {
responseMap.put("takeCode", orderBean.getOtherCode());
}
BaseQueryOrderRequest var1 = new BaseQueryOrderRequest();
var1.setOrderId(orderBean.getOid());
var1.setTrackingNo(LogTreadLocal.getTrackingNo());
BaseOrderResponse baseOrderResponse = orderCenterSdkService.queryOrderQueueIndex(var1);
QueryOrderQueueIndexResponse response1 = new QueryOrderQueueIndexResponse();
response1.setErrcode(baseOrderResponse.getErrcode());
response1.setErrmsg(baseOrderResponse.getErrmsg());
if (RESPONSE_SUCCESS_CODE.equals(response1.getErrcode())) {
String queueIndex = response1.getData() == null ? "" : response1.getData().toString();
responseMap.put("queueIndex", queueIndex);
}
}
return ResponseUtil.success(responseMap);
}
/**
* 催单
*
* @param reminderVo
* @return
*/
@Override
public BaseResponse reminder(ReminderVo reminderVo) {
AssortmentCustomerInfoVo userLoginInfoDto = customerInfoManager.getCustomerInfoByObject(reminderVo.getSessionId());
if (userLoginInfoDto == null || StringUtils.isBlank(userLoginInfoDto.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN);
}
BaseQueryOrderRequest baseQueryOrderRequest = new BaseQueryOrderRequest();
baseQueryOrderRequest.setOrderId(reminderVo.getOid());
baseQueryOrderRequest.setTrackingNo(LogTreadLocal.getTrackingNo());
QueryOrderByIdResponse response = orderCenterSdkService.queryOrderById(baseQueryOrderRequest);
if (!RESPONSE_SUCCESS_CODE.equals(response.getErrcode()) || response.getData() == null) {
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR);
}
QueryOrdersResponse.DataBean.OrderBean orderBean = response.getData();
//判断订单状态
if (!cn.freemud.management.enums.OrderStatus.DISTRIBUTION.getCode().equals(orderBean.getStatus())) {
return ResponseUtil.error(ResponseResult.DELIVERY_REMINDER_ORDER_ERROR);
}
//调用配送服务进行催单
OrderRemindRequestDto dto = new OrderRemindRequestDto();
dto.setOrderKey(reminderVo.getOid());
dto.setStoreId(orderBean.getShopId());
dto.setDeliveryChannel("CanDao");
dto.setDisplayOrderId(orderBean.getDownstreamThirdOrderCode());
if (orderBean.getAddInfo() != null) {
dto.setDeliveryId(orderBean.getAddInfo().getDeliveryId());
}
QueryDeliveryAmountResponseDto responseDto = deliveryFeiginClient.orderRemind(dto);
if (null != responseDto && 120 == responseDto.getCode()) {
return ResponseUtil.error("120", responseDto.getMsg());
}
if (responseDto == null || RESPONSE_SUCCESS_CODE != responseDto.getCode()) {
return ResponseUtil.error(ResponseResult.DELIVERY_REMINDER_ERROR);
}
return ResponseUtil.success();
}
/**
* 查询骑手位置
*
* @param vo
* @return
*/
@Override
public BaseResponse listFreeRider(FreeRiderPositionVo vo) {
AssortmentCustomerInfoVo userLoginInfoDto = customerInfoManager.getCustomerInfoByObject(vo.getSessionId());
if (userLoginInfoDto == null || StringUtils.isBlank(userLoginInfoDto.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN);
}
QueryLocusRiderTrackDto dto = new QueryLocusRiderTrackDto();
dto.setDeliveryChannel("CanDao");
dto.setOrderId(vo.getOid());
MCCafeDeliveryBaseResponse<ResRiderTrackDto> responses = deliveryFeiginClient.listFreeRider(dto);
if (responses == null || RESPONSE_SUCCESS_CODE != Integer.valueOf(responses.getCode()) || responses.getData() == null) {
return ResponseUtil.error(ResponseResult.DELIVERY_QUERY_RIDER_ERROR);
}
return ResponseUtil.success(responses.getData());
}
@Override
public BaseResponse mcCafeQueryRecentOrder(McCafeQueryOrderVo queryOrderVo) {
AssortmentCustomerInfoVo userLoginInfoDto = customerInfoManager.getCustomerInfoByObject(queryOrderVo.getSessionId());
if (userLoginInfoDto == null || StringUtils.isBlank(userLoginInfoDto.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN);
}
List<RecentGoodsInfoVo> recentGoodsInfoVoList = new ArrayList<>();
if(null == quickOrderInterval || "0".equals(quickOrderInterval)) {
return ResponseUtil.success(recentGoodsInfoVoList);
}
queryOrderVo.setStartDate(DateUtil.convert2String(DateUtil.addDays(new Date(), -Integer.valueOf(quickOrderInterval)), "yyyy-MM-dd"));
queryOrderVo.setEndDate(DateUtil.convert2String(new Date(), "yyyy-MM-dd"));
queryOrderVo.setQueryOrderStatus(Arrays.asList(OldOrderStatus.COMPLETE.getCode()));
queryOrderVo.setQueryOrderType(Arrays.asList(OldOrderType.TAKE_OUT.getCode(), OldOrderType.COLLECT_GOODS.getCode(), OldOrderType.EAT_IN.getCode()));
queryOrderVo.setPartnerId(queryOrderVo.getPartnerId());
String startDateStr = queryOrderVo.getStartDate() + " 00:00:00";
String endDateStr = queryOrderVo.getEndDate() + " 23:59:59";
Date startDate = DateUtil.convert2Date(startDateStr, "yyyy-MM-dd HH:mm:ss");
if (startDate == null) {
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR.getCode(), "查询订单开始时间格式不正确");
}
Date endDate = DateUtil.convert2Date(endDateStr, "yyyy-MM-dd HH:mm:ss");
if (endDate == null) {
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR.getCode(), "查询订单结束时间格式不正确");
}
QueryOrdersRequest queryOrdersRequest = new QueryOrdersRequest();
queryOrdersRequest.setUserId(userLoginInfoDto.getMemberId());
queryOrdersRequest.setCompanyId(queryOrderVo.getPartnerId());
queryOrdersRequest.setPageSize(1);
queryOrdersRequest.setPageNumber(1);
queryOrdersRequest.setStartDate(startDateStr);
queryOrdersRequest.setEndDate(endDateStr);
queryOrdersRequest.setSource(new String[]{OrderChannelType.SAAS.getCode()});
queryOrdersRequest.setPayStatus(new Integer[]{PayStatus.HAVE_PAID.getCode(), PayStatus.HAVE_REFUND.getCode(), PayStatus.COMPLETE.getCode()});
queryOrdersRequest.setStatus(new Integer[]{OrderStatus.COMPLETE.getCode()});
queryOrdersRequest.setType(new Integer[]{OrderType.COLLECT_GOODS.getCode(), OrderType.EAT_IN.getCode(), OrderType.TAKE_OUT.getCode()});
//商品订单和卖券订单
queryOrdersRequest.setBizTypes(Arrays.asList(1,6));
queryOrdersRequest.setTrackingNo(LogTreadLocal.getTrackingNo());
QueryOrdersResponse queryOrderResponse = null;
try {
queryOrderResponse = orderCenterSdkService.queryMCCafeOrders(queryOrdersRequest);
} catch (Exception e) {
log.error("queryRecentOrders_error : " + ExceptionUtils.getExceptionInfo(e));
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR.getCode(), "查询订单异常");
}
if (queryOrderResponse == null || !RESPONSE_SUCCESS_CODE.equals(queryOrderResponse.getErrcode())) {
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR.getCode(), "查询订单失败");
}
//用户无订单数据
if (queryOrderResponse.getData() == null || queryOrderResponse.getData().getCount() == 0) {
return ResponseUtil.error(ResponseResult.SUCCESS.getCode(), "查询订单数量为0");
}
for (QueryOrdersResponse.DataBean.OrderBean.ProductBean o : queryOrderResponse.getData().getOrders().get(0).getProductList()) {
if(ProductTypeEnum.getVirtualProductType().contains(o.getProductType())) {
continue;
}
if(CollectionUtils.isNotEmpty(o.getDiscountList()) && o.getDiscountList().stream()
.filter(p -> OldOrderAccountType.PRODUCT_COUPON.getCode().equals(p.getDiscountType())
|| OldOrderAccountType.EVM_PRODUCT_COUPON.getCode().equals(p.getDiscountType())).findAny().isPresent()) {
continue;
}
RecentGoodsInfoVo recentGoodsInfoVo = new RecentGoodsInfoVo();
recentGoodsInfoVo.setSpuId(o.getProductId());
recentGoodsInfoVo.setSpuName(o.getProductName());
recentGoodsInfoVo.setSkuId(o.getSpecification());
recentGoodsInfoVo.setSkuName(o.getSpecificationName());
recentGoodsInfoVo.setQty(o.getNumber());
if(StringUtils.isNotBlank(o.getExtInfo())) {
OrderProductAddInfoDto orderProductAddInfoDto = JSON.parseObject(o.getExtInfo(), OrderProductAddInfoDto.class);
if(null != orderProductAddInfoDto) {
recentGoodsInfoVo.setSpecialExtra(JSON.parseArray(JSON.toJSONString(orderProductAddInfoDto.getSpecialAttrs()), RecentGoodsInfoVo.SpecialExtra.class));
}
}
if(CollectionUtils.isNotEmpty(o.getComboProduct())) {
recentGoodsInfoVo.setProductComboList(new ArrayList<RecentGoodsInfoVo.ComboGoodsVo>());
recentGoodsInfoVo.setProductGroupList(new ArrayList<RecentGoodsInfoVo.ComboGoodsVo>());
o.getComboProduct().forEach(p -> {
RecentGoodsInfoVo.ComboGoodsVo comboGoodsVo = new RecentGoodsInfoVo.ComboGoodsVo();
comboGoodsVo.setSpuId(p.getProductId());
comboGoodsVo.setSpuName(p.getProductName());
comboGoodsVo.setSkuId(p.getSpecification());
comboGoodsVo.setSkuName(p.getSpecificationName());
if(StringUtils.isNotBlank(p.getExtInfo())) {
OrderProductAddInfoDto extInfo = JSON.parseObject(p.getExtInfo(), OrderProductAddInfoDto.class);
comboGoodsVo.setProductGroupId(extInfo.getProductGroupId()+"");
}
comboGoodsVo.setQty(p.getNumber());
OrderProductAddInfoDto orderProductAddInfoDto = JSON.parseObject(p.getExtInfo(), OrderProductAddInfoDto.class);
if(null != orderProductAddInfoDto) {
comboGoodsVo.setSpecialExtra(JSON.parseArray(JSON.toJSONString(orderProductAddInfoDto.getSpecialAttrs()), RecentGoodsInfoVo.SpecialExtra.class));
}
if(CollectionUtils.isNotEmpty(p.getMaterialProduct())) {
comboGoodsVo.setProductMaterialList(new ArrayList<RecentGoodsInfoVo.MaterialGoodsVo>());
p.getMaterialProduct().forEach(q -> {
RecentGoodsInfoVo.MaterialGoodsVo materialGoodsVo = new RecentGoodsInfoVo.MaterialGoodsVo();
materialGoodsVo.setSpuId(q.getProductId());
materialGoodsVo.setSpuName(q.getProductName());
materialGoodsVo.setQty(q.getNumber());
materialGoodsVo.setCustomerCode(q.getProductCode());
comboGoodsVo.getProductMaterialList().add(materialGoodsVo);
});
}
if(orderProductAddInfoDto.getIsFixedProduct()) {
recentGoodsInfoVo.getProductComboList().add(comboGoodsVo);
} else {
recentGoodsInfoVo.getProductGroupList().add(comboGoodsVo);
}
});
}
if(CollectionUtils.isNotEmpty(o.getMaterialProduct())) {
recentGoodsInfoVo.setProductMaterialList(new ArrayList<RecentGoodsInfoVo.MaterialGoodsVo>());
o.getMaterialProduct().forEach(p -> {
RecentGoodsInfoVo.MaterialGoodsVo materialGoodsVo = new RecentGoodsInfoVo.MaterialGoodsVo();
materialGoodsVo.setSpuId(p.getProductId());
materialGoodsVo.setSpuName(p.getProductName());
materialGoodsVo.setQty(p.getNumber());
materialGoodsVo.setCustomerCode(p.getProductCode());
recentGoodsInfoVo.getProductMaterialList().add(materialGoodsVo);
});
}
recentGoodsInfoVoList.add(recentGoodsInfoVo);
}
return ResponseUtil.success(recentGoodsInfoVoList);
}
/**
* 历史判断围餐是从userLoginInfoDto判断iappid的。
* 商城订单从前端传channelType区分,
* 默认点餐
*/
private String getQueryOrderChannelType(QueryOrderVo queryOrderVo, AssortmentCustomerInfoVo userLoginInfoDto) {
String channelType = OrderChannelType.SAAS.getCode();
if (IappIdType.WC_XCX.getCode().equals(userLoginInfoDto.getIappId())) {
channelType = OrderChannelType.IWC.getCode();
} else if (OrderChannelType.SAASMALL.getCode().equals(queryOrderVo.getChannelType())) {
channelType = OrderChannelType.SAASMALL.getCode();
} else if (UserLoginChannelEnum.APP.getCode().equals(userLoginInfoDto.getChannel())) {
channelType = OrderChannelType.APP.getCode();
} else if (OrderChannelType.BEAUTIFUL.getCode().equals(queryOrderVo.getChannelType())) {
channelType = OrderChannelType.BEAUTIFUL.getCode();
}
return channelType;
}
}
......@@ -270,8 +270,6 @@ public class OrderServiceImpl implements Orderservice {
@Autowired
private AssortmentOpenPlatformWxappManager openPlatformWxappManager;
@Autowired
private AssortmentOpenPlatformPartnerConfigManager openPlatformPartnerConfigManager;
@Autowired
private AssortmentCustomerInfoManager customerInfoManager;
@Autowired
private CheckOrder checkOrder;
......@@ -321,6 +319,8 @@ public class OrderServiceImpl implements Orderservice {
@Autowired
private SvcComPayClient svcComPayClient;
@Autowired
private AssortmentOpenPlatformPartnerConfigManager openPlatformPartnerConfigManager;
@Autowired
private OrderRelationFactory orderRelationFactory;
......@@ -1125,206 +1125,6 @@ public class OrderServiceImpl implements Orderservice {
return ResponseUtil.success(responseMap);
}
@Override
public BaseResponse mcCafeQueryOrders(McCafeQueryOrderVo queryOrderVo) {
AssortmentCustomerInfoVo userLoginInfoDto = customerInfoManager.getCustomerInfoByObject(queryOrderVo.getSessionId());
if (userLoginInfoDto == null || StringUtils.isBlank(userLoginInfoDto.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN);
}
if (StringUtils.isBlank(queryOrderVo.getStartDate())) {
queryOrderVo.setStartDate(DateUtil.convert2String(DateUtil.addMonths(new Date(), -1), "yyyy-MM-dd"));
}
if (StringUtils.isBlank(queryOrderVo.getEndDate())) {
queryOrderVo.setEndDate(DateUtil.convert2String(new Date(), "yyyy-MM-dd"));
}
if (CollectionUtils.isEmpty(queryOrderVo.getQueryOrderStatus())) {
return ResponseUtil.error(ResponseResult.PARAMETER_MISSING.getCode(), "查询订单状态不能为空");
}
if (CollectionUtils.isNotEmpty(queryOrderVo.getQueryOrderType())) {
if (CollectionUtils.isEmpty(OrderType.getByCode(queryOrderVo.getQueryOrderType()))) {
return ResponseUtil.error(ResponseResult.PARAMETER_MISSING.getCode(), "查询订单类型不存在");
}
}
String partnerId = queryOrderVo.getPartnerId();
String startDateStr = queryOrderVo.getStartDate() + " 00:00:00";
String endDateStr = queryOrderVo.getEndDate() + " 23:59:59";
Date startDate = DateUtil.convert2Date(startDateStr, "yyyy-MM-dd HH:mm:ss");
if (startDate == null) {
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR.getCode(), "查询订单开始时间格式不正确");
}
Date endDate = DateUtil.convert2Date(endDateStr, "yyyy-MM-dd HH:mm:ss");
if (endDate == null) {
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR.getCode(), "查询订单结束时间格式不正确");
}
if (startDate.getTime() < DateUtil.addMonths(new Date(), -3).getTime()) {
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR.getCode(), "只能查询3个月内的订单信息");
}
String userId = userLoginInfoDto.getMemberId();
queryOrderVo.setStartDate(startDateStr);
queryOrderVo.setEndDate(endDateStr);
QueryOrderVo vo = new QueryOrderVo();
BeanUtils.copyProperties(queryOrderVo, vo);
String channelType = this.getQueryOrderChannelType(vo, userLoginInfoDto);
QueryOrdersDto queryOrdersDto = orderAdapter.convent2QueryOrdersDtoMcCafe(queryOrderVo, userId, channelType);
QueryOrdersResponse queryOrderResponse;
try {
QueryOrdersRequest queryOrdersRequest2 = new QueryOrdersRequest();
BeanUtil.convertBean(queryOrdersDto, queryOrdersRequest2);
queryOrdersRequest2.setTrackingNo(LogTreadLocal.getTrackingNo());
queryOrderResponse = orderCenterSdkService.queryMCCafeOrders(queryOrdersRequest2);
} catch (Exception e) {
LogUtil.error("queryOrders_error", gson.toJson(queryOrdersDto), e);
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR);
}
if (queryOrderResponse == null || !RESPONSE_SUCCESS_CODE.equals(queryOrderResponse.getErrcode())) {
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR.getCode());
}
Map<String, Object> responseMap = Maps.newTreeMap();
//用户无订单数据
if (queryOrderResponse.getData() == null || queryOrderResponse.getData().getCount() == 0) {
responseMap.put("count", 0);
responseMap.put("list", new ArrayList<QueryOrderResponseVo>());
return ResponseUtil.success(responseMap);
}
List<QueryOrdersResponse.DataBean.OrderBean> orders = queryOrderResponse.getData().getOrders();
Set<String> shopIds = new HashSet<>();
// 过滤待支付订单
if (CollectionUtils.isNotEmpty(orders)) {
for (QueryOrdersResponse.DataBean.OrderBean orderBean : orders) {
if (!(OrderStatus.WAIT_PAY.getCode().equals(orderBean.getStatus()) || PayStatus.NOT_PAY.getCode().equals(orderBean.getPayStatus()))) {
shopIds.add(orderBean.getShopId());
}
}
}
String storeCodes = "";
for (String shopId : shopIds) {
storeCodes = shopId + "," + storeCodes;
}
GetListByCodesRequest request = new GetListByCodesRequest();
request.setPartnerId(partnerId);
request.setStoreCodes(storeCodes);
// 查询多个门店信息
GetListByCodesResponse storeInfoResponse = storeCenterService.getListByCodes(request, LogTreadLocal.getTrackingNo());
Map<String, StoreResponse.BizVO> storeMap = new HashMap<>();
if (storeInfoResponse != null && storeInfoResponse.getBizVO() != null && storeInfoResponse.getBizVO().getList() != null) {
for (StoreResponse.BizVO bizVO : storeInfoResponse.getBizVO().getList()) {
storeMap.put(bizVO.getStoreCode(), bizVO);
}
}
if (CollectionUtils.isNotEmpty(orders)) {
orders.forEach(orderBean -> {
StoreResponse.BizVO storeResponseDto = storeMap.get(orderBean.getShopId());
if (storeResponseDto != null) {
orderBean.setShopAddress(storeResponseDto.getAddress());
orderBean.setShopPhone(storeResponseDto.getPhone());
orderBean.setShopImageUrl(storeResponseDto.getLogoUrl());
//默认骑手头像显示为门店首页图片
orderBean.setRiderPhoto(storeResponseDto.getLogoUrl());
orderBean.setLatitude(Double.valueOf(storeResponseDto.getLatitude()));
orderBean.setLongitude(Double.valueOf(storeResponseDto.getLongitude()));
}
// 获取订单运单号,如果有运单则是第三方外卖单
if (orderBean.getAddInfo() != null && StringUtils.isNotEmpty(orderBean.getAddInfo().getDeliveryId())) {
hasThirdDelivery(orderBean);
}
orderBean.setQueueIndex("");
// 查询待取餐订单才需要查询排队人数和订单状态扭转记录
if (QueryOrderStatus.TAKE_MEAL.getCode().equals(orderBean.getOrderType())) {
// 查询订单的排队人数
BaseQueryOrderRequest var1 = new BaseQueryOrderRequest();
var1.setOrderId(orderBean.getOid());
var1.setTrackingNo(LogTreadLocal.getTrackingNo());
BaseOrderResponse baseOrderResponse = orderCenterSdkService.queryOrderQueueIndex(var1);
QueryOrderQueueIndexResponse response = new QueryOrderQueueIndexResponse();
response.setErrcode(baseOrderResponse.getErrcode());
response.setErrmsg(baseOrderResponse.getErrmsg());
response.setData(baseOrderResponse.getData() == null ? 0 : Integer.parseInt(baseOrderResponse.getData()));
if (RESPONSE_SUCCESS_CODE.equals(response.getErrcode())) {
String queueIndex = response.getData() == null ? "" : response.getData().toString();
orderBean.setQueueIndex(queueIndex);
}
// 查询订单的操作状态
BaseQueryOrderRequest var2 = new BaseQueryOrderRequest();
var2.setOrderId(orderBean.getOid());
var2.setTrackingNo(LogTreadLocal.getTrackingNo());
OrderStatusTrackingInfoResponse orderStatusTrackingInfoResponse = orderCenterSdkService.getOrderStatusTrackingInfoByOid(var2);
String string = JSONObject.toJSONString(orderStatusTrackingInfoResponse);
JSONObject jsonObject = JSONObject.parseObject(string);
OrderStatusTrackingInfoDto orderStatusTrackingInfoByOid = jsonObject.toJavaObject(OrderStatusTrackingInfoDto.class);
if (RESPONSE_SUCCESS_CODE.equals(orderStatusTrackingInfoByOid.getErrcode())) {
orderStatusTracking(orderBean, orderStatusTrackingInfoByOid);
}
}
if (OrderStatus.TAKE_ORDER.getCode().equals(orderBean.getStatus())
|| OrderStatus.WAIT_PAY.getCode().equals(orderBean.getStatus())) {
orderBean.setOtherCode("");
}
});
}
List<QueryOrderResponseVo> queryOrderResponseVos = orderAdapter.convent2QueryOrderResponseVos(orders, userLoginInfoDto.getWxAppId(), userLoginInfoDto.getIappId());
responseMap.put("count", queryOrderResponse.getData() == null ? 0 : queryOrderResponse.getData().getCount());
responseMap.put("list", queryOrderResponseVos);
//只有有订单时才显示用户自定义取餐信息
if (CollectionUtils.isNotEmpty(queryOrderResponseVos)) {
responseMap.put("definitionMsg", getDefinitionMsg(queryOrderVo.getPartnerId()));
}
return ResponseUtil.success(responseMap);
}
@Override
public BaseResponse mcCafePollingPickUpCode(MaCafeQueryOrderVo queryOrderVo) {
AssortmentCustomerInfoVo userLoginInfoDto = customerInfoManager.getCustomerInfoByObject(queryOrderVo.getSessionId());
if (userLoginInfoDto == null || StringUtils.isBlank(userLoginInfoDto.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN);
}
String oid = queryOrderVo.getOid();
if (StringUtils.isBlank(oid)) {
return ResponseUtil.error(ResponseResult.PARAMETER_MISSING.getCode(), "oid不能为空");
}
BaseQueryOrderRequest baseQueryOrderRequest = new BaseQueryOrderRequest();
baseQueryOrderRequest.setOrderId(oid);
baseQueryOrderRequest.setTrackingNo(LogTreadLocal.getTrackingNo());
QueryOrderByIdResponse response = orderCenterSdkService.queryOrderById(baseQueryOrderRequest);
if (!RESPONSE_SUCCESS_CODE.equals(response.getErrcode()) || response.getData() == null) {
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR);
}
QueryOrdersResponse.DataBean.OrderBean orderBean = response.getData();
OrderViewStatusDto orderViewStatusDesc = orderAdapter.getOrderViewStatusDesc(orderBean, userLoginInfoDto.getWxAppId());
Map<String, Object> responseMap = Maps.newTreeMap();
responseMap.put("orderStatus", orderViewStatusDesc.getOrderStatus());
responseMap.put("takeCode", "");
responseMap.put("queueIndex", "");
String extInfo = orderBean.getExtInfo();
OrderExtInfoDto orderExtInfoDto = null;
if (StringUtils.isNotBlank(extInfo)) {
orderExtInfoDto = gson.fromJson(extInfo, OrderExtInfoDto.class);
}
responseMap.put("payVoucher", orderExtInfoDto != null ? orderExtInfoDto.getPayTransId() : "");
//非外卖单才获取取餐码和排队人数
if (!OrderType.TAKE_OUT.getCode().equals(orderBean.getType())) {
if (!(OrderStatus.TAKE_ORDER.getCode().equals(orderBean.getStatus())
|| OrderStatus.WAIT_PAY.getCode().equals(orderBean.getStatus()))) {
responseMap.put("takeCode", orderBean.getOtherCode());
}
BaseQueryOrderRequest var1 = new BaseQueryOrderRequest();
var1.setOrderId(orderBean.getOid());
var1.setTrackingNo(LogTreadLocal.getTrackingNo());
BaseOrderResponse baseOrderResponse = orderCenterSdkService.queryOrderQueueIndex(var1);
QueryOrderQueueIndexResponse response1 = new QueryOrderQueueIndexResponse();
response1.setErrcode(baseOrderResponse.getErrcode());
response1.setErrmsg(baseOrderResponse.getErrmsg());
if (RESPONSE_SUCCESS_CODE.equals(response1.getErrcode())) {
String queueIndex = response1.getData() == null ? "" : response1.getData().toString();
responseMap.put("queueIndex", queueIndex);
}
}
return ResponseUtil.success(responseMap);
}
@Override
public BaseResponse queryCollageOrderById(Integer operation, String sessionId, String oid, String partnerId, String channel) {
......@@ -1709,157 +1509,6 @@ public class OrderServiceImpl implements Orderservice {
return ResponseUtil.success(queryOrderResponseVo);
}
/**
* 麦咖啡查询订单详情
*
* @param queryOrderVo
* @return
*/
@Override
public BaseResponse mcCafeQueryOrderById(MaCafeQueryOrderVo queryOrderVo) {
AssortmentCustomerInfoVo userInfo = customerInfoManager.getCustomerInfoByObject(queryOrderVo.getSessionId());
if (userInfo == null || StringUtils.isEmpty(userInfo.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN);
}
String oid = queryOrderVo.getOid();
if (StringUtils.isBlank(oid)) {
return ResponseUtil.error(ResponseResult.PARAMETER_MISSING.getCode(), "oid不能为空");
}
BaseQueryOrderRequest baseQueryOrderRequest = new BaseQueryOrderRequest();
baseQueryOrderRequest.setOrderId(oid);
baseQueryOrderRequest.setTrackingNo(LogTreadLocal.getTrackingNo());
QueryOrderByIdResponse response = orderCenterSdkService.queryMCCafeOrderById(baseQueryOrderRequest);
if (!RESPONSE_SUCCESS_CODE.equals(response.getErrcode()) || response.getData() == null) {
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR);
}
QueryOrdersResponse.DataBean.OrderBean orderBean = response.getData();
String storeId = orderBean.getShopId();
StoreInfoRequest request = new StoreInfoRequest();
request.setPartnerId(queryOrderVo.getPartnerId());
request.setStoreCode(storeId);
StoreResponse storeInfo = storeCenterService.getStoreInfo(request, LogTreadLocal.getTrackingNo());
if (storeInfo != null && storeInfo.getBizVO() != null) {
StoreResponse.BizVO storeResponseDto = storeInfo.getBizVO();
orderBean.setShopAddress(storeResponseDto.getAddress());
orderBean.setShopPhone(storeResponseDto.getPhone());
orderBean.setShopImageUrl(storeResponseDto.getLogoUrl());
//默认骑手头像显示为门店首页图片
orderBean.setRiderPhoto(storeResponseDto.getLogoUrl());
orderBean.setShopPhone(storeResponseDto.getPhone());
orderBean.setLatitude(Double.valueOf(storeResponseDto.getLatitude()));
orderBean.setLongitude(Double.valueOf(storeResponseDto.getLongitude()));
}
BaseQueryOrderRequest var1 = new BaseQueryOrderRequest();
var1.setOrderId(orderBean.getOid());
var1.setTrackingNo(LogTreadLocal.getTrackingNo());
BaseOrderResponse baseOrderResponse = orderCenterSdkService.queryOrderQueueIndex(var1);
QueryOrderQueueIndexResponse response1 = new QueryOrderQueueIndexResponse();
response1.setErrcode(baseOrderResponse.getErrcode());
response1.setErrmsg(baseOrderResponse.getErrmsg());
if (RESPONSE_SUCCESS_CODE.equals(response1.getErrcode())) {
String queueIndex = response1.getData() == null ? "" : response1.getData().toString();
orderBean.setQueueIndex(queueIndex);
}
// 获取订单运单号,如果有运单则是第三方外卖单
if (orderBean.getAddInfo() != null && StringUtils.isNotEmpty(orderBean.getAddInfo().getDeliveryId())) {
hasThirdDelivery(orderBean);
}
// 查询订单的操作状态
OrderStatusTrackingInfoResponse statusTrackingInfoByOid = orderCenterSdkService.getOrderStatusTrackingInfoByOid(var1);
String string2 = JSONObject.toJSONString(statusTrackingInfoByOid);
JSONObject jsonObject2 = JSONObject.parseObject(string2);
OrderStatusTrackingInfoDto orderStatusTrackingInfoByOid = jsonObject2.toJavaObject(OrderStatusTrackingInfoDto.class);
if (RESPONSE_SUCCESS_CODE.equals(orderStatusTrackingInfoByOid.getErrcode())) {
orderStatusTracking(orderBean, orderStatusTrackingInfoByOid);
}
List<QueryOrderResponseVo> queryOrderResponseVos = orderAdapter.convent2QueryOrderResponseVos(Collections.singletonList(orderBean), userInfo.getWxAppId(), userInfo.getIappId());
if (CollectionUtils.isEmpty(queryOrderResponseVos)) {
throw new ServiceException(ResponseResult.ORDER_QUERYORDER_ERROR);
}
QueryOrderResponseVo queryOrderResponseVo = queryOrderResponseVos.get(0);
Optional<ProductVo> productVoOptional = queryOrderResponseVo.getProducts().stream()
.filter(o -> StringUtils.isNotBlank(o.getSplitIndex()))
.findFirst();
Map<String, Integer> existMap = new HashMap<>();
if (productVoOptional.isPresent()) {
int size = queryOrderResponseVo.getProducts().size();
List<ProductVo> productVoList = new ArrayList<>();
for (int i = 0; i < size; i++) {
ProductVo productVo = queryOrderResponseVo.getProducts().get(i);
if (StringUtils.isBlank(productVo.getSplitIndex())) {
productVoList.add(productVo);
} else {
if (existMap.get(productVo.getSplitIndex()) == null) {
existMap.put(productVo.getSplitIndex(), productVoList.size());
productVoList.add(productVo);
} else {
ProductVo productVoExists = productVoList.get(existMap.get(productVo.getSplitIndex()));
productVoExists.setOriginalTotalAmount(productVoExists.getOriginalTotalAmount() + productVo.getOriginalTotalAmount());
productVoExists.setSaleTotalAmount(productVoExists.getSaleTotalAmount() + productVo.getSaleTotalAmount());
productVoExists.setQty(productVoExists.getQty() + productVo.getQty());
}
}
}
queryOrderResponseVo.setProducts(productVoList);
}
//麦咖啡 预约外卖单重新封装取餐时间
if (OrderType.TAKE_OUT.getCode().equals(queryOrderResponseVo.getOrderType()) && StringUtils.isNotEmpty(queryOrderResponseVo.getReserveDeliveryTime())) {
Date reserveDeliveryTime = DateUtil.convert2Date(queryOrderResponseVo.getReserveDeliveryTime(), "yyyy-MM-dd HH:mm:ss");
queryOrderResponseVo.setReserveDeliveryTime(formatSpecialDate(reserveDeliveryTime));
}
if (OrderStatus.TAKE_ORDER.getCode().equals(queryOrderResponseVo.getOrderStatus())
|| OrderStatus.WAIT_PAY.getCode().equals(queryOrderResponseVo.getOrderStatus())) {
queryOrderResponseVo.setTakeCode("");
}
queryOrderResponseVo.setOrderTypeDesc(Optional.ofNullable(McCafeOrderTypeGather.getByCode(queryOrderResponseVo.getOrderType()))
.map(McCafeOrderTypeGather::getDesc).orElse(""));
queryOrderResponseVo.setIsCouponOrder(queryOrderResponseVo.getProducts().stream()
.filter(o -> !ProductTypeEnum.getVirtualProductType().contains(o.getProductType())).findAny().isPresent() ? 0 : 1);
//48小时自动退款描述
if (storeInfo != null && storeInfo.getBizVO() != null && storeInfo.getBizVO().getStoreConfig() != null
&& queryOrderResponseVo.getRefundStatus() != null && queryOrderResponseVo.getRefundStatus() == 1) {
Integer automaticRefund = storeInfo.getBizVO().getStoreConfig().getAutomaticRefund();
if (automaticRefund != null && automaticRefund == 1) {
queryOrderResponseVo.setRefundTips("若48小时内未成功退款,请联系商家人工处理");
} else {
queryOrderResponseVo.setRefundTips("若48小时内未成功退款,请联系商家人工处理");
}
}
return ResponseUtil.success(queryOrderResponseVo);
}
public static String formatSpecialDate(Date date) {
if (date == null) {
return null;
}
System.out.println(new DateTime(date).toString("yyyy-MM-dd HH:mm"));
DateTime now = new DateTime();
DateTime today_start = new DateTime(now.getYear(), now.getMonthOfYear(), now.getDayOfMonth(), 0, 0, 0);
DateTime today_end = today_start.plusDays(1);
System.out.println(new DateTime(today_end).toString("yyyy-MM-dd HH:mm"));
DateTime tomorrow_start = today_start.plusDays(2);
System.out.println(new DateTime(tomorrow_start).toString("yyyy-MM-dd HH:mm"));
if (date.after(today_start.toDate()) && date.before(today_end.toDate())) {
return String.format("%s", new DateTime(date).toString("HH:mm"));
} else if (date.after(today_end.toDate()) && date.before(tomorrow_start.toDate())) {
return String.format("明天%s%s", DateUtils.getDayWeek(date), new DateTime(date).toString("HH:mm"));
}
return new DateTime(date).toString("yyyy-MM-dd") + DateUtils.getDayWeek(date) + new DateTime(date).toString("HH:mm");
}
/**
* 如果有第三方配送,返回值添加第三方配送信息
*/
......@@ -3825,72 +3474,6 @@ public class OrderServiceImpl implements Orderservice {
}).getPartnerValue();
}
/**
* 催单
*
* @param reminderVo
* @return
*/
@Override
public BaseResponse reminder(ReminderVo reminderVo) {
AssortmentCustomerInfoVo userLoginInfoDto = customerInfoManager.getCustomerInfoByObject(reminderVo.getSessionId());
if (userLoginInfoDto == null || StringUtils.isBlank(userLoginInfoDto.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN);
}
BaseQueryOrderRequest baseQueryOrderRequest = new BaseQueryOrderRequest();
baseQueryOrderRequest.setOrderId(reminderVo.getOid());
baseQueryOrderRequest.setTrackingNo(LogTreadLocal.getTrackingNo());
QueryOrderByIdResponse response = orderCenterSdkService.queryOrderById(baseQueryOrderRequest);
if (!RESPONSE_SUCCESS_CODE.equals(response.getErrcode()) || response.getData() == null) {
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR);
}
QueryOrdersResponse.DataBean.OrderBean orderBean = response.getData();
//判断订单状态
if (!cn.freemud.management.enums.OrderStatus.DISTRIBUTION.getCode().equals(orderBean.getStatus())) {
return ResponseUtil.error(ResponseResult.DELIVERY_REMINDER_ORDER_ERROR);
}
//调用配送服务进行催单
OrderRemindRequestDto dto = new OrderRemindRequestDto();
dto.setOrderKey(reminderVo.getOid());
dto.setStoreId(orderBean.getShopId());
dto.setDeliveryChannel("CanDao");
dto.setDisplayOrderId(orderBean.getDownstreamThirdOrderCode());
if (orderBean.getAddInfo() != null) {
dto.setDeliveryId(orderBean.getAddInfo().getDeliveryId());
}
QueryDeliveryAmountResponseDto responseDto = deliveryFeiginClient.orderRemind(dto);
if (null != responseDto && 120 == responseDto.getCode()) {
return ResponseUtil.error("120", responseDto.getMsg());
}
if (responseDto == null || RESPONSE_SUCCESS_CODE != responseDto.getCode()) {
return ResponseUtil.error(ResponseResult.DELIVERY_REMINDER_ERROR);
}
return ResponseUtil.success();
}
/**
* 查询骑手位置
*
* @param vo
* @return
*/
@Override
public BaseResponse listFreeRider(FreeRiderPositionVo vo) {
AssortmentCustomerInfoVo userLoginInfoDto = customerInfoManager.getCustomerInfoByObject(vo.getSessionId());
if (userLoginInfoDto == null || StringUtils.isBlank(userLoginInfoDto.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN);
}
QueryLocusRiderTrackDto dto = new QueryLocusRiderTrackDto();
dto.setDeliveryChannel("CanDao");
dto.setOrderId(vo.getOid());
MCCafeDeliveryBaseResponse<ResRiderTrackDto> responses = deliveryFeiginClient.listFreeRider(dto);
if (responses == null || RESPONSE_SUCCESS_CODE != Integer.valueOf(responses.getCode()) || responses.getData() == null) {
return ResponseUtil.error(ResponseResult.DELIVERY_QUERY_RIDER_ERROR);
}
return ResponseUtil.success(responses.getData());
}
public void buildQueryOrderResponseVo(QueryOrderResponseVo queryOrderResponseVo, QueryOrderByIdResponse response, String partnerId) {
if (null == response || response.getData() == null || !ObjectUtils.equals(response.getErrcode(), RESPONSE_SUCCESS_CODE)) {
......
package cn.freemud.utils;
public class ExceptionUtils {
public static String getExceptionInfo(Exception e) {
StringBuilder sb = new StringBuilder();
StackTraceElement[] trace = e.getStackTrace();
for (StackTraceElement traceElement : trace) {
sb.append("\tat " + traceElement);
}
return sb.toString();
}
}
......@@ -84,6 +84,7 @@ public class ShoppingCartMccafeAdapter {
List<ShoppingCartGoodsDto.CartGoodsDetailDto.CartGoodsExtra> cartGoodsExtras = BeanUtil.convertBeans(comboxGoods.getExtra(), ShoppingCartGoodsDto.CartGoodsDetailDto.CartGoodsExtra::new);
cartGoodsDetailDto.setExtraList(cartGoodsExtras);
cartGoodsDetailDto.setSpecialExtra(comboxGoods.getSpecialExtra());
cartGoodsDetailDto.setProductGroupId(comboxGoods.getProductGroupId());
//小料
if (CollectionUtils.isNotEmpty(comboxGoods.getProductMaterialList())) {
List<ShoppingCartGoodsDto.CartGoodsDetailDto.MaterialGoods> materialList = new ArrayList<>(0);
......
......@@ -18,6 +18,8 @@ public class ShoppingCartConstant {
public final static String SHOPPING_CART_INVALIAD_GOODS="因商家变更了商品,导致选购失败,请刷新门店后重新尝试选购商品";
public final static String SHOPPING_CART_EMPTY_GOODS_LIST="因商品变更或其他原因,导致加购失效,无法结算,请重新尝试选购商品";
public final static String SHOPPING_CART_GOODS_CHANGE = "因商家变更了商品,导致选购失效,请刷新门店后重新尝试选购商品";
public final static String SHOPPING_CART_INVALID_GOODS_EXIST = "有商品不在售卖状态,请重新提交结算";
public final static String SHOPPING_CART_ACTIVITY_CHANGE = "商品价格有变动,将按照最新活动价格计算哦";
......
......@@ -259,6 +259,7 @@ public class ShoppingCartGoodsDto {
* 是否是套餐内固定商品
*/
private Boolean isFixedProduct;
private Long productGroupId;
/**
* 是否限制库存
* 用于创建订单时,是否扣减库存
......
......@@ -2,6 +2,10 @@ package cn.freemud.entities.vo;
import lombok.Data;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* All rights Reserved, Designed By www.freemud.com
*
......@@ -22,6 +26,10 @@ public class ShoppingCartGoodsBaseResponseVo {
*/
private String toastMsg;
/**
* 前端用来提示的信息
*/
Map<String, List<String>> toastMsgMap = new HashMap<>();
/**
* 购物车中商品价格或有效性是否发生变化
*/
private Boolean changed;
......
......@@ -252,11 +252,63 @@ public class ShoppingCartMCoffeeServiceImpl {
return ResponseUtil.error(ResponseResult.SHOPPING_CART_ADD_INVAILD);
}
BaseResponse baseResponse = null;
ShoppingCartGoodsResponseVo result = new ShoppingCartGoodsResponseVo();
Map<String, List<String>> allToastMsgMap = new HashMap<>();
String toastMsg = "";
for (BatchGoodsInfoVo goodsInfo : requestVo.getGoodsInfos()) {
baseResponse = addGoods(convertBatchAdd2SingleAdd(goodsInfo,requestVo));
if (!Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS_STR,baseResponse.getCode())){
return baseResponse;
}
ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo = (ShoppingCartGoodsResponseVo) baseResponse.getResult();
if(null != shoppingCartGoodsResponseVo && null != shoppingCartGoodsResponseVo.getChanged() && shoppingCartGoodsResponseVo.getChanged()) {
result.setChanged(true);
if(StringUtils.isNotBlank(shoppingCartGoodsResponseVo.getToastMsg())
&& ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS.equals(shoppingCartGoodsResponseVo.getToastMsg())) {
allToastMsgMap.put(ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS, Arrays.asList("1"));
}
if(StringUtils.isNotBlank(shoppingCartGoodsResponseVo.getToastMsg())
&& ShoppingCartConstant.SHOPPING_CART_GOODS_CHANGE.equals(shoppingCartGoodsResponseVo.getToastMsg())) {
allToastMsgMap.put(ShoppingCartConstant.SHOPPING_CART_GOODS_CHANGE, Arrays.asList("1"));
}
if(null != shoppingCartGoodsResponseVo.getToastMsgMap() && shoppingCartGoodsResponseVo.getToastMsgMap().size() > 0) {
shoppingCartGoodsResponseVo.getToastMsgMap().entrySet().stream().forEach(o -> {
if(allToastMsgMap.get(o.getKey()) != null) {
allToastMsgMap.get(o.getKey()).addAll(o.getValue());
} else {
allToastMsgMap.put(o.getKey(), o.getValue());
}
});
}
}
}
if(null != allToastMsgMap && allToastMsgMap.size() > 0) {
if (CollectionUtils.isNotEmpty(allToastMsgMap.get(CART_PRODUCT_INVALID_STATE))){
toastMsg = toastMsg.concat(CART_PRODUCT_INVALID_STATE.replace("$spuName",StringUtils.join(allToastMsgMap.get(CART_PRODUCT_INVALID_STATE),",")));
}
if (CollectionUtils.isNotEmpty(allToastMsgMap.get(CART_PRODUCT_NOT_FOUND))){
toastMsg = toastMsg.concat(CART_PRODUCT_NOT_FOUND.replace("$spuName",StringUtils.join(allToastMsgMap.get(CART_PRODUCT_NOT_FOUND),",")));
}
if (CollectionUtils.isNotEmpty(allToastMsgMap.get(CART_PRODUCT_PRICE_CHANGE))){
toastMsg = toastMsg.concat(CART_PRODUCT_PRICE_CHANGE.replace("$spuName",StringUtils.join(allToastMsgMap.get(CART_PRODUCT_PRICE_CHANGE),",")));
}
if (CollectionUtils.isNotEmpty(allToastMsgMap.get(CART_PRODUCT_NOT_MET_CONDITIONS))){
toastMsg = toastMsg.concat(CART_PRODUCT_NOT_MET_CONDITIONS.replace("$spuName",StringUtils.join(allToastMsgMap.get(CART_PRODUCT_NOT_MET_CONDITIONS),",")));
}
if (CollectionUtils.isNotEmpty(allToastMsgMap.get(COUPON_IS_DISABLE))){
toastMsg = toastMsg.concat(COUPON_IS_DISABLE.replace("$couponName",StringUtils.join(allToastMsgMap.get(COUPON_IS_DISABLE),",")));
}
if(CollectionUtils.isNotEmpty(allToastMsgMap.get(ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS))) {
toastMsg = toastMsg.concat(ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS);
}
if(CollectionUtils.isNotEmpty(allToastMsgMap.get(ShoppingCartConstant.SHOPPING_CART_GOODS_CHANGE))) {
toastMsg = toastMsg.concat(ShoppingCartConstant.SHOPPING_CART_GOODS_CHANGE);
}
result.setToastMsg(toastMsg);
result.setToastMsgMap(allToastMsgMap);
return ResponseUtil.success(result);
}
return baseResponse;
}
......@@ -1632,7 +1684,7 @@ public class ShoppingCartMCoffeeServiceImpl {
}
//套餐商品赋值
if (ObjectUtils.equals(GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType(), cartGoods.getGoodsType())){
else if (ObjectUtils.equals(GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType(), cartGoods.getGoodsType())){
// cartGoods.setOriginalPrice(productBeanListSpuClass.get(0).getOriginalPrice());
// cartGoods.setFinalPrice(productBeanListSpuClass.get(0).getFinalPrice());
// cartGoods.setPackPrice(productBeanListSpuClass.get(0).getPackPrice());
......@@ -1683,6 +1735,10 @@ public class ShoppingCartMCoffeeServiceImpl {
// }
// }
// }
} else {
cartGoods.setName(productBeanListSpuClass.get(0).getName());
cartGoods.setSpuName(productBeanListSpuClass.get(0).getName());
cartGoods.setSkuName(productBeanListSpuClass.get(0).getName());
}
}
......@@ -1826,6 +1882,7 @@ public class ShoppingCartMCoffeeServiceImpl {
storeId, shoppingCartGoodsResponseVo, orderType, sessionId, menuType, shoppingCartBaseService);
if (checkCartRequest.getShoppingCartGoodsResponseVo() != null) {
shoppingCartGoodsResponseVo.setToastMsg(checkCartRequest.getShoppingCartGoodsResponseVo().getToastMsg());
shoppingCartGoodsResponseVo.setToastMsgMap(checkCartRequest.getShoppingCartGoodsResponseVo().getToastMsgMap());
shoppingCartGoodsResponseVo.setChanged(checkCartRequest.getShoppingCartGoodsResponseVo().getChanged());
}
allCartGoodsList = JSONArray.parseArray(JSONObject.toJSONString(checkCartRequest.getCartGoodsList()), CartGoods.class);
......@@ -1971,7 +2028,7 @@ public class ShoppingCartMCoffeeServiceImpl {
if (valiadResponse == null || !CartResponseConstant.SUCCESS.getCode().equals(valiadResponse.getErrcode().toString()) || valiadResponse.getData()==null) {
checkCartRequest.getCartGoodsList().clear();
checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true);
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(com.freemud.sdk.api.assortment.shoppingcart.constant.ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS);
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS);
return CartResponseUtil.error(valiadResponse.getErrmsg(),checkCartRequest);
}
ValiadShopProductResponse validateResult = valiadResponse.getData();
......@@ -1980,6 +2037,7 @@ public class ShoppingCartMCoffeeServiceImpl {
String toastMsg = "";
//非法商品(商品是否存在、商品是否处于上架状态)自动移除,返回前端提示
if (CollectionUtils.isNotEmpty(validateResult.getFailureList())){
Map<String, List<String>> toastMsgMap = new HashMap<>();
List<String> invalidSpu = new ArrayList<>();
List<String> notFoundSpu = new ArrayList<>();
List<String> numErrorSpu = new ArrayList<>();
......@@ -2041,25 +2099,31 @@ public class ShoppingCartMCoffeeServiceImpl {
if (CollectionUtils.isNotEmpty(invalidSpu)){
toastMsg = toastMsg.concat(CART_PRODUCT_INVALID_STATE.replace("$spuName",StringUtils.join(invalidSpu,",")));
toastMsgMap.put(CART_PRODUCT_INVALID_STATE, invalidSpu);
}
if (CollectionUtils.isNotEmpty(notFoundSpu)){
toastMsg = toastMsg.concat(CART_PRODUCT_NOT_FOUND.replace("$spuName",StringUtils.join(notFoundSpu,",")));
toastMsgMap.put(CART_PRODUCT_NOT_FOUND, notFoundSpu);
}
if (CollectionUtils.isNotEmpty(changePriceSpu)){
toastMsg = toastMsg.concat(CART_PRODUCT_PRICE_CHANGE.replace("$spuName",StringUtils.join(changePriceSpu,",")));
toastMsgMap.put(CART_PRODUCT_PRICE_CHANGE, changePriceSpu);
}
if (CollectionUtils.isNotEmpty(numErrorSpu)){
toastMsg = toastMsg.concat("您选择的【$spuName】不满足购买条件".replace("$spuName",StringUtils.join(numErrorSpu,",")));
toastMsg = toastMsg.concat(CART_PRODUCT_NOT_MET_CONDITIONS.replace("$spuName",StringUtils.join(numErrorSpu,",")));
toastMsgMap.put(CART_PRODUCT_NOT_MET_CONDITIONS, numErrorSpu);
}
if (CollectionUtils.isNotEmpty(disableCoupon)){
toastMsg = toastMsg.concat(COUPON_IS_DISABLE.replace("$couponName",StringUtils.join(disableCoupon,",")));
toastMsgMap.put(COUPON_IS_DISABLE, disableCoupon);
}
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(toastMsg);
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsgMap(toastMsgMap);
setToastMsgIfNotExist(checkCartRequest.getShoppingCartGoodsResponseVo(), com.freemud.sdk.api.assortment.shoppingcart.constant.ShoppingCartConstant.SHOPPING_CART_GOODS_CHANGE);
setToastMsgIfNotExist(checkCartRequest.getShoppingCartGoodsResponseVo(), ShoppingCartConstant.SHOPPING_CART_GOODS_CHANGE);
checkCartRequest.getCartGoodsList().removeIf(k -> StringUtils.isEmpty(k.getCartGoodsUid()));
}
for (com.freemud.sdk.api.assortment.shoppingcart.domain.CartGoods cartGoods : checkCartRequest.getCartGoodsList()) {
......@@ -2095,7 +2159,7 @@ public class ShoppingCartMCoffeeServiceImpl {
if (checkCartRequest.getCartGoodsList().stream().anyMatch(cart -> StringUtils.isEmpty(cart.getCartGoodsUid()))) {
checkCartRequest.getCartGoodsList().removeIf(k -> StringUtils.isEmpty(k.getCartGoodsUid()));
checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true);
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(com.freemud.sdk.api.assortment.shoppingcart.constant.ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS);
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS);
}
// if (checkCartRequest.getCartGoodsList().stream().anyMatch(cart -> cart.getGoodsType().equals(GoodsTypeEnum.EXCEPTION_GOODS.getGoodsType()))) {
// checkCartRequest.getCartGoodsList().removeIf(k -> k.getGoodsType().equals(GoodsTypeEnum.EXCEPTION_GOODS.getGoodsType()));
......@@ -2106,7 +2170,7 @@ public class ShoppingCartMCoffeeServiceImpl {
} catch (Exception e) {
ErrorLog.printErrorLog("assortment-shoppingcart-sdk", checkCartRequest.getTrackingNo(), e.getMessage(), "checkAllCartGoods", checkCartRequest, e, Level.ERROR);
checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true);
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(com.freemud.sdk.api.assortment.shoppingcart.constant.ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS);
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS);
return CartResponseUtil.error(e.getMessage(),checkCartRequest);
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment