Commit b0c53f9d by shuhu.hou@freemud.cn

Merge branch 'freature/20200729_农工商未支付冲正积分' into develop

# Conflicts:
#	assortment-ordercenter-sdk/pom.xml
#	assortment-ordercenter-sdk/readme.md
#	order-application-service/pom.xml
parents c55973f2 dd76defd
......@@ -19,6 +19,7 @@ import cn.freemud.amqp.MQMessage;
import cn.freemud.amqp.MQService;
import cn.freemud.constant.RedisKeyConstant;
import cn.freemud.entities.dto.OrderExtInfoDto;
import cn.freemud.entities.dto.OrderStatusChangeRequestDto;
import cn.freemud.entities.dto.UserLoginInfoDto;
import cn.freemud.entities.dto.WechatReportOrderDto;
import cn.freemud.entities.vo.OrderCallBackRequestVo;
......@@ -27,6 +28,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformWxapp;
import com.freemud.api.assortment.datamanager.manager.AssortmentOpenPlatformWxappManager;
import com.freemud.application.sdk.api.log.ApiLog;
import com.freemud.application.sdk.api.log.ErrorLog;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.log.ThirdPartyLog;
......@@ -71,6 +73,8 @@ public class OrderCallBackMQService {
private AssortmentOpenPlatformWxappManager openPlatformWxappManager;
@Value("${saas.order.invoice.report.partnerIds}")
private String invoicePartnerIds;
private static final String backOrdersChangeOrderStatusConsumerQueue="program.backorders_change_order_status_consumer_queue";
private static final String backOrdersNotifyActivityExchange="program.backorders_notify_activity_exchange";
public void sendOrderMQ(OrderCallBackRequestVo body) {
//发送订单回调
......@@ -87,6 +91,31 @@ public class OrderCallBackMQService {
sendWechatReportMQ(body);
//上报发票信息
sendInvoiceReportMQ(body);
//未支付超时关单,发送队列冲正积分、券码等
revert(body);
}
/**
* 冲正库存、券码等
* @param body
*/
public void revert(OrderCallBackRequestVo body){
if (ObjectUtils.notEqual(body.getDelayMsgEventType(),2)){
return;
}
String orderCode=body.getOrderCode();
ApiLog.info("backOrdersStatusChange", orderCode);
OrderStatusChangeRequestDto requestDto = new OrderStatusChangeRequestDto();
requestDto.setOid(orderCode);
//2:未支付
requestDto.setOrderStatus(2);
try {
Header header = new Header(MQAction.INSERT.getAction(), "backOrdersStatusChange", orderCode, backOrdersChangeOrderStatusConsumerQueue);
MQMessage<OrderStatusChangeRequestDto> message = new MQMessage<>(header, requestDto);
mqService.convertAndSend(backOrdersNotifyActivityExchange, backOrdersChangeOrderStatusConsumerQueue, message);
} catch (Exception e) {
ErrorLog.errorConvertJson(this.getClass(),"activityReverseError:"+orderCode,e);
}
}
private void sendWechatReportMQ(OrderCallBackRequestVo body) {
try {
......
package cn.freemud.entities.dto;
import lombok.Data;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: OrderStatusChangeRequestDto
* @Package cn.freemud.entities.dto.user
* @Description:
* @author: bowen.hu
* @date: 2019-09-10 15:28
* @Copyright: 2019 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目的
*/
@Data
public class OrderStatusChangeRequestDto {
/**
* 订单号
*/
private String oid;
/**
* 订单状态
*/
private Integer orderStatus;
}
......@@ -23,7 +23,10 @@ public class OrderCallBackRequestVo {
private String orderCode;
// 售后单编号(operateType=2返回)
private String afterSalesCode;
//延迟类型
/**
* 延迟通知类型
* 2 未支付超时关单
*/
private Integer delayMsgEventType;
//操作类型 0= 其他信息修改,1=订单正向操作,2=订单逆向操作
private Integer operateType;
......
......@@ -183,12 +183,20 @@ public class CheckOrder {
}
// TODO: 2020/6/16 门店校验处理
String takeMealFlag = createOrderVo.getTakeMealFlag();
//未营业无预约时间无法下单
if (!StoreConstant.BUSINESS.equals(storeResponseDto.getState()) && StringUtils.isBlank(takeMealFlag) && "0".equals(takeMealFlag)) {
throw new ServiceException(ResponseResult.STORE_ITEM_CHECK_CLOSE);
String takeMealTimes = createOrderVo.getTakeMealTime();
//立即送达
if("0".equals(takeMealFlag) || (StringUtils.isEmpty(createOrderVo.getExpectTime()) && StringUtils.isEmpty(takeMealTimes))) {
//未营业无预约时间无法下单
if (!StoreConstant.BUSINESS.equals(storeResponseDto.getState())) {
throw new ServiceException(ResponseResult.STORE_ITEM_CHECK_CLOSE);
}
// 外卖单选择立即送达的话,下单时间必须在店铺外卖时间内
if(createOrderVo.getOrderType().compareTo(CreateOrderType.TAKE_OUT.getCode()) == 0) {
checkTakeOutTime(storeResponseDto, new Date(), new Date(), true);
}
}
String takeMealTimes = createOrderVo.getTakeMealTime();
//有预约时间
if(StringUtils.isNotBlank(takeMealTimes) || StringUtils.isNotBlank(createOrderVo.getExpectTime())){
// 设置预约时间
......@@ -310,37 +318,48 @@ public class CheckOrder {
}
if (CreateOrderType.TAKE_OUT.getCode().equals(createOrderVo.getOrderType())) {
String deliveryStr = storeResponseDto.getDeliveryHoursDay().replace("-", ",")
.replace("_", ",");
String[] deliverys = deliveryStr.split(",");
Date deliveryStartDate = null;
Date deliveryEndDate = null;
if (deliverys.length == 2) {
SimpleDateFormat hhmmss = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat yyyyMMdd = new SimpleDateFormat("yyyy-MM-dd");
String startDateTimeStr = yyyyMMdd.format(date) + " " + deliverys[0] + ":00";
String endDateTimeStr = yyyyMMdd.format(date) + " " + deliverys[1] + ":00";
try {
deliveryEndDate = hhmmss.parse(endDateTimeStr);
deliveryStartDate = hhmmss.parse(startDateTimeStr);
} catch (ParseException e) {
LogUtil.error("getStoreDeliveryInfo_error", endDateTimeStr, e.getMessage());
}
}
if (deliveryStartDate == null || deliveryEndDate == null) {
throw new ServiceException(ResponseResult.ORDER_CREATE_TIME_NOT_DELIVERY);
}
// 校验预约配送时间
if (expectTimeInTodayBusinessTime && (takeMealDateTime.before(deliveryStartDate) || takeMealDateTime.after(deliveryEndDate))) {
throw new ServiceException(ResponseResult.ORDER_CREATE_TIME_NOT_DELIVERY);
}
Date nextDeliveryStartDate = DateUtil.addDays(deliveryStartDate, 1);
Date nextDeliveryEndDate = DateUtil.addDays(deliveryEndDate, 1);
// 隔日预约外卖校验预约配送时间
if (!expectTimeInTodayBusinessTime && (takeMealDateTime.before(nextDeliveryStartDate) || takeMealDateTime.after(nextDeliveryEndDate))) {
throw new ServiceException(ResponseResult.ORDER_CREATE_TIME_NOT_DELIVERY);
checkTakeOutTime(storeResponseDto, date, takeMealDateTime, expectTimeInTodayBusinessTime);
}
}
/**
* 检验订单是否在外卖时间内
* @param storeResponseDto 店铺信息
* @param now 当前时间
* @param takeMealDateTime 预约单送达时间/即时单下单时间
* @param expectTimeInTodayBusinessTime 是否在当日营业时间内
*/
private void checkTakeOutTime(StoreResponse.BizVO storeResponseDto, Date now, Date takeMealDateTime, boolean expectTimeInTodayBusinessTime) {
String deliveryStr = storeResponseDto.getDeliveryHoursDay().replace("-", ",")
.replace("_", ",");
String[] deliverys = deliveryStr.split(",");
Date deliveryStartDate = null;
Date deliveryEndDate = null;
if (deliverys.length == 2) {
SimpleDateFormat hhmmss = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat yyyyMMdd = new SimpleDateFormat("yyyy-MM-dd");
String startDateTimeStr = yyyyMMdd.format(now) + " " + deliverys[0] + ":00";
String endDateTimeStr = yyyyMMdd.format(now) + " " + deliverys[1] + ":00";
try {
deliveryStartDate = hhmmss.parse(startDateTimeStr);
deliveryEndDate = hhmmss.parse(endDateTimeStr);
} catch (ParseException e) {
LogUtil.error("getStoreDeliveryInfo_error", endDateTimeStr, e.getMessage());
}
}
if (deliveryStartDate == null || deliveryEndDate == null) {
throw new ServiceException(ResponseResult.ORDER_CREATE_TIME_NOT_DELIVERY);
}
// 校验预约配送时间
if (expectTimeInTodayBusinessTime && (takeMealDateTime.before(deliveryStartDate) || takeMealDateTime.after(deliveryEndDate))) {
throw new ServiceException(ResponseResult.ORDER_CREATE_TIME_NOT_DELIVERY);
}
Date nextDeliveryStartDate = DateUtil.addDays(deliveryStartDate, 1);
Date nextDeliveryEndDate = DateUtil.addDays(deliveryEndDate, 1);
// 隔日预约外卖校验预约配送时间
if (!expectTimeInTodayBusinessTime && (takeMealDateTime.before(nextDeliveryStartDate) || takeMealDateTime.after(nextDeliveryEndDate))) {
throw new ServiceException(ResponseResult.ORDER_CREATE_TIME_NOT_DELIVERY);
}
}
public Date getOrderExpectTime(String takeMealFlag,String takeMealTimes,String expectTime,
......
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