Commit 9b51bba5 by zhiheng.zhang

Merge remote-tracking branch 'origin/master'

parents 093a74ee b71d31d0
...@@ -37,14 +37,12 @@ import org.apache.commons.collections4.CollectionUtils; ...@@ -37,14 +37,12 @@ import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateFormatUtils; import org.apache.commons.lang.time.DateFormatUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Component @Component
...@@ -487,7 +485,7 @@ public class OrderSdkAdapter { ...@@ -487,7 +485,7 @@ public class OrderSdkAdapter {
* @param deliveryContactInfoList * @param deliveryContactInfoList
* @param addInfo * @param addInfo
*/ */
private void getThirdDeliveryInfo(List<DeliveryContactInfoCreateReq> deliveryContactInfoList, BaseCreateOrderRequest.DeliveryTypeInfo addInfo) { public void getThirdDeliveryInfo(List<DeliveryContactInfoCreateReq> deliveryContactInfoList, BaseCreateOrderRequest.DeliveryTypeInfo addInfo) {
//if (addInfo != null && addInfo.getDeliveryType() != null && QueryDeliveryType.THIRD.getCode().equals(addInfo.getDeliveryType().getCode())) { //if (addInfo != null && addInfo.getDeliveryType() != null && QueryDeliveryType.THIRD.getCode().equals(addInfo.getDeliveryType().getCode())) {
if (addInfo != null && addInfo.getDeliveryType() != null) { if (addInfo != null && addInfo.getDeliveryType() != null) {
DeliveryContactInfoCreateReq deliveryinfo = new DeliveryContactInfoCreateReq(); DeliveryContactInfoCreateReq deliveryinfo = new DeliveryContactInfoCreateReq();
...@@ -2760,7 +2758,7 @@ public class OrderSdkAdapter { ...@@ -2760,7 +2758,7 @@ public class OrderSdkAdapter {
* @param accounts 订单优惠和费用(入参) * @param accounts 订单优惠和费用(入参)
* @return 订单金额 * @return 订单金额
*/ */
private Long updateOrderItemsAndSettlements(List<OrderItemCreateReq> orderItemList, List<OrderSettlementCreateReq> orderSettlementCreateReqList, List<OrderCostCreateReq> orderCostCreateReqs, public Long updateOrderItemsAndSettlements(List<OrderItemCreateReq> orderItemList, List<OrderSettlementCreateReq> orderSettlementCreateReqList, List<OrderCostCreateReq> orderCostCreateReqs,
List<CreateOrderProductRequest> products, List<CreateOrderAccountRequest> accounts, String partnerId) { List<CreateOrderProductRequest> products, List<CreateOrderAccountRequest> accounts, String partnerId) {
Long originalAmount = 0L; Long originalAmount = 0L;
// 更新订单费用信息 // 更新订单费用信息
...@@ -3267,7 +3265,7 @@ public class OrderSdkAdapter { ...@@ -3267,7 +3265,7 @@ public class OrderSdkAdapter {
/** /**
* 计算所有商品的重量 单位g * 计算所有商品的重量 单位g
*/ */
private Double sumOrderWeight(List<CreateOrderProductRequest> products) { public Double sumOrderWeight(List<CreateOrderProductRequest> products) {
Double totalWeight = 0D; Double totalWeight = 0D;
if (CollectionUtils.isEmpty(products)) { if (CollectionUtils.isEmpty(products)) {
return totalWeight; return totalWeight;
......
...@@ -2,7 +2,6 @@ package com.freemud.sdk.api.assortment.order.request.order; ...@@ -2,7 +2,6 @@ package com.freemud.sdk.api.assortment.order.request.order;
import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType; import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtendedReq; import com.freemud.application.sdk.api.ordercenter.request.OrderExtendedReq;
import com.freemud.application.sdk.api.ordercenter.request.create.OrderPayItemCreateReq;
import com.freemud.application.sdk.api.promotioncenter.request.promotion.ActivityUpdateStockRequest; import com.freemud.application.sdk.api.promotioncenter.request.promotion.ActivityUpdateStockRequest;
import com.freemud.sdk.api.assortment.order.config.BaseConfig; import com.freemud.sdk.api.assortment.order.config.BaseConfig;
import com.freemud.sdk.api.assortment.order.enums.*; import com.freemud.sdk.api.assortment.order.enums.*;
...@@ -12,7 +11,7 @@ import java.util.Date; ...@@ -12,7 +11,7 @@ import java.util.Date;
import java.util.List; import java.util.List;
@Data @Data
public class BaseCreateOrderRequest extends BaseConfig { public class BaseCreateOrderRequest extends BaseConfig {
/** /**
* 商户ID 必填 * 商户ID 必填
......
...@@ -4,8 +4,6 @@ import lombok.AllArgsConstructor; ...@@ -4,8 +4,6 @@ import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.util.List;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
......
...@@ -17,6 +17,13 @@ ...@@ -17,6 +17,13 @@
<artifactId>order-application-service</artifactId> <artifactId>order-application-service</artifactId>
<dependencies> <dependencies>
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.0.1</version>
</dependency>
<dependency> <dependency>
<groupId>com.freemud.application.service.sdk</groupId> <groupId>com.freemud.application.service.sdk</groupId>
<artifactId>sdk-common-base</artifactId> <artifactId>sdk-common-base</artifactId>
...@@ -33,6 +40,7 @@ ...@@ -33,6 +40,7 @@
</exclusion> </exclusion>
</exclusions> </exclusions>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.freemud.application.service.sdk</groupId> <groupId>com.freemud.application.service.sdk</groupId>
<artifactId>structure-center-sdk</artifactId> <artifactId>structure-center-sdk</artifactId>
......
//package cn.freemud.config;
//
//import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
//import lombok.extern.log4j.Log4j2;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
///**
// * @author : xh.Z
// * @email : fisherman0510@163.com
// * @Date : 2021/4/26 下午6:21
// * @description : xxl-job 配置
// */
//@Configuration
//@Log4j2
//public class XxlJobConfig {
//
// @Value("${xxl.job.admin.addresses}")
// private String adminAddresses;
//
// @Value("${xxl.job.executor.appname}")
// private String appName;
//
// //@Value("${xxl.job.executor.ip}")
// private String ip;
//
// //@Value("${xxl.job.executor.port}")
// private int port;
//
// //@Value("${xxl.job.accessToken}")
// private String accessToken;
//
// @Value("${xxl.job.executor.logpath:/data/applogs/xxl-job/jobhandler}")
// private String logPath;
//
// @Value("${xxl.job.executor.logretentiondays:-1}")
// private int logRetentionDays;
//
//
// @Bean(initMethod = "start", destroyMethod = "destroy")
// public XxlJobSpringExecutor xxlJobExecutor() {
// log.info(">>>>>>>>>>> xxl-job config init.");
// XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
// xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
// xxlJobSpringExecutor.setAppName(appName);
// xxlJobSpringExecutor.setIp(ip);
// xxlJobSpringExecutor.setPort(port);
// xxlJobSpringExecutor.setAccessToken(accessToken);
// xxlJobSpringExecutor.setLogPath(logPath);
// xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
//
// return xxlJobSpringExecutor;
// }
//}
...@@ -23,9 +23,14 @@ import cn.freemud.service.MCCafeOrderService; ...@@ -23,9 +23,14 @@ import cn.freemud.service.MCCafeOrderService;
import cn.freemud.service.OrderAdapterService; import cn.freemud.service.OrderAdapterService;
import cn.freemud.service.Orderservice; import cn.freemud.service.Orderservice;
import cn.freemud.service.impl.MallOrderServiceImpl; import cn.freemud.service.impl.MallOrderServiceImpl;
import cn.freemud.utils.LogUtil;
import cn.freemud.utils.ResponseUtil; import cn.freemud.utils.ResponseUtil;
import cn.freemud.xxljob.OrderCountJobHandler;
import com.freemud.application.sdk.api.log.ApiAnnotation; import com.freemud.application.sdk.api.log.ApiAnnotation;
import com.freemud.application.sdk.api.log.LogParams; import com.freemud.application.sdk.api.log.LogParams;
import com.freemud.application.sdk.api.ordercenter.request.OrderCountReqs;
import com.freemud.application.sdk.api.ordercenter.response.OrderCountResp;
import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -33,6 +38,10 @@ import org.springframework.validation.BindingResult; ...@@ -33,6 +38,10 @@ import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.Map;
@Slf4j
@RequestMapping("/order") @RequestMapping("/order")
@RestController @RestController
@Validated @Validated
...@@ -76,6 +85,15 @@ public class OrderController { ...@@ -76,6 +85,15 @@ public class OrderController {
} }
/** /**
* 通用创建订单
*/
@ApiAnnotation(logMessage = "createOrderUniversal")
@PostMapping("/createOrderUniversal")
public BaseResponse createOrderUniversal(@Validated @LogParams @RequestBody Map<String, Object> param) {
return orderAdapterService.createOrderUniversal(param);
}
/**
* 麦咖啡创建订单 * 麦咖啡创建订单
*/ */
@ApiAnnotation(logMessage = "createMCCafeOrder") @ApiAnnotation(logMessage = "createMCCafeOrder")
...@@ -444,4 +462,23 @@ public class OrderController { ...@@ -444,4 +462,23 @@ public class OrderController {
public BaseResponse scoreRecord(@Validated @LogParams @RequestBody QueryOrderVo queryOrderVo) { public BaseResponse scoreRecord(@Validated @LogParams @RequestBody QueryOrderVo queryOrderVo) {
return orderservice.scoreRecord(queryOrderVo); return orderservice.scoreRecord(queryOrderVo);
} }
@Autowired
private OrderCountJobHandler orderCountJobHandler;
/**
* 订单统计 上报数据
* @param
* @return
*/
@ApiAnnotation(logMessage = "reportSendOrderCount")
@GetMapping("/reportSendOrderCount")
public BaseResponse reportSendOrderCount() throws Exception {
LogUtil.info("触发订单上报",null,null);
orderCountJobHandler.execute(null);
return ResponseUtil.success();
}
} }
package cn.freemud.demoTest.adapter.bo;
import cn.freemud.demoTest.entities.bo.BasePaySuccessBo;
import cn.freemud.entities.vo.PaysuccessNoticeMessage;
public class ServiceBOAdapter {
public BasePaySuccessBo convert2BasePaySuccessBo(PaysuccessNoticeMessage message) {
BasePaySuccessBo baseAddGoodsVO = new BasePaySuccessBo();
return baseAddGoodsVO;
}
}
package cn.freemud.demoTest.adapter.dto;
public class dto {
}
package cn.freemud.demoTest.controller;
import cn.freemud.demoTest.adapter.bo.ServiceBOAdapter;
import cn.freemud.demoTest.entities.bo.BasePaySuccessBo;
import cn.freemud.demoTest.service.OrderService;
import cn.freemud.entities.vo.PaysuccessNoticeMessage;
import com.freemud.application.sdk.api.log.ApiAnnotation;
import com.freemud.application.sdk.api.log.LogParams;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
public class OrderController {
@Autowired
private OrderService orderService;
@Autowired
private ServiceBOAdapter serviceBOAdapter;
/**
* 订单支付成功后通知
*/
@ApiAnnotation(logMessage = "paySuccessCallback")
@PostMapping("/paySuccessCallback")
public String paySuccessCallback(@LogParams @RequestBody PaysuccessNoticeMessage message) {
BasePaySuccessBo basePaySuccessBo = serviceBOAdapter.convert2BasePaySuccessBo(message);
return orderService.paySuccessCallback(basePaySuccessBo);
}
}
package cn.freemud.demoTest.entities;
import cn.freemud.base.entity.BaseResponse;
public class ResponseBuilder {
private final static String DEFAULT_VER = "1";
private final static String SUCCESS_CODE = "100";
private final static String SUCCESS_MESSAGE = "SUCCESS";
/**
* 无业务响应参数成功返回
* @return
*/
public static BaseResponse success() {
return new BaseResponse(DEFAULT_VER, SUCCESS_CODE, SUCCESS_MESSAGE);
}
/**
* 带有业务响应参数成功返回
* @return
*/
public static <T> BaseResponse success(T t) {
return new BaseResponse(SUCCESS_CODE, SUCCESS_MESSAGE, DEFAULT_VER, t);
}
}
package cn.freemud.demoTest.entities.bo;
import lombok.Data;
@Data
public class BasePaySuccessBo {
/**
* 接口版本
*/
private Integer resultCode;
/**
* 非码交易流水号 fmID
*/
private String outTradeNo;
/**
* 支付时终端交易序号
*/
private String transId;
/**
* 订单金额
*/
private Integer totalFee;
/**
* 营业员编号
*/
private String openid;
/**
* 平台优惠
*/
private double platformCoupon;
/**
* 商家优惠
*/
private double merchantCoupon;
/**
* 平台支付订单号(微信订单号)
*/
private String paidNo;
/**
* 渠道方流水号 (比如扫呗,易宝等) 新支付服务做中转使用
*/
private String endTransId;
/**
* 第三方支付商户号 新支付服务做中转使用
*/
private String platformMchId;
/**
* 扫呗商户号 新支付服务做中转使用
*/
private String terminalId;
/**
* 会员规则ID
*/
private String ruleId;
/**
* 消息来源
*/
private Integer source;
}
package cn.freemud.demoTest.entities.dto;
import lombok.Data;
@Data
public class OrderInfoDemoDto {
private String source;
}
package cn.freemud.demoTest.entities.vo;
public class BasePaySuccessVO {
}
package cn.freemud.demoTest.enums;
public enum PartnerIdEnum {
MC_cofe("1628", "麦咖啡"),
COCO("1516", "coco"),
;
private String partnerId;
private String name;
PartnerIdEnum(String partnerId, String name) {
this.partnerId = partnerId;
this.name = name;
}
public String getPartnerId() {
return partnerId;
}
public String getName() {
return name;
}
}
package cn.freemud.demoTest.enums;
public enum TradeBizTypeEnum {
PLATFORM("platform", "平台"),
MEALS("meals", "围餐"),
MAIL("mall", "商城"),
;
private String code;
private String message;
TradeBizTypeEnum(String code, String message) {
this.code = code;
this.message = message;
}
public String getCode() {
return code;
}
public String getMessage() {
return message;
}
}
package cn.freemud.demoTest.manager;
import cn.freemud.demoTest.entities.dto.OrderInfoDemoDto;
public class OrderManager {
public OrderInfoDemoDto getOrderInfo() {
return null;
}
}
package cn.freemud.demoTest.service;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.demoTest.entities.ResponseBuilder;
import cn.freemud.demoTest.entities.bo.BasePaySuccessBo;
import cn.freemud.demoTest.entities.dto.OrderInfoDemoDto;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import com.alibaba.druid.util.StringUtils;
public abstract class AbstractPaySuccessService implements PaySuccessService{
public final String paysuccess(BasePaySuccessBo paySuccessBo, OrderInfoDemoDto orderInfoDemoDto) {
// 基本参数校验
this.checkParams(paySuccessBo);
// 支付成功执行逻辑
this.paySuccessDefault(paySuccessBo);
// 拼装返回体
this.paySuccessAfter(paySuccessBo);
return "";
}
public final BaseResponse paySuccessDefault(BasePaySuccessBo baseRequestDTO) {
return null;
}
/**
* 请求基本参数校验
* @return
*/
public final BaseResponse checkParams(BasePaySuccessBo baseRequestDTO) {
BaseResponse commonBaseResponse = this.checkCommParams(baseRequestDTO);
return ResponseBuilder.success();
}
public final BaseResponse checkCommParams(BasePaySuccessBo baseRequestDTO) {
if (StringUtils.isEmpty(baseRequestDTO.getTransId())){
throw new ServiceException(ResponseResult.PARAMETER_MISSING);
}
return ResponseBuilder.success();
}
/**
* 具体业务逻辑校验
*
* @return
*/
public final BaseResponse paySuccessAfter(BasePaySuccessBo baseRequestDTO) {
return ResponseBuilder.success();
}
}
package cn.freemud.demoTest.service;
import cn.freemud.demoTest.entities.bo.BasePaySuccessBo;
import cn.freemud.demoTest.entities.dto.OrderInfoDemoDto;
public abstract class AbstractTradeService {
public abstract String paySuccessCallback(BasePaySuccessBo basePaySuccessBo, OrderInfoDemoDto orderInfoDemoDto);
}
package cn.freemud.demoTest.service;
public class COCOPaySuccessService extends AbstractPaySuccessService {
}
package cn.freemud.demoTest.service;
import cn.freemud.demoTest.entities.bo.BasePaySuccessBo;
import cn.freemud.demoTest.entities.dto.OrderInfoDemoDto;
public class MAILService extends AbstractTradeService {
@Override
public String paySuccessCallback(BasePaySuccessBo basePaySuccessBo, OrderInfoDemoDto orderInfoDemoDto) {
return null;
}
}
package cn.freemud.demoTest.service;
import cn.freemud.demoTest.entities.bo.BasePaySuccessBo;
import cn.freemud.demoTest.entities.dto.OrderInfoDemoDto;
public class MEALSService extends AbstractTradeService {
@Override
public String paySuccessCallback(BasePaySuccessBo basePaySuccessBo, OrderInfoDemoDto orderInfoDemoDto) {
return null;
}
}
package cn.freemud.demoTest.service;
public class McCofePaySuccessService extends AbstractPaySuccessService {
}
package cn.freemud.demoTest.service;
import cn.freemud.demoTest.entities.bo.BasePaySuccessBo;
public interface OrderService {
/**
* 支付回调处理
*/
String paySuccessCallback(BasePaySuccessBo paySuccessBo);
}
package cn.freemud.demoTest.service;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.demoTest.entities.ResponseBuilder;
import cn.freemud.demoTest.entities.bo.BasePaySuccessBo;
public interface PaySuccessService {
/**
* 获取订单信息
* @param baseRequestDTO
* @return
*/
default BaseResponse getOrderInfo(BasePaySuccessBo baseRequestDTO) {
return ResponseBuilder.success();
}
/**
* 获取购物车信息
* @param baseRequestDTO
* @return
*/
default BaseResponse paySuccessDefault(BasePaySuccessBo baseRequestDTO) {
return ResponseBuilder.success();
}
/**
* 封装客制化返回
* @param baseRequestDTO
* @return
*/
default BaseResponse paySuccessAfter(BasePaySuccessBo baseRequestDTO) {
return ResponseBuilder.success();
}
}
package cn.freemud.demoTest.service;
import cn.freemud.demoTest.entities.bo.BasePaySuccessBo;
import cn.freemud.demoTest.entities.dto.OrderInfoDemoDto;
import cn.freemud.demoTest.service.factory.ServiceFactory;
public class PlatformPaySuccessService extends AbstractTradeService {
@Override
public String paySuccessCallback(BasePaySuccessBo basePaySuccessBo, OrderInfoDemoDto orderInfoDemoDto) {
AbstractPaySuccessService paySuccessService = ServiceFactory.createPaySuccessInstance(orderInfoDemoDto.getSource());
String result = paySuccessService.paysuccess(basePaySuccessBo,orderInfoDemoDto);
return "";
}
}
package cn.freemud.demoTest.service.factory;
import cn.freemud.base.ApplicationContextWare;
import cn.freemud.demoTest.enums.PartnerIdEnum;
import cn.freemud.demoTest.enums.TradeBizTypeEnum;
import cn.freemud.demoTest.service.*;
public class ServiceFactory {
public static AbstractTradeService createTradeInstance(String bizType) {
AbstractTradeService abstractTradeService = null;
if (TradeBizTypeEnum.PLATFORM.getCode().equals(bizType)) {
abstractTradeService = ApplicationContextWare.getBean(PlatformPaySuccessService.class);
} else if (TradeBizTypeEnum.MEALS.getCode().equals(bizType)){
abstractTradeService = ApplicationContextWare.getBean(MEALSService.class);
}else if (TradeBizTypeEnum.MAIL.getCode().equals(bizType)){
abstractTradeService = ApplicationContextWare.getBean(MAILService.class);
}
return abstractTradeService;
}
public static AbstractPaySuccessService createPaySuccessInstance(String parnterId) {
AbstractPaySuccessService abstractPaySuccessService = null;
if (PartnerIdEnum.MC_cofe.getPartnerId().equals(parnterId)) {
abstractPaySuccessService = ApplicationContextWare.getBean(McCofePaySuccessService.class);
} else if (PartnerIdEnum.COCO.getPartnerId().equals(parnterId)){
abstractPaySuccessService = ApplicationContextWare.getBean(COCOPaySuccessService.class);
}
return abstractPaySuccessService;
}
}
package cn.freemud.demoTest.service.impl;
import cn.freemud.demoTest.entities.bo.BasePaySuccessBo;
import cn.freemud.demoTest.entities.dto.OrderInfoDemoDto;
import cn.freemud.demoTest.enums.TradeBizTypeEnum;
import cn.freemud.demoTest.manager.OrderManager;
import cn.freemud.demoTest.service.AbstractPaySuccessService;
import cn.freemud.demoTest.service.AbstractTradeService;
import cn.freemud.demoTest.service.OrderService;
import cn.freemud.demoTest.service.factory.ServiceFactory;
import cn.freemud.demoTest.util.BizTypeUtil;
public class OrderServiceImpl implements OrderService {
AbstractPaySuccessService abstractPaySuccessService;
OrderManager orderManager;
@Override
public String paySuccessCallback(BasePaySuccessBo basePaySuccessBo) {
OrderInfoDemoDto orderInfoDemoDto = orderManager.getOrderInfo();
AbstractTradeService tradeInstance = ServiceFactory.createTradeInstance(orderInfoDemoDto.getSource());
String result = tradeInstance.paySuccessCallback(basePaySuccessBo, orderInfoDemoDto);
return result;
}
}
package cn.freemud.demoTest.util;
import cn.freemud.demoTest.enums.TradeBizTypeEnum;
import cn.freemud.enums.OrderChannelType;
public class BizTypeUtil {
// private final static String macafePartnerId = "";
public static TradeBizTypeEnum getBizType (String channelType){
if (channelType != null && OrderChannelType.SAAS.getCode().equals(channelType)) {
return TradeBizTypeEnum.PLATFORM;
}else if (channelType != null && OrderChannelType.SAASMALL.getCode().equals(channelType)){
return TradeBizTypeEnum.MAIL;
} else if (channelType != null && OrderChannelType.IWC.getCode().equals(channelType)) {
return TradeBizTypeEnum.MEALS;
}
return TradeBizTypeEnum.PLATFORM;
}
}
package cn.freemud.entities.bo;
import cn.freemud.entities.dto.order.CreateOrderOperateDto;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.CreateOrderBaseVo;
import cn.freemud.entities.vo.GetProductsVo;
import cn.freemud.enums.CreateOrderSceneEnum;
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
import com.freemud.application.sdk.api.membercenter.response.GetSvcInfoByMemberIdResponse;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import com.freemud.application.sdk.api.ordercenter.request.create.CreateOrderRequest;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.freemud.sdk.api.assortment.order.request.order.BaseCreateOrderRequest;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
public class CreateOrderBo {
//创单业务场景
CreateOrderSceneEnum createOrderScene;
private CreateOrderBaseVo createOrderBaseVo;
private AssortmentCustomerInfoVo userLoginInfoDto;
private ShoppingCartGoodsDto shoppingCartGoodsDto;
private StoreResponse.BizVO storeResponseDto;
private OrderExtInfoDto extInfo;
private List<GetSvcInfoByMemberIdResponse> svcInfoList;
private CreateOrderOperateDto createOrderOperateDto;
private CreateOrderRequest createOrderRequest;
private Map<String, GetProductsVo> products;
/**
* 商城转换后的对象, 在减库存中要使用
*/
private BaseCreateOrderRequest baseCreateOrderRequest;
}
package cn.freemud.entities.dto.delivery;
import java.util.List;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/4/27 下午2:53
* @description :
*/
public class GetFilterPartnerResponse {
private List<PartnerFilterResponse> partnerFilterVos;
public List<PartnerFilterResponse> getPartnerFilterVos() {
return partnerFilterVos;
}
public void setPartnerFilterVos(List<PartnerFilterResponse> partnerFilterVos) {
this.partnerFilterVos = partnerFilterVos;
}
}
package cn.freemud.entities.dto.delivery;
import java.util.Set;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/4/27 下午2:53
* @description :
*/
public class PartnerFilterResponse {
private String partnerId;
private Set<String> miniAppIds;
public String getPartnerId() {
return partnerId;
}
public void setPartnerId(String partnerId) {
this.partnerId = partnerId;
}
public Set<String> getMiniAppIds() {
return miniAppIds;
}
public void setMiniAppIds(Set<String> miniAppIds) {
this.miniAppIds = miniAppIds;
}
}
package cn.freemud.entities.vo;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/4/9 下午2:22
* @description : APP 订单接收参数
*/
public class CreateOrderAppVo extends CreateOrderBaseVo{
}
package cn.freemud.entities.vo;
import cn.freemud.entities.dto.UserDeliveryInfoDto;
import cn.freemud.entities.dto.delivery.WeixinDeliveryAddressDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.util.List;
@Data
public class CreateOrderBaseVo {
@NotEmpty(message = "sessionId 不能为空")
private String sessionId;
//@NotEmpty(message = "门店ID 不能为空") //本次需要根据业务做校验
private String shopId;
private String thirdShopId;
/**
* 就餐人数
*/
private Integer peopleNumber;
/**
* 操作标识
*/
private Integer operation;
/**
* 购物车版本号
*/
private Integer carVer;
/**
* 下单版本号
*/
private Integer orderUpdateVer;
private String partnerId;
private String storeName;
private String storeNameEn;
//入参不需要传
private String storeAddress;
private String userId;
private String userName;
private String mobile;
/**
* 渠道 1 saas 2 img 爱马哥 默认saas 3. iwc i围餐
*/
private String channel;
/**
* 订单类型 1 到店自取 2 外卖 枚举CreateOrderType
*/
//@NotNull(message = "下单类型不能为空")
private Integer orderType;
/**
* 订单特殊类型 1:普通订单 2:拼团订单 3:秒杀订单 4:拼单订单
*/
private Byte marketingType;
/**
* 到店类型 orderType 传1的时候 如果reachStoreTyp为空转成订单类型4 如果不为空存储4(打包带走)和5(店内就餐)
*/
private Integer reachStoreType;
/**
* 桌号
*/
private String tableNumber;
/**
* 取餐时间
*/
private String takeMealTime;
/**
* 预约时间 格式yyyy-MM-dd HH:mm:ss
* 麦咖啡返回的是yyyy-MM-dd HH:mm
*/
private String expectTime;
/**
* 取餐标识 0=我已到店、尽快送出 1预约单
*/
private String takeMealFlag;
/**
* 是否外带 ,打包 1 是 0 否
*/
private Integer takeOut;
/**
* 订单备注
*/
private String orderRemark;
/**
* 收货地址ID
*/
private String receiveId;
/**
* 收货办公楼
*/
private String officeName;
/**
* 收货地址
*/
private String receiveAddress;
/**
* 收货用户名
*/
private String receiveUsername;
/**
* 收货电话
*/
@Pattern(regexp = "^1[3|4|5|6|7|8|9][0-9]{9}$", message = "手机号码格式不正确")
private String receiveMobile;
/**
* 收货人性别 sexType 1 男 2 女 0 未知
*/
private Integer sex;
/**
* 用户定义纬度
*/
private String latitude;
/**
* 用户定义经度
*/
private String longitude;
/**
* 券码
*/
private String couponCode;
/**
* 券码列表
*/
private List<couponCode> couponCodes;
/**
* 运费券code
*/
private String freightCouponCode;
/**
* 版本号
*/
private String version;
/**
* form_id 用于金额是0的情况 现在只支持商品券,前端参数
*/
private String formId;
/**
* 用户收货地址信息 ,入参不需要传,通过校验receiveId获取
*/
public UserDeliveryInfoDto userDeliveryInfoDto;
/**
* 下单支付渠道类型
*/
private Byte payChannelType;
// 这里冗余了 CreateOrderVo 对象的属性, 后期需要优化 fisherman
@Valid
private CreateOrderVo.PremiumExchangeActivity premiumExchangeActivity;
/**
* 买一赠一选择的商品
*/
private List<ChooseGood> chooseGoods;
/**
* 是否使用用户积分
* 1=不显示积分
* 2=显示积分但不扣减
* 3=显示积分且扣减
*/
private Integer useCustomerScore;
/**
* 会员卡信息
*/
private BuyMemberCard buyMemberCard;
/**
* svc 卡支付使用
*/
private String cardCode;
/**
* 扫脸支付使用
*/
private String faceCode;
/**
* 随单购啡常月享卡键位
*/
private String cardKeyCode;
@ApiModelProperty(hidden = true)
private String sessionKey; // 存储sessionKey,异常补退使用
@ApiModelProperty(hidden = true)
private String scene;// 打开小程序的场景值
@Builder.Default
private String menuType = "saas";
/**
* 渠道类型 OrderChannelType
*/
private String channelType;
/**
* 是否需要餐具,1 需要 0不需要
*/
private Integer needTableware;
/**
* 是否需要开发票,1 需要 0不需要
*/
private Integer needInvoice;
/**
* 发票抬头
*/
private String invoiceTitle;
/**
* 随单购是否购买月享卡
* 1:不购买,2:月卡续费,3:新购月卡
*/
private String buyMonthlyCard;
private String monthlyCardCode;
/**
* 是否使用电子风味卡,如果不为空则为使用
*/
@Valid
@ApiModelProperty(value = "电子风味卡")
private UnionPayCard unionPayCard;
/**
* 电子风味卡
*/
@Data
@ApiModel(value = "电子风味卡", description = "如果传了电子风味卡字段,此类中属性必传")
public static class UnionPayCard {
@NotNull(message = "电子风味卡手机号必传")
@ApiModelProperty(value = "电子风味卡卡号(手机号)",required = true)
private String code;
@NotNull(message = "电子风味卡密码必传")
@ApiModelProperty(value = "电子风味卡密码",required = true)
private String password;
}
/**
* 微信配送地址信息
*/
private WeixinDeliveryAddressDto weixinDeliveryAddress;
@Data
public static class PremiumExchangeActivity {
@NotNull(message = "activityCode 不能为空")
private String activityCode;
@NotNull(message = "activityName 不能为空")
private String activityName;
/**
* 加价购sku商品信息
*/
@Valid
private List<Product> products;
@Data
public static class Product {
/**
* spuId 商品原始id
*/
@NotNull(message = "spuId不能为空")
private String spuId;
/**
* skuId 如果是多规格 skuId 不能为空
*/
@NotNull(message = "skuId不能为空")
private String skuId;
/**
* 商品名称
*/
@NotNull(message = "商品名称不能为空")
private String skuName;
private String skuForeignName;
@NotNull(message = "商品数量不能为空")
private Integer qty;
/**
* 图片
*/
private String picture;
/**
* 原价 入参不需要传,做对象组装使用
*/
private Long originalPrice;
/**
* 现价 入参不需要传,做对象组装使用
*/
private Long nowPrice;
@Valid
private List<Attribute> attributes;
@Data
public static class Attribute {
/**
* 属性ID
*/
private String attributeId;
/**
* 属性名称
*/
private String attributeValue;
private String attributeForeignValue;
}
}
}
@Data
public final static class BuyMemberCard {
/**
* 付费会员卡ID
*/
private String paidId;
/**
* 规则ID
*/
private String ruleId;
}
@Data
public static class ChooseGood {
/**
* 活动类型
*/
private Integer activeType;
/**
* 活动号
*/
private String activeCode;
/**
* 赠送商品id
*/
private String goodsId;
/**
* 赠送商品名称
*/
private String goodsName;
private String goodsForeignName;
/**
* 赠送商品数量
*/
private Integer qty;
/**
* 可兑换商品券编号
*/
private String couponCode ;
/**
* 商品券兑换数量
*/
private Integer couponQty;
/**
* 是否已选择寄杯
*/
private Boolean sendCoupon;
}
@Data
public final static class couponCode {
/**
* 优惠券
*/
private String couponCode;
/**
* 活动号
*/
private String activityCode;
/**
* 顺序
*/
private Integer index;
}
}
package cn.freemud.entities.vo;
import lombok.Data;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/4/9 上午11:31
* @description :
*/
@Data
public class CreateOrderMealVo extends CreateOrderBaseVo {
/**
* 版本号
*/
private String version;
/**
* 商户ID
*/
private String partnerId;
private Integer repastNumber;
private Integer carVer;
/**
* 下单版本号
*/
private Integer orderUpdateVer;
/**
* 优惠券code
*/
private String couponCode;
/**
* 优惠券对应的活动号
*/
private String activityCode;
/**
* 是否使用用户积分
* 1=不显示积分
* 2=显示积分但不扣减
* 3=显示积分且扣减
*/
private Integer useCustomerScore;
/**
* svc 卡支付使用
*/
private String cardCode;
}
package cn.freemud.entities.vo;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/4/9 下午2:20
* @description : 商城订单 vo对象
*/
public class CreateOrderSaasMallVo extends CreateOrderBaseVo {
}
package cn.freemud.entities.vo;
import lombok.Data;
@Data
public class CreateOrderSaasVo extends CreateOrderBaseVo {
// fisherman 需要定义 saas里面的参数有那些
}
package cn.freemud.entities.vo;
import lombok.Data;
import java.util.*;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/4/26 下午8:38
* @description :
*/
@Data
public class OrderCountRequestVo {
Set<String> partnerIds;
private Date beginTime;
private Date endTmie;
}
package cn.freemud.entities.vo;
import com.freemud.application.sdk.api.ordercenter.response.OrderCountResp;
import lombok.Builder;
import lombok.Data;
import java.util.List;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/4/28 下午5:59
* @description :
*/
@Data
@Builder
public class SendOrderCountsMsg {
private List<OrderCountResp> orders;
}
package cn.freemud.enums;
public enum CostTypeEnum {
PACK_AMOUNT(1, "包装费"),
DELIVERY_AMOUNT(2, "运费"),
CARD_ORIGINAL_AMOUNT(5, "会员卡费用"),
MCCAFE_MONTH_CARD(10, "麦咖啡月卡"),
;
private Integer code;
private String desc;
CostTypeEnum(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
public static CostTypeEnum getByCode(Integer code) {
for (CostTypeEnum costType : values()) {
if (costType.getCode().equals(code)) {
return costType;
}
}
return null;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
package cn.freemud.enums;
/**
* 仅仅用于 创建对象使用的枚举类,
* 字段code属性 暂时没有 实际价值意义
* 2021年04月09日13:51:24
*/
public enum CreateOrderSceneEnum {
SAAS(1, "saas订单"),
MEAL(2, "i围餐订单"),
APP(3, "APP订单"),
SAASMALL(4, "微商城订单");
private Integer code;
private String desc;
CreateOrderSceneEnum(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
...@@ -6,7 +6,13 @@ import lombok.Getter; ...@@ -6,7 +6,13 @@ import lombok.Getter;
public enum UserLoginChannelEnum { public enum UserLoginChannelEnum {
WEIXIN("1", "微信"), WEIXIN("1", "微信"),
ALIPAY("2", "支付宝"), ALIPAY("2", "支付宝"),
APP("3", "APP"); APP("3", "APP"),
/**
* 抖音小程序客户端
* 根据业务代码反推添加
* 我也不知道4是什么, 有了再添加
*/
TIKTOKPAY("5", "抖音小程序");
private String code; private String code;
private String desc; private String desc;
......
package cn.freemud.manager;
import cn.freemud.entities.vo.CreateOrderBaseVo;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.membercenter.request.StatisticalPropertyRequest;
import com.freemud.application.sdk.api.membercenter.response.GetSvcInfoByMemberIdResponse;
import com.freemud.application.sdk.api.membercenter.service.MemberPropertyService;
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 org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class MemberPropertyManager {
@Autowired
private MemberPropertyService memberPropertyService;
public List<GetSvcInfoByMemberIdResponse> getSvcInfoByMemberId(StatisticalPropertyRequest request, String trackingNo) {
com.freemud.application.sdk.api.base.BaseResponse<List<GetSvcInfoByMemberIdResponse>> responseDTO = memberPropertyService.getSvcInfoByMemberId(request, trackingNo);
if (!ResponseResult.SUCCESS.getCode().equals(responseDTO.getCode()) || responseDTO.getData() == null
|| responseDTO.getData().size() == 0) {
throw new ServiceException(ResponseResult.USER_SVC_CARD_ERROR);
}
return responseDTO.getData();
}
}
package cn.freemud.manager;
public class ShoppingCartInfoManager {
}
package cn.freemud.manager;
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 org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class StoreInfoManager {
@Autowired
StoreCenterService storeCenterService;
/**
* 查询门店信息
*/
public StoreResponse getStoreInfo(String partnerId, String shopId, String trackingNo) {
// 获取门店信息
StoreInfoRequest storeInfoRequest = new StoreInfoRequest(partnerId, shopId, null);
return storeCenterService.getStoreInfo(storeInfoRequest, trackingNo);
}
}
...@@ -6,6 +6,8 @@ import cn.freemud.entities.vo.CreateOrderVo; ...@@ -6,6 +6,8 @@ import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.CreatePrepayVo; import cn.freemud.entities.vo.CreatePrepayVo;
import cn.freemud.entities.vo.PaysuccessNoticeMessage; import cn.freemud.entities.vo.PaysuccessNoticeMessage;
import java.util.Map;
/** /**
* All rights Reserved, Designed By www.freemud.cn * All rights Reserved, Designed By www.freemud.cn
* *
...@@ -27,6 +29,13 @@ public interface OrderAdapterService { ...@@ -27,6 +29,13 @@ public interface OrderAdapterService {
BaseResponse createOrderNew(CreateOrderVo createOrderVo); BaseResponse createOrderNew(CreateOrderVo createOrderVo);
/** /**
* 创建订单
* @param param
* @return
*/
BaseResponse createOrderUniversal(Map<String, Object> param);
/**
* 麦咖啡创建订单 * 麦咖啡创建订单
* @param createOrderVo * @param createOrderVo
* @return * @return
......
...@@ -4,8 +4,10 @@ import cn.freemud.base.entity.BaseResponse; ...@@ -4,8 +4,10 @@ import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.dto.ConfirmOrderDto; import cn.freemud.entities.dto.ConfirmOrderDto;
import cn.freemud.entities.dto.QueryOrdersResponseDto; import cn.freemud.entities.dto.QueryOrdersResponseDto;
import cn.freemud.entities.vo.*; import cn.freemud.entities.vo.*;
import com.freemud.application.sdk.api.ordercenter.response.OrderCountResp;
import com.freemud.sdk.api.assortment.order.enums.OrderSdkType; import com.freemud.sdk.api.assortment.order.enums.OrderSdkType;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
...@@ -113,14 +115,16 @@ public interface Orderservice { ...@@ -113,14 +115,16 @@ public interface Orderservice {
/** /**
* 创建积分订单 * 创建积分订单
*
* @param vo * @param vo
* @return * @return
*/ */
BaseResponse createIntegralOrder(IntegralOrderVo vo); BaseResponse createIntegralOrder(IntegralOrderVo vo);
/**
* @用户积分订单列表 /**
* @param queryOrderByConditionsRequestVo * @param queryOrderByConditionsRequestVo
* @return * @return
* @用户积分订单列表
*/ */
BaseResponse queryOrderByConditions(QueryOrderByConditionsRequestVo queryOrderByConditionsRequestVo); BaseResponse queryOrderByConditions(QueryOrderByConditionsRequestVo queryOrderByConditionsRequestVo);
...@@ -132,7 +136,7 @@ public interface Orderservice { ...@@ -132,7 +136,7 @@ public interface Orderservice {
BaseResponse mcCafeQueryOrders(McCafeQueryOrderVo queryOrderVo); BaseResponse mcCafeQueryOrders(McCafeQueryOrderVo queryOrderVo);
BaseResponse mcCafePollingPickUpCode(MaCafeQueryOrderVo vo ); BaseResponse mcCafePollingPickUpCode(MaCafeQueryOrderVo vo);
/** /**
* 通过订单号查询订单详情 * 通过订单号查询订单详情
...@@ -141,7 +145,7 @@ public interface Orderservice { ...@@ -141,7 +145,7 @@ public interface Orderservice {
* @param oid 订单ID * @param oid 订单ID
* @return * @return
*/ */
BaseResponse queryCollageOrderById(Integer operation,String sessionId, String oid, String partnerId,String channel); BaseResponse queryCollageOrderById(Integer operation, String sessionId, String oid, String partnerId, String channel);
BaseResponse timeOutOrderRefund(TimeOutOrderVo timeOutOrderVo); BaseResponse timeOutOrderRefund(TimeOutOrderVo timeOutOrderVo);
...@@ -149,6 +153,7 @@ public interface Orderservice { ...@@ -149,6 +153,7 @@ public interface Orderservice {
/** /**
* 统计当日订单数 * 统计当日订单数
*
* @param queryOrderByConditionsRequestVo * @param queryOrderByConditionsRequestVo
* @return * @return
*/ */
...@@ -164,4 +169,12 @@ public interface Orderservice { ...@@ -164,4 +169,12 @@ public interface Orderservice {
BaseResponse spellGroupOrderFailRefund(SpellGroupFailRefundVo refundVo); BaseResponse spellGroupOrderFailRefund(SpellGroupFailRefundVo refundVo);
BaseResponse scoreRecord(QueryOrderVo queryOrderVo); BaseResponse scoreRecord(QueryOrderVo queryOrderVo);
/**
* 【ID1028455】 【订单】非码-腾讯有数数据上报V1.0.0
* 每天6点前上报昨天数据
*
* @param orderCountRequestVo
* @return
*/
BaseResponse<List<OrderCountResp>> selectCountOrdersByPartnerIds(OrderCountRequestVo orderCountRequestVo, String trackingNo);
} }
package cn.freemud.service.adapter; package cn.freemud.service.adapter;
import cn.freemud.entities.vo.CreateOrderBaseVo;
import cn.freemud.entities.vo.CreateOrderVo; import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException; import cn.freemud.interceptor.ServiceException;
import com.freemud.application.sdk.api.log.ApiLog; import com.freemud.application.sdk.api.log.ApiLog;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse; import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
...@@ -45,4 +45,28 @@ public class OrderCheckAdapter { ...@@ -45,4 +45,28 @@ public class OrderCheckAdapter {
} }
} }
} }
/***
* 校验预约单门店数据 优化订单接口冗余方法
* @param vo
* @param storeResponse
* @throws ServiceException 抛出异常校验异常数据
*/
public static void check(CreateOrderBaseVo vo, StoreResponse storeResponse) throws ServiceException {
//非预约单的过滤
if (Objects.isNull(vo.getOrderType()) ||
(!Objects.equals(vo.getTakeMealFlag(), "1"))) {
return;
}
StoreResponse.Configuration configuration = storeResponse.getBizVO().getStoreConfig();
if(Objects.isNull(configuration)){
//针对老数据没有配置 预约单默认支持,直接返回不校验
return;
}
for (OrderCheck orderCheck : orderCheckList) {
if (orderCheck.support(vo.getOrderType())) {
orderCheck.check(null, storeResponse);
return;
}
}
}
} }
package cn.freemud.service.impl;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.bo.CreateOrderBo;
import cn.freemud.entities.dto.coupon.InvalidCouponsRequestDto;
import cn.freemud.entities.dto.coupon.InvalidCouponsResponseDto;
import cn.freemud.entities.dto.shoppingCart.GetShoppingCartGoodsApportionDto;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.CreateOrderBaseVo;
import cn.freemud.entities.vo.ShoppingCartInfoRequestVo;
import cn.freemud.enums.OrderChannelType;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.CheckOrderUniversal;
import cn.freemud.service.thirdparty.CouponOnlineClient;
import cn.freemud.service.universal.CommonCheckOrderHandle;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/4/19 上午10:28
* @description : APP订单创建 校验实现类
*/
@Service
public class CheckOrderApp extends CheckOrderUniversal {
@Autowired
private CommonCheckOrderHandle commonCheckOrderHandle;
@Autowired
private CouponOnlineClient couponOnlineClient;
@Override
public void checkCustomCreateOrderParam(CreateOrderBo createOrderBo) {
// 查询小程序自提外卖配置信息 校验当前订单类型的下单参数 校验外卖是否满足起送条件
super.checkOrderByOrderType(createOrderBo);
// 下单前检查优惠券是否可用 app订单独享
CreateOrderBaseVo createOrderBaseVo = createOrderBo.getCreateOrderBaseVo();
this.checkCouponCode(createOrderBaseVo);
}
/**
* 额外优惠券校验操作
* @param createOrderVo
*/
private void checkCouponCode(CreateOrderBaseVo createOrderVo) {
if (StringUtils.isNotBlank(createOrderVo.getCouponCode())) {
InvalidCouponsRequestDto requestDto = new InvalidCouponsRequestDto();
List<String> couponList = new ArrayList<>();
couponList.add(createOrderVo.getCouponCode());
requestDto.setCouponCodes(couponList);
requestDto.setPartnerId(Integer.valueOf(createOrderVo.getPartnerId()));
InvalidCouponsResponseDto invalidCouponsResponseDto = couponOnlineClient.invalidCoupons(requestDto);
if (invalidCouponsResponseDto.getStatusCode() != 100 || invalidCouponsResponseDto.getData() == null || (invalidCouponsResponseDto.getData() != null && CollectionUtils.isNotEmpty(invalidCouponsResponseDto.getData().getInvalidCoupons()))) {
throw new ServiceException(ResponseResult.COUPON_INVALID);
}
}
}
/**
* 渠道类型
*
* @return
*/
@Override
protected OrderChannelType getChannelType() {
return OrderChannelType.APP;
}
/**
* 拼团逻辑
*
* @param createOrderVo
* @param shoppingCartGoodsDto
*/
@Override
protected void collageOrderHandle(CreateOrderBaseVo createOrderVo, ShoppingCartGoodsDto shoppingCartGoodsDto) {
commonCheckOrderHandle.collageOrderHandle(createOrderVo, shoppingCartGoodsDto);
}
/**
* 通过购物车获取优惠信息
* 业务 额外校验
*
* @param createOrderVo
* @param shoppingCartInfoRequestVo
* @return
*/
@Override
protected cn.freemud.base.entity.BaseResponse<ShoppingCartGoodsDto> checkShoppingCartGoods(CreateOrderBaseVo createOrderVo, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) {
BaseResponse<ShoppingCartGoodsDto> apportionResponse = super.checkShoppingCartGoods(createOrderVo, shoppingCartInfoRequestVo);
// 这个是专门的给coco使用的验证券的逻辑
if (ObjectUtils.equals(ResponseCodeConstant.COCO_RESPONSE_COUPON_ERR_STR, apportionResponse.getCode())) {
throw new ServiceException(ResponseResult.COCO_COUPON_VALIDATOR_FAIL, apportionResponse.getMessage());
}
return apportionResponse;
}
/**
* 校验购物车优惠信息请求对象
*
* @param createOrderVo
* @param shoppingCartInfoRequestVo
* @return
*/
@Override
protected GetShoppingCartGoodsApportionDto getShoppingCartGoodsApportionDto(CreateOrderBaseVo createOrderVo, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) {
GetShoppingCartGoodsApportionDto requestDto = new GetShoppingCartGoodsApportionDto();
// 设置用户选择的买一赠一商品信息
shoppingCartInfoRequestVo.setChooseGoods(JSONArray.parseArray(JSONObject.toJSONString(createOrderVo.getChooseGoods()), ShoppingCartInfoRequestVo.ChooseGood.class));
requestDto.setShoppingCartInfoRequestVo(shoppingCartInfoRequestVo);
//加价购商品 校验放购物车校验
requestDto.setPremiumExchangeActivity(createOrderVo.getPremiumExchangeActivity());
return requestDto;
}
/**
* 优惠券校验
*
* @param createOrderVo
* @param shoppingCartInfoRequestVo
*/
@Override
protected void diyCheckCouponCode(CreateOrderBaseVo createOrderVo, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) {
commonCheckOrderHandle.diyCheckCouponCode(createOrderVo, shoppingCartInfoRequestVo);
}
}
package cn.freemud.service.impl;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.bo.CreateOrderBo;
import cn.freemud.entities.dto.shoppingCart.GetShoppingCartGoodsApportionDto;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.CreateOrderBaseVo;
import cn.freemud.entities.vo.ShoppingCartInfoRequestVo;
import cn.freemud.enums.OrderChannelType;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.CheckOrderUniversal;
import cn.freemud.service.order.OrderRelationFactory;
import cn.freemud.service.universal.CommonCheckOrderHandle;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.freemud.api.assortment.datamanager.manager.AssortmentOpenPlatformIappWxappConfigManager;
import org.apache.commons.lang.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@Service
public class CheckOrderSaas extends CheckOrderUniversal {
@Override
protected OrderChannelType getChannelType() {
return OrderChannelType.SAAS;
}
@Autowired
private CommonCheckOrderHandle commonCheckOrderHandle;
/**
* 校验购物车优惠信息请求对象
*
* @param createOrderVo
* @param shoppingCartInfoRequestVo
* @return
*/
@Override
protected GetShoppingCartGoodsApportionDto getShoppingCartGoodsApportionDto(CreateOrderBaseVo createOrderVo, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) {
GetShoppingCartGoodsApportionDto requestDto = new GetShoppingCartGoodsApportionDto();
// 设置用户选择的买一赠一商品信息
shoppingCartInfoRequestVo.setChooseGoods(JSONArray.parseArray(JSONObject.toJSONString(createOrderVo.getChooseGoods()), ShoppingCartInfoRequestVo.ChooseGood.class));
requestDto.setShoppingCartInfoRequestVo(shoppingCartInfoRequestVo);
//加价购商品 校验放购物车校验
requestDto.setPremiumExchangeActivity(createOrderVo.getPremiumExchangeActivity());
return requestDto;
}
/**
* 通过购物车获取优惠信息
* 业务 额外校验
*
* @param createOrderVo
* @param shoppingCartInfoRequestVo
* @return
*/
@Override
protected cn.freemud.base.entity.BaseResponse<ShoppingCartGoodsDto> checkShoppingCartGoods(CreateOrderBaseVo createOrderVo, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) {
BaseResponse<ShoppingCartGoodsDto> apportionResponse = super.checkShoppingCartGoods(createOrderVo, shoppingCartInfoRequestVo);
// 这个是专门的给coco使用的验证券的逻辑
if (ObjectUtils.equals(ResponseCodeConstant.COCO_RESPONSE_COUPON_ERR_STR, apportionResponse.getCode())) {
throw new ServiceException(ResponseResult.COCO_COUPON_VALIDATOR_FAIL, apportionResponse.getMessage());
}
if (ObjectUtils.equals(ResponseCodeConstant.USER_HAVE_NO_COUPON, apportionResponse.getCode())) {
throw new ServiceException(ResponseResult.SHOPPING_CART_USER_HAVE_NO_COUPON,apportionResponse.getMessage());
}
return apportionResponse;
}
/**
* 拼团逻辑
*
* @param createOrderVo
* @param shoppingCartGoodsDto
*/
@Override
protected void collageOrderHandle(CreateOrderBaseVo createOrderVo, ShoppingCartGoodsDto shoppingCartGoodsDto) {
commonCheckOrderHandle.collageOrderHandle(createOrderVo, shoppingCartGoodsDto);
}
/**
* 校验优惠券
*
* @param createOrderVo
* @param shoppingCartInfoRequestVo
*/
@Override
protected void diyCheckCouponCode(CreateOrderBaseVo createOrderVo, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) {
commonCheckOrderHandle.diyCheckCouponCode(createOrderVo, shoppingCartInfoRequestVo);
}
/**
* 业务专属 校验
*
* @param createOrderBo
*/
@Override
public void checkCustomCreateOrderParam(CreateOrderBo createOrderBo) {
// 查询小程序自提外卖配置信息 校验当前订单类型的下单参数 校验外卖是否满足起送条件
super.checkOrderByOrderType(createOrderBo);
}
}
...@@ -12,6 +12,9 @@ import cn.freemud.enums.*; ...@@ -12,6 +12,9 @@ import cn.freemud.enums.*;
import cn.freemud.interceptor.ServiceException; import cn.freemud.interceptor.ServiceException;
import cn.freemud.redis.RedisCache; import cn.freemud.redis.RedisCache;
import cn.freemud.service.*; import cn.freemud.service.*;
import cn.freemud.service.universal.UniversalOrderService;
import cn.freemud.service.universal.factory.CreateOrderServiceFactory;
import cn.freemud.utils.LogUtil;
import cn.freemud.utils.RedisUtil; import cn.freemud.utils.RedisUtil;
import cn.freemud.utils.ResponseUtil; import cn.freemud.utils.ResponseUtil;
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo; import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
...@@ -22,16 +25,20 @@ import com.freemud.sdk.api.assortment.order.enums.OrderSourceType; ...@@ -22,16 +25,20 @@ import com.freemud.sdk.api.assortment.order.enums.OrderSourceType;
import com.freemud.sdk.api.assortment.order.util.LockUtils; import com.freemud.sdk.api.assortment.order.util.LockUtils;
import com.google.gson.Gson; import com.google.gson.Gson;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils; import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.hibernate.validator.HibernateValidator;
import org.hibernate.validator.HibernateValidatorConfiguration;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.validation.ConstraintViolation;
import java.util.Arrays; import javax.validation.Validation;
import java.util.Map; import javax.validation.ValidatorFactory;
import java.util.*;
/** /**
* All rights Reserved, Designed By www.freemud.cn * All rights Reserved, Designed By www.freemud.cn
...@@ -60,6 +67,18 @@ public class OrderAdapterServiceImpl implements OrderAdapterService { ...@@ -60,6 +67,18 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
private String mcCafePartnerId; private String mcCafePartnerId;
/** /**
* 商户号,用于测试 新创建订单 接口
*/
@Value("${qa.createOrder.partnerId}")
private List<String> partnerIds;
/**
* 门店号,用于测试 新创建订单 接口
*/
@Value("${qa.createOrder.storeIds}")
private List<String> storeIds;
/**
* 创单锁定的key * 创单锁定的key
*/ */
@Value("${create.order.key.expire:5}") @Value("${create.order.key.expire:5}")
...@@ -71,6 +90,10 @@ public class OrderAdapterServiceImpl implements OrderAdapterService { ...@@ -71,6 +90,10 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
private OrderServiceImpl orderService; private OrderServiceImpl orderService;
@Autowired @Autowired
private MCCafeOrderService mcCafeOrderService; private MCCafeOrderService mcCafeOrderService;
private UniversalOrderService universalOrderService;
@Autowired
private CreateOrderServiceFactory createOrderServiceFactory;
@Autowired @Autowired
private AssortmentCustomerInfoManager assortmentCustomerInfoManager; private AssortmentCustomerInfoManager assortmentCustomerInfoManager;
@Autowired @Autowired
...@@ -88,12 +111,23 @@ public class OrderAdapterServiceImpl implements OrderAdapterService { ...@@ -88,12 +111,23 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
@Value("${saas.autoRefund.client}") @Value("${saas.autoRefund.client}")
private String autoRefundClient; private String autoRefundClient;
@Override @Override
public BaseResponse createOrderNew(CreateOrderVo createOrderVo) { public BaseResponse createOrderNew(CreateOrderVo createOrderVo) {
AssortmentCustomerInfoVo assortmentCustomerInfoVo = assortmentCustomerInfoManager.getCustomerInfoByObject(createOrderVo.getSessionId()); AssortmentCustomerInfoVo assortmentCustomerInfoVo = assortmentCustomerInfoManager.getCustomerInfoByObject(createOrderVo.getSessionId());
if (assortmentCustomerInfoVo == null || StringUtils.isEmpty(assortmentCustomerInfoVo.getMemberId())) { if (assortmentCustomerInfoVo == null || StringUtils.isEmpty(assortmentCustomerInfoVo.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN); return ResponseUtil.error(ResponseResult.NOT_LOGIN);
} }
// 用于测试 新创建订单接口 不是围餐, 并且 商户号 门店号都在配置里面
LogUtil.info("是否进入新订单创建1 "+ createOrderVo.getSessionId(),partnerIds,storeIds);
LogUtil.info("是否进入新订单创建2 "+ createOrderVo.getSessionId(),createOrderVo,assortmentCustomerInfoVo);
if (!"wc".equals(createOrderVo.getChannelType()) &&
!partnerIds.isEmpty() && partnerIds.contains(createOrderVo.getPartnerId())
&& !storeIds.isEmpty() && storeIds.contains(createOrderVo.getShopId())) {
LogUtil.info("进入新订单创建流程", createOrderVo,null);
return this.createOrderUniversal(com.freemud.application.sdk.api.util.MapUtils.java2Map(createOrderVo));
}
LogUtil.info("没进入 新方法 :"+ createOrderVo.getSessionId(),createOrderVo,assortmentCustomerInfoVo);
// 扩展字段中存储 sessionKey // 扩展字段中存储 sessionKey
createOrderVo.setSessionKey(assortmentCustomerInfoVo.getSessionKey()); createOrderVo.setSessionKey(assortmentCustomerInfoVo.getSessionKey());
if (IappIdType.WC_XCX.getCode().equals(assortmentCustomerInfoVo.getIappId())) { //i围餐 if (IappIdType.WC_XCX.getCode().equals(assortmentCustomerInfoVo.getIappId())) { //i围餐
...@@ -161,6 +195,60 @@ public class OrderAdapterServiceImpl implements OrderAdapterService { ...@@ -161,6 +195,60 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
} }
} }
@Override
public BaseResponse createOrderUniversal(Map<String, Object> param) {
if (param.isEmpty()) {
throw new ServiceException(ResponseResult.PARAMETER_MISSING);
}
// 商户逻辑判断 共同代码 begin
String sessionId = (String) param.get("sessionId");
if (StringUtils.isBlank(sessionId)) {
throw new ServiceException(ResponseResult.SESSION_INVAILD);
}
AssortmentCustomerInfoVo assortmentCustomerInfoVo = assortmentCustomerInfoManager.getCustomerInfoByObject(sessionId);
if (assortmentCustomerInfoVo == null || StringUtils.isEmpty(assortmentCustomerInfoVo.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN);
}
// 商户逻辑判断 共同代码 end
// 根据订单类型 获取需要操作的 实现类枚举
CreateOrderSceneEnum createOrderScene = createOrderServiceFactory.getCreateOrderScene(param, assortmentCustomerInfoVo);
// 根据订单类型, 转换成需要使用的对象 1.这里可做转对象校验
CreateOrderBaseVo createOrderBaseVo = createOrderServiceFactory.getCreateOrderVo(param, createOrderScene);
// 添加分布式锁,如果没有取得锁直接返回失败;整个方法执行完毕后会删掉该锁
// 锁定秒数从apollo获取,如果apollo没有设置,默认5秒
String createOrderKey = CREATE_ORDER_KEY + assortmentCustomerInfoVo.getMemberId();
try {
Long expire = Long.valueOf(createOrderKeyExpire);
if (!LockUtils.lock(redisCache.getRedisTemplate(), createOrderKey, expire)) {
return ResponseUtil.error(ResponseResult.ORDER_NOT_CREATE_ERROR);
}
ApiLog.info("新订单业务对象 :",createOrderScene,createOrderBaseVo);
return createOrderServiceFactory.getCreateOrderService(createOrderScene).createOrder(createOrderBaseVo, assortmentCustomerInfoVo, createOrderScene);
} catch (Exception e) {
throw e;
} finally {
//LockUtils.unlock(redisCache.getRedisTemplate(),createOrderKey);
}
}
private BaseResponse validateParam(CreateOrderBaseVo createOrderBaseVo) {
HibernateValidatorConfiguration configuration = Validation.byProvider(HibernateValidator.class)
.configure()
.failFast(false);
ValidatorFactory validatorFactory = configuration.buildValidatorFactory();
Set<ConstraintViolation<CreateOrderBaseVo>> set = validatorFactory.getValidator().validate(createOrderBaseVo);
if (CollectionUtils.isNotEmpty(set)) {
Iterator<ConstraintViolation<CreateOrderBaseVo>> iterator = set.iterator();
if (iterator.hasNext()) {
ConstraintViolation<CreateOrderBaseVo> constraintViolation = iterator.next();
return ResponseUtil.error(ResponseResult.PARAMETER_MISSING.getCode(), constraintViolation.getMessage());
}
}
return ResponseUtil.success();
}
@Override @Override
public BaseResponse createMCCafeOrder(CreateOrderVo createOrderVo) { public BaseResponse createMCCafeOrder(CreateOrderVo createOrderVo) {
...@@ -261,7 +349,7 @@ public class OrderAdapterServiceImpl implements OrderAdapterService { ...@@ -261,7 +349,7 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
* app订单处理 * app订单处理
*/ */
if (OrderSourceType.APP.getCode().equals(orderBean.getSource())) { if (OrderSourceType.APP.getCode().equals(orderBean.getSource())) {
if(orderBean.getBizType() == 6){ if (orderBean.getBizType() == 6) {
return sellCouponOrderService.paySuccessCallback(message, confirmOrderDto, orderBeans); return sellCouponOrderService.paySuccessCallback(message, confirmOrderDto, orderBeans);
} }
return appOrderService.paySuccessCallback(message, confirmOrderDto, orderBeans); return appOrderService.paySuccessCallback(message, confirmOrderDto, orderBeans);
...@@ -335,7 +423,7 @@ public class OrderAdapterServiceImpl implements OrderAdapterService { ...@@ -335,7 +423,7 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
if (UserLoginChannelEnum.APP.getCode().equals(assortmentCustomerInfoVo.getChannel())) { if (UserLoginChannelEnum.APP.getCode().equals(assortmentCustomerInfoVo.getChannel())) {
return appOrderService.createOrder(createOrderVo, assortmentCustomerInfoVo); return appOrderService.createOrder(createOrderVo, assortmentCustomerInfoVo);
} }
return ResponseUtil.error(ResponseResult.PARAMETER_MISSING); return ResponseUtil.error(ResponseResult.PARAMETER_MISSING);
} }
/** /**
......
...@@ -116,6 +116,7 @@ import com.freemud.application.sdk.api.ordercenter.enums.ProductTypeEnum; ...@@ -116,6 +116,7 @@ import com.freemud.application.sdk.api.ordercenter.enums.ProductTypeEnum;
import com.freemud.application.sdk.api.ordercenter.request.*; import com.freemud.application.sdk.api.ordercenter.request.*;
import com.freemud.application.sdk.api.ordercenter.request.carpark.ParkingOrderCreateReq; import com.freemud.application.sdk.api.ordercenter.request.carpark.ParkingOrderCreateReq;
import com.freemud.application.sdk.api.ordercenter.response.BaseDownLoadResponse; import com.freemud.application.sdk.api.ordercenter.response.BaseDownLoadResponse;
import com.freemud.application.sdk.api.ordercenter.response.OrderCountResp;
import com.freemud.application.sdk.api.ordercenter.response.carpark.OrderResp; import com.freemud.application.sdk.api.ordercenter.response.carpark.OrderResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoReqs; import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoReqs;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderSettlementResp; import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderSettlementResp;
...@@ -381,6 +382,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -381,6 +382,7 @@ public class OrderServiceImpl implements Orderservice {
return ResponseUtil.success(responseVo); return ResponseUtil.success(responseVo);
} }
// 原来saas
@Override @Override
public BaseResponse createOrderNew(CreateOrderVo createOrderVo) { public BaseResponse createOrderNew(CreateOrderVo createOrderVo) {
String trackingNo = LogThreadLocal.getTrackingNo(); String trackingNo = LogThreadLocal.getTrackingNo();
...@@ -1394,11 +1396,11 @@ public class OrderServiceImpl implements Orderservice { ...@@ -1394,11 +1396,11 @@ public class OrderServiceImpl implements Orderservice {
responseVo.setRiderPhone(deliveryBaseResponse.getData().getRiderPhone()); responseVo.setRiderPhone(deliveryBaseResponse.getData().getRiderPhone());
// responseVo.setExpressType(orderBean.getExpressType()); // responseVo.setExpressType(orderBean.getExpressType());
if(orderBean.getAddInfo() != null && orderBean.getAddInfo().getDeliveryType() !=null && QueryDeliveryType.THIRD.getCode().equals(orderBean.getAddInfo().getDeliveryType()) if (orderBean.getAddInfo() != null && orderBean.getAddInfo().getDeliveryType() != null && QueryDeliveryType.THIRD.getCode().equals(orderBean.getAddInfo().getDeliveryType())
&& (DeliveryStatus.DELIVERYERROR.getCode() == orderBean.getAddInfo().getDeliverStatus() || DeliveryStatus.DELIVERYCANCEL.getCode() == orderBean.getAddInfo().getDeliverStatus()) && (DeliveryStatus.DELIVERYERROR.getCode() == orderBean.getAddInfo().getDeliverStatus() || DeliveryStatus.DELIVERYCANCEL.getCode() == orderBean.getAddInfo().getDeliverStatus())
){ ) {
responseVo.setDeliveryType(QueryDeliveryType.SELF.getCode()); responseVo.setDeliveryType(QueryDeliveryType.SELF.getCode());
}else{ } else {
responseVo.setDeliveryType(orderBean.getAddInfo() == null ? "" : orderBean.getAddInfo().getDeliveryType()); responseVo.setDeliveryType(orderBean.getAddInfo() == null ? "" : orderBean.getAddInfo().getDeliveryType());
} }
...@@ -1477,13 +1479,13 @@ public class OrderServiceImpl implements Orderservice { ...@@ -1477,13 +1479,13 @@ public class OrderServiceImpl implements Orderservice {
List<String> skuIds = queryOrderResponseVo.getProducts().stream().map(p -> p.getPid()).collect(Collectors.toList()); List<String> skuIds = queryOrderResponseVo.getProducts().stream().map(p -> p.getPid()).collect(Collectors.toList());
if (hlsPartnerId != null && hlsPartnerId.contains(partnerId)) { if (hlsPartnerId != null && hlsPartnerId.contains(partnerId)) {
// 华莱士获取支付有理促销数据时须将套餐商品内固定搭配、可选搭配商品的skuId一同传入 // 华莱士获取支付有理促销数据时须将套餐商品内固定搭配、可选搭配商品的skuId一同传入
queryOrderResponseVo.getProducts().forEach(productVo -> { queryOrderResponseVo.getProducts().forEach(productVo -> {
if (CollectionUtils.isNotEmpty(productVo.getSetMealProducts())) { if (CollectionUtils.isNotEmpty(productVo.getSetMealProducts())) {
productVo.getSetMealProducts().forEach(setMealProduct -> { productVo.getSetMealProducts().forEach(setMealProduct -> {
skuIds.add(setMealProduct.getPid()); skuIds.add(setMealProduct.getPid());
}); });
} }
}); });
} }
payGitRequestDto.setSkuIds(skuIds); payGitRequestDto.setSkuIds(skuIds);
...@@ -3372,7 +3374,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -3372,7 +3374,7 @@ public class OrderServiceImpl implements Orderservice {
//混合支付项 //混合支付项
if (CollectionUtils.isNotEmpty(orderPayResponse.getPayItem())) { if (CollectionUtils.isNotEmpty(orderPayResponse.getPayItem())) {
orderEditRequest.setOrderPayItem(orderPayResponse.getPayItem()); orderEditRequest.setOrderPayItem(orderPayResponse.getPayItem());
if(orderPayResponse.getPayItem().size()==2){ if (orderPayResponse.getPayItem().size() == 2) {
orderEditRequest.setPayChannel(PayChannelType.COMB.getEbcode()); orderEditRequest.setPayChannel(PayChannelType.COMB.getEbcode());
orderEditRequest.setPayChannelName(PayChannelType.COMB.getName()); orderEditRequest.setPayChannelName(PayChannelType.COMB.getName());
orderEditRequest.setPayChannelType(PayChannelType.COMB.getIndex()); orderEditRequest.setPayChannelType(PayChannelType.COMB.getIndex());
...@@ -4412,7 +4414,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -4412,7 +4414,7 @@ public class OrderServiceImpl implements Orderservice {
@Override @Override
public BaseResponse scoreRecord(QueryOrderVo queryOrderVo){ public BaseResponse scoreRecord(QueryOrderVo queryOrderVo) {
AssortmentCustomerInfoVo userLoginInfoDto = customerInfoManager.getCustomerInfoByObject(queryOrderVo.getSessionId()); AssortmentCustomerInfoVo userLoginInfoDto = customerInfoManager.getCustomerInfoByObject(queryOrderVo.getSessionId());
if (userLoginInfoDto == null || StringUtils.isBlank(userLoginInfoDto.getMemberId())) { if (userLoginInfoDto == null || StringUtils.isBlank(userLoginInfoDto.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN); return ResponseUtil.error(ResponseResult.NOT_LOGIN);
...@@ -4423,7 +4425,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -4423,7 +4425,7 @@ public class OrderServiceImpl implements Orderservice {
Date now = new Date(); Date now = new Date();
startDate = DateUtil.addMonths(now, -6); startDate = DateUtil.addMonths(now, -6);
endDate = DateUtil.addDays(now, 1); endDate = DateUtil.addDays(now, 1);
}else{ } else {
String startDateStr = queryOrderVo.getStartDate() + " 00:00:00"; String startDateStr = queryOrderVo.getStartDate() + " 00:00:00";
String endDateStr = queryOrderVo.getEndDate() + " 23:59:59"; String endDateStr = queryOrderVo.getEndDate() + " 23:59:59";
startDate = DateUtil.convert2Date(startDateStr, "yyyy-MM-dd HH:mm:ss"); startDate = DateUtil.convert2Date(startDateStr, "yyyy-MM-dd HH:mm:ss");
...@@ -4451,21 +4453,40 @@ public class OrderServiceImpl implements Orderservice { ...@@ -4451,21 +4453,40 @@ public class OrderServiceImpl implements Orderservice {
List<ScoreRecordVo> result = new ArrayList<>(); List<ScoreRecordVo> result = new ArrayList<>();
if (null == response || null == response.getResult()) { if (null == response || null == response.getResult()) {
return ResponseUtil.success(result); return ResponseUtil.success(result);
} }
List<OrderInfoReqs> list = response.getResult(); List<OrderInfoReqs> list = response.getResult();
list.forEach(order->{ list.forEach(order -> {
ScoreRecordVo responseVo = new ScoreRecordVo(); ScoreRecordVo responseVo = new ScoreRecordVo();
responseVo.setOrderCode(order.getOrderCode()); responseVo.setOrderCode(order.getOrderCode());
if (order.getCreateTime() != null) { if (order.getCreateTime() != null) {
responseVo.setCreateTime(Long.parseLong(order.getCreateTime())); responseVo.setCreateTime(Long.parseLong(order.getCreateTime()));
} }
if(CollectionUtils.isNotEmpty(order.getOrderItemList())){ if (CollectionUtils.isNotEmpty(order.getOrderItemList())) {
responseVo.setProductName(order.getOrderItemList().get(0).getProductName()); responseVo.setProductName(order.getOrderItemList().get(0).getProductName());
responseVo.setProductQuantity(order.getOrderItemList().get(0).getProductQuantity()); responseVo.setProductQuantity(order.getOrderItemList().get(0).getProductQuantity());
} }
result.add(responseVo); result.add(responseVo);
}); });
return ResponseUtil.success(result); return ResponseUtil.success(result);
}
@Override
public BaseResponse<List<OrderCountResp>> selectCountOrdersByPartnerIds(OrderCountRequestVo orderCountRequestVo, String trackingNo) {
OrderCountReqs orderCountReqs = new OrderCountReqs();
BeanUtil.convertBean(orderCountRequestVo, orderCountReqs);
com.freemud.application.sdk.api.ordercenter.response.BaseResponse<List<OrderCountResp>> result = orderSdkService.countOrdersByPartnerIds(orderCountReqs, trackingNo);
LogUtil.info("remote /order/v2/orderCount resp :",orderCountReqs, result);
if (Objects.isNull(result)) {
return new BaseResponse(ResponseResultEnum.SYSTEM_ERROR.getCode(), ResponseResultEnum.SYSTEM_ERROR.getMessage(), "", null);
}
if (!ResponseResultEnum.SUCCESS.getCode().equalsIgnoreCase(result.getCode()) || Objects.isNull(result.getResult())) {
return new BaseResponse(result.getCode(), result.getMessage(), "", null);
}
return ResponseUtil.success(result.getResult());
} }
} }
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
package cn.freemud.service.order; package cn.freemud.service.order;
import cn.freemud.entities.vo.CreateOrderBaseVo;
import cn.freemud.entities.vo.CreateOrderVo; import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.QueryOrderResponseVo; import cn.freemud.entities.vo.QueryOrderResponseVo;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse; import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
...@@ -27,6 +28,13 @@ public interface OrderRelationService { ...@@ -27,6 +28,13 @@ public interface OrderRelationService {
/** /**
* 创建订单的时间检查 订单优化使用
* @param
*/
void createOrderTimeCheck(StoreResponse.BizVO storeResponseDto, CreateOrderBaseVo createOrderVo);
/**
* 订单详情编辑 * 订单详情编辑
* @param * @param
*/ */
......
...@@ -14,10 +14,10 @@ package cn.freemud.service.order.impl; ...@@ -14,10 +14,10 @@ package cn.freemud.service.order.impl;
import cn.freemud.base.util.DateUtil; import cn.freemud.base.util.DateUtil;
import cn.freemud.entities.dto.order.BusinessDate; import cn.freemud.entities.dto.order.BusinessDate;
import cn.freemud.entities.vo.CreateOrderBaseVo;
import cn.freemud.entities.vo.CreateOrderVo; import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.ProductVo; import cn.freemud.entities.vo.ProductVo;
import cn.freemud.entities.vo.QueryOrderResponseVo; import cn.freemud.entities.vo.QueryOrderResponseVo;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.enums.CreateOrderType; import cn.freemud.enums.CreateOrderType;
import cn.freemud.enums.ResponseResult; import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException; import cn.freemud.interceptor.ServiceException;
...@@ -31,15 +31,12 @@ import com.freemud.sdk.api.assortment.order.enums.OldOrderAccountType; ...@@ -31,15 +31,12 @@ import com.freemud.sdk.api.assortment.order.enums.OldOrderAccountType;
import com.freemud.sdk.api.assortment.order.request.order.OrderProductAddInfoDto; import com.freemud.sdk.api.assortment.order.request.order.OrderProductAddInfoDto;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrderByIdResponse; 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.response.order.QueryOrdersResponse;
import io.swagger.models.auth.In;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -91,6 +88,41 @@ public class CocoOrderRelationServiceImpl implements OrderRelationService { ...@@ -91,6 +88,41 @@ public class CocoOrderRelationServiceImpl implements OrderRelationService {
} }
@Override @Override
public void createOrderTimeCheck(StoreResponse.BizVO storeResponseDto, CreateOrderBaseVo 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 queryOrdrBuild(QueryOrderResponseVo queryOrderResponseVo,QueryOrderByIdResponse response) { public void queryOrdrBuild(QueryOrderResponseVo queryOrderResponseVo,QueryOrderByIdResponse response) {
List<QueryOrderResponseVo.chooseGood> chooseGoods = new ArrayList<>(); List<QueryOrderResponseVo.chooseGood> chooseGoods = new ArrayList<>();
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
package cn.freemud.service.order.impl; package cn.freemud.service.order.impl;
import cn.freemud.entities.vo.CreateOrderBaseVo;
import cn.freemud.entities.vo.CreateOrderVo; import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.QueryOrderResponseVo; import cn.freemud.entities.vo.QueryOrderResponseVo;
import cn.freemud.service.order.OrderRelationService; import cn.freemud.service.order.OrderRelationService;
...@@ -28,6 +29,11 @@ public class PlatformOrderRelationServiceImpl implements OrderRelationService { ...@@ -28,6 +29,11 @@ public class PlatformOrderRelationServiceImpl implements OrderRelationService {
} }
@Override @Override
public void createOrderTimeCheck(StoreResponse.BizVO storeResponseDto, CreateOrderBaseVo createOrderVo) {
}
@Override
public void queryOrdrBuild(QueryOrderResponseVo queryOrderResponseVo, QueryOrderByIdResponse response) { public void queryOrdrBuild(QueryOrderResponseVo queryOrderResponseVo, QueryOrderByIdResponse response) {
} }
......
package cn.freemud.service.thirdparty;
import cn.freemud.entities.dto.delivery.GetFilterPartnerResponse;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.SendOrderCountsMsg;
import com.freemud.application.sdk.api.ordercenter.response.OrderCountResp;
import com.freemud.application.sdk.api.ordercenter.response.OrderGetPartnerRequest;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/4/27 下午2:03
* @description :
*/
@FeignClient(name = "MICRO-OPENPLATFORM")
@RequestMapping(consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public interface MicroOpenplatformClient {
/**
* 上报微信 有数 统计数据
*
* @param orderCounts
* @return
*/
@PostMapping("/thirdApp/order/addOrderSum")
BaseResponse addOrderSum(@RequestBody SendOrderCountsMsg orderCounts);
/**
* 获取需要 上报腾讯有数的 商户号
*
* @return
*/
@PostMapping("/thirdApp/getFilterPartner")
BaseResponse<GetFilterPartnerResponse> getFilterPartner(@RequestBody OrderGetPartnerRequest request);
}
package cn.freemud.service.universal.factory;
import cn.freemud.entities.vo.CreateOrderAppVo;
import cn.freemud.entities.vo.CreateOrderBaseVo;
import cn.freemud.entities.vo.CreateOrderSaasMallVo;
import cn.freemud.entities.vo.CreateOrderSaasVo;
import cn.freemud.enums.CreateOrderSceneEnum;
import cn.freemud.enums.OrderChannelType;
import cn.freemud.enums.ResponseResult;
import cn.freemud.enums.UserLoginChannelEnum;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.CheckOrderUniversal;
import cn.freemud.service.impl.CheckOrderApp;
import cn.freemud.service.impl.CheckOrderSaas;
import cn.freemud.service.impl.CheckOrderSaasMall;
import cn.freemud.service.universal.UniversalOrderService;
import cn.freemud.service.universal.impl.AppOrderService;
import cn.freemud.service.universal.impl.SaasMallOrderService;
import cn.freemud.service.universal.impl.SaasOrderService;
import com.alibaba.fastjson.JSON;
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
import com.freemud.api.assortment.datamanager.enums.IappIdType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.Objects;
@Service
public class CreateOrderServiceFactory {
@Autowired
private ApplicationContext applicationContext;
/**
* 获取对应的下单实体类操作
*
* @param param
* @param assortmentCustomerInfoVo
* @return
*/
public CreateOrderSceneEnum getCreateOrderScene(Map<String, Object> param, AssortmentCustomerInfoVo assortmentCustomerInfoVo) {
// 围餐
if (IappIdType.WC_XCX.getCode().equals(assortmentCustomerInfoVo.getIappId())) { //i围餐
if (true) {
// 围餐 暂时不接入
throw new ServiceException(ResponseResult.SYSTEM_BUSINESS_ERROR, "围餐暂不接入");
}
return CreateOrderSceneEnum.MEAL;
}
if (UserLoginChannelEnum.APP.getCode().equals(assortmentCustomerInfoVo.getChannel())) {
// APP订单
return CreateOrderSceneEnum.APP;
}
Object channelType = param.get("channelType");
if (Objects.nonNull(channelType)
&& (OrderChannelType.SAASMALL.getCode().equals(channelType))) {
// 商城订单
return CreateOrderSceneEnum.SAASMALL;
}
// 其他类型 为saas订单
return CreateOrderSceneEnum.SAAS;
}
/**
* 获取实体类对应 调用参数
* fisherman 各个订单的入参类型 暂时没区分
* @param param
* @param createOrderSceneEnum
* @return
*/
public CreateOrderBaseVo getCreateOrderVo(Map<String, Object> param, CreateOrderSceneEnum createOrderSceneEnum) {
switch (createOrderSceneEnum) {
case SAAS: // SAAS
return JSON.parseObject(JSON.toJSONString(param), CreateOrderSaasVo.class);
case SAASMALL: // 商城
return JSON.parseObject(JSON.toJSONString(param), CreateOrderSaasMallVo.class);
case APP: // APP订单
return JSON.parseObject(JSON.toJSONString(param), CreateOrderAppVo.class);
default:
throw new ServiceException(ResponseResult.SYSTEM_BUSINESS_ERROR, "CreateOrderSceneEnum 类型错误 :" + createOrderSceneEnum);
}
}
/**
* 获取真实操作对象
*
* @param createOrderSceneEnum
* @return
*/
public UniversalOrderService getCreateOrderService(CreateOrderSceneEnum createOrderSceneEnum) {
switch (createOrderSceneEnum) {
case SAAS:
return applicationContext.getBean("saasOrderService", SaasOrderService.class);
case SAASMALL:
return applicationContext.getBean("saasMallOrderService", SaasMallOrderService.class);
case APP:
return applicationContext.getBean("appOrderService", AppOrderService.class);
// 不支持围餐订单
// case MEAL:
// return applicationContext.getBean("mealOrderService", MealOrderService.class);
default:
return applicationContext.getBean("saasOrderService", SaasOrderService.class);
}
}
/**
* 获取校验对象
*
* @param createOrderSceneEnum
* @return
*/
public CheckOrderUniversal getCheckOrderService(CreateOrderSceneEnum createOrderSceneEnum) {
switch (createOrderSceneEnum) {
case SAAS:
return applicationContext.getBean("checkOrderSaas", CheckOrderSaas.class);
case SAASMALL:
return applicationContext.getBean("checkOrderSaasMall", CheckOrderSaasMall.class);
case APP:
return applicationContext.getBean("checkOrderApp", CheckOrderApp.class);
default:
return applicationContext.getBean("checkOrderSaas", CheckOrderSaas.class);
}
}
}
package cn.freemud.service.universal.impl;
import cn.freemud.adapter.OrderAdapter;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.bo.CreateOrderBo;
import cn.freemud.entities.dto.order.CreateOrderOperateDto;
import cn.freemud.entities.vo.CreateOrderBaseVo;
import cn.freemud.entities.vo.CreateOrderResponseVo;
import cn.freemud.enums.ResponseResult;
import cn.freemud.service.universal.UniversalOrderService;
import cn.freemud.utils.ResponseUtil;
import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.ordercenter.enums.AfterSalesType;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import com.freemud.application.sdk.api.ordercenter.request.create.CreateOrderRequest;
import com.freemud.sdk.api.assortment.order.request.order.CancelOrderRequest;
import com.freemud.sdk.api.assortment.order.request.order.OrderEditRequest;
import com.freemud.sdk.api.assortment.order.response.order.BaseOrderResponse;
import com.freemud.sdk.api.assortment.order.response.order.CreateOrderResponse;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import org.apache.commons.lang.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/4/9 下午2:31
* @description : app订单
*/
@Service
public class AppOrderService extends UniversalOrderService {
@Autowired
private OrderAdapter orderAdapter;
/**
* @return false 不拉起微信预支付
*/
@Override
protected boolean defaultPrepayOrder() {
return false;
}
@Override
public void getCustomCreateOrderBo(CreateOrderBo createOrderBo) {
}
@Override
public void validParam(CreateOrderBaseVo createOrderBaseVo) {
}
@Override
protected CreateOrderRequest absGetCreateOrderRequest(CreateOrderBo createOrderBo) {
// fisherman 可以直接转换对象 和其他的地方有 重复
return super.createOrderAdapter.convent2CreateOrderRequest(createOrderBo);
}
/**
* 拓展字段存放 app 和 saas 一致
*
* @param createOrderBo
* @return
*/
@Override
public OrderExtInfoDto getExtInfo(CreateOrderBo createOrderBo) {
OrderExtInfoDto extInfo = super.getExtInfoUniversal(createOrderBo);
createOrderBo.setExtInfo(extInfo);
return extInfo;
}
/**
* 覆盖 父类创建订单方法
*
* @param createOrderBo
* @return
*/
@Override
protected BaseResponse createSharedOrder(CreateOrderBo createOrderBo) {
CreateOrderRequest request = this.absGetCreateOrderRequest(createOrderBo);
if (request == null) {
return ResponseUtil.error(ResponseResult.PARAMETER_MISSING);
}
// 创建订单
BaseResponse createOrderOperateDtoResponse = this.subSendCreateOrder(request, createOrderBo);
if (createOrderOperateDtoResponse == null || !ResponseResult.SUCCESS.getCode().equals(createOrderOperateDtoResponse.getCode()) || createOrderOperateDtoResponse.getResult() == null) {
return createOrderOperateDtoResponse;
}
// app 业务独立逻辑
CreateOrderOperateDto createOrderOperateDto = (CreateOrderOperateDto) createOrderOperateDtoResponse.getResult();
BaseResponse baseResponse = this.updateOrderExtInfo(createOrderOperateDto.getProductOrderBean(), createOrderBo.getExtInfo(), LogThreadLocal.getTrackingNo());
if (baseResponse != null) {
return baseResponse;
}
//返回没创建预支付的结果
CreateOrderResponseVo responseVo = orderAdapter.convent2CreateFatherSonOrderNoPayResponseVo(createOrderOperateDto.getProductOrderBean());
return ResponseUtil.success(responseVo);
}
private BaseResponse subSendCreateOrder(CreateOrderRequest request, CreateOrderBo createOrderBo) {
BaseResponse baseResponse = super.sendCreateOrder(request, createOrderBo);
if (baseResponse == null || !ResponseResult.SUCCESS.getCode().equals(baseResponse.getCode()) || baseResponse.getResult() == null) {
return baseResponse;
}
CreateOrderOperateDto response = new CreateOrderOperateDto();
QueryOrdersResponse.DataBean.OrderBean result = (QueryOrdersResponse.DataBean.OrderBean) baseResponse.getResult();
long totalAmount = result.getAmount();
response.setTotalAmount(totalAmount);
response.setCardAmount(0);
response.setFatherOrderBean(result);
response.setProductOrderBean(result);
return ResponseUtil.success(response);
}
private BaseResponse updateOrderExtInfo(QueryOrdersResponse.DataBean.OrderBean orderBean, OrderExtInfoDto orderExtInfo, String trackingNo) {
OrderEditRequest orderEditRequest = new OrderEditRequest(orderBean.getOid(), JSONObject.toJSONString(orderExtInfo));
orderEditRequest.setTrackingNo(trackingNo);
BaseOrderResponse baseOrderResponse = orderCenterSdkService.orderEdit(orderEditRequest);
if (!ObjectUtils.equals(ResponseCodeConstant.RESPONSE_SUCCESS, baseOrderResponse.getErrcode())) {
CancelOrderRequest cancelOrderRequest = orderAdapter.convent2CancelOrderRequest(orderBean.getOid(), orderBean.getCompanyId(),
AfterSalesType.SYSTEM_CANCEL, "编辑订单支付信息失败", trackingNo, null);
orderCenterSdkService.orderCancel(cancelOrderRequest);
return ResponseUtil.error(baseOrderResponse.getErrcode().toString(), baseOrderResponse.getErrmsg());
}
return null;
}
/**
* 扣减库存订单
*
* @param createOrderBo
* @param createOrderResponse
* @return
*/
@Override
protected BaseResponse sendActivityUpdateStock(CreateOrderBo createOrderBo, CreateOrderResponse createOrderResponse) {
return super.defalutSendActivityUpdateStock(createOrderBo, createOrderResponse);
}
}
package cn.freemud.service.universal.impl;
import cn.freemud.entities.bo.CreateOrderBo;
import cn.freemud.entities.vo.CreateOrderBaseVo;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.universal.UniversalOrderService;
import com.freemud.application.sdk.api.ordercenter.request.create.CreateOrderRequest;
import org.springframework.stereotype.Service;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/4/9 上午11:36
* @description : 围餐操作 fisherman 没搞完 2021年04月09日11:52:06
*/
@Service
public class MealOrderService extends UniversalOrderService {
@Override
public void getCustomCreateOrderBo(CreateOrderBo createOrderBo) {
}
@Override
public void validParam(CreateOrderBaseVo createOrderBaseVo) {
if (createOrderBaseVo.getOperation() ==null) {
throw new ServiceException(ResponseResult.ORDER_CREATE_OPERATION_ERROR);
}
}
@Override
protected CreateOrderRequest absGetCreateOrderRequest(CreateOrderBo createOrderBo) {
return null;
}
}
package cn.freemud.service.universal.impl;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.bo.CreateOrderBo;
import cn.freemud.entities.vo.CreateOrderBaseVo;
import cn.freemud.entities.vo.CreateOrderSaasVo;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.universal.UniversalOrderService;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import com.freemud.application.sdk.api.ordercenter.request.create.CreateOrderRequest;
import com.freemud.sdk.api.assortment.order.response.order.CreateOrderResponse;
import org.apache.commons.collections4.CollectionUtils;
import org.hibernate.validator.HibernateValidator;
import org.hibernate.validator.HibernateValidatorConfiguration;
import org.springframework.stereotype.Service;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.ValidatorFactory;
import java.util.Iterator;
import java.util.Set;
@Service
public class SaasOrderService extends UniversalOrderService {
@Override
public void getCustomCreateOrderBo(CreateOrderBo createOrderBo) {
}
@Override
public void validParam(CreateOrderBaseVo createOrderBaseVo) {
CreateOrderSaasVo createOrderSaasVo = (CreateOrderSaasVo) createOrderBaseVo;
// 利用 HibernateValidator 校验 标签参数是否满足
HibernateValidatorConfiguration configuration = Validation.byProvider(HibernateValidator.class)
.configure()
.failFast(false);
ValidatorFactory validatorFactory = configuration.buildValidatorFactory();
Set<ConstraintViolation<CreateOrderBaseVo>> set = validatorFactory.getValidator().validate(createOrderSaasVo);
if (CollectionUtils.isNotEmpty(set)) {
Iterator<ConstraintViolation<CreateOrderBaseVo>> iterator = set.iterator();
if (iterator.hasNext()) {
ConstraintViolation<CreateOrderBaseVo> constraintViolation = iterator.next();
throw new ServiceException(ResponseResult.PARAMETER_MISSING, constraintViolation.getMessage());
}
}
}
@Override
protected CreateOrderRequest absGetCreateOrderRequest(CreateOrderBo createOrderBo) {
// fisherman 可以直接转换对象 下面代码先留着 和其他的地方有 重复
return super.createOrderAdapter.convent2CreateOrderRequest(createOrderBo);
}
/**
* 扣减库存订单
* @param createOrderBo
* @param createOrderResponse
* @return
*/
@Override
protected BaseResponse sendActivityUpdateStock(CreateOrderBo createOrderBo, CreateOrderResponse createOrderResponse) {
return super.defalutSendActivityUpdateStock(createOrderBo, createOrderResponse);
}
@Override
public OrderExtInfoDto getExtInfo(CreateOrderBo createOrderBo) {
OrderExtInfoDto extInfo = super.getExtInfoUniversal(createOrderBo);
createOrderBo.setExtInfo(extInfo);
return extInfo;
}
}
package cn.freemud.xxljob;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.dto.delivery.GetFilterPartnerResponse;
import cn.freemud.entities.dto.delivery.PartnerFilterResponse;
import cn.freemud.entities.vo.OrderCountRequestVo;
import cn.freemud.entities.vo.SendOrderCountsMsg;
import cn.freemud.service.Orderservice;
import cn.freemud.service.thirdparty.MicroOpenplatformClient;
import cn.freemud.utils.LogUtil;
import com.alibaba.fastjson.JSON;
import com.freemud.application.sdk.api.constant.ResponseResultEnum;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.ordercenter.response.OrderCountResp;
import com.freemud.application.sdk.api.ordercenter.response.OrderGetPartnerRequest;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/4/26 下午8:27
* @description :
*/
@Component
//@JobHandler("orderCountJobHandler")
@Log4j2
public class OrderCountJobHandler extends IJobHandler {
@Autowired
private Orderservice orderservice;
@Autowired
private MicroOpenplatformClient microOpenplatformClient;
/**
* 【ID1028455】 【订单】非码-腾讯有数数据上报V1.0.0
* 每天6点前上报昨天数据
*
* @param param
* @return
* @throws Exception
*/
@Override
public ReturnT<String> execute(String param) throws Exception {
String trackingNo = LogThreadLocal.getTrackingNo();
log.info("begin xxl-job by send report msg -------- trackingNo:{}", trackingNo);
OrderGetPartnerRequest build1 = OrderGetPartnerRequest.builder().type(3).build();
// 获取需要 上报的商户号
BaseResponse<GetFilterPartnerResponse> filterPartner = microOpenplatformClient.getFilterPartner(build1);
if (filterPartner == null || filterPartner.getResult() == null) {
LogUtil.info("上报商户号没有数据", build1, filterPartner == null ? null : JSON.toJSONString(filterPartner));
return ReturnT.SUCCESS;
}
OrderCountRequestVo orderCountRequestVo = new OrderCountRequestVo();
Set<String> partnerFilter = getPartnerFilter(filterPartner.getResult());
orderCountRequestVo.setPartnerIds(partnerFilter);
// 时间设置 前一天
setBeginAndEndTime(orderCountRequestVo);
BaseResponse<List<OrderCountResp>> result = orderservice.selectCountOrdersByPartnerIds(orderCountRequestVo, trackingNo);
LogUtil.info("orderCountJobHandlersendreportordercountmsg", orderCountRequestVo, result == null ? null : JSON.toJSONString(result));
if (!ResponseResultEnum.SUCCESS.getCode().equalsIgnoreCase(result.getCode()) || Objects.isNull(result.getResult())) {
return ReturnT.SUCCESS;
}
// 每次推送 只能 50条 让生态端处理
List<OrderCountResp> orderCounts = result.getResult();
SendOrderCountsMsg build = SendOrderCountsMsg.builder().orders(orderCounts).build();
BaseResponse baseResponse = microOpenplatformClient.addOrderSum(build);
LogUtil.info("orderCountJobHandlersendreportorderend", null, JSON.toJSONString(baseResponse));
return ReturnT.SUCCESS;
}
private void setBeginAndEndTime(OrderCountRequestVo request) {
Calendar start = Calendar.getInstance();
// 取昨天时间 的 00:00:00
start.add(5, -1);
start.set(Calendar.HOUR_OF_DAY, 00);
start.set(Calendar.MINUTE, 0);
start.set(Calendar.SECOND, 0);
// 取昨天时间 的 23:59:59
Calendar end = Calendar.getInstance();
end.add(5, -1);
end.set(Calendar.HOUR_OF_DAY, 23);
end.set(Calendar.MINUTE, 59);
end.set(Calendar.SECOND, 59);
SimpleDateFormat sm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
request.setBeginTime(start.getTime());
request.setEndTmie(end.getTime());
}
private Set<String> getPartnerFilter(GetFilterPartnerResponse data) {
if (data.getPartnerFilterVos().isEmpty()) {
return null;
}
return data.getPartnerFilterVos().stream().map(PartnerFilterResponse::getPartnerId).collect(Collectors.toSet());
}
}
package cn.freemud.xxljob;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.dto.delivery.GetFilterPartnerResponse;
import cn.freemud.entities.dto.delivery.PartnerFilterResponse;
import cn.freemud.entities.vo.OrderCountRequestVo;
import cn.freemud.service.Orderservice;
import cn.freemud.service.thirdparty.MicroOpenplatformClient;
import com.freemud.application.sdk.api.constant.ResponseResultEnum;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.ordercenter.response.OrderCountResp;
import com.freemud.application.sdk.api.ordercenter.response.OrderGetPartnerRequest;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.sound.sampled.Line;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/4/26 下午8:27
* @description : 测试 xxl-job 能否跑成功
*/
@Component
//@JobHandler("orderCountJobHandlerTest")
@Log4j2
public class OrderCountJobHandlerTest extends IJobHandler {
@Override
public ReturnT<String> execute(String param) throws Exception {
log.info("xxl-job start success");
return ReturnT.SUCCESS;
}
}
...@@ -14,6 +14,11 @@ import org.springframework.test.web.servlet.MockMvc; ...@@ -14,6 +14,11 @@ import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.WebApplicationContext;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
...@@ -65,6 +70,70 @@ public class OrderControllerTest { ...@@ -65,6 +70,70 @@ public class OrderControllerTest {
} }
} }
@Test
public void newCreateOrder() {
Map<String, Object> map = new HashMap<>();
map.put("actualPayAmount", 1);
map.put("appId", "wxb78fb7c6218cb52c");
map.put("barCounter", "");
map.put("bizType", "1");
List<Map<String, Object>> delivery = new ArrayList<>();
Map<String, Object> deliveryMap = new HashMap<>();
deliveryMap.put("addressDetail", "南华路与德华路交叉路口往西北约200米(大润发北侧)");
deliveryMap.put("contactsName", "晓航");
deliveryMap.put("extInfo", "{}");
deliveryMap.put("infoType", "1");
deliveryMap.put("mobile", "18868926846");
deliveryMap.put("relateObjectType", 1);
delivery.add(deliveryMap);
map.put("deliveryContactInfoList", delivery);
map.put("note", "");
map.put("operator", "晓航");
map.put("orderClient",2 );
map.put("orderCostDetailList", "[]");
Map<String, Object> orderExtendedMap = new HashMap<>();
orderExtendedMap.put("orderClientGroup","测试门店-1");
orderExtendedMap.put("orderClientGroupCode","20001");
map.put("orderExtended", orderExtendedMap);
List<Map<String, Object>> orderItemList = new ArrayList<>();
Map<String, Object> orderItemListMap = new HashMap<>();
orderItemListMap.put("canRefund", true);
orderItemListMap.put("extInfo","{\"cartGoodsUid\":\"ff3363c8-72cb-4280-b7b9-7cfe4234ad8e\",\"isSendGoods\":false,\"stapleFood\":0,\"tax\":0.01}");
orderItemListMap.put("ignoreInOrderClose", false);
orderItemListMap.put("isDeleted", false);
orderItemListMap.put("packPrice", 0);
orderItemListMap.put("partnerId", "1864");
orderItemListMap.put("productCode", "");
orderItemListMap.put("productForeignName", "");
orderItemListMap.put("productForeignProperty", "");
orderItemListMap.put("productForeignSpecName", "");
orderItemListMap.put("productId", "195422818929983527");
orderItemListMap.put("productName", "草莓");
orderItemListMap.put("productPicUrl", "https://picture.sandload.cn/1609146623369.jpg");
orderItemListMap.put("productPrice", "1");
orderItemListMap.put("packPrice", "");
orderItemListMap.put("packPrice", "");
orderItemListMap.put("relateObjectType", 1);
orderItemList.add(orderItemListMap);
map.put("orderItemList", orderItemList);
//map.put("", );
try {
mockMvc.perform(post("/item/getMenuCategory").content(map.toString()).
contentType(MediaType.APPLICATION_JSON_UTF8).accept(MediaType.APPLICATION_JSON_UTF8)).andDo(print()).
andExpect(jsonPath("$.code").value("100"));
} catch (Exception e) {
e.printStackTrace();
}
}
/** /**
* 订单支付成功后通知 * 订单支付成功后通知
*/ */
......
...@@ -83,3 +83,5 @@ ...@@ -83,3 +83,5 @@
| 1.3.50.RELEASE | 华莱士商城SDK统一升级 | 王航航 | 2021-05-10 | | 1.3.50.RELEASE | 华莱士商城SDK统一升级 | 王航航 | 2021-05-10 |
| 1.3.51.RELEASE | 华莱士商城SDK统一升级 | 张志恒 | 2021-05-11 | | 1.3.51.RELEASE | 华莱士商城SDK统一升级 | 张志恒 | 2021-05-11 |
| 1.3.50-SNAPSHOT | 基础订单sdk 增加基础服务查询订单汇总 | 周晓航 | 2021-04-28 |
...@@ -254,4 +254,9 @@ public class InterfaceAddressConstant { ...@@ -254,4 +254,9 @@ public class InterfaceAddressConstant {
*/ */
public static final String COMPLETE_BOOKING_TASK = "/task/v2/completeBookingTask"; public static final String COMPLETE_BOOKING_TASK = "/task/v2/completeBookingTask";
/**
* 查询 指定日期对应 商户号 的订单汇总数据
*/
public static final String QUERY_ORDER_COUNT_REPORT = "order/v2/orderCount";
} }
package com.freemud.application.sdk.api.ordercenter.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/4/26 下午8:48
* @description :
*/
@Data
public class OrderCountReqs {
@ApiModelProperty(value = "查询的商户集合", required = true)
Set<String> partnerIds;
@ApiModelProperty(value = "开始时间,如 2021-04-21 00:00:00", required = true)
private Date beginTime;
@ApiModelProperty(value = "结束时间,如 2021-04-21 23:59:59", required = true)
private Date endTmie;
}
package com.freemud.application.sdk.api.ordercenter.response;
import lombok.Builder;
import lombok.Data;
import java.util.Date;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/4/26 下午9:04
* @description :
* ref_date string Y 日期,unix时间戳,字段长度为13字节
*
* give_order_amount_sum float Y 该日期的下单金额之和
* give_order_num_sum integer Y 该日期的下单数量之和
* payment_amount_sum float Y 该日期的支付金额之和
* payed_num_sum integer Y 该日期的支付数量之和
*/
@Data
@Builder
public class OrderCountResp {
// 商户号 用于内存剔除 不需要的商户号统计
private String partnerId;
// 日期,unix时间戳,字段长度为13字节
private Date ref_date;
// 该日期的下单金额之和
private Float give_order_amount_sum;
// 该日期的下单数量之和
private Integer give_order_num_sum;
// 该日期的支付金额之和
private Float payment_amount_sum;
// 该日期的支付数量之和
private Integer payed_num_sum;
}
package com.freemud.application.sdk.api.ordercenter.response;
import lombok.Builder;
import lombok.Data;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/4/27 下午2:49
* @description : 订单业务 写死type=3
* 其他type 问 蔡浩伟
*/
@Data
@Builder
public class OrderGetPartnerRequest {
//1,活动招商;2,知不道是什么,订单业务写死3 3,腾讯有数
private Integer type;
}
...@@ -963,4 +963,10 @@ public class OrderSdkService { ...@@ -963,4 +963,10 @@ public class OrderSdkService {
return responseHandle(responseDTO); return responseHandle(responseDTO);
} }
public BaseResponse<List<OrderCountResp>> countOrdersByPartnerIds(OrderCountReqs orderCountReqs,String trackingNo) {
OrderBaseResp responseDTO = RequestThirdPartyUtils.httpJsonReqComplexNew(restTemplate, QUERY_ORDER_COUNT_REPORT,
createBaseRequest(orderCountReqs, trackingNo), new ParameterizedTypeReference<OrderBaseResp>() {
});
return responseHandle(responseDTO);
}
} }
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