Commit 654d25dd by huiyang.chen

麦咖啡查询订单列表优化

parent 75460f0a
...@@ -17,9 +17,9 @@ import cn.freemud.base.util.DateUtil; ...@@ -17,9 +17,9 @@ import cn.freemud.base.util.DateUtil;
import cn.freemud.constant.CustomerScoreConstant; import cn.freemud.constant.CustomerScoreConstant;
import cn.freemud.entities.dto.*; import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.activity.ShareDiscountActivityDto; import cn.freemud.entities.dto.activity.ShareDiscountActivityDto;
import cn.freemud.entities.dto.order.*;
import cn.freemud.entities.dto.order.CreateOrderAccountDto; import cn.freemud.entities.dto.order.CreateOrderAccountDto;
import cn.freemud.entities.dto.order.CreateOrderProductDto; import cn.freemud.entities.dto.order.CreateOrderProductDto;
import cn.freemud.entities.dto.order.*;
import cn.freemud.entities.dto.promotion.OrderBeanRequest; import cn.freemud.entities.dto.promotion.OrderBeanRequest;
import cn.freemud.entities.dto.promotion.ShoppingCartGoodsResponse; import cn.freemud.entities.dto.promotion.ShoppingCartGoodsResponse;
import cn.freemud.entities.dto.shoppingCart.ActivityDiscountsDto; import cn.freemud.entities.dto.shoppingCart.ActivityDiscountsDto;
...@@ -28,29 +28,31 @@ import cn.freemud.entities.vo.*; ...@@ -28,29 +28,31 @@ import cn.freemud.entities.vo.*;
import cn.freemud.entities.vo.encircle.CreateReserveOrderVo; import cn.freemud.entities.vo.encircle.CreateReserveOrderVo;
import cn.freemud.entities.vo.encircle.PreviewOrderInfoVo; import cn.freemud.entities.vo.encircle.PreviewOrderInfoVo;
import cn.freemud.enums.ActivityTypeEnum; import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.enums.*;
import cn.freemud.enums.OrderChannelType; import cn.freemud.enums.OrderChannelType;
import cn.freemud.enums.OrderSourceType; import cn.freemud.enums.OrderSourceType;
import cn.freemud.enums.OrderType;
import cn.freemud.enums.PayStatus; import cn.freemud.enums.PayStatus;
import cn.freemud.enums.QueryOrderStatus; import cn.freemud.enums.QueryOrderStatus;
import cn.freemud.enums.ResponseResult; import cn.freemud.enums.ResponseResult;
import cn.freemud.enums.*;
import cn.freemud.interceptor.ServiceException; import cn.freemud.interceptor.ServiceException;
import cn.freemud.redis.RedisCache;
import cn.freemud.request.wechat.dto.SignMessageBuilder; import cn.freemud.request.wechat.dto.SignMessageBuilder;
import cn.freemud.service.impl.OrderCommonService; import cn.freemud.service.impl.OrderCommonService;
import cn.freemud.utils.*; import cn.freemud.utils.LogUtil;
import com.alibaba.fastjson.JSON; import cn.freemud.utils.QrCodeUtil;
import cn.freemud.utils.RSAUtils;
import cn.freemud.utils.WebUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformPartnerWxappConfig; import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformPartnerWxappConfig;
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo; import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
import com.freemud.api.assortment.datamanager.enums.IappIdType; import com.freemud.api.assortment.datamanager.enums.IappIdType;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.api.assortment.datamanager.manager.cache.CacheOpenPlatformPartnerWxappConfigManager; import com.freemud.api.assortment.datamanager.manager.cache.CacheOpenPlatformPartnerWxappConfigManager;
import com.freemud.application.sdk.api.ordercenter.enums.*; import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.ordercenter.enums.AfterSalesType;
import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
import com.freemud.application.sdk.api.ordercenter.enums.OrderSettlementType;
import com.freemud.application.sdk.api.ordercenter.enums.ProductTypeEnum;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto; import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtendedReq; import com.freemud.application.sdk.api.ordercenter.request.OrderExtendedReq;
import com.freemud.application.sdk.api.ordercenter.request.create.OrderTaskReq;
import com.freemud.application.sdk.api.promotioncenter.dto.promotion.GoodsStockDTO; import com.freemud.application.sdk.api.promotioncenter.dto.promotion.GoodsStockDTO;
import com.freemud.application.sdk.api.promotioncenter.request.promotion.ActivityUpdateStockRequest; import com.freemud.application.sdk.api.promotioncenter.request.promotion.ActivityUpdateStockRequest;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse; import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
...@@ -827,6 +829,74 @@ public class OrderAdapter { ...@@ -827,6 +829,74 @@ public class OrderAdapter {
return queryOrdersDto; return queryOrdersDto;
} }
public QueryOrdersDto convent2QueryOrdersDtoMcCafe(McCafeQueryOrderVo queryOrderDto, String memberId, String channelType) {
QueryOrdersDto queryOrdersDto = new QueryOrdersDto();
queryOrdersDto.setUserId(memberId);
queryOrdersDto.setCompanyId(queryOrderDto.getPartnerId());
queryOrdersDto.setPageSize(queryOrderDto.getPageSize() != null ? queryOrderDto.getPageSize() : 10);
queryOrdersDto.setPageNumber(queryOrderDto.getPageNumber() != null ? queryOrderDto.getPageNumber() : 1);
queryOrdersDto.setStartDate(queryOrderDto.getStartDate());
queryOrdersDto.setEndDate(queryOrderDto.getEndDate());
if(OrderChannelType.IWC.getCode().equals(channelType)) {
queryOrdersDto.setSource(new String[]{"meals"});
} else if(OrderChannelType.SAASMALL.getCode().equals(channelType)) {
queryOrdersDto.setSource(new String[]{"saasmall"});
} else if(OrderChannelType.APP.getCode().equals(channelType)){
queryOrdersDto.setSource(new String[]{"app"});
} else {
queryOrdersDto.setSource(new String[]{"saas"});
}
List<Integer> payStatus = Arrays.asList(PayStatus.HAVE_PAID.getCode(), PayStatus.HAVE_REFUND.getCode(), PayStatus.COMPLETE.getCode());
queryOrdersDto.setPayStatus((Integer[]) payStatus.toArray());
if (CollectionUtils.isNotEmpty(queryOrderDto.getQueryOrderStatus())) {
Set<Integer> setStatus =new HashSet<>();
if (queryOrderDto.getQueryOrderStatus().contains(QueryOrderStatus.ALL_BILL.getCode())) {
List<Integer> integers = Arrays.asList(OrderStatus.getAllCodes());
setStatus.addAll(integers);
}
if (queryOrderDto.getQueryOrderStatus().contains(QueryOrderStatus.TAKE_MEAL.getCode())) {
Integer[] statuses = new Integer[]{OrderStatus.TAKE_ORDER.getCode(), OrderStatus.RECEIPT.getCode(),
OrderStatus.DISTRIBUTION.getCode(), OrderStatus.COMPLETE_MAKE.getCode()};
List<Integer> integers = Arrays.asList(statuses);
setStatus.addAll(integers);
}
if (queryOrderDto.getQueryOrderStatus().contains(QueryOrderStatus.FINISH.getCode())) {
setStatus.add(OrderStatus.COMPLETE.getCode());
}
if (queryOrderDto.getQueryOrderStatus().contains(QueryOrderStatus.REFUND_BILL.getCode())) {
Integer[] statuses = new Integer[]{RefundStatus.APPLY_REFUND.getCode(), RefundStatus.AGREE_REFUND.getCode(), RefundStatus.COMPLETE_REFUND.getCode()};
queryOrdersDto.setRefundStatus(statuses);
}
if (queryOrderDto.getQueryOrderStatus().contains(QueryOrderStatus.NO_PAY.getCode())) {
queryOrdersDto.setPayStatus(new Integer[]{PayStatus.NOT_PAY.getCode()});
}
if (queryOrderDto.getQueryOrderStatus().contains(QueryOrderStatus.ORDER_CANCEL.getCode())) {
setStatus.add(OrderStatus.CALCEL.getCode());
}
queryOrdersDto.setStatus(setStatus.toArray(new Integer[setStatus.size()]));
}
// 兼容历史版本,如果传参是4 查询拆程4和5
if (CollectionUtils.isNotEmpty(queryOrderDto.getQueryOrderType()) ) {
Set<Integer> set =new HashSet<>();
if (queryOrderDto.getQueryOrderType().contains(OrderType.COLLECT_GOODS.getCode()) ){
set.add(OrderType.COLLECT_GOODS.getCode());
set.add(OrderType.EAT_IN.getCode());
}
if (queryOrderDto.getQueryOrderType().contains(OrderType.TAKE_OUT.getCode()) ){
set.add(OrderType.TAKE_OUT.getCode());
}
queryOrdersDto.setType(set.toArray(new Integer[set.size()]));
}
//商品订单和卖券订单
queryOrdersDto.setBizTypes(Arrays.asList(1,6));
return queryOrdersDto;
}
public List<QueryOrderResponseVo> convent2QueryOrderResponseVos(List<QueryOrdersResponse.DataBean.OrderBean> ordersBeans, String wxAppId, String iAppId) { public List<QueryOrderResponseVo> convent2QueryOrderResponseVos(List<QueryOrdersResponse.DataBean.OrderBean> ordersBeans, String wxAppId, String iAppId) {
if (CollectionUtils.isEmpty(ordersBeans)) { if (CollectionUtils.isEmpty(ordersBeans)) {
return Collections.emptyList(); return Collections.emptyList();
......
...@@ -132,8 +132,8 @@ public class OrderController { ...@@ -132,8 +132,8 @@ public class OrderController {
*/ */
@ApiAnnotation(logMessage = "maCafeQueryOrders") @ApiAnnotation(logMessage = "maCafeQueryOrders")
@PostMapping("/maCafeQueryOrders") @PostMapping("/maCafeQueryOrders")
public BaseResponse maCafeQueryOrders(@Validated @LogParams @RequestBody QueryOrderVo queryOrderVo) { public BaseResponse maCafeQueryOrders(@Validated @LogParams @RequestBody McCafeQueryOrderVo queryOrderVo) {
return orderservice.queryOrders(queryOrderVo); return orderservice.mcCafeQueryOrders(queryOrderVo);
} }
/** /**
......
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: QueryOrderVo
* @Package cn.freemud.entities.vo
* @Description:
* @author: liming.guo
* @date: 2018/5/22 17:35
* @version V1.0
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.entities.vo;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
import java.util.List;
@Data
public class McCafeQueryOrderVo {
@NotEmpty(message = "sessionId 不能为空")
private String sessionId;
/**
* 商户ID
*/
private String partnerId;
/**
* 订单ID
*/
private String oid;
/**
* 订单状态 enum queryOrderStatus 全部订单 1 待取餐 2 已完成 3 全部 4.退款,5 待支付 ,6 已取消
*/
private List<Integer> queryOrderStatus;
/**
* 查询订单状态 1 外卖 4 门店自提
*/
private List<Integer> queryOrderType;
/**
* 每页显示几条数据
*/
private Integer pageSize;
/**
* 第几页
*/
private Integer pageNumber;
private String startDate;
private String endDate;
/**
* 渠道信息 saas; img; iwc; saasmall
*/
private String channelType;
}
...@@ -13,7 +13,9 @@ ...@@ -13,7 +13,9 @@
package cn.freemud.enums; package cn.freemud.enums;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List; import java.util.List;
public enum OrderType { public enum OrderType {
...@@ -53,6 +55,21 @@ public enum OrderType { ...@@ -53,6 +55,21 @@ public enum OrderType {
return null; return null;
} }
public static List getByCode(List<Integer> list) {
List returnList = new ArrayList();
if (CollectionUtils.isEmpty(list)) {
return returnList;
}
for (OrderType orderType : values()) {
for (Integer code: list) {
if (orderType.getCode().equals(code)) {
returnList.add(code);
}
}
}
return returnList;
}
public Integer getCode() { public Integer getCode() {
return code; return code;
} }
......
...@@ -123,4 +123,5 @@ public interface Orderservice { ...@@ -123,4 +123,5 @@ public interface Orderservice {
BaseResponse mcCafeQueryOrderById(MaCafeQueryOrderVo queryOrderVo); BaseResponse mcCafeQueryOrderById(MaCafeQueryOrderVo queryOrderVo);
BaseResponse mcCafeQueryOrders(McCafeQueryOrderVo queryOrderVo);
} }
...@@ -125,13 +125,13 @@ import com.google.common.collect.Lists; ...@@ -125,13 +125,13 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.gson.Gson; import com.google.gson.Gson;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils; import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringBuilder;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
...@@ -818,6 +818,152 @@ public class OrderServiceImpl implements Orderservice { ...@@ -818,6 +818,152 @@ public class OrderServiceImpl implements Orderservice {
return ResponseUtil.success(responseMap); 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.queryOrders(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);
}
}
});
}
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);
}
private String getRedpacketsPicture(String activityId) { private String getRedpacketsPicture(String activityId) {
if (StringUtils.isNotBlank(activityId)) { if (StringUtils.isNotBlank(activityId)) {
try { try {
......
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