Commit 75fed94e by ping.wu

Merge branches 'feature/20211224_订单业务类型改造合并分支_wuping' and 'qa' of…

Merge branches 'feature/20211224_订单业务类型改造合并分支_wuping' and 'qa' of http://gitlab.freemud.com/order-group-application/order-group into qa

# Conflicts:
#	order-application-service/src/main/java/cn/freemud/adapter/OrderAdapter.java
#	order-application-service/src/main/java/cn/freemud/service/impl/OrderServiceImpl.java
#	order-application-service/src/main/java/cn/freemud/service/thirdparty/CustomerExtendClient.java
#	shopping-cart-application-service/src/main/java/cn/freemud/service/thirdparty/CustomScoreClient.java
parents 140da01e 657edb66
......@@ -664,10 +664,13 @@ public class OrderAdapter {
orderClients = Arrays.asList(OrderClientType.SAAS.getIndex(),OrderClientType.ALIPAY.getIndex());
bizTypes.add(BizTypeEnum.ORDINARY.getBizType());
queryOrdersDto.setMarketingType(MarketTypeEnum.CASHIER.getIndex());
} else if (OrderChannelType.TIKTOK.getCode().equals(channelType)) {//抖音目前只有卖券,点餐业务已废弃
orderClients = Arrays.asList(OrderClientType.TIKTOKPAY.getIndex());
bizTypes.add(BizTypeEnum.SALE_COUPON.getBizType());
} else {
orderClients = Arrays.asList(OrderClientType.SAAS.getIndex(),OrderClientType.ALIPAY.getIndex(),OrderClientType.APP.getIndex());
orderClients = Arrays.asList(OrderClientType.SAAS.getIndex(), OrderClientType.ALIPAY.getIndex(), OrderClientType.APP.getIndex());
bizTypes = Arrays.asList(BizTypeEnum.ORDINARY.getBizType(), BizTypeEnum.SALE_COUPON.getBizType(), BizTypeEnum.ADVANCE_ORDER.getBizType());
queryOrdersDto.setMarketingTypes(Arrays.asList(MarketTypeEnum.ORDER.getIndex(),MarketTypeEnum.COLLAGE.getIndex(),MarketTypeEnum.WE_CHAT_LIVE_SELL.getIndex()));
queryOrdersDto.setMarketingTypes(Arrays.asList(MarketTypeEnum.ORDER.getIndex(), MarketTypeEnum.COLLAGE.getIndex(), MarketTypeEnum.WE_CHAT_LIVE_SELL.getIndex()));
}
List<Integer> payStatus = Arrays.asList(PayStatus.HAVE_PAID.getCode(), PayStatus.HAVE_REFUND.getCode(), PayStatus.COMPLETE.getCode());
queryOrdersDto.setPayStatus((Integer[]) payStatus.toArray());
......@@ -1875,7 +1878,7 @@ public class OrderAdapter {
String redisKey = MessageFormat.format(OrderRedisKeyConstant.ORDER_REFUND_CONFIG, partnerId, wxAppId);
String hashKey = OrderTypeV1.TAKE_OUT.getCode().equals(orderType)
? OrderRedisKeyConstant.HashKeyForOrderRefundConfig.TAKE_OUT
: OrderRedisKeyConstant.HashKeyForOrderRefundConfig.EAT_IN;;
: OrderRedisKeyConstant.HashKeyForOrderRefundConfig.EAT_IN;
String configStr = redisCache.hashGet(redisKey, hashKey);
if (StringUtils.isNotEmpty(configStr)) {
OrderRefundConfigEntity config = JSON.parseObject(configStr, OrderRefundConfigEntity.class);
......@@ -3502,7 +3505,7 @@ public class OrderAdapter {
orderClients.add(OrderClientType.ALIPAY.getIndex());
// } else if (OrderChannelType.BEAUTIFUL.getCode().equals(channelType)) {// 美业新加
// orderClients.add(OrderClientType.BEAUTIFUL.getIndex());
orderClients.add(OrderClientType.ALIPAY.getIndex());
// orderClients.add(OrderClientType.ALIPAY.getIndex());
// } else if (OrderChannelType.CASHIER.getCode().equals(channelType)) {
// orderClients.add(OrderClientType.CASHIER.getIndex());
} else {
......
......@@ -22,7 +22,7 @@ public enum OrderChannelType {
SAASMALL("saasmall", "微商城"),
BEAUTIFUL("beautiful", "美业"),
// BEAUTIFUL("beautiful", "美业"),
APP("app", "APP"),
......
......@@ -64,7 +64,7 @@ public class WeChatLiveMsgHandle {
*/
public void reportOrderStatus(OrderBeanV1 orderBean, int flag) {
if (Objects.nonNull(orderBean)
&& Objects.equals(orderBean.getMarketingType(), MarketTypeEnum.WE_CHAT_LIVE_SELL.getIndex())) {
&& Objects.equals(MarketTypeEnum.WE_CHAT_LIVE_SELL.getIndex().byteValue(),orderBean.getMarketingType())) {
OrderSycnPayRequestVO request = new OrderSycnPayRequestVO();
String orderId = orderBean.getOid();
......
......@@ -46,6 +46,7 @@ import cn.freemud.service.thirdparty.CustomerPropertyClient;
import cn.freemud.service.thirdparty.ShoppingCartClient;
import cn.freemud.service.thirdparty.StoreBaseApiClient;
import cn.freemud.utils.AppLogUtil;
import cn.freemud.utils.DateUtils;
import cn.freemud.utils.ResponseUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
......@@ -502,9 +503,10 @@ public class CheckOrder {
}
Date createOrder = DateUtil.addMinutes(new Date(), 10);
int diffDay = DateUtils.diffDay(new Date(), takeMealDateTime);
for (String todayTime : todayBusinessTimes) {
//每段营业时间校验
BusinessDate businessDate2 = this.getStoreBusinessDate(todayTime, true);
BusinessDate businessDate2 = this.getStoreBusinessDate(todayTime, diffDay);
if (createOrder.after(businessDate2.getEndDate())) {
throw new ServiceException(ResponseResult.STORE_SELF_ERROR_10);
}
......@@ -522,21 +524,6 @@ public class CheckOrder {
&& BizTypeEnum.ADVANCE_ORDER.getBizType().compareTo(bizType) == 0;
}
/**
* 获取门店营业时间
*
* @param storeResponseDto
* @param toDay true 今日,false 明天
* @return
*/
private BusinessDate getStoreBusinessDate(StoreResponseDto 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, StoreResponseDto storeResponseDto, Date takeMealDateTime) {
if (takeMealDateTime == null) {
......@@ -548,11 +535,12 @@ public class CheckOrder {
if (CollectionUtils.isEmpty(todayBusinessTimes)) {
throw new ServiceException(ResponseResult.STORE_BUSINESS_HOUR_ERROR);
}
BusinessDate businessDate = getStoreBusinessDate(todayBusinessTimes.get(todayBusinessTimes.size() - 1), true);
Date date = new Date();
int diffDay = DateUtils.diffDay(date, takeMealDateTime);
BusinessDate businessDate = getStoreBusinessDate(todayBusinessTimes.get(todayBusinessTimes.size() - 1), diffDay);
todayEndDate = businessDate.getEndDate();
//在当天营业时间内
boolean expectTimeInTodayBusinessTime = true;
Date date = new Date();
Date newDate = DateUtil.convert2Date(date, DateUtil.FORMAT_yyyyMMdd_date);
newDate = DateUtil.addDays(newDate, 1);
//隔天预约(在明日凌晨之后且在门店营业结束之后)
......@@ -563,7 +551,7 @@ public class CheckOrder {
boolean inTodayBusinessTime = true;
for (String todayTime : todayBusinessTimes) {
//每段营业时间校验
BusinessDate businessDate2 = getStoreBusinessDate(todayTime, true);
BusinessDate businessDate2 = getStoreBusinessDate(todayTime, diffDay);
if (takeMealDateTime.getTime() >= businessDate2.getStartDate().getTime()
&& takeMealDateTime.getTime() <= businessDate2.getEndDate().getTime()) {
inTodayBusinessTime = false;
......@@ -579,7 +567,7 @@ public class CheckOrder {
List<String> nextDayBusinessTimes = storeCenterService.getNextDayBusinessTime(Integer.parseInt(storeResponseDto.getBusinessType()), storeResponseDto.getBusinessHoursDay());
boolean inNextDayBusinessTime = true;
for (String nextDayTime : nextDayBusinessTimes) {
BusinessDate storeNextBusinessDate = getStoreBusinessDate(nextDayTime, false);
BusinessDate storeNextBusinessDate = getStoreBusinessDate(nextDayTime, diffDay);
if (takeMealDateTime.getTime() >= storeNextBusinessDate.getStartDate().getTime()
&& takeMealDateTime.getTime() <= storeNextBusinessDate.getEndDate().getTime()) {
inNextDayBusinessTime = false;
......@@ -668,7 +656,7 @@ public class CheckOrder {
if (CollectionUtils.isEmpty(todayBusinessTimes)) {
throw new ServiceException(ResponseResult.STORE_BUSINESS_HOUR_ERROR);
}
BusinessDate businessDate = getStoreBusinessDate(todayBusinessTimes.get(todayBusinessTimes.size() - 1), true);
BusinessDate businessDate = getStoreBusinessDate(todayBusinessTimes.get(todayBusinessTimes.size() - 1), 0);
todayEndDate = businessDate.getEndDate();
//隔天营业的预约时间处理 计算出预约时间在当前时间之前,预约时间加1天 newDate.before(todayEndDate)=隔天营业
......@@ -691,9 +679,6 @@ public class CheckOrder {
return takeMealDateTime;
}
public BusinessDate getStoreBusinessDate(String businessHoursDay, boolean today) {
return this.getStoreBusinessDate(businessHoursDay, today ? 0 : 1);
}
public ShoppingCartGoodsDto getShoppingCartGoodsDto(CreateOrderVo createOrderVo) {
// ShoppingCartInfoRequestVo.BuyMemberCard buyMemberCard = null;
......@@ -1402,7 +1387,7 @@ public class CheckOrder {
}
}
private BusinessDate getStoreBusinessDate(String businessHoursDay, int today) {
public BusinessDate getStoreBusinessDate(String businessHoursDay, int today) {
BusinessDate businessDate = new BusinessDate();
//设置营业开始和结束时间
String businessHourStr = businessHoursDay.replace("-", ",").replace("_", ",");
......@@ -1459,13 +1444,14 @@ public class CheckOrder {
private void getBusinessTimeByType1(String businessHoursDay, Date takeMealDateTime) {
String[] splitArr = businessHoursDay.split(";");
boolean isBusinessTime = false;
int diffDay = DateUtils.diffDay(new Date(), takeMealDateTime);
for (String businessHours : splitArr) {
if ("00: 00-00: 00".equals(businessHours)) {
// 不在营业时间范围
throw new ServiceException(ResponseResult.STORE_NO_OPEN);
}
// 获取营业时间
BusinessDate storeBusinessDate = getStoreBusinessDate(businessHours, true);
BusinessDate storeBusinessDate = getStoreBusinessDate(businessHours, diffDay);
// 检验 是否在营业时间 范围内
if (takeMealDateTime.after(storeBusinessDate.getStartDate()) && takeMealDateTime.before(storeBusinessDate.getEndDate())) {
// 在营业时间范围
......
......@@ -2514,9 +2514,10 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
channelType = OrderChannelType.SAASMALL.getCode();
} else if (UserLoginChannelEnum.APP.getCode().equals(userLoginInfoDto.getChannel())) {
channelType = OrderChannelType.APP.getCode();
} else if (OrderChannelType.BEAUTIFUL.getCode().equals(queryOrderVo.getChannelType())) {
channelType = OrderChannelType.BEAUTIFUL.getCode();
}
// else if (OrderChannelType.BEAUTIFUL.getCode().equals(queryOrderVo.getChannelType())) {
// channelType = OrderChannelType.BEAUTIFUL.getCode();
// }
return channelType;
}
......
......@@ -295,7 +295,7 @@ public class OrderAdapterServiceImpl {
if (!LockUtils.lockAfter(redisCache.getRedisTemplate(), paySuccessKey)) {
return orderAdapter.paySuccessLockedMessage();
}
OrderBeanV1 orderBeanSass = null;
OrderBeanV1 orderBean = null;
try {
ConfirmOrderDto confirmOrderDto = orderAdapter.convent2ConfirmOrderDto(message);
// 蜜雪+混合支付专用:通过交易号从缓存中拿订单号,如果有数据则实际订单号为其value值
......@@ -307,7 +307,7 @@ public class OrderAdapterServiceImpl {
if (MapUtils.isEmpty(orderBeans)) {
return gson.toJson(message);
}
OrderBeanV1 orderBean = orderBeans.get(OrderBeanType.SAASORDER.getCode());
orderBean = orderBeans.get(OrderBeanType.SAASORDER.getCode());
// 注意,支付状态判断优先级最高
if (!PayStatus.NOT_PAY.getCode().equals(orderBean.getPayStatus())) {
return orderAdapter.sendPaySuccessNoticeMessage();
......@@ -319,10 +319,6 @@ public class OrderAdapterServiceImpl {
orderServiceImpl.timeOutRefund(orderBean);
return orderAdapter.sendPaySuccessNoticeMessage();
}
//紧急开关时 判断订单bean是否存在
orderBeanSass = orderBean;
OrderClientType.SAAS.getIndex();
// 支付成功处理
String result = "";
switch (client) {
......@@ -330,42 +326,36 @@ public class OrderAdapterServiceImpl {
result = orderCommonService.paySuccessCallback(message, confirmOrderDto, orderBeans);
break;
case 27: //抖音卖券订单处理 OrderClientType.TIKTOKPAY.getIndex()
if (orderBean.getBizType() == BizTypeEnum.SALE_COUPON.getBizType()) {
if (Objects.equals(BizTypeEnum.SALE_COUPON.getBizType(),orderBean.getBizType())) {
result = sellCouponOrderService.paySuccessCallbackForTiktok(message, confirmOrderDto, orderBeans);
break;
}
break;
// bizType不等于4的,非积分商城订单,继续往下走
case 12: //app订单 OrderClientType.APP.getIndex()
if (orderBean.getBizType() != 6) {
if (!Objects.equals(BizTypeEnum.SALE_COUPON.getBizType(),orderBean.getBizType())) {
// bizType为卖券的订单,不走app订单逻辑
result = appOrderService.paySuccessCallback(message, confirmOrderDto, orderBeans);
break;
}
// 默认点餐处理
if (orderBean.getBizType() == BizTypeEnum.ORDINARY.getBizType()) {
result = orderService.paySuccessCallback(message, confirmOrderDto, orderBeans);
break;
}
break;
default:
default://微信,支付宝渠道
// 积分商城订单
if (orderBean.getBizType() == BizTypeEnum.INTEGRAL_MALL.getBizType()) {
if (Objects.equals(BizTypeEnum.INTEGRAL_MALL.getBizType(),orderBean.getBizType())) {
result = pointsMallOrderService.paySuccessCallback(message,orderBeans);
break;
}
// 买券虚拟订单
if (orderBean.getBizType() == BizTypeEnum.SALE_COUPON.getBizType()) {
if (Objects.equals(BizTypeEnum.SALE_COUPON.getBizType(),orderBean.getBizType())) {
result = sellCouponOrderService.paySuccessCallback(message, confirmOrderDto, orderBeans);
break;
}
// 微商城订单处理
if (orderBean.getBizType() == BizTypeEnum.MALL.getBizType()) {
if (Objects.equals(BizTypeEnum.MALL.getBizType(),orderBean.getBizType())){
result = mallOrderService.paySuccessCallback(message, confirmOrderDto, orderBeans);
break;
}
// 收银单处理
if (orderBean.getMarketingType().intValue() == MarketTypeEnum.CASHIER.getIndex()) {
// 收银单处理
if (Objects.equals(MarketTypeEnum.CASHIER.getIndex(),orderBean.getMarketingType().intValue())) {
result = cashierOrderService.paySuccessCallback(message, confirmOrderDto, orderBeans);
break;
}
......@@ -374,8 +364,9 @@ public class OrderAdapterServiceImpl {
result = mcCafeOrderService.paySuccessCallback(message, confirmOrderDto, orderBeans);
break;
}
// 默认点餐处理
if (orderBean.getBizType() == BizTypeEnum.ORDINARY.getBizType() || orderBean.getBizType() == BizTypeEnum.ADVANCE_ORDER.getBizType() ) {
// 默认点餐处理(点餐业务和预定业务)
if (Objects.equals(BizTypeEnum.ORDINARY.getBizType(),orderBean.getBizType())
|| Objects.equals(BizTypeEnum.ADVANCE_ORDER.getBizType(),orderBean.getBizType())) {
result = orderService.paySuccessCallback(message, confirmOrderDto, orderBeans);
break;
}
......@@ -387,9 +378,9 @@ public class OrderAdapterServiceImpl {
//删除分布式锁
redisCache.delete("saas:lockAfter:" + paySuccessKey);
// 增加全局开关,当紧急方案打开时进行直接处理callBack消息
if (orderBeanSass != null && orderCenterProperties.isUrgentCallbackOpen()) {
if (orderBean != null && orderCenterProperties.isUrgentCallbackOpen()) {
// 查询
OrderCallBackRequestVo requestVo = saasOrderHandle.convert2CallbackReq(orderBeanSass.getOid(),2,null,null);
OrderCallBackRequestVo requestVo = saasOrderHandle.convert2CallbackReq(orderBean.getOid(),2,null,null);
ApiLog.infoMessage("紧急方案 支付成功直接调用callback,orderCode:{},requestId:{}",requestVo.getOrderCode(),requestVo.getRequestId());
orderCallbackClient.callbackOrder(requestVo);
}
......
......@@ -2736,8 +2736,10 @@ public class OrderServiceImpl implements Orderservice {
channelType = OrderChannelType.SAASMALL.getCode();
} else if (UserLoginChannelEnum.APP.getCode().equals(userLoginInfoDto.getChannel())) {
channelType = OrderChannelType.APP.getCode();
} else if (OrderChannelType.BEAUTIFUL.getCode().equals(queryOrderVo.getChannelType())) {
channelType = OrderChannelType.BEAUTIFUL.getCode();
// } else if (OrderChannelType.BEAUTIFUL.getCode().equals(queryOrderVo.getChannelType())) {
// channelType = OrderChannelType.BEAUTIFUL.getCode();
} else if (OrderChannelType.TIKTOK.getCode().equals(queryOrderVo.getChannelType())) {
channelType = OrderChannelType.TIKTOK.getCode();
} else if (OrderChannelType.CASHIER.getCode().equals(queryOrderVo.getChannelType())) {
channelType = OrderChannelType.CASHIER.getCode();
}
......
......@@ -16,7 +16,6 @@ import cn.freemud.base.util.DateUtil;
import cn.freemud.entities.dto.StoreResponseDto;
import cn.freemud.entities.dto.order.BusinessDate;
import cn.freemud.entities.vo.CreateOrderBaseVo;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.ProductVo;
import cn.freemud.entities.vo.QueryOrderResponseVo;
import cn.freemud.enums.CreateOrderType;
......@@ -28,7 +27,6 @@ import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.ordercenter.entities.v1.ProductBeanV1;
import com.freemud.application.sdk.api.ordercenter.entities.v1.ProductDiscountV1;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderSendCouponResp;
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.OldOrderAccountType;
import com.freemud.sdk.api.assortment.order.request.order.OrderProductAddInfoDto;
......@@ -54,42 +52,6 @@ public class CocoOrderRelationServiceImpl implements OrderRelationService {
private CheckOrder checkOrder;
// @Override
public void createOrderTimeCheck(StoreResponseDto storeResponseDto, CreateOrderVo createOrderVo) {
// 只有外卖单才做下单时间判断
if (!CreateOrderType.TAKE_OUT.getCode().equals(createOrderVo.getOrderType())){
return;
}
// 如果是明天的预约单,不做时间检查
// 设置预约时间
Date takeMealDateTime = checkOrder.getOrderExpectTime(createOrderVo.getTakeMealFlag(), createOrderVo.getTakeMealTime(), createOrderVo.getExpectTime(),
CreateOrderType.getByCode(createOrderVo.getOrderType()), storeResponseDto.getServiceTime(), storeResponseDto);
Date todayEnd = DateUtil.setEndDay(new Date());
if(takeMealDateTime != null && todayEnd.before(takeMealDateTime)){
return;
}
//获取门店当天营业时间
// coco只有一个营业时间,如果返回多个就报错
Date todayEndDate = null;
List<String> todayBusinessTimes = storeCenterService.getTodayBusinessTime(Integer.parseInt(storeResponseDto.getBusinessType()), storeResponseDto.getBusinessHoursDay());
if (CollectionUtils.isEmpty(todayBusinessTimes) || 1 < todayBusinessTimes.size() ) {
throw new ServiceException(ResponseResult.STORE_BUSINESS_HOUR_ERROR);
}
BusinessDate businessDate = checkOrder.getStoreBusinessDate(todayBusinessTimes.get(0), true);
todayEndDate = businessDate.getEndDate();
// 当前时间+15分钟 > 门店打烊时间,返回错误
Date nowAddDate = DateUtil.addMinutes(new Date(),15);
if(nowAddDate.after(todayEndDate)){
throw new ServiceException(ResponseResult.STORE_WILL_COLSE);
}
}
// @Override
public void createOrderTimeCheck(StoreResponseDto storeResponseDto, CreateOrderBaseVo createOrderVo) {
// 只有外卖单才做下单时间判断
if (!CreateOrderType.TAKE_OUT.getCode().equals(createOrderVo.getOrderType())){
......@@ -114,7 +76,7 @@ public class CocoOrderRelationServiceImpl implements OrderRelationService {
if (CollectionUtils.isEmpty(todayBusinessTimes) || 1 < todayBusinessTimes.size() ) {
throw new ServiceException(ResponseResult.STORE_BUSINESS_HOUR_ERROR);
}
BusinessDate businessDate = checkOrder.getStoreBusinessDate(todayBusinessTimes.get(0), true);
BusinessDate businessDate = checkOrder.getStoreBusinessDate(todayBusinessTimes.get(0), 0);
todayEndDate = businessDate.getEndDate();
// 当前时间+15分钟 > 门店打烊时间,返回错误
......
......@@ -44,6 +44,38 @@ public class DateUtils {
}
}
public static int diffDay(Date before, Date after) {
Calendar cal1 = Calendar.getInstance();
cal1.setTime(before);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(after);
int day1= cal1.get(Calendar.DAY_OF_YEAR);
int day2 = cal2.get(Calendar.DAY_OF_YEAR);
int year1 = cal1.get(Calendar.YEAR);
int year2 = cal2.get(Calendar.YEAR);
if(year1 != year2) //同一年
{
int timeDistance = 0 ;
for(int i = year1 ; i < year2 ; i ++)
{
if(i%4==0 && i%100!=0 || i%400==0) //闰年
{
timeDistance += 366;
}
else //不是闰年
{
timeDistance += 365;
}
}
return timeDistance + (day2-day1) ;
}
else //不同年
{
return day2-day1;
}
}
}
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