Commit 0e06325a by 邓杰

Merge branch '20201125-coco-zhw' into 20201127_coco配送进程

parents 423da567 22b05626
...@@ -196,6 +196,7 @@ public class QueryOrdersResponse { ...@@ -196,6 +196,7 @@ public class QueryOrdersResponse {
* 支付凭证 非码流水ID * 支付凭证 非码流水ID
*/ */
private String payVoucher; private String payVoucher;
/** /**
* 手机号 * 手机号
*/ */
......
...@@ -66,6 +66,13 @@ public class OrderPayResponse { ...@@ -66,6 +66,13 @@ public class OrderPayResponse {
private String payMode; private String payMode;
private List<PayItem> payItem = new ArrayList<>(); private List<PayItem> payItem = new ArrayList<>();
// 回调地址
private String payNotifyUrl;
//商户id
private String sellerId;
// 支付类型:机场支付=20099
private String ebCode;
@NoArgsConstructor @NoArgsConstructor
@Data @Data
public static class PayOrderBean { public static class PayOrderBean {
...@@ -97,6 +104,8 @@ public class OrderPayResponse { ...@@ -97,6 +104,8 @@ public class OrderPayResponse {
private String signType; private String signType;
private String aliPayOrder; private String aliPayOrder;
} }
} }
...@@ -2881,6 +2881,15 @@ public class OrderAdapter { ...@@ -2881,6 +2881,15 @@ public class OrderAdapter {
payBean.setTimestamp(payOrderBean.getTimestamp()); payBean.setTimestamp(payOrderBean.getTimestamp());
payBean.setAliPayOrder(payOrderBean.getAliPayOrder()); payBean.setAliPayOrder(payOrderBean.getAliPayOrder());
responseDto.setPayOrder(payBean); responseDto.setPayOrder(payBean);
// coco 机场支付
try {
JSONObject jsonObject = JSONObject.parseObject(payOrderBean.getAliPayOrder());
responseDto.setSellerId(jsonObject.getString("sellerId"));
responseDto.setPayNotifyUrl(jsonObject.getString("payNotifyUrl"));
responseDto.setEbCode(jsonObject.getString("ebCode"));
}catch (Exception e){
}
} }
responseDto.setStatusCode(unifiedOrderResponse.getStatusCode()); responseDto.setStatusCode(unifiedOrderResponse.getStatusCode());
responseDto.setPayTransId(unifiedOrderResponse.getPayTransId()); responseDto.setPayTransId(unifiedOrderResponse.getPayTransId());
......
...@@ -5,8 +5,12 @@ import cn.freemud.base.entity.BaseResponse; ...@@ -5,8 +5,12 @@ import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.TakeMealNoticesVO; import cn.freemud.entities.vo.TakeMealNoticesVO;
import cn.freemud.service.CallerService; import cn.freemud.service.CallerService;
import cn.freemud.utils.ResponseUtil; import cn.freemud.utils.ResponseUtil;
import com.freemud.application.sdk.api.log.ApiAnnotation;
import com.freemud.application.sdk.api.log.LogParams;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated; 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.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
...@@ -14,7 +18,7 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -14,7 +18,7 @@ import org.springframework.web.bind.annotation.RestController;
* 叫号器 * 叫号器
*/ */
@Slf4j @Slf4j
@RequestMapping("/caller") @RequestMapping("order/caller")
@RestController @RestController
@Validated @Validated
public class CallerController { public class CallerController {
...@@ -29,7 +33,9 @@ private CallerService callerService; ...@@ -29,7 +33,9 @@ private CallerService callerService;
* 取餐通知 * 取餐通知
* @return * @return
*/ */
public BaseResponse takeMealNotices(TakeMealNoticesVO vo){ @PostMapping("/takeMealNotices")
@ApiAnnotation(logMessage = "takeMealNotices")
public BaseResponse takeMealNotices(@Validated @LogParams @RequestBody TakeMealNoticesVO vo){
return callerService.takeMealNotices(vo); return callerService.takeMealNotices(vo);
} }
......
...@@ -10,27 +10,49 @@ import java.util.List; ...@@ -10,27 +10,49 @@ import java.util.List;
public class SubscribeMessageRequest { public class SubscribeMessageRequest {
/**
* 预约单下单成功通知
*/
private BookingOrderPayedScene bookingOrderPayedScene; private BookingOrderPayedScene bookingOrderPayedScene;
/**
* 预约单取单提醒
*/
private BookingOrderPayedScene bookingOrderTakeReminderScene; private BookingOrderPayedScene bookingOrderTakeReminderScene;
/** /**
* 渠道 * 渠道
* 1 微信小程序
* 2 支付宝小程序
* 3 手机app
* 4 线下应用
* 5 字节小程序
* 6 h5
*/ */
private Integer channel; private Integer channel =1;
/** /**
* * 配送异常提醒
*/ */
private String scene;
private DeliveryErrorReminder deliveryErrorReminder; private DeliveryErrorReminder deliveryErrorReminder;
/**拼单提醒
*
*/
private GroupBuyingStatusReminder groupBuyingStatusReminder; private GroupBuyingStatusReminder groupBuyingStatusReminder;
/**
* 即时单下单成功通知
*/
private InstantOrderPayedScene instantOrderPayedScene; private InstantOrderPayedScene instantOrderPayedScene;
/**
* 即时单取餐通知
*/
private InstantOrderPayedScene instantOrderTakeReminderScene; private InstantOrderPayedScene instantOrderTakeReminderScene;
/**
*
*/
private String messageEventType; private String messageEventType;
/** /**
...@@ -43,10 +65,23 @@ public class SubscribeMessageRequest { ...@@ -43,10 +65,23 @@ public class SubscribeMessageRequest {
*/ */
private List<String> openIdList; private List<String> openIdList;
/**
*自配送配送通知
*/
private OrderDeliveryScene orderDeliveryScene; private OrderDeliveryScene orderDeliveryScene;
/**
*
*/
private SceneCouponRequest sceneCouponExpiredRequest; private SceneCouponRequest sceneCouponExpiredRequest;
/**
* //即时单scene_instant
* //预约单:scene_appoint
* //自配送单:scene_self_delivery
* //拼单提醒:scene_group_buying
*/
private String scene;
private SceneCouponRequest sceneCouponReceiveRequest; private SceneCouponRequest sceneCouponReceiveRequest;
private SceneInviteGiftRequest sceneInviteGiftRequest; private SceneInviteGiftRequest sceneInviteGiftRequest;
......
...@@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModelProperty; ...@@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import java.util.List;
/** /**
* @author freemud * @author freemud
*/ */
...@@ -25,5 +27,5 @@ public class TakeMealNoticesVO { ...@@ -25,5 +27,5 @@ public class TakeMealNoticesVO {
private Integer cupTotalNum; private Integer cupTotalNum;
@ApiModelProperty(value = "订单") @ApiModelProperty(value = "订单")
private String[] orders; private List<String> orderList;
} }
package cn.freemud.enums;
import lombok.Getter;
@Getter
public enum MessageEventTypeEnum {
INSTANT_ORDER_PAYED(30, "INSTANT_ORDER_PAYED", "即时单下单成功通知"),
BOOKING_ORDER_PAYED(31, "BOOKING_ORDER_PAYED", "预约单下单成功通知"),
SELF_DELIVERY_ORDER_PAYED(32, "SELF_DELIVERY_ORDER_PAYED", "自配送下单成功通知"),
ORDER_DELIVERY(33, "ORDER_DELIVERY", "订单配送通知"),
BOOKING_ORDER_TAKE_REMINDER(34, "BOOKING_ORDER_TAKE_REMINDER", "预约单取单通知"),
INSTANT_ORDER_TAKE_REMINDER(35, "INSTANT_ORDER_TAKE_REMINDER", "即时单取单通知"),
GROUP_BUYING_STATUS_REMINDER(36, "GROUP_BUYING_STATUS_REMINDER", "拼单提醒"),
DELIVERY_ERROR_REMINDER(37, "DELIVERY_ERROR_REMINDER", "配送异常提醒"),
;
private int code;
private String type;
private String name;
MessageEventTypeEnum(int code, String type,String name) {
this.code = code;
this.type = type;
this.name = name;
}
}
...@@ -164,6 +164,7 @@ public enum ResponseResult { ...@@ -164,6 +164,7 @@ public enum ResponseResult {
ORDER_CANCEL_ERROR_EXPECT_TIME("45067", "预约时间还剩15分钟,无法取消"), ORDER_CANCEL_ERROR_EXPECT_TIME("45067", "预约时间还剩15分钟,无法取消"),
ORDER_CANCEL_ERROR_ESTIMATE_TIME("45068", "预计送达还剩30分钟,无法取消"), ORDER_CANCEL_ERROR_ESTIMATE_TIME("45068", "预计送达还剩30分钟,无法取消"),
STORE_SELF_ERROR("45069", "请选择截止营业时间大于45分钟下单"),
/** /**
......
package cn.freemud.service; package cn.freemud.service;
import cn.freemud.amp.body.OrderBody;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.base.log.LogTreadLocal;
import cn.freemud.base.util.DateUtil;
import cn.freemud.constant.RedisKeyConstant; import cn.freemud.constant.RedisKeyConstant;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.dto.GetMemberInfoByIdRequestDto;
import cn.freemud.entities.dto.GetMemberInfoByIdResponseDto;
import cn.freemud.entities.dto.ecology.BookingOrderPayedScene;
import cn.freemud.entities.dto.ecology.InstantOrderPayedScene;
import cn.freemud.entities.dto.ecology.SubscribeMessageRequest;
import cn.freemud.entities.dto.ecology.SubscribeMessageResponse;
import cn.freemud.entities.vo.TakeMealNoticesVO; import cn.freemud.entities.vo.TakeMealNoticesVO;
import cn.freemud.enums.MessageEventTypeEnum;
import cn.freemud.service.impl.CheckOrder;
import cn.freemud.service.thirdparty.CustomerClient;
import cn.freemud.service.thirdparty.EcologyAdminApplicationClient;
import cn.freemud.utils.DateTimeUtil;
import cn.freemud.utils.ResponseUtil; import cn.freemud.utils.ResponseUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.freemud.sdk.api.assortment.order.enums.NewOrderType;
import com.freemud.sdk.api.assortment.order.request.order.BaseQueryOrderRequest;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrderByIdResponse;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import com.freemud.sdk.api.assortment.order.service.OrderCenterSdkService;
import com.google.common.collect.Lists;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@AllArgsConstructor
@Service @Service
@Slf4j
public class CallerService { public class CallerService {
@Autowired private final RedisTemplate redisTemplate;
private RedisTemplate redisTemplate; private final EcologyAdminApplicationClient ecologyAdminApplicationClient;
private final OrderCenterSdkService orderCenterSdkService;
private final CheckOrder checkOrder;
/** /**
* 缓存 待制作杯数量 * 缓存 待制作杯数量
*
* @param vo * @param vo
*/ */
private void cacheTakeMealNotices(TakeMealNoticesVO vo){ private void cacheTakeMealNotices(TakeMealNoticesVO vo) {
String redisKey = RedisKeyConstant.notMadeGoodsNumber(vo.getPartnerId(), vo.getStoreCode()); String redisKey = RedisKeyConstant.notMadeGoodsNumber(vo.getPartnerId(), vo.getStoreCode());
redisTemplate.boundValueOps(redisKey).set(vo.getCupTotalNum(),1, TimeUnit.DAYS); redisTemplate.boundValueOps(redisKey).set(vo.getCupTotalNum(), 1, TimeUnit.DAYS);
}
/**
* pos -> 推送模板消息
* 即时单
* 预约单
*
* @param vo
* @return
*/
public BaseResponse takeMealNotices(TakeMealNoticesVO vo) {
cacheTakeMealNotices(vo);
if (Objects.isNull(vo.getOrderList())) {
return ResponseUtil.success();
}
vo.getOrderList().stream().forEach(orderId -> {
BaseQueryOrderRequest baseQueryOrderRequest = new BaseQueryOrderRequest();
baseQueryOrderRequest.setOrderId(orderId);
baseQueryOrderRequest.setTrackingNo(LogTreadLocal.getTrackingNo());
QueryOrderByIdResponse queryOrderByIdResponse = orderCenterSdkService.queryOrderById(baseQueryOrderRequest);
QueryOrdersResponse.DataBean.OrderBean orderBean = queryOrderByIdResponse.getData();
if (Objects.isNull(orderBean)) {
return;
}
OrderExtInfoDto extInfoDto = JSONObject.parseObject(orderBean.getExtInfo(), new TypeReference<OrderExtInfoDto>() {
});
if (Objects.isNull(extInfoDto.getOpenid())) {
log.error("订单号:{},没有openId", orderId);
return;
}
StoreResponse storeResponse = checkOrder.getStoreInfo(orderBean.getCompanyId(), orderBean.getShopId(), LogTreadLocal.getTrackingNo());
if (storeResponse.getBizVO() == null) {
log.error("订单号:{},商户号:{},没有门店信息", orderId, orderBean.getShopId());
return;
}
List<Integer> takeawayOrderType = Lists.newArrayList(
NewOrderType.RESERVED_EXPRESS.getCode(),
NewOrderType.GENERAL_EXPRESS.getCode());
if (takeawayOrderType.contains(orderBean.getNewOrderType())) {
// 外卖单不发模板消息
return;
}
orderBean.setShopAddress(storeResponse.getBizVO().getAddress());
SubscribeMessageRequest subscribeMessageRequest = new SubscribeMessageRequest();
subscribeMessageRequest.setMiniAppId(extInfoDto.getAppid());
subscribeMessageRequest.setOpenIdList(Lists.newArrayList(extInfoDto.getOpenid()));
// coco order_client 2微信小程序 3支付宝小程序 需要转换生态的
subscribeMessageRequest.setChannel(orderBean.getOrderClient().equals("2") ? 1 : 2);
boolean reservationOrder = isReservationOrder(orderBean);
if (reservationOrder) {
//预约单
BookingOrderPayedScene scene = new BookingOrderPayedScene();
scene.setMerchantAddress(orderBean.getShopAddress());
scene.setMerchantName(orderBean.getShopName());
scene.setOrderNo(orderId);
scene.setOrderType(orderBean.getNewOrderType().toString());
scene.setTakeOrderTime(DateTimeUtil.getCurrentTimeStr());
subscribeMessageRequest.setBookingOrderTakeReminderScene(scene);
subscribeMessageRequest.setScene("scene_appoint");
subscribeMessageRequest.setMessageEventType(MessageEventTypeEnum.BOOKING_ORDER_TAKE_REMINDER.getType());
} else {
InstantOrderPayedScene scene = new InstantOrderPayedScene();
scene.setFriendlyTips("饮品已制作完成,请凭取单号及时到店取单哟!");
scene.setOrderType(orderBean.getNewOrderType().toString());
scene.setMerchantAddress(orderBean.getShopAddress());
scene.setMerchantName(orderBean.getShopName());
scene.setOrderNo(orderId);
subscribeMessageRequest.setInstantOrderTakeReminderScene(scene);
subscribeMessageRequest.setScene("scene_instant");
subscribeMessageRequest.setMessageEventType(MessageEventTypeEnum.INSTANT_ORDER_TAKE_REMINDER.getType());
}
//发送模板消息
SubscribeMessageResponse subscribeMessageResponse = ecologyAdminApplicationClient.subscribeMessage(subscribeMessageRequest);
if (!ResponseCodeConstant.RESPONSE_SUCCESS.equals(subscribeMessageResponse.getCode())) {
log.error("ecologyAdminApplicationClient.subscribeMessage调用失败 ,request:{},body:{}", JSON.toJSONString(subscribeMessageResponse),
JSON.toJSONString(subscribeMessageRequest));
}
});
return ResponseUtil.success();
} }
public BaseResponse takeMealNotices(TakeMealNoticesVO vo){ /**
cacheTakeMealNotices(vo); * 是否预约单
//发送取餐通知消息 cc 生态 * true 预约单
return ResponseUtil.success(); *
* @return
*/
private boolean isReservationOrder(QueryOrdersResponse.DataBean.OrderBean orderBean) {
if (Objects.nonNull(orderBean.getGmtExpect())) {
return Boolean.TRUE;
}
return Boolean.FALSE;
} }
} }
...@@ -56,12 +56,14 @@ import com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest; ...@@ -56,12 +56,14 @@ import com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest;
import com.freemud.application.sdk.api.storecenter.response.QueryDeliverDetailResponse; import com.freemud.application.sdk.api.storecenter.response.QueryDeliverDetailResponse;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse; import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.freemud.application.sdk.api.storecenter.service.StoreCenterService; import com.freemud.application.sdk.api.storecenter.service.StoreCenterService;
import com.freemud.sdk.api.assortment.order.enums.NewOrderType;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.gson.Gson; import com.google.gson.Gson;
import lombok.extern.log4j.Log4j; import lombok.extern.log4j.Log4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
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.time.DateUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -104,7 +106,7 @@ public class CheckOrder { ...@@ -104,7 +106,7 @@ public class CheckOrder {
private MemberPropertyService memberPropertyService; private MemberPropertyService memberPropertyService;
@Autowired @Autowired
private ShoppingCartClient shoppingCartClient; private ShoppingCartClient shoppingCartClient;
// @Autowired // @Autowired
// private OrderAdapter orderAdapter; // private OrderAdapter orderAdapter;
@Autowired @Autowired
private StoreServiceImpl storeService; private StoreServiceImpl storeService;
...@@ -123,6 +125,7 @@ public class CheckOrder { ...@@ -123,6 +125,7 @@ public class CheckOrder {
@Value("${coco.partnerId}") @Value("${coco.partnerId}")
private String cocoPartnerId; private String cocoPartnerId;
/** /**
* 下单会员相关校验 * 下单会员相关校验
*/ */
...@@ -174,8 +177,8 @@ public class CheckOrder { ...@@ -174,8 +177,8 @@ public class CheckOrder {
throw new ServiceException(ResponseResult.STORE_NOT_FOUND); throw new ServiceException(ResponseResult.STORE_NOT_FOUND);
} }
//订单预约单检查 //订单预约单检查
OrderCheckAdapter.check(createOrderVo, storeResponse);
OrderCheckAdapter.check(createOrderVo, storeResponse);
StoreResponse.BizVO storeResponseDto = storeResponse.getBizVO(); StoreResponse.BizVO storeResponseDto = storeResponse.getBizVO();
// 校验门店是否停业 1 营业 2 停业 3 繁忙置休 // 校验门店是否停业 1 营业 2 停业 3 繁忙置休
if (storeResponseDto.getActiveFlag() == null || storeResponseDto.getActiveFlag() != 1) { if (storeResponseDto.getActiveFlag() == null || storeResponseDto.getActiveFlag() != 1) {
...@@ -258,6 +261,23 @@ public class CheckOrder { ...@@ -258,6 +261,23 @@ public class CheckOrder {
} else { } else {
storeDeliveryInfoDto = getNewStoreDeliveryInfo(storeResponseDto, config, appId, trackingNo); storeDeliveryInfoDto = getNewStoreDeliveryInfo(storeResponseDto, config, appId, trackingNo);
} }
//coco自配送提前45分钟,禁止下单
if (cocoPartnerId.equals(createOrderVo.getPartnerId()) &&
CreateOrderType.TAKE_OUT.getCode().equals(createOrderVo.getOrderType()) &&
"self".equals(storeDeliveryInfoDto.getDeliveryType())
) {
//即时单是下单时间,预约单是预约单时间
Date orderDate = createOrderVo.getExpectTime() != null
? DateUtil.convert2Date(createOrderVo.getExpectTime(), DateUtil.FORMAT_YYYY_MM_DD_HHMMSS)
: new Date();
Date todayEnd = DateUtil.setEndDay(new Date());
boolean toDay = orderDate.before(todayEnd);
BusinessDate businessDate = getStoreBusinessDate(storeResponseDto, toDay);
boolean businessEndDate = (DateUtils.addMinutes(orderDate, 45).compareTo(businessDate.getEndDate()) >= 0);
if (businessEndDate) {
throw new ServiceException(ResponseResult.STORE_SELF_ERROR);
}
}
//todo : 这里不再支持从表中获取门店配送信息 改用接口方式调用 //todo : 这里不再支持从表中获取门店配送信息 改用接口方式调用
//外卖起送条件(1:杯数,2:金额) //外卖起送条件(1:杯数,2:金额)
if (!Arrays.asList(1, 2).contains(storeDeliveryInfoDto.getDeliveryCondition())) { if (!Arrays.asList(1, 2).contains(storeDeliveryInfoDto.getDeliveryCondition())) {
...@@ -281,6 +301,22 @@ public class CheckOrder { ...@@ -281,6 +301,22 @@ public class CheckOrder {
return pushOrderTime; return pushOrderTime;
} }
/**
* 获取门店营业时间
*
* @param storeResponseDto
* @param toDay true 今日,false 明天
* @return
*/
private BusinessDate getStoreBusinessDate(StoreResponse.BizVO storeResponseDto, boolean toDay) {
List<String> todayBusinessTimes = storeCenterService.getTodayBusinessTime(Integer.parseInt(storeResponseDto.getBusinessType()), storeResponseDto.getBusinessHoursDay());
if (CollectionUtils.isEmpty(todayBusinessTimes)) {
throw new ServiceException(ResponseResult.STORE_BUSINESS_HOUR_ERROR);
}
BusinessDate businessDate = getStoreBusinessDate(todayBusinessTimes.get(todayBusinessTimes.size() - 1), toDay);
return businessDate;
}
public void checkOrderExpectTime(CreateOrderVo createOrderVo, StoreResponse.BizVO storeResponseDto, Date takeMealDateTime) { public void checkOrderExpectTime(CreateOrderVo createOrderVo, StoreResponse.BizVO storeResponseDto, Date takeMealDateTime) {
if (takeMealDateTime == null) { if (takeMealDateTime == null) {
return; return;
...@@ -575,19 +611,19 @@ public class CheckOrder { ...@@ -575,19 +611,19 @@ public class CheckOrder {
storeDeliveryInfoDto.setPushOrderTime(0); storeDeliveryInfoDto.setPushOrderTime(0);
} else { } else {
//如果是coco查询配送服务判断是平台配送还是自配送 //如果是coco查询配送服务判断是平台配送还是自配送
if(cocoPartnerId.equals(storeResponseDto.getPartnerId())){ if (cocoPartnerId.equals(storeResponseDto.getPartnerId())) {
GetDeliveryFlagRequest getDeliveryFlagRequest = new GetDeliveryFlagRequest(); GetDeliveryFlagRequest getDeliveryFlagRequest = new GetDeliveryFlagRequest();
getDeliveryFlagRequest.setPartnerId(storeResponseDto.getPartnerId()); getDeliveryFlagRequest.setPartnerId(storeResponseDto.getPartnerId());
getDeliveryFlagRequest.setStoreId(storeResponseDto.getStoreId()); getDeliveryFlagRequest.setStoreId(storeResponseDto.getStoreId());
DeliveryBaseResponse<GetDeliveryFlagResponseDto> deliveryBaseResponse = deliveryFeiginClient.getThirdDeliveryFlag(getDeliveryFlagRequest); DeliveryBaseResponse<GetDeliveryFlagResponseDto> deliveryBaseResponse = deliveryFeiginClient.getThirdDeliveryFlag(getDeliveryFlagRequest);
if(deliveryBaseResponse.getCode() == 100 && deliveryBaseResponse.getData() != null && deliveryBaseResponse.getData().isThirdDeliveryFlag()){ if (deliveryBaseResponse.getCode() == 100 && deliveryBaseResponse.getData() != null && deliveryBaseResponse.getData().isThirdDeliveryFlag()) {
storeDeliveryInfoDto.setDeliveryType("third"); storeDeliveryInfoDto.setDeliveryType("third");
storeDeliveryInfoDto.setPushOrderTime(0); storeDeliveryInfoDto.setPushOrderTime(0);
}else { } else {
storeDeliveryInfoDto.setDeliveryType("self"); storeDeliveryInfoDto.setDeliveryType("self");
storeDeliveryInfoDto.setPushOrderTime(0); storeDeliveryInfoDto.setPushOrderTime(0);
} }
}else{ } else {
if (ObjectUtils.equals(openPlatformIappWxappConfig.getTakeType(), 1)) { if (ObjectUtils.equals(openPlatformIappWxappConfig.getTakeType(), 1)) {
storeDeliveryInfoDto.setDeliveryType("self"); storeDeliveryInfoDto.setDeliveryType("self");
storeDeliveryInfoDto.setPushOrderTime(0); storeDeliveryInfoDto.setPushOrderTime(0);
...@@ -643,19 +679,19 @@ public class CheckOrder { ...@@ -643,19 +679,19 @@ public class CheckOrder {
storeDeliveryInfoDto.setPushOrderTime(0); storeDeliveryInfoDto.setPushOrderTime(0);
} else { } else {
//如果是coco查询配送服务判断是平台配送还是自配送 //如果是coco查询配送服务判断是平台配送还是自配送
if(cocoPartnerId.equals(storeResponseDto.getPartnerId())){ if (cocoPartnerId.equals(storeResponseDto.getPartnerId())) {
GetDeliveryFlagRequest getDeliveryFlagRequest = new GetDeliveryFlagRequest(); GetDeliveryFlagRequest getDeliveryFlagRequest = new GetDeliveryFlagRequest();
getDeliveryFlagRequest.setPartnerId(storeResponseDto.getPartnerId()); getDeliveryFlagRequest.setPartnerId(storeResponseDto.getPartnerId());
getDeliveryFlagRequest.setStoreId(storeResponseDto.getStoreId()); getDeliveryFlagRequest.setStoreId(storeResponseDto.getStoreId());
DeliveryBaseResponse<GetDeliveryFlagResponseDto> deliveryBaseResponse = deliveryFeiginClient.getThirdDeliveryFlag(getDeliveryFlagRequest); DeliveryBaseResponse<GetDeliveryFlagResponseDto> deliveryBaseResponse = deliveryFeiginClient.getThirdDeliveryFlag(getDeliveryFlagRequest);
if(deliveryBaseResponse.getCode() == 100 && deliveryBaseResponse.getData() != null && deliveryBaseResponse.getData().isThirdDeliveryFlag()){ if (deliveryBaseResponse.getCode() == 100 && deliveryBaseResponse.getData() != null && deliveryBaseResponse.getData().isThirdDeliveryFlag()) {
storeDeliveryInfoDto.setDeliveryType("third"); storeDeliveryInfoDto.setDeliveryType("third");
storeDeliveryInfoDto.setPushOrderTime(0); storeDeliveryInfoDto.setPushOrderTime(0);
}else { } else {
storeDeliveryInfoDto.setDeliveryType("self"); storeDeliveryInfoDto.setDeliveryType("self");
storeDeliveryInfoDto.setPushOrderTime(0); storeDeliveryInfoDto.setPushOrderTime(0);
} }
}else{ } else {
if (ObjectUtils.equals(openPlatformIappWxappConfig.getTakeType(), 1)) { if (ObjectUtils.equals(openPlatformIappWxappConfig.getTakeType(), 1)) {
storeDeliveryInfoDto.setDeliveryType("self"); storeDeliveryInfoDto.setDeliveryType("self");
storeDeliveryInfoDto.setPushOrderTime(0); storeDeliveryInfoDto.setPushOrderTime(0);
......
...@@ -30,6 +30,14 @@ import cn.freemud.entities.dto.PayAccessResponse; ...@@ -30,6 +30,14 @@ import cn.freemud.entities.dto.PayAccessResponse;
import cn.freemud.entities.dto.QueryOrdersResponseDto.DataBean.OrderBean; import cn.freemud.entities.dto.QueryOrdersResponseDto.DataBean.OrderBean;
import cn.freemud.entities.dto.activity.PayGiftCheckAndJoinResponseDto; import cn.freemud.entities.dto.activity.PayGiftCheckAndJoinResponseDto;
import cn.freemud.entities.dto.activity.PayGitCheckAndJoinRequestDto; import cn.freemud.entities.dto.activity.PayGitCheckAndJoinRequestDto;
import cn.freemud.entities.dto.delivery.OrderRemindRequestDto;
import cn.freemud.entities.dto.delivery.QueryDeliveryAmountResponseDto;
import cn.freemud.entities.dto.delivery.QueryLocusRiderTrackDto;
import cn.freemud.entities.dto.delivery.ResRiderTrackDto;
import cn.freemud.entities.dto.ecology.BookingOrderPayedScene;
import cn.freemud.entities.dto.ecology.InstantOrderPayedScene;
import cn.freemud.entities.dto.ecology.SubscribeMessageRequest;
import cn.freemud.entities.dto.ecology.SubscribeMessageResponse;
import cn.freemud.entities.dto.delivery.*; import cn.freemud.entities.dto.delivery.*;
import cn.freemud.entities.dto.order.CreateOrderOperateDto; import cn.freemud.entities.dto.order.CreateOrderOperateDto;
import cn.freemud.entities.dto.order.CreatePrepayRequestDto; import cn.freemud.entities.dto.order.CreatePrepayRequestDto;
...@@ -53,6 +61,7 @@ import cn.freemud.utils.*; ...@@ -53,6 +61,7 @@ import cn.freemud.utils.*;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.freemud.api.assortment.datamanager.entity.db.*; import com.freemud.api.assortment.datamanager.entity.db.*;
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo; import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
import com.freemud.api.assortment.datamanager.manager.*; import com.freemud.api.assortment.datamanager.manager.*;
...@@ -263,9 +272,14 @@ public class OrderServiceImpl implements Orderservice { ...@@ -263,9 +272,14 @@ public class OrderServiceImpl implements Orderservice {
private ComPayClient comPayClient; private ComPayClient comPayClient;
@Autowired @Autowired
private AssortmentOpenPlatformIappWxappStoreManager assortmentOpenPlatformIappWxappStoreManager; private AssortmentOpenPlatformIappWxappStoreManager assortmentOpenPlatformIappWxappStoreManager;
@Autowired
private EcologyAdminApplicationClient ecologyAdminApplicationClient;
@Value("${coco.partnerId}") /**
private String partnerId; * coco商户
*/
@Value("#{'${coco.partnerId}'.split(',')}")
private List<String> cocoPartnerId;
@Override @Override
public BaseResponse checkBeforeCreateOrder(CheckBeforeCreateOrderRequestVo requestVo) { public BaseResponse checkBeforeCreateOrder(CheckBeforeCreateOrderRequestVo requestVo) {
...@@ -1607,13 +1621,12 @@ public class OrderServiceImpl implements Orderservice { ...@@ -1607,13 +1621,12 @@ public class OrderServiceImpl implements Orderservice {
if (StringUtils.isEmpty(orderRefundVo.getReason())) { if (StringUtils.isEmpty(orderRefundVo.getReason())) {
orderRefundVo.setReason("退款"); orderRefundVo.setReason("退款");
} }
AssortmentCustomerInfoVo userInfo = null; AssortmentCustomerInfoVo userInfo = customerInfoManager.getCustomerInfoByObject(orderRefundVo.getSessionId());
/* AssortmentCustomerInfoVo userInfo = customerInfoManager.getCustomerInfoByObject(orderRefundVo.getSessionId());
if (userInfo == null || StringUtils.isEmpty(userInfo.getMemberId())) { if (userInfo == null || StringUtils.isEmpty(userInfo.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN); return ResponseUtil.error(ResponseResult.NOT_LOGIN);
}*/ }
/* String memberId = userInfo.getMemberId(); String memberId = userInfo.getMemberId();
String partnerId = userInfo.getPartnerId();*/ String partnerId = userInfo.getPartnerId();
if (StringUtils.isBlank(orderRefundVo.getOid())) { if (StringUtils.isBlank(orderRefundVo.getOid())) {
return ResponseUtil.error(ResponseResult.PARAMETER_MISSING.getCode(), "oid不能为空"); return ResponseUtil.error(ResponseResult.PARAMETER_MISSING.getCode(), "oid不能为空");
...@@ -1631,26 +1644,34 @@ public class OrderServiceImpl implements Orderservice { ...@@ -1631,26 +1644,34 @@ public class OrderServiceImpl implements Orderservice {
if (!RESPONSE_SUCCESS_CODE.equals(orderByIdResponseDto.getErrcode()) || orderByIdResponseDto.getData() == null) { if (!RESPONSE_SUCCESS_CODE.equals(orderByIdResponseDto.getErrcode()) || orderByIdResponseDto.getData() == null) {
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR.getCode(), "订单信息不存在"); return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR.getCode(), "订单信息不存在");
} }
/* if (!memberId.equals(orderByIdResponseDto.getData().getUserId())) { if (!memberId.equals(orderByIdResponseDto.getData().getUserId())) {
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR.getCode(), "不能操作非本人的订单"); return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR.getCode(), "不能操作非本人的订单");
}*/ }
OrderBean orderBean = orderByIdResponseDto.getData(); OrderBean orderBean = orderByIdResponseDto.getData();
if (PayStatus.NOT_PAY.getCode().equals(orderByIdResponseDto.getData().getPayStatus())
|| OrderStatus.WAIT_PAY.getCode().equals(orderBean.getStatus())) {
return ResponseUtil.error(ResponseResult.ORDER__ERRORREFUND.getCode(), "订单未支付,无法退款");
}
if (OrderStatus.CALCEL.getCode().equals(orderBean.getStatus())) {
return ResponseUtil.error(ResponseResult.ORDER__ERRORREFUND.getCode(), "订单已取消,无法退款");
}
if (OrderStatus.DISTRIBUTION.getCode().equals(orderBean.getStatus())) {
return ResponseUtil.error(ResponseResult.ORDER__ERRORREFUND.getCode(), "订单配送中,退款请联系售后!");
}
// todo coco 商户校验 // todo coco 商户校验
if (partnerId.equals(orderByIdResponseDto.getData().getCompanyId())) { if (cocoPartnerId.contains(orderByIdResponseDto.getData().getCompanyId())) {
// COCO 即时单不可取消 // COCO 即时单不可取消
if ( NewOrderType.GENERAL_SELF_PICKUP.getCode().equals(queryOrderByIdResponse.getData().getNewOrderType())) { if ( NewOrderType.GENERAL_SELF_PICKUP.getCode().equals(queryOrderByIdResponse.getData().getNewOrderType())) {
return ResponseUtil.error(ResponseResult.ORDER_CANCEL_ERROR); return ResponseUtil.error(ResponseResult.ORDER__ERRORREFUND);
} }
// 4,6 预约单 // 4,6 预约单
List<Integer> expectOrderType = Lists.newArrayList( List<Integer> expectOrderType = Lists.newArrayList(
NewOrderType.RESERVED_EXPRESS.getCode(), NewOrderType.RESERVED_EXPRESS.getCode(),
NewOrderType.RESERVED_SELF_PICKUP.getCode()); NewOrderType.RESERVED_SELF_PICKUP.getCode());
long time = DateUtil.addMinutes(new Date(), 15).getTime(); long time = DateUtil.addMinutes(new Date(), 15).getTime();
if (expectOrderType.contains(queryOrderByIdResponse.getData().getNewOrderType())
&& Objects.nonNull(orderBean.getGmtExpect())
&& time > orderBean.getGmtExpect()) {
return ResponseUtil.error(ResponseResult.ORDER_CANCEL_ERROR_EXPECT_TIME);
}
// 外卖单 // 外卖单
List<Integer> takeOrderType = Lists.newArrayList( List<Integer> takeOrderType = Lists.newArrayList(
NewOrderType.RESERVED_EXPRESS.getCode(), NewOrderType.RESERVED_EXPRESS.getCode(),
...@@ -1661,19 +1682,22 @@ public class OrderServiceImpl implements Orderservice { ...@@ -1661,19 +1682,22 @@ public class OrderServiceImpl implements Orderservice {
&& taskCancelOrderTime > queryOrderByIdResponse.getData().getEstimateDeliveryCompleteTime()) { && taskCancelOrderTime > queryOrderByIdResponse.getData().getEstimateDeliveryCompleteTime()) {
return ResponseUtil.error(ResponseResult.ORDER_CANCEL_ERROR_ESTIMATE_TIME); return ResponseUtil.error(ResponseResult.ORDER_CANCEL_ERROR_ESTIMATE_TIME);
} }
} if (expectOrderType.contains(queryOrderByIdResponse.getData().getNewOrderType())){
if (PayStatus.NOT_PAY.getCode().equals(orderByIdResponseDto.getData().getPayStatus()) if (Objects.nonNull(orderBean.getGmtExpect())
|| OrderStatus.WAIT_PAY.getCode().equals(orderBean.getStatus())) { && time > orderBean.getGmtExpect()) {
return ResponseUtil.error(ResponseResult.ORDER__ERRORREFUND.getCode(), "订单未支付,无法退款"); return ResponseUtil.error(ResponseResult.ORDER_CANCEL_ERROR_EXPECT_TIME);
} }
if (OrderStatus.CALCEL.getCode().equals(orderBean.getStatus())) { // todo coco 预约单直接退款
return ResponseUtil.error(ResponseResult.ORDER__ERRORREFUND.getCode(), "订单已取消,无法退款"); BaseResponse baseResponse = partnerNoTakeOrder(orderRefundVo, orderBean, orderId, AfterSalesType.USER_CANCEL, true);
} if (baseResponse != null) {
if (OrderStatus.DISTRIBUTION.getCode().equals(orderBean.getStatus())) { return baseResponse;
return ResponseUtil.error(ResponseResult.ORDER__ERRORREFUND.getCode(), "订单配送中,退款请联系售后!"); }
} // 删除订单 通知活动添加商品库存
backOrdersStatusChange(orderBean.getOid(), orderBean.getStatus(), orderBean.getPayStatus());
return ResponseUtil.success();
}
}
/** /**
* 已接单,制作完成,配送中,未接单,用户可申请退款 * 已接单,制作完成,配送中,未接单,用户可申请退款
* *
...@@ -2089,13 +2113,13 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2089,13 +2113,13 @@ public class OrderServiceImpl implements Orderservice {
*/ */
private void sendMessage(QueryOrdersResponseDto.DataBean.OrderBean orderBean, MessageEventType messageEventType) { private void sendMessage(QueryOrdersResponseDto.DataBean.OrderBean orderBean, MessageEventType messageEventType) {
MessageTemplateRequest<MessagePushOrderTemplateRequest> messageTemplateRequest = null; MessageTemplateRequest<MessagePushOrderTemplateRequest> messageTemplateRequest = null;
try { try {
messageTemplateRequest = messageNoticeAdapter.convent2MessageTemplateRequest(orderBean); messageTemplateRequest = messageNoticeAdapter.convent2MessageTemplateRequest(orderBean);
messageTemplateRequest.setMessageEventType(messageEventType); messageTemplateRequest.setMessageEventType(messageEventType);
this.messageTemplatePushService.sendTemplateMsg(messageTemplateRequest); this.messageTemplatePushService.sendTemplateMsg(messageTemplateRequest);
} catch (Exception e) { } catch (Exception e) {
LogUtil.error("sendTemplateMsg_error", JSONObject.toJSONString(orderBean), JSONObject.toJSONString(messageTemplateRequest), e); LogUtil.error("sendTemplateMsg_error", JSONObject.toJSONString(orderBean), JSONObject.toJSONString(messageTemplateRequest), e);
} }
} }
......
...@@ -30,7 +30,7 @@ public interface EcologyAdminApplicationClient { ...@@ -30,7 +30,7 @@ public interface EcologyAdminApplicationClient {
@PostMapping(value = "/ecology/api/getAuthorizerAccessToken") @PostMapping(value = "/ecology/api/getAuthorizerAccessToken")
GetTokenResponseDto getAuthorizerAccessToken(@RequestBody GetAuthorizerRequestDto request); GetTokenResponseDto getAuthorizerAccessToken(@RequestBody GetAuthorizerRequestDto request);
@PostMapping(value = "/ecology/api/subscribeMessage/send") @PostMapping(value = "/ecology/api/subscribeMessage/send")
SubscribeMessageResponse subscribeMessage(SubscribeMessageRequest request); SubscribeMessageResponse subscribeMessage(SubscribeMessageRequest request);
} }
package cn.freemud.utils;
import cn.freemud.base.util.DateUtil;
import org.apache.commons.lang.time.DateUtils;
import org.junit.Test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateUtilsTest {
@Test
public void testDateCompare() throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date1 = sdf.parse("2020-12-30 00:00:00");
Date date2 = sdf.parse("2020-12-14 11:50:00");
System.out.println("date1 : " + sdf.format(date1));
System.out.println("date2 : " + sdf.format(date2));
System.out.println(date1.compareTo(date2));
if (date1.compareTo(date2) > 0) {
System.out.println("Date1 时间在 Date2 之后");
} else if (date1.compareTo(date2) < 0) {
System.out.println("Date1 时间在 Date2 之前");
} else if (date1.compareTo(date2) == 0) {
System.out.println("Date1 时间与 Date2 相等");
} else {
System.out.println("程序怎么会运行到这里?正常应该不会");
}
boolean x =(DateUtils.addMinutes(new Date(), 45).compareTo(date2) <= 0);
System.out.println(x);
}
@Test
public void testBefore() throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date1 = sdf.parse("2020-12-30 00:00:00");
Date date = DateUtil.setEndDay(new Date());
String s = DateUtil.convert2String(date, "yyyy-MM-dd HH:mm:ss");
System.out.println(date.before(date1));
}
}
package cn.freemud.amp.service;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
@Setter
@Getter
public class AuditScoreAccount {
/**
* 账本主键ID
*/
private String accountId;
private String partnerId;
private String memberId;
/**
* 账本状态{1可使用 2已使用}
*/
private Integer accountStatus;
/**
* 源积分值
*/
private Integer originScore;
/**
* 剩余积分值
*/
private Integer leftScore;
/**
* 到日日期{格式:yyyy-MM-dd}
*/
private String expireDate;
/*
所属机构类型{1总公司2分公司3门店}
*/
private Integer orgType;
/**
* 所属机构编码
*/
private String orgCode;
/**
* 所属机构类型{1总公司2分公司3门店}
*/
private Integer belongOrgType;
/**
* 所属机构编码
*/
private String belongOrgCode;
private Date createTime;
private Date updateTime;
/**
* 是否删除{0表示否 1表示是}
*/
private Integer isDel;
@Override
public String toString() {
return this.accountId;
}
}
\ No newline at end of file
package cn.freemud.amp.service;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class SortTest {
public static void main(String[] args) {
List<AuditScoreAccount> list = new ArrayList<AuditScoreAccount>();
//创建3个学生对象,年龄分别是20、19、21,并将他们依次放入List中
AuditScoreAccount s1 = new AuditScoreAccount();
s1.setExpireDate("2020-01-02");
s1.setAccountId("1");
AuditScoreAccount s2 = new AuditScoreAccount();
s2.setExpireDate("2020-04-03");
s2.setAccountId("2");
AuditScoreAccount s3 = new AuditScoreAccount();
s3.setExpireDate("2020-03-01");
s3.setAccountId("3");
AuditScoreAccount s5 = new AuditScoreAccount();
list.add(s5);
list.add(s1);
list.add(s2);
list.add(s3);
System.out.println("排序前:"+list);
List<String> stringList = new ArrayList<>();
stringList.add("3");
stringList.add("2");
Collections.sort(list, new Comparator<AuditScoreAccount>(){
/*
* int compare(Student o1, Student o2) 返回一个基本类型的整型,
* 返回负数表示:o1 小于o2,
* 返回0 表示:o1和o2相等,
* 返回正数表示:o1大于o2。
*/
public int compare(AuditScoreAccount o1, AuditScoreAccount o2) {
if(stringList.contains(o2.getAccountId())){
return 1;
}
if(stringList.contains(o1.getAccountId())){
return -1;
}
if(o2.getExpireDate() ==null){
return -1;
}
if(o1.getExpireDate() ==null){
return 1;
}
return o1.getExpireDate().compareTo(o2.getExpireDate());
}
});
System.out.println("排序后:"+list);
}
}
...@@ -26,7 +26,7 @@ public class PaySuccessResp { ...@@ -26,7 +26,7 @@ public class PaySuccessResp {
//总排队人数 //总排队人数
private Integer queueNumber; private Integer queueNumber;
//取餐码 //取餐码
private Integer pickUpGoodsNo; private String pickUpGoodsNo;
//门店订单序号 //门店订单序号
private Integer daySeq; private Integer daySeq;
......
...@@ -277,4 +277,6 @@ public class OrderInfoReqs { ...@@ -277,4 +277,6 @@ public class OrderInfoReqs {
*/ */
private List<OrderPayItemReqs> orderPayItemCreateReqList; private List<OrderPayItemReqs> orderPayItemCreateReqList;
private String appId;
} }
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