Commit 5cd6ace1 by 邓杰

Merge branch '20201127_coco配送进程' into master_back

# Conflicts:
#	order-application-service/src/main/java/cn/freemud/service/Orderservice.java
#	order-application-service/src/main/java/cn/freemud/service/impl/CheckOrder.java
#	order-application-service/src/main/java/cn/freemud/service/impl/OrderServiceImpl.java
#	ordercenter-sdk/src/main/java/com/freemud/application/sdk/api/ordercenter/response/orderInfo/OrderInfoReqs.java
parents 24a51ac2 0e06325a
......@@ -1030,7 +1030,9 @@ public class OrderSdkAdapter {
*/
public QueryOrdersResponse.DataBean.OrderBean convent2NEWOrderInfo(OrderInfoReqs orderInfoReqs) {
QueryOrdersResponse.DataBean.OrderBean data = new QueryOrdersResponse.DataBean.OrderBean();
if(Objects.nonNull(orderInfoReqs.getEstimateDeliveryCompleteTime())){
data.setEstimateDeliveryCompleteTime(Long.parseLong(orderInfoReqs.getEstimateDeliveryCompleteTime()));
}
data.setOrderClient(orderInfoReqs.getOrderClient().toString());
data.setCompanyId(orderInfoReqs.getPartnerId());
data.setShopId(orderInfoReqs.getStoreId());
......
......@@ -193,6 +193,7 @@ public class QueryOrdersResponse {
* 支付凭证 非码流水ID
*/
private String payVoucher;
/**
* 手机号
*/
......@@ -387,6 +388,9 @@ public class QueryOrdersResponse {
private List<OrderPayItem> orderPayItem;
private String pickUpGoodsNo;
// 预计到达时间
private Long estimateDeliveryCompleteTime;
@NoArgsConstructor
@Data
public static class AddDeliveryInfo {
......
......@@ -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;
}
}
......@@ -87,8 +87,8 @@
<!-- 商户门店sdk -->
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
<version>3.3.5-SNAPSHOT</version>
<artifactId>storecenter-sdk</artifactId>
<version>3.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>cn.freemud</groupId>
......
......@@ -1209,9 +1209,11 @@ public class OrderAdapter {
responseVo.setOidBase64Image(oidBase64Image);
}
//设置是否是第三方配送单
if (ordersBean.getDeliverStatus() != null) {
if (ordersBean.getAddInfo() !=null && StringUtils.isNotEmpty(ordersBean.getAddInfo().getDeliveryId())&& !"0".equals(ordersBean.getAddInfo().getDeliveryId())) {
responseVo.setHasThirdDelivery(true);
responseVo.setDeliveryId(ordersBean.getAddInfo().getDeliveryId());
}
responseVo.setDeliveryStatus(ordersBean.getDeliverStatus());
responseVo.setQueueIndex(ordersBean.getQueueIndex());
responseVo.setButtonRefund(orderViewStatusDto.getButtonRefund());
responseVo.setButtonContactPartner(orderViewStatusDto.getButtonContactPartner());
......@@ -2921,6 +2923,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());
......
......@@ -13,6 +13,8 @@
package cn.freemud.constant;
import cn.freemud.utils.DateTimeUtil;
public class RedisKeyConstant {
/**
* userInfoMap的redisKey前缀
......@@ -67,4 +69,24 @@ public class RedisKeyConstant {
*/
public final static String KGD_SENDPOINT_ORDERID = "kgd:sendpoint:orderid:";
private final static String REDIS_KEY_SEP = ":";
/**
* cocoNotMadeGoods:商户号:门店号:yyyy-MM-dd
*
* @param partnerId
* @param storeId
* @return
*/
public static String notMadeGoodsNumber(String partnerId, String storeId) {
StringBuilder sb = new StringBuilder("cocoNotMadeGoods");
sb.append(REDIS_KEY_SEP);
sb.append(partnerId).append(REDIS_KEY_SEP);
sb.append(storeId).append(REDIS_KEY_SEP);
sb.append(DateTimeUtil.getCurrentDateStr());
return sb.toString();
}
}
package cn.freemud.controller;
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;
/**
* 叫号器
*/
@Slf4j
@RequestMapping("order/caller")
@RestController
@Validated
public class CallerController {
private CallerService callerService;
public CallerController(CallerService callerService) {
this.callerService = callerService;
}
/**
* 取餐通知
* @return
*/
@PostMapping("/takeMealNotices")
@ApiAnnotation(logMessage = "takeMealNotices")
public BaseResponse takeMealNotices(@Validated @LogParams @RequestBody TakeMealNoticesVO vo){
return callerService.takeMealNotices(vo);
}
}
......@@ -372,5 +372,15 @@ public class OrderController {
return orderservice.mcCafePollingPickUpCode(vo);
}
/**
* 根据订单号查询配送操作日志及骑手位置
* @param requestVo
* @return
*/
@ApiAnnotation(logMessage = "queryOrderRider")
@PostMapping("/queryOrderRider")
public BaseResponse queryOrderRider(@Validated @LogParams @RequestBody OrderRiderRequestVo requestVo){
return orderservice.queryOrderRider(requestVo);
}
}
......@@ -42,7 +42,7 @@ public class DeliveryController {
@ApiOperation(value = "配送回调", notes = "配送回调", produces = "application/json")
@PostMapping("/delivery/callbackUrl")
public BaseResponse callbackUrl(@Valid @LogParams @RequestBody CallbackUrlRequestDto request) {
return deliveryService. callbackUrl(request);
return deliveryService.callbackUrl(request);
}
@ApiAnnotation(logMessage = "麦咖啡配送回调")
......
package cn.freemud.entities.dto.delivery;
import lombok.Data;
@Data
public class DeliveryBaseResponse<T> {
private Integer code;
private String msg;
private T data;
}
package cn.freemud.entities.dto.delivery;
import lombok.Data;
@Data
public class DeliveryStatusAndRiderPositionDto {
/**
* 订单号
*/
private String orderId;
/**
* 配送号
*/
private String deliveryId;
/**
* 骑手经纬度
*/
private String currentPoint;
/**
* 门店经纬度
*/
private String storePoint;
/**
* 配送状态
*/
private Integer devlieryStatus;
/**
* 距离
*/
private Integer distance;
/**
* 门店联系电话
*/
private String storePhone;
}
package cn.freemud.entities.dto.delivery;
import lombok.Data;
@Data
public class GetDeliveryFlagRequest {
private String partnerId;
private String storeId;
}
package cn.freemud.entities.dto.delivery;
import lombok.Data;
@Data
public class GetDeliveryFlagResponseDto {
private boolean thirdDeliveryFlag;
}
package cn.freemud.entities.dto.delivery;
import lombok.Data;
@Data
public class QueryDeliveryBaseRequest {
private String deliveryId;
private Integer openDistance;
}
package cn.freemud.entities.dto.ecology;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class BookingOrderPayedScene {
/**
* 商户地址
*/
private String merchantAddress;
/**
* 商户名
*/
private String merchantName;
/**
* 取单号
*/
private String orderNo;
/**
* 订单类型
*/
private String orderType;
/**
* 预计取单时间
*/
private String takeOrderTime;
}
package cn.freemud.entities.dto.ecology;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class DeliveryErrorReminder {
/**
* 配送地址
*/
private String address;
/**
* 下单时间
*/
private String createTime;
/**
* 商户电话
*/
private String merchantPhone;
/**
* 订单号
*/
private String orderId;
/**
* 备注
*/
private String remark;
}
package cn.freemud.entities.dto.ecology;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class GroupBuyingStatusReminder {
/**
* 温馨提示
*/
private String friendlyTips;
/**
* 商户地址
*/
private String merchantAddress;
/**
* 商户名
*/
private String merchantName;
/**
* 完成点单人数
*/
private String peopleNumber;
}
package cn.freemud.entities.dto.ecology;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class InstantOrderPayedScene {
/**
* 温馨提示
*/
private String friendlyTips;
/**
* 商户地址
*/
private String merchantAddress;
/**
* 商户名
*/
private String merchantName;
/**
* 订单号
*/
private String orderNo;
/**
* 订单类型
*/
private String orderType;
}
package cn.freemud.entities.dto.ecology;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class OrderDeliveryScene {
/**
* 配送地址
*/
private String address;
/**
* 预计达到时间
*/
private String estimateArrivalTime;
/**
* 商户电话
*/
private String merchantPhone;
/**
* 订单编号
*/
private String orderNo;
}
package cn.freemud.entities.dto.ecology;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class SceneCouponRequest {
/**
* 券名称,
*/
private String couponName;
/**
* 备注
*/
private String remark;
}
package cn.freemud.entities.dto.ecology;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class SceneInviteGiftRequest {
/**
* 活动id,
*/
private String activityId;
/**
* 被邀请人
*/
private String inviteeName;
/**
* 通过时间,
*/
private String passTime;
/**
* relationId,
*/
private String relationId;
/**
* remark,
*/
private String 备注;
}
package cn.freemud.entities.dto.ecology;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class SceneMemberCardExpiredRequest {
/**
* 到期时间
*/
private Integer expiredAt;
/**
* 备注说明 / 温馨提示
*/
private String remark;
}
package cn.freemud.entities.dto.ecology;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class SceneMemberLevelChangedRequest {
/**
* 等级变更时间
*/
private Integer changedAt;
/**
* 备注
*/
private String remark;
}
package cn.freemud.entities.dto.ecology;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class SceneOrderPayedRequest {
/**
* 地址
*/
private String address;
/**
* 金额
*/
private Integer amount;
/**
* 序号 必填
*/
private Integer daySeq;
/**
* 备注
*/
private String formId;
/**
* 创建时间
*/
private Long gmtCreate;
/**
* 预约时间
*/
private Long gmtExpect;
/**
* 订单号
*/
private String orderId;
/**
* 订单类型
*/
private String orderType;
/**
* 取餐码
*/
private String otherCode;
/**
* prepayId
*/
private String prepayId;
/**
* 积分变动
*/
private String scoreChangedNum;
/**
* 积分变动原因
*/
private String scoreChangedReason;
/**
* 门店名称
*/
private String shopName;
}
package cn.freemud.entities.dto.ecology;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class SelfDeliveryOrderPayedScene {
/**
* 配送地址
*/
private String address;
/**
* 预计达到时间
*/
private String estimateArrivalTime;
/**
* 商户电话
*/
private String merchantPhone;
/**
* 订单编号
*/
private String orderNo;
/**
* 订单类型
*/
private String orderType;
}
package cn.freemud.entities.dto.ecology;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Setter
@Getter
public class SubscribeMessageRequest {
/**
* 预约单下单成功通知
*/
private BookingOrderPayedScene bookingOrderPayedScene;
/**
* 预约单取单提醒
*/
private BookingOrderPayedScene bookingOrderTakeReminderScene;
/**
* 渠道
* 1 微信小程序
* 2 支付宝小程序
* 3 手机app
* 4 线下应用
* 5 字节小程序
* 6 h5
*/
private Integer channel =1;
/**
* 配送异常提醒
*/
private DeliveryErrorReminder deliveryErrorReminder;
/**拼单提醒
*
*/
private GroupBuyingStatusReminder groupBuyingStatusReminder;
/**
* 即时单下单成功通知
*/
private InstantOrderPayedScene instantOrderPayedScene;
/**
* 即时单取餐通知
*/
private InstantOrderPayedScene instantOrderTakeReminderScene;
/**
*
*/
private String messageEventType;
/**
* 小程序id
*/
private String miniAppId;
/**
* 小程序集合
*/
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;
private SceneMemberCardExpiredRequest sceneMemberCardExpiredRequest;
private SceneMemberLevelChangedRequest sceneMemberLevelChangedRequest;
private SceneOrderPayedRequest sceneOrderPayedRequest;
private SelfDeliveryOrderPayedScene selfDeliveryOrderPayedScene;
}
package cn.freemud.entities.dto.ecology;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class SubscribeMessageResponse {
private Integer code;
private String message;
private String subMsg;
private String ver;
}
package cn.freemud.entities.vo;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
@Data
public class OrderRiderRequestVo {
@NotEmpty(message = "sessionId 不能为空")
private String sessionId;
@NotEmpty(message = "订单ID 不能为空")
private String oid;
}
package cn.freemud.entities.vo;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import lombok.Data;
import org.omg.PortableInterceptor.INACTIVE;
import java.util.List;
@Data
public class OrderRiderResponseVo {
/**
* 订单号
*/
private String orderId;
/**
* 配送号
*/
private String deliveryId;
/**
* 门店联系电话
*/
private String storePhone;
/**
* 骑手经度
*/
private String riderLongitude;
/**
* 骑手纬度
*/
private String riderLatitude;
/**
* 用户经度
*/
private String userLongitude;
/**
* 用户纬度
*/
private String userLatitude;
/**
* 门店经度
*/
private String shopLongitude;
/**
* 门店纬度
*/
private String shopLatitude;
/**
* 配送状态
*/
private Integer devlieryStatus;
/**
* 距离
*/
private Integer distance;
/**
* 操作日志
*/
private List<Operation> operationList;
@Data
public static class Operation{
private String createTime;
private String operationDesc;
private String operationMethod;
private String operator;
}
}
......@@ -309,7 +309,14 @@ public class QueryOrderResponseVo {
* 是否是第三方配送单
*/
private Boolean hasThirdDelivery;
/**
* 配送状态
*/
private Integer deliveryStatus;
/**
* 运单号
*/
private String deliveryId;
/**
* 骑手名称 商家自配送名称
*/
......
package cn.freemud.entities.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
/**
* @author freemud
*/
@Getter
@Setter
public class TakeMealNoticesVO {
@ApiModelProperty(value = "商户Id")
private String partnerId;
@ApiModelProperty(value = "门店id")
private String storeCode;
@ApiModelProperty(value = "订单数量")
private Integer orderTotalNum;
@ApiModelProperty(value = "待制作杯数")
private Integer cupTotalNum;
@ApiModelProperty(value = "订单")
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;
}
}
......@@ -167,6 +167,10 @@ public enum ResponseResult {
COLLAGE_ORDER_CREATE_ERROR_PAYING("45071", "拼单正在支付,请勿重复提交"),
COLLAGE_ORDER_CREATE_ERROR_PAYED("45072", "拼单已支付完成,请返回订单列表查看"),
ORDER_CANCEL_ERROR_EXPECT_TIME("45067", "预约时间还剩15分钟,无法取消"),
ORDER_CANCEL_ERROR_ESTIMATE_TIME("45068", "预计送达还剩30分钟,无法取消"),
STORE_SELF_ERROR("45069", "请选择截止营业时间大于45分钟下单"),
/**
* 支付
......@@ -213,6 +217,7 @@ public enum ResponseResult {
DELIVERY_QUERY_RIDER_STATUS_ERROR("53014", "订单状态不是配送中,不能查询骑手位置"),
DELIVERY_REMINDER_ERROR("53015","催单失败"),
DELIVERY_QUERY_RIDER_ERROR("53016","查询骑手位置失败"),
DELIVERY_NOT_EXIST("53017","当前订单不是没有配送单"),
/**
* 配送信息
......
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 {
private final RedisTemplate redisTemplate;
private final EcologyAdminApplicationClient ecologyAdminApplicationClient;
private final OrderCenterSdkService orderCenterSdkService;
private final CheckOrder checkOrder;
/**
* 缓存 待制作杯数量
*
* @param vo
*/
private void cacheTakeMealNotices(TakeMealNoticesVO vo) {
String redisKey = RedisKeyConstant.notMadeGoodsNumber(vo.getPartnerId(), vo.getStoreCode());
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();
}
/**
* 是否预约单
* true 预约单
*
* @return
*/
private boolean isReservationOrder(QueryOrdersResponse.DataBean.OrderBean orderBean) {
if (Objects.nonNull(orderBean.getGmtExpect())) {
return Boolean.TRUE;
}
return Boolean.FALSE;
}
}
......@@ -142,4 +142,6 @@ public interface Orderservice {
* @return
*/
BaseResponse queryCollageOrderById(Integer operation,String sessionId, String oid, String partnerId,String channel);
BaseResponse queryOrderRider(OrderRiderRequestVo requestVo);
}
......@@ -5,6 +5,9 @@ import cn.freemud.amp.service.ProduceMQService;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.base.log.LogTreadLocal;
import cn.freemud.entities.dto.delivery.*;
import cn.freemud.entities.dto.ecology.DeliveryErrorReminder;
import cn.freemud.entities.dto.ecology.OrderDeliveryScene;
import cn.freemud.entities.dto.ecology.SubscribeMessageRequest;
import cn.freemud.entities.dto.pos.PosBaseRequestDto;
import cn.freemud.entities.vo.delivery.DeliveryAmountVo;
import cn.freemud.enums.DeliveryReviewStatus;
......@@ -18,23 +21,34 @@ import cn.freemud.management.service.adapter.OrderManagerAdapter;
import cn.freemud.service.Orderservice;
import cn.freemud.service.ThirdDeliveryService;
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.LogUtil;
import cn.freemud.utils.ResponseUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.freemud.application.sdk.api.constant.ResponseConstant;
import com.freemud.application.sdk.api.deliverycenter.dto.CancelDeliveryOrderRequestDto;
import com.freemud.application.sdk.api.deliverycenter.response.DeliveryInfoDto;
import com.freemud.application.sdk.api.deliverycenter.response.DeliveryResponseDto;
import com.freemud.application.sdk.api.deliverycenter.service.DeliveryService;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.ordercenter.enums.OrderType;
import com.freemud.application.sdk.api.ordercenter.request.OrderCollectReq;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService;
import com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.freemud.application.sdk.api.storecenter.service.StoreCenterService;
import com.freemud.application.sdk.api.structure.request.PushMessageNoticeDto;
import com.freemud.application.sdk.api.structure.service.MessageCenterClient;
import com.freemud.sdk.api.assortment.order.request.order.AssortmentUpdateDeliveryAbnormalRequest;
import com.freemud.sdk.api.assortment.order.request.order.BaseQueryOrderRequest;
import com.freemud.sdk.api.assortment.order.request.order.UpdateDeliveryInfoByIdRequest;
import com.freemud.sdk.api.assortment.order.response.order.OrderBaseResponse;
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 com.google.gson.Gson;
......@@ -42,8 +56,11 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
......@@ -80,6 +97,12 @@ public class ThirdDeliveryServiceImpl implements ThirdDeliveryService {
private MessageNoticeAdapter messageNoticeAdapter;
@Autowired
private MessageCenterClient messageNoticeClient;
@Value("${delivery.micro.message.partner}")
private String deliveryMicroMessagePartner;
@Autowired
private EcologyAdminApplicationClient ecologyAdminApplicationClient;
@Autowired
private StoreCenterService storeCenterService;
@Override
public BaseResponse callbackUrl(CallbackUrlRequestDto request) {
......@@ -102,6 +125,7 @@ public class ThirdDeliveryServiceImpl implements ThirdDeliveryService {
requestDto.setExpressChannelName(request.getChannelName());
requestDto.setExpressNo(request.getChannelDeliveryId());
requestDto.setOrderSubState(deliveryStatus);
requestDto.setRemark(request.getRemark());
if (StringUtils.isNotBlank(request.getRemark()))
{
requestDto.setRemark("配送:"+request.getRemark());
......@@ -137,7 +161,6 @@ public class ThirdDeliveryServiceImpl implements ThirdDeliveryService {
sendPosDeliveryStatus = 81;
}
sendPosMessage(partnerId, storeCode, request.getOrderId(), sendPosDeliveryStatus, request.getRemark());
// 取消外卖中台配送单 订单异常
// 如果 "配送单异常并且顾客更改配送地址" 不取消配送单
if (!isDeliveryAbnormalAndCustomerChangedAddress(request)) {
......@@ -154,6 +177,9 @@ public class ThirdDeliveryServiceImpl implements ThirdDeliveryService {
produceMQService.sendOfDeliveryInfo(request);
produceMQService.sendRocketMqOfDeliveryInfo(request);
}
//配送订阅消息
sendMicroMessage(partnerId,request.getOrderId(),deliveryStatus);
// else {
// return ResponseUtil.error(ResponseResult.SYSTEM_ERROR.getCode(), "订单回调状态有误");
// }
......@@ -357,5 +383,71 @@ public class ThirdDeliveryServiceImpl implements ThirdDeliveryService {
messageNoticeClient.createMessage(pushMessageNoticeDto, LogThreadLocal.getTrackingNo());
}
/**
* 配送消息推送
*/
public void sendMicroMessage(String partnerId,String orderId,int deliveryStatus){
//如果商户配置了配送订阅消息推送
if(deliveryMicroMessagePartner.contains(partnerId)){
try {
BaseQueryOrderRequest baseQueryOrderRequest = new BaseQueryOrderRequest();
baseQueryOrderRequest.setOrderId(orderId);
baseQueryOrderRequest.setTrackingNo(LogTreadLocal.getTrackingNo());
QueryOrderByIdResponse response = orderCenterSdkService.queryOrderById(baseQueryOrderRequest);
QueryOrdersResponse.DataBean.OrderBean orderBean = response.getData();
SubscribeMessageRequest request = new SubscribeMessageRequest();
OrderExtInfoDto extInfoDto = JSONObject.parseObject(orderBean.getExtInfo(), new TypeReference<OrderExtInfoDto>() {});
request.setMiniAppId(extInfoDto.getAppid());
List<String> userList = new ArrayList<>();
userList.add(extInfoDto.getOpenid());
request.setOpenIdList(userList);
request.setScene("scene_delivery");
//默认微信
request.setChannel(1);
//支付宝
if("3".equals(orderBean.getOrderClient())){
request.setChannel(2);
}
//配送订阅模板消息
if(deliveryStatus == DeliveryStatus.ALLOTRIDER.getCode()){
request.setMessageEventType("ORDER_DELIVERY");
OrderDeliveryScene orderDeliveryScene = new OrderDeliveryScene();
orderDeliveryScene.setAddress(orderBean.getAddress());
Long createTime = orderBean.getGmtCreate();
// 获取门店信息
StoreInfoRequest storeInfoRequest = new StoreInfoRequest(partnerId, orderBean.getShopId(),null);
StoreResponse storeResponse = storeCenterService.getStoreInfo(storeInfoRequest, LogThreadLocal.getTrackingNo());
//立即单外卖
if (OrderType.GENERAL_EXPRESS.getIndex()==orderBean.getNewOrderType()) {
if(storeResponse != null && storeResponse.getBizVO() != null && storeResponse.getBizVO().getServiceTime() != null){
createTime = createTime + storeResponse.getBizVO().getServiceTime()*1000*60;
orderDeliveryScene.setEstimateArrivalTime(DateTimeUtil.timeStampToTime(createTime));
}
}//预约单外卖
if(OrderType.RESERVED_EXPRESS.getIndex()==orderBean.getNewOrderType()&&orderBean.getGmtExpect()!=null){
orderDeliveryScene.setEstimateArrivalTime(DateTimeUtil.timeStampToTime(orderBean.getGmtExpect()));
}
orderDeliveryScene.setMerchantPhone(storeResponse.getBizVO().getPhone());
orderDeliveryScene.setOrderNo(orderId);
request.setOrderDeliveryScene(orderDeliveryScene);
ecologyAdminApplicationClient.subscribeMessage(request);
}
//配送异常模板消息
if(deliveryStatus == DeliveryStatus.DELIVERYCANCEL.getCode() || deliveryStatus == DeliveryStatus.DELIVERYERROR.getCode()){
request.setMessageEventType("DELIVERY_ERROR_REMINDER");
DeliveryErrorReminder deliveryErrorReminder = new DeliveryErrorReminder();
deliveryErrorReminder.setCreateTime(DateTimeUtil.timeStampToTime(orderBean.getGmtCreate()));
deliveryErrorReminder.setOrderId(orderId);
deliveryErrorReminder.setMerchantPhone(orderBean.getShopPhone());
deliveryErrorReminder.setAddress(orderBean.getAddress());
deliveryErrorReminder.setRemark("订单配送异常,请电话联系门店确认哦");
request.setDeliveryErrorReminder(deliveryErrorReminder);
ecologyAdminApplicationClient.subscribeMessage(request);
}
}catch (Exception e){
log.error("配送订阅消息推送失败:{},失败原因:{}",orderId,e.getMessage());
}
}
}
}
......@@ -17,6 +17,9 @@ import cn.freemud.base.util.DateUtil;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.constant.StoreConstant;
import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.delivery.DeliveryBaseResponse;
import cn.freemud.entities.dto.delivery.GetDeliveryFlagRequest;
import cn.freemud.entities.dto.delivery.GetDeliveryFlagResponseDto;
import cn.freemud.entities.dto.order.BusinessDate;
import cn.freemud.entities.dto.shoppingCart.GetShoppingCartGoodsApportionDto;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
......@@ -28,6 +31,7 @@ import cn.freemud.service.CouponService;
import cn.freemud.service.adapter.OrderCheckAdapter;
import cn.freemud.service.order.OrderRelationFactory;
import cn.freemud.service.order.OrderRelationService;
import cn.freemud.service.thirdparty.DeliveryFeiginClient;
import cn.freemud.service.thirdparty.ShoppingCartClient;
import cn.freemud.utils.LogUtil;
import com.alibaba.fastjson.JSONArray;
......@@ -55,12 +59,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;
......@@ -122,6 +128,13 @@ public class CheckOrder {
@Autowired
private OrderRelationFactory orderRelationFactory;
@Autowired
private DeliveryFeiginClient deliveryFeiginClient;
@Value("${coco.partnerId}")
private String cocoPartnerId;
/**
* 下单会员相关校验
*/
......@@ -173,8 +186,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) {
......@@ -262,6 +275,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())) {
......@@ -285,6 +315,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;
......@@ -699,6 +745,20 @@ public class CheckOrder {
storeDeliveryInfoDto.setDeliveryType("self");
storeDeliveryInfoDto.setPushOrderTime(0);
} else {
//如果是coco查询配送服务判断是平台配送还是自配送
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()) {
storeDeliveryInfoDto.setDeliveryType("third");
storeDeliveryInfoDto.setPushOrderTime(0);
} else {
storeDeliveryInfoDto.setDeliveryType("self");
storeDeliveryInfoDto.setPushOrderTime(0);
}
} else {
if (ObjectUtils.equals(openPlatformIappWxappConfig.getTakeType(), 1)) {
storeDeliveryInfoDto.setDeliveryType("self");
storeDeliveryInfoDto.setPushOrderTime(0);
......@@ -707,6 +767,7 @@ public class CheckOrder {
storeDeliveryInfoDto.setPushOrderTime(0);
}
}
}
return storeDeliveryInfoDto;
}
......@@ -752,6 +813,20 @@ public class CheckOrder {
storeDeliveryInfoDto.setDeliveryType("self");
storeDeliveryInfoDto.setPushOrderTime(0);
} else {
//如果是coco查询配送服务判断是平台配送还是自配送
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()) {
storeDeliveryInfoDto.setDeliveryType("third");
storeDeliveryInfoDto.setPushOrderTime(0);
} else {
storeDeliveryInfoDto.setDeliveryType("self");
storeDeliveryInfoDto.setPushOrderTime(0);
}
} else {
if (ObjectUtils.equals(openPlatformIappWxappConfig.getTakeType(), 1)) {
storeDeliveryInfoDto.setDeliveryType("self");
storeDeliveryInfoDto.setPushOrderTime(0);
......@@ -760,6 +835,7 @@ public class CheckOrder {
storeDeliveryInfoDto.setPushOrderTime(0);
}
}
}
storeDeliveryInfoDto.setDeliveryCondition(deliveryDetail.getDeliveryType());
storeDeliveryInfoDto.setFreeDeliveryCup(deliveryDetail.getFreeDeliveryCup());
return storeDeliveryInfoDto;
......
package cn.freemud.service.thirdparty;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.dto.BaseResponseDto;
import cn.freemud.entities.dto.MCCafeDeliveryBaseResponse;
import cn.freemud.entities.dto.delivery.*;
import cn.freemud.entities.dto.delivery.QueryDeliveryAmountRequestDto;
......@@ -27,5 +25,10 @@ public interface DeliveryFeiginClient {
@PostMapping("/delivery/create")
CreateDeliveryOrderResponseDto deliveryOrderAdd(@RequestBody CreateDeliveryVo request);
@PostMapping("/delivery/getDeliveryStatusAndRiderPosition")
DeliveryBaseResponse<DeliveryStatusAndRiderPositionDto> getDeliveryStatusAndRiderPosition(@RequestBody QueryDeliveryBaseRequest queryDeliveryBaseRequest);
@PostMapping("/delivery/getThirdDeliveryFlag")
DeliveryBaseResponse<GetDeliveryFlagResponseDto> getThirdDeliveryFlag(@RequestBody GetDeliveryFlagRequest getDeliveryFlagRequest);
}
package cn.freemud.service.thirdparty;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.dto.ecology.SubscribeMessageRequest;
import cn.freemud.entities.dto.ecology.SubscribeMessageResponse;
import cn.freemud.entities.dto.ecology.VirtualBindStoreResponse;
import cn.freemud.entities.dto.ecology.VirtualStoreRequest;
import cn.freemud.entities.dto.wechat.GetAuthorizerRequestDto;
......@@ -28,4 +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 java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
......@@ -280,5 +281,16 @@ public class DateTimeUtil {
public static String getCurDateAfterTwentyYear() {
return getCurrentLocalDate().plus(2, ChronoUnit.DECADES).format(DATE_FORMATTER);
}
/**
* 时间戳转换成时间
* @param l 传入的时间戳
* @return 返回格式化时间
*/
public static String timeStampToTime(Long l){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(l);
String res = simpleDateFormat.format(date);
return res;
}
}
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,6 +277,8 @@ public class OrderInfoReqs {
*/
private List<OrderPayItemReqs> orderPayItemCreateReqList;
private String appId;
List<OrderSendCouponResp> orderSendCouponRespList;
}
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