Commit 0e06325a by 邓杰

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

parents 423da567 22b05626
......@@ -196,6 +196,7 @@ public class QueryOrdersResponse {
* 支付凭证 非码流水ID
*/
private String payVoucher;
/**
* 手机号
*/
......
......@@ -66,6 +66,13 @@ public class OrderPayResponse {
private String payMode;
private List<PayItem> payItem = new ArrayList<>();
// 回调地址
private String payNotifyUrl;
//商户id
private String sellerId;
// 支付类型:机场支付=20099
private String ebCode;
@NoArgsConstructor
@Data
public static class PayOrderBean {
......@@ -97,6 +104,8 @@ public class OrderPayResponse {
private String signType;
private String aliPayOrder;
}
}
......@@ -2881,6 +2881,15 @@ public class OrderAdapter {
payBean.setTimestamp(payOrderBean.getTimestamp());
payBean.setAliPayOrder(payOrderBean.getAliPayOrder());
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.setPayTransId(unifiedOrderResponse.getPayTransId());
......
......@@ -5,8 +5,12 @@ import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.TakeMealNoticesVO;
import cn.freemud.service.CallerService;
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 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;
......@@ -14,7 +18,7 @@ import org.springframework.web.bind.annotation.RestController;
* 叫号器
*/
@Slf4j
@RequestMapping("/caller")
@RequestMapping("order/caller")
@RestController
@Validated
public class CallerController {
......@@ -29,7 +33,9 @@ private CallerService callerService;
* 取餐通知
* @return
*/
public BaseResponse takeMealNotices(TakeMealNoticesVO vo){
@PostMapping("/takeMealNotices")
@ApiAnnotation(logMessage = "takeMealNotices")
public BaseResponse takeMealNotices(@Validated @LogParams @RequestBody TakeMealNoticesVO vo){
return callerService.takeMealNotices(vo);
}
......
......@@ -10,27 +10,49 @@ import java.util.List;
public class SubscribeMessageRequest {
/**
* 预约单下单成功通知
*/
private BookingOrderPayedScene bookingOrderPayedScene;
/**
* 预约单取单提醒
*/
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 GroupBuyingStatusReminder groupBuyingStatusReminder;
/**
* 即时单下单成功通知
*/
private InstantOrderPayedScene instantOrderPayedScene;
/**
* 即时单取餐通知
*/
private InstantOrderPayedScene instantOrderTakeReminderScene;
/**
*
*/
private String messageEventType;
/**
......@@ -43,10 +65,23 @@ public class SubscribeMessageRequest {
*/
private List<String> openIdList;
/**
*自配送配送通知
*/
private OrderDeliveryScene orderDeliveryScene;
/**
*
*/
private SceneCouponRequest sceneCouponExpiredRequest;
/**
* //即时单scene_instant
* //预约单:scene_appoint
* //自配送单:scene_self_delivery
* //拼单提醒:scene_group_buying
*/
private String scene;
private SceneCouponRequest sceneCouponReceiveRequest;
private SceneInviteGiftRequest sceneInviteGiftRequest;
......
......@@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
/**
* @author freemud
*/
......@@ -25,5 +27,5 @@ public class TakeMealNoticesVO {
private Integer cupTotalNum;
@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 {
ORDER_CANCEL_ERROR_EXPECT_TIME("45067", "预约时间还剩15分钟,无法取消"),
ORDER_CANCEL_ERROR_ESTIMATE_TIME("45068", "预计送达还剩30分钟,无法取消"),
STORE_SELF_ERROR("45069", "请选择截止营业时间大于45分钟下单"),
/**
......
package cn.freemud.service;
import cn.freemud.amp.body.OrderBody;
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.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.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 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.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
@AllArgsConstructor
@Service
@Slf4j
public class CallerService {
@Autowired
private RedisTemplate redisTemplate;
private final RedisTemplate redisTemplate;
private final EcologyAdminApplicationClient ecologyAdminApplicationClient;
private final OrderCenterSdkService orderCenterSdkService;
private final CheckOrder checkOrder;
/**
* 缓存 待制作杯数量
*
* @param vo
*/
private void cacheTakeMealNotices(TakeMealNoticesVO vo){
private void cacheTakeMealNotices(TakeMealNoticesVO vo) {
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 生态
return ResponseUtil.success();
/**
* 是否预约单
* true 预约单
*
* @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;
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.service.StoreCenterService;
import com.freemud.sdk.api.assortment.order.enums.NewOrderType;
import com.google.common.collect.Lists;
import com.google.gson.Gson;
import lombok.extern.log4j.Log4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
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.Value;
import org.springframework.stereotype.Component;
......@@ -104,7 +106,7 @@ public class CheckOrder {
private MemberPropertyService memberPropertyService;
@Autowired
private ShoppingCartClient shoppingCartClient;
// @Autowired
// @Autowired
// private OrderAdapter orderAdapter;
@Autowired
private StoreServiceImpl storeService;
......@@ -123,6 +125,7 @@ public class CheckOrder {
@Value("${coco.partnerId}")
private String cocoPartnerId;
/**
* 下单会员相关校验
*/
......@@ -174,8 +177,8 @@ public class CheckOrder {
throw new ServiceException(ResponseResult.STORE_NOT_FOUND);
}
//订单预约单检查
OrderCheckAdapter.check(createOrderVo, storeResponse);
OrderCheckAdapter.check(createOrderVo, storeResponse);
StoreResponse.BizVO storeResponseDto = storeResponse.getBizVO();
// 校验门店是否停业 1 营业 2 停业 3 繁忙置休
if (storeResponseDto.getActiveFlag() == null || storeResponseDto.getActiveFlag() != 1) {
......@@ -258,6 +261,23 @@ public class CheckOrder {
} else {
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 : 这里不再支持从表中获取门店配送信息 改用接口方式调用
//外卖起送条件(1:杯数,2:金额)
if (!Arrays.asList(1, 2).contains(storeDeliveryInfoDto.getDeliveryCondition())) {
......@@ -281,6 +301,22 @@ public class CheckOrder {
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) {
if (takeMealDateTime == null) {
return;
......@@ -575,19 +611,19 @@ public class CheckOrder {
storeDeliveryInfoDto.setPushOrderTime(0);
} else {
//如果是coco查询配送服务判断是平台配送还是自配送
if(cocoPartnerId.equals(storeResponseDto.getPartnerId())){
if (cocoPartnerId.equals(storeResponseDto.getPartnerId())) {
GetDeliveryFlagRequest getDeliveryFlagRequest = new GetDeliveryFlagRequest();
getDeliveryFlagRequest.setPartnerId(storeResponseDto.getPartnerId());
getDeliveryFlagRequest.setStoreId(storeResponseDto.getStoreId());
DeliveryBaseResponse<GetDeliveryFlagResponseDto> deliveryBaseResponse = deliveryFeiginClient.getThirdDeliveryFlag(getDeliveryFlagRequest);
if(deliveryBaseResponse.getCode() == 100 && deliveryBaseResponse.getData() != null && deliveryBaseResponse.getData().isThirdDeliveryFlag()){
DeliveryBaseResponse<GetDeliveryFlagResponseDto> deliveryBaseResponse = deliveryFeiginClient.getThirdDeliveryFlag(getDeliveryFlagRequest);
if (deliveryBaseResponse.getCode() == 100 && deliveryBaseResponse.getData() != null && deliveryBaseResponse.getData().isThirdDeliveryFlag()) {
storeDeliveryInfoDto.setDeliveryType("third");
storeDeliveryInfoDto.setPushOrderTime(0);
}else {
} else {
storeDeliveryInfoDto.setDeliveryType("self");
storeDeliveryInfoDto.setPushOrderTime(0);
}
}else{
} else {
if (ObjectUtils.equals(openPlatformIappWxappConfig.getTakeType(), 1)) {
storeDeliveryInfoDto.setDeliveryType("self");
storeDeliveryInfoDto.setPushOrderTime(0);
......@@ -643,19 +679,19 @@ public class CheckOrder {
storeDeliveryInfoDto.setPushOrderTime(0);
} else {
//如果是coco查询配送服务判断是平台配送还是自配送
if(cocoPartnerId.equals(storeResponseDto.getPartnerId())){
if (cocoPartnerId.equals(storeResponseDto.getPartnerId())) {
GetDeliveryFlagRequest getDeliveryFlagRequest = new GetDeliveryFlagRequest();
getDeliveryFlagRequest.setPartnerId(storeResponseDto.getPartnerId());
getDeliveryFlagRequest.setStoreId(storeResponseDto.getStoreId());
DeliveryBaseResponse<GetDeliveryFlagResponseDto> deliveryBaseResponse = deliveryFeiginClient.getThirdDeliveryFlag(getDeliveryFlagRequest);
if(deliveryBaseResponse.getCode() == 100 && deliveryBaseResponse.getData() != null && deliveryBaseResponse.getData().isThirdDeliveryFlag()){
DeliveryBaseResponse<GetDeliveryFlagResponseDto> deliveryBaseResponse = deliveryFeiginClient.getThirdDeliveryFlag(getDeliveryFlagRequest);
if (deliveryBaseResponse.getCode() == 100 && deliveryBaseResponse.getData() != null && deliveryBaseResponse.getData().isThirdDeliveryFlag()) {
storeDeliveryInfoDto.setDeliveryType("third");
storeDeliveryInfoDto.setPushOrderTime(0);
}else {
} else {
storeDeliveryInfoDto.setDeliveryType("self");
storeDeliveryInfoDto.setPushOrderTime(0);
}
}else{
} else {
if (ObjectUtils.equals(openPlatformIappWxappConfig.getTakeType(), 1)) {
storeDeliveryInfoDto.setDeliveryType("self");
storeDeliveryInfoDto.setPushOrderTime(0);
......
......@@ -30,6 +30,14 @@ import cn.freemud.entities.dto.PayAccessResponse;
import cn.freemud.entities.dto.QueryOrdersResponseDto.DataBean.OrderBean;
import cn.freemud.entities.dto.activity.PayGiftCheckAndJoinResponseDto;
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.order.CreateOrderOperateDto;
import cn.freemud.entities.dto.order.CreatePrepayRequestDto;
......@@ -53,6 +61,7 @@ import cn.freemud.utils.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
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.vo.AssortmentCustomerInfoVo;
import com.freemud.api.assortment.datamanager.manager.*;
......@@ -263,9 +272,14 @@ public class OrderServiceImpl implements Orderservice {
private ComPayClient comPayClient;
@Autowired
private AssortmentOpenPlatformIappWxappStoreManager assortmentOpenPlatformIappWxappStoreManager;
@Autowired
private EcologyAdminApplicationClient ecologyAdminApplicationClient;
@Value("${coco.partnerId}")
private String partnerId;
/**
* coco商户
*/
@Value("#{'${coco.partnerId}'.split(',')}")
private List<String> cocoPartnerId;
@Override
public BaseResponse checkBeforeCreateOrder(CheckBeforeCreateOrderRequestVo requestVo) {
......@@ -1607,13 +1621,12 @@ public class OrderServiceImpl implements Orderservice {
if (StringUtils.isEmpty(orderRefundVo.getReason())) {
orderRefundVo.setReason("退款");
}
AssortmentCustomerInfoVo userInfo = null;
/* AssortmentCustomerInfoVo userInfo = customerInfoManager.getCustomerInfoByObject(orderRefundVo.getSessionId());
AssortmentCustomerInfoVo userInfo = customerInfoManager.getCustomerInfoByObject(orderRefundVo.getSessionId());
if (userInfo == null || StringUtils.isEmpty(userInfo.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN);
}*/
/* String memberId = userInfo.getMemberId();
String partnerId = userInfo.getPartnerId();*/
}
String memberId = userInfo.getMemberId();
String partnerId = userInfo.getPartnerId();
if (StringUtils.isBlank(orderRefundVo.getOid())) {
return ResponseUtil.error(ResponseResult.PARAMETER_MISSING.getCode(), "oid不能为空");
......@@ -1631,26 +1644,34 @@ public class OrderServiceImpl implements Orderservice {
if (!RESPONSE_SUCCESS_CODE.equals(orderByIdResponseDto.getErrcode()) || orderByIdResponseDto.getData() == null) {
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(), "不能操作非本人的订单");
}*/
}
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 商户校验
if (partnerId.equals(orderByIdResponseDto.getData().getCompanyId())) {
if (cocoPartnerId.contains(orderByIdResponseDto.getData().getCompanyId())) {
// COCO 即时单不可取消
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 预约单
List<Integer> expectOrderType = Lists.newArrayList(
NewOrderType.RESERVED_EXPRESS.getCode(),
NewOrderType.RESERVED_SELF_PICKUP.getCode());
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(
NewOrderType.RESERVED_EXPRESS.getCode(),
......@@ -1661,19 +1682,22 @@ public class OrderServiceImpl implements Orderservice {
&& taskCancelOrderTime > queryOrderByIdResponse.getData().getEstimateDeliveryCompleteTime()) {
return ResponseUtil.error(ResponseResult.ORDER_CANCEL_ERROR_ESTIMATE_TIME);
}
}
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(), "订单配送中,退款请联系售后!");
}
if (expectOrderType.contains(queryOrderByIdResponse.getData().getNewOrderType())){
if (Objects.nonNull(orderBean.getGmtExpect())
&& time > orderBean.getGmtExpect()) {
return ResponseUtil.error(ResponseResult.ORDER_CANCEL_ERROR_EXPECT_TIME);
}
// todo coco 预约单直接退款
BaseResponse baseResponse = partnerNoTakeOrder(orderRefundVo, orderBean, orderId, AfterSalesType.USER_CANCEL, true);
if (baseResponse != null) {
return baseResponse;
}
// 删除订单 通知活动添加商品库存
backOrdersStatusChange(orderBean.getOid(), orderBean.getStatus(), orderBean.getPayStatus());
return ResponseUtil.success();
}
}
/**
* 已接单,制作完成,配送中,未接单,用户可申请退款
*
......@@ -2089,13 +2113,13 @@ public class OrderServiceImpl implements Orderservice {
*/
private void sendMessage(QueryOrdersResponseDto.DataBean.OrderBean orderBean, MessageEventType messageEventType) {
MessageTemplateRequest<MessagePushOrderTemplateRequest> messageTemplateRequest = null;
try {
messageTemplateRequest = messageNoticeAdapter.convent2MessageTemplateRequest(orderBean);
messageTemplateRequest.setMessageEventType(messageEventType);
this.messageTemplatePushService.sendTemplateMsg(messageTemplateRequest);
} catch (Exception e) {
LogUtil.error("sendTemplateMsg_error", JSONObject.toJSONString(orderBean), JSONObject.toJSONString(messageTemplateRequest), e);
}
try {
messageTemplateRequest = messageNoticeAdapter.convent2MessageTemplateRequest(orderBean);
messageTemplateRequest.setMessageEventType(messageEventType);
this.messageTemplatePushService.sendTemplateMsg(messageTemplateRequest);
} catch (Exception e) {
LogUtil.error("sendTemplateMsg_error", JSONObject.toJSONString(orderBean), JSONObject.toJSONString(messageTemplateRequest), e);
}
}
......
......@@ -30,7 +30,7 @@ public interface EcologyAdminApplicationClient {
@PostMapping(value = "/ecology/api/getAuthorizerAccessToken")
GetTokenResponseDto getAuthorizerAccessToken(@RequestBody GetAuthorizerRequestDto request);
@PostMapping(value = "/ecology/api/subscribeMessage/send")
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 {
//总排队人数
private Integer queueNumber;
//取餐码
private Integer pickUpGoodsNo;
private String pickUpGoodsNo;
//门店订单序号
private Integer daySeq;
......
......@@ -277,4 +277,6 @@ public class OrderInfoReqs {
*/
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