Commit deb41696 by 徐康

Merge branch 'feature/20200727_麦咖啡p1v2支付券码路由' into qa

# Conflicts:
#	order-application-service/src/main/java/cn/freemud/OrderApplication.java
#	order-application-service/src/main/java/cn/freemud/enums/ResponseResult.java
#	order-application-service/src/main/java/cn/freemud/service/OrderAdapterService.java
#	order-application-service/src/main/java/cn/freemud/service/thirdparty/DeliveryFeiginClient.java
#	order-management/src/main/java/cn/freemud/management/thirdparty/CouponOfflineMCCafeClient.java
#	ordercenter-sdk/src/main/java/com/freemud/application/sdk/api/ordercenter/request/OrderExtInfoDto.java
parents 9ae9adb2 a094f7b7
...@@ -2718,6 +2718,12 @@ public class OrderSdkAdapter { ...@@ -2718,6 +2718,12 @@ public class OrderSdkAdapter {
if (StringUtils.isNotBlank(product.getCategory())){ if (StringUtils.isNotBlank(product.getCategory())){
extInfo.setThirdCensusCategoryId(product.getCategory()); extInfo.setThirdCensusCategoryId(product.getCategory());
} }
if (0 != product.getTax()){
extInfo.setTax(product.getTax());
}
if (StringUtils.isNotEmpty(product.getTaxId())){
extInfo.setTaxId(product.getTaxId());
}
extInfo.setStapleFood(product.getStapleFood()); extInfo.setStapleFood(product.getStapleFood());
//if (product.getStapleFood()!=null && product.getStapleFood()>0) { //if (product.getStapleFood()!=null && product.getStapleFood()>0) {
// extInfo.setStapleFood(1); // extInfo.setStapleFood(1);
......
...@@ -168,4 +168,9 @@ public class CreateOrderProductRequest extends BaseConfig { ...@@ -168,4 +168,9 @@ public class CreateOrderProductRequest extends BaseConfig {
/** 商品统计分类编号**/ /** 商品统计分类编号**/
private String category; private String category;
/** 商品税率**/
private double tax;
private String taxId;
} }
...@@ -61,4 +61,8 @@ public class OrderProductAddInfoDto extends BaseConfig { ...@@ -61,4 +61,8 @@ public class OrderProductAddInfoDto extends BaseConfig {
* 商品统计分类编号 * 商品统计分类编号
*/ */
private String thirdCensusCategoryId; private String thirdCensusCategoryId;
private double tax;
private String taxId;
} }
...@@ -49,7 +49,7 @@ import java.util.concurrent.ThreadPoolExecutor; ...@@ -49,7 +49,7 @@ import java.util.concurrent.ThreadPoolExecutor;
@ComponentScan({"cn.freemud", "com.freemud"}) @ComponentScan({"cn.freemud", "com.freemud"})
@MapperScan({"cn.freemud.*.dao","com.freemud.sdk.api.assortment.orderdistributor.mapper","com.freemud.api.assortment.datamanager.manager", @MapperScan({"cn.freemud.*.dao","com.freemud.sdk.api.assortment.orderdistributor.mapper","com.freemud.api.assortment.datamanager.manager",
"com.freemud.api.assortment.datamanager.queue.dao","com.freemud.api.assortment.datamanager.rbac.dao","com.freemud.api.assortment.datamanager.queue.entity"}) "com.freemud.api.assortment.datamanager.queue.dao","com.freemud.api.assortment.datamanager.rbac.dao","com.freemud.api.assortment.datamanager.queue.entity"})
@EnableFeignClients({"cn.freemud.service.thirdparty","com.freemud.sdk.api.assortment.message","cn.freemud.management.thirdparty"}) @EnableFeignClients({"cn.freemud.service.thirdparty","com.freemud.sdk.api.assortment.message","cn.freemud.service.mccafe.thirdparty","cn.freemud.management.thirdparty"})
@EnableAutoConfiguration @EnableAutoConfiguration
public class OrderApplication { public class OrderApplication {
public static void main(String[] args) { public static void main(String[] args) {
......
package cn.freemud.adapter; package cn.freemud.adapter;
import cn.freemud.base.util.DateUtil;
import cn.freemud.entities.dto.QueryOrdersResponseDto; import cn.freemud.entities.dto.QueryOrdersResponseDto;
import cn.freemud.entities.vo.CreateDeliveryVo;
import cn.freemud.entities.vo.ProductInfo;
import cn.freemud.enums.DeliveryChannelEnum; import cn.freemud.enums.DeliveryChannelEnum;
import cn.freemud.enums.OrderSourceType;
import cn.freemud.enums.OrderType;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.deliverycenter.dto.CreateDeliveryOrderRequestDto; import com.freemud.application.sdk.api.deliverycenter.dto.CreateDeliveryOrderRequestDto;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto; import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse; import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.freemud.sdk.api.assortment.order.request.order.CreateOrderProductRequest;
import com.freemud.sdk.api.assortment.order.request.order.OrderProductAddInfoDto;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
@Component @Component
public class DeliveryAdapter { public class DeliveryAdapter {
public CreateDeliveryOrderRequestDto convertToWeixinDeliveryOrderRequestDto(QueryOrdersResponseDto.DataBean.OrderBean orderBean, StoreResponse storeInfo, String accessToken, String deliveryCallBackUrl) { public CreateDeliveryOrderRequestDto convertToWeixinDeliveryOrderRequestDto(QueryOrdersResponseDto.DataBean.OrderBean orderBean, StoreResponse storeInfo, String accessToken, String deliveryCallBackUrl) {
CreateDeliveryOrderRequestDto deliveryOrderRequestDto = new CreateDeliveryOrderRequestDto(); CreateDeliveryOrderRequestDto deliveryOrderRequestDto = new CreateDeliveryOrderRequestDto();
...@@ -74,6 +88,107 @@ public class DeliveryAdapter { ...@@ -74,6 +88,107 @@ public class DeliveryAdapter {
return deliveryOrderRequestDto; return deliveryOrderRequestDto;
} }
/**
* 创建配送单请求对象
*
* @param order
* @param storeInfo
* @return
*/
public CreateDeliveryVo buildDeliveryOrderRequestDto(QueryOrdersResponseDto.DataBean.OrderBean order
, StoreResponse storeInfo, String deliveryCallBackUrl, String displayOrderId ) {
SimpleDateFormat simpleDateFormat =new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
CreateDeliveryVo deliveryOrderRequestDto = new CreateDeliveryVo();
OrderExtInfoDto orderExtInfoDto = JSON.parseObject(order.getExtInfo(), OrderExtInfoDto.class);
deliveryOrderRequestDto.setInvoiceTitle(orderExtInfoDto.getInvoiceTitle());
deliveryOrderRequestDto.setDepatchWeight(order.getWeight());
//deliveryOrderRequestDto.setSerialNumber(order.getOtherCode());
deliveryOrderRequestDto.setOrderId(order.getOid());
deliveryOrderRequestDto.setOrderRemark(order.getRemark());
deliveryOrderRequestDto.setOrderTotalAmount(order.getAmount().intValue());
deliveryOrderRequestDto.setOrderActualAmount(order.getAmount().intValue());
deliveryOrderRequestDto.setPartnerId(order.getCompanyId());
deliveryOrderRequestDto.setOrderChannel(order.getSource());
deliveryOrderRequestDto.setStoreId(storeInfo.getBizVO().getStoreId());
deliveryOrderRequestDto.setStoreCode(storeInfo.getBizVO().getStoreCode());
StringBuffer address = new StringBuffer(storeInfo.getBizVO().getCity())
.append(storeInfo.getBizVO().getProvince())
.append(storeInfo.getBizVO().getRegion())
.append(storeInfo.getBizVO().getAddress());
deliveryOrderRequestDto.setStoreAddress(address.toString());
deliveryOrderRequestDto.setStoreLng(new BigDecimal(storeInfo.getBizVO().getLongitude()));
deliveryOrderRequestDto.setStoreLat(new BigDecimal(storeInfo.getBizVO().getLatitude()));
deliveryOrderRequestDto.setStorePhone(storeInfo.getBizVO().getPhone());
deliveryOrderRequestDto.setStoreName(order.getShopName());
deliveryOrderRequestDto.setCityName(storeInfo.getBizVO().getCity());
deliveryOrderRequestDto.setReceiverName(order.getUserName());
deliveryOrderRequestDto.setReceiverPrimaryPhone(order.getPhone());
deliveryOrderRequestDto.setReceiverAddress(order.getAddress());
deliveryOrderRequestDto.setReceiverLng(new BigDecimal(order.getLongitude()));
deliveryOrderRequestDto.setReceiverLat(new BigDecimal(order.getLatitude()));
deliveryOrderRequestDto.setOrderTime(new Date(order.getGmtCreate()));
deliveryOrderRequestDto.setCallbackUrl(deliveryCallBackUrl);
// 预约单预计送到时间
if (order.getGmtExpect() != null && order.getGmtExpect() != 0) {
deliveryOrderRequestDto.setExpectTime(new Date(order.getGmtExpect()));
}
deliveryOrderRequestDto.setIsPre(order.getType() == OrderType.PRE_ORDER.getCode() ? 1 : 0);
//---麦咖啡餐道专用---
deliveryOrderRequestDto.setDisplayOrderId(displayOrderId);
deliveryOrderRequestDto.setTaxFlag(1);
if (CollectionUtils.isNotEmpty(order.getAccountList())) {
List<QueryOrdersResponseDto.DataBean.OrderBean.AccountBean> collect = order.getAccountList().stream().filter(type -> type != null && !type.equals(1)).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(collect)) {
//配送费
deliveryOrderRequestDto.setDeliveryTotal(collect.get(0).getPrice().intValue());
}
}else {
deliveryOrderRequestDto.setDeliveryTotal(0);
}
deliveryOrderRequestDto.setIsPayed(1);
deliveryOrderRequestDto.setTenderType("WeChat");
deliveryOrderRequestDto.setIsLargeOrder(0);
if (deliveryOrderRequestDto.getIsPre()== 1 && deliveryOrderRequestDto.getExpectTime() !=null){
deliveryOrderRequestDto.setIsImmediateDelivery(0);
deliveryOrderRequestDto.setExpectDeliveryTimeByUTC(simpleDateFormat.format(deliveryOrderRequestDto.getExpectTime()));
}else {
deliveryOrderRequestDto.setIsImmediateDelivery(1);
String expectDeliveryTimeByUTC = order.getGmtCreate() !=null ? simpleDateFormat.format(DateUtil.addMinutes(new Date(order.getGmtCreate()),30)) :null;
deliveryOrderRequestDto.setExpectDeliveryTimeByUTC(expectDeliveryTimeByUTC);
}
//---麦咖啡餐道专用---
List<ProductInfo> productInfos = new ArrayList<>();
if (CollectionUtils.isNotEmpty(order.getProductList())) {
order.getProductList().forEach(productList -> {
if (productList.getPrice() > 0) {
ProductInfo deliveryProductInfo = new ProductInfo();
deliveryProductInfo.setProductCode(productList.getProductId());
deliveryProductInfo.setProductName(productList.getProductName());
deliveryProductInfo.setProductNumber(productList.getNumber());
deliveryProductInfo.setProductPrice(productList.getPrice().intValue());
//餐道使用
deliveryProductInfo.setCumulatedTotal(productList.getNumber() * productList.getPrice().intValue());
OrderProductAddInfoDto orderProductAddInfoDto = JSON.parseObject(productList.getAddInfo(), OrderProductAddInfoDto.class);
deliveryProductInfo.setTaxId(StringUtils.isNotEmpty(orderProductAddInfoDto.getTaxId()) ? orderProductAddInfoDto.getTaxId() : "10");
deliveryProductInfo.setTaxRate(orderProductAddInfoDto.getTax() > 0 ? orderProductAddInfoDto.getTax() : 6);
deliveryProductInfo.setParentCode(Long.valueOf(productList.getParentProductId()) == 0l ? -1l : Long.valueOf(productList.getParentProductId()));
productInfos.add(deliveryProductInfo);
}
});
deliveryOrderRequestDto.setProductTotal(productInfos.stream().mapToInt(t -> t.getCumulatedTotal()).sum());
}
deliveryOrderRequestDto.setProductInfos(productInfos);
deliveryOrderRequestDto.setOrderSource(OrderSourceType.ALIPAY.getCode().equals(order.getSource())?"Alipay":"freemud");
return deliveryOrderRequestDto;
}
} }
...@@ -134,8 +134,8 @@ public class OrderAdapter { ...@@ -134,8 +134,8 @@ public class OrderAdapter {
long deliveryAmount = 0; long deliveryAmount = 0;
long discountDeliveryAmount = 0; long discountDeliveryAmount = 0;
if (createOrderVo.getMenuType().equals(BusinessTypeEnum.SAAS_DELIVERY.getCode())) { if (createOrderVo.getMenuType().equals(BusinessTypeEnum.SAAS_DELIVERY.getCode())) {
deliveryAmount = shoppingCartGoodsDto.getDeliveryAmount(); deliveryAmount = shoppingCartGoodsDto.getDeliveryAmount()==null?9l:shoppingCartGoodsDto.getDeliveryAmount();
discountDeliveryAmount = shoppingCartGoodsDto.getDeliveryAmount(); discountDeliveryAmount = shoppingCartGoodsDto.getDeliveryAmount()==null?9l:shoppingCartGoodsDto.getDeliveryAmount();
if(shoppingCartGoodsDto.getIsDiscountDelivery() && deliveryAmount>shoppingCartGoodsDto.getDiscountDeliveryAmount()){ if(shoppingCartGoodsDto.getIsDiscountDelivery() && deliveryAmount>shoppingCartGoodsDto.getDiscountDeliveryAmount()){
discountDeliveryAmount = shoppingCartGoodsDto.getDiscountDeliveryAmount(); discountDeliveryAmount = shoppingCartGoodsDto.getDiscountDeliveryAmount();
} }
...@@ -2108,6 +2108,8 @@ public class OrderAdapter { ...@@ -2108,6 +2108,8 @@ public class OrderAdapter {
createOrderProductDemoDto.setUnit(cartGoodsDetailDto.getUnit()); createOrderProductDemoDto.setUnit(cartGoodsDetailDto.getUnit());
createOrderProductDemoDto.setStapleFood(0); createOrderProductDemoDto.setStapleFood(0);
createOrderProductDemoDto.setCategory(cartGoodsDetailDto.getClassificationId()); createOrderProductDemoDto.setCategory(cartGoodsDetailDto.getClassificationId());
createOrderProductDemoDto.setTax(cartGoodsDetailDto.getTax());
createOrderProductDemoDto.setTaxId(cartGoodsDetailDto.getTaxId());
return createOrderProductDemoDto; return createOrderProductDemoDto;
} }
......
...@@ -18,6 +18,7 @@ import cn.freemud.entities.vo.encircle.CreateReserveOrderVo; ...@@ -18,6 +18,7 @@ import cn.freemud.entities.vo.encircle.CreateReserveOrderVo;
import cn.freemud.entities.vo.encircle.EncircleReserveBaseVo; import cn.freemud.entities.vo.encircle.EncircleReserveBaseVo;
import cn.freemud.monitorcenter.tools.HealthUtil; import cn.freemud.monitorcenter.tools.HealthUtil;
import cn.freemud.service.EncircleOrderService; import cn.freemud.service.EncircleOrderService;
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;
...@@ -46,6 +47,8 @@ public class OrderController { ...@@ -46,6 +47,8 @@ public class OrderController {
private EncircleOrderService encircleOrderService; private EncircleOrderService encircleOrderService;
@Autowired @Autowired
private MallOrderServiceImpl mallOrderService; private MallOrderServiceImpl mallOrderService;
@Autowired
private MCCafeOrderService mcCafeOrderService;
/** /**
* 创建订单之前校验前面排队的订单数 * 创建订单之前校验前面排队的订单数
...@@ -73,6 +76,15 @@ public class OrderController { ...@@ -73,6 +76,15 @@ public class OrderController {
} }
/** /**
* 麦咖啡创建订单
*/
@ApiAnnotation(logMessage = "createMCCafeOrder")
@PostMapping("/MCoffee/createMCCafeOrder")
public BaseResponse createOrderMCCafe(@Validated @LogParams @RequestBody CreateOrderVo createOrderVo) {
return orderAdapterService.createMCCafeOrder(createOrderVo);
}
/**
* 扫脸支付下单 * 扫脸支付下单
*/ */
@ApiAnnotation(logMessage = "scanFaceCreateOrder") @ApiAnnotation(logMessage = "scanFaceCreateOrder")
...@@ -109,6 +121,15 @@ public class OrderController { ...@@ -109,6 +121,15 @@ public class OrderController {
} }
/** /**
* 麦咖啡订单支付成功后通知
*/
@ApiAnnotation(logMessage = "mcCafePaySuccessCallback")
@PostMapping({"/MCoffee/mcCafePaySuccessCallback","/openStoreMCCafeQueryPaymentCallback"})
public String mcCafePaySuccessCallback(@LogParams @RequestBody NewPaysuccessNoticeMessage message) {
return mcCafeOrderService.mcCafePaySuccessCallback(message);
}
/**
* 退款回掉通知 * 退款回掉通知
*/ */
@ApiAnnotation(logMessage = "refundNotifyCallback") @ApiAnnotation(logMessage = "refundNotifyCallback")
...@@ -207,6 +228,15 @@ public class OrderController { ...@@ -207,6 +228,15 @@ public class OrderController {
} }
/** /**
* 麦咖啡用户申请退款
*/
@ApiAnnotation(logMessage = "mcCafeRefund")
@PostMapping("/MCoffee/mcCafeRefund")
public BaseResponse mcCafeRefund(@Validated @LogParams @RequestBody OrderRefundVo orderRefundVo) {
return mcCafeOrderService.orderRefund(orderRefundVo);
}
/**
* 获取订单排队号 * 获取订单排队号
*/ */
@ApiAnnotation(logMessage = "queueIndex") @ApiAnnotation(logMessage = "queueIndex")
......
package cn.freemud.entities.dto;
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class CancelDeliveryRequest {
private String displayOrderId;
private String orderId;
private String orderCancelCode;
private String orderCancelDescription;
private String receiveOrderType;
private String storeId;
private String deliveryId;
private String reviewId;
}
...@@ -124,6 +124,10 @@ public class QueryOrdersResponseDto { ...@@ -124,6 +124,10 @@ public class QueryOrdersResponseDto {
* 订单ID * 订单ID
*/ */
private String oid; private String oid;
/**
* 下游订单号
*/
private String downstreamThirdOrderCode;
private Integer orderType; private Integer orderType;
/** /**
* 取餐码 * 取餐码
......
package cn.freemud.entities.dto.coupon;
import lombok.Data;
import java.util.List;
@Data
public class BatchQueryActivityInfoRequestDto {
/**
* 商户号
*/
private Integer partnerId;
/**
* 活动号集合
*/
private List<String> activeCode;
/**
* 是否需要活动商品券相关数据 1:需要
*/
private Integer isProduct;
/**
* 签名
*/
private String sign;
}
package cn.freemud.entities.dto.coupon;
import lombok.Data;
import java.util.List;
@Data
public class BatchQueryActivityInfoResponseDto {
/**
* 状态码
*/
private String statusCode;
/**
* 状态码描述
*/
private String msg;
// private List<Active> activities;
}
package cn.freemud.entities.dto.coupon;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class GetAppKeyRequestDto {
private String partnerId;
private String appId;
}
package cn.freemud.entities.dto.coupon;
import lombok.Data;
@Data
public class GetAppKeyResponseDto {
/**
* 状态码(100:成功,101:失败,-101:无效参数,-1:系统错误)
*/
private Integer statusCode;
/**
* 描述
*/
private String msg;
private Integer ver;
private DataBean data;
@Data
public static class DataBean {
private String appKey;
}
}
package cn.freemud.entities.dto.delivery;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* 查询省份对应配送费价格响应对象
* @version V1.0
* @author: kai.ding
* @date:
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* All rights Reserved, Designed By www.freemud.cn
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目的
*/
@Data
public class CancelDeliveryResponseDto {
private Integer code;
private String msg;
private Object data;
@Data
public static class QueryDeliveryAmountResult {
private Long id;
/**
* 商户ID
*/
private String partnerId;
/**
* 配送费 单位:分
*/
private BigDecimal deliveryAmount;
/**
* 收件人省份编码
*/
private String provinceCode;
/**
* 收件人省份
*/
private String sendProvince;
/**
* 状态 1启用 2禁用
*/
private Integer status;
}
}
package cn.freemud.entities.dto.delivery;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.Valid;
import javax.validation.constraints.*;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* Created by freemudadmin on 2018/10/31.
*/
@Data
@ApiModel(value = "CreateDeliveryVo",description = "创建配送单请求参数")
public class CreateDeliveryVo {
/**
* 商品信息
*/
@ApiModelProperty(value = "商品信息")
@NotEmpty(message = "productInfos不能为空")
@Valid
private List<ProductInfo> productInfos;
/**
* 取餐号
*/
@ApiModelProperty(value = "取餐号")
@NotBlank(message = "serialNumber不能为空")
private String serialNumber;
/**
* 订单编号
*/
@ApiModelProperty(value = "订单编号")
@NotBlank(message = "orderId不能为空")
private String orderId;
/**
* 订单备注
*/
@ApiModelProperty(value = "订单备注")
private String orderRemark;
/**
* 订单来源 美团 ,饿了么,百度,口碑 等(中文)
*/
@ApiModelProperty(value = "订单来源 美团 ,饿了么,百度,口碑 等(中文)")
private String orderSource;
/**
* 订单总金额(分)
*/
@ApiModelProperty(value = "订单总金额(分)")
@NotNull(message = "orderTotalAmount不能为空")
@Min(value = 1, message = "orderTotalAmount不能小于1")
private Integer orderTotalAmount;
/**
* 订单实付金额(分)
*/
@ApiModelProperty(value = "订单实付金额(分)")
@NotNull(message = "orderActualAmount不能为空")
@Min(value = 1, message = "orderActualAmount不能小于1")
private Integer orderActualAmount;
/**
* 订单重量(kg)
*/
@ApiModelProperty(value = "订单重量(kg)")
private BigDecimal depatchWeight;
/**
* 发票抬头
*/
@ApiModelProperty(value = "发票抬头")
private String invoiceTitle;
/**
* 商户id
*/
@ApiModelProperty(value = "商户id")
@NotBlank(message = "partnerId不能为空")
private String partnerId;
/**
* 商户信息备注
*/
@ApiModelProperty(value = "商户信息备注")
private String partnerRemark;
/**
* 订单渠道
*/
@ApiModelProperty(value = "订单渠道")
@NotBlank(message = "orderChannel不能为空")
private String orderChannel;
/**
* 配送渠道
*/
@ApiModelProperty(value = "配送渠道")
private String deliveryChannel;
/**
* 是否预约单 0否 1是
*/
@ApiModelProperty(value = "是否预约单 :0否 1是")
@NotNull(message = "isPre不能为空")
@Min(value = 0,message = "isPre不能小于0")
@Max(value = 1,message = "isPre不能大于1")
private Integer isPre;
/**
* 门店id(非码)
*/
@ApiModelProperty(value = "门店id")
@NotBlank(message = "storeId不能为空")
private String storeId;
/**
* 第三方门店id
*/
@ApiModelProperty(value = "第三方门店id")
@NotBlank(message = "storeCode不能为空")
private String storeCode;
/**
* 门店名称
*/
@ApiModelProperty(value = "门店名称")
@NotBlank(message = "storeName不能为空")
private String storeName;
/**
* 门店地址
*/
@ApiModelProperty(value = "门店地址")
@NotBlank(message = "storeAddress不能为空")
private String storeAddress;
@ApiModelProperty(value = "门店所在区")
private String storeArea;
@ApiModelProperty(value = "门店所在市")
private String storeCity;
@ApiModelProperty(value = "门店所在省")
private String storeProvince;
/**
* 门店经度
*/
@ApiModelProperty(value = "门店经度")
@NotNull(message = "storeLng不能为空")
private BigDecimal storeLng;
/**
* 门店纬度
*/
@ApiModelProperty(value = "门店纬度")
@NotNull(message = "storeLat不能为空")
private BigDecimal storeLat;
/**
* 门店电话
*/
@ApiModelProperty(value = "门店电话")
@NotBlank(message = "storePhone不能为空")
private String storePhone;
/**
* 门店联系人
*/
@ApiModelProperty(value = "门店联系人")
private String storeContact;
/**
* 收货人姓名
*/
@ApiModelProperty(value = "收货人姓名")
@NotBlank(message = "receiverName不能为空")
private String receiverName;
/**
* 收货人联系方式
*/
@ApiModelProperty(value = "收货人联系方式")
@NotBlank(message = "receiverPrimaryPhone不能为空")
private String receiverPrimaryPhone;
/**
* 收货人备用联系方式
*/
@ApiModelProperty(value = "收货人备用联系方式")
private String receiverSecondPhone;
/**
* 收货人地址
*/
@ApiModelProperty(value = "收货人地址")
@NotBlank(message = "receiverAddress不能为空")
private String receiverAddress;
/**
* 收货人经度
*/
@ApiModelProperty(value = "收货人经度")
@NotNull(message = "receiverLng不能为空")
private BigDecimal receiverLng;
/**
* 收货人纬度
*/
@ApiModelProperty(value = "收货人纬度")
@NotNull(message = "receiverLat不能为空")
private BigDecimal receiverLat;
/**
* 所在城市
*/
@ApiModelProperty(value = "所在城市")
@NotBlank(message = "cityName不能为空")
private String cityName;
@ApiModelProperty(value = "所在省份")
private String provinceName;
@ApiModelProperty(value = "所在区")
private String areaName;
/**
* 配送服务代码(飞速达:4002;快速达:4011;及时达:4012;集中送:4013)
*/
@ApiModelProperty(value = "配送服务代码(飞速达:4002;快速达:4011;及时达:4012;集中送:4013)")
private Integer deliveryServiceCode;
/**
* 商品类型 1送餐; 2送药; 3百货;4脏衣收; 5干净衣派;6生鲜; 7保单;8饮品;9现场勘查;99其他
*/
@ApiModelProperty(value = "商品类型 1送餐; 2送药; 3百货;4脏衣收; 5干净衣派;6生鲜; 7保单;8饮品;9现场勘查;99其他")
private Integer productType;
@ApiModelProperty(value = "回调地址")
@NotBlank(message = "callbackUrl不能为空")
private String callbackUrl;
@ApiModelProperty(value = "用户下单时间")
@NotNull(message = "orderTime不能为空")
private Date orderTime;
@ApiModelProperty(value = "用户期望送达时间")
private Date expectTime;
@ApiModelProperty(value = "微信token 渠道为微信物流时必传")
private String accessToken;
@ApiModelProperty(value = "小程序openid 渠道为微信物流时必传")
private String openId;
@ApiModelProperty(value = "商家小程序的路径,建议为订单页面 渠道为微信物流时必传")
private String wxaPath;
@ApiModelProperty(value = "小程序appId 渠道为微信物流时必传")
private String wxAppId;
@ApiModelProperty(value = "微信物流公司id")
private String wxCompanyId;
@ApiModelProperty(value = "微信物流公司快递编码")
private String wxBizId;
@ApiModelProperty(value = "微信物流公司服务类型ID")
private Integer serviceType;
@ApiModelProperty(value = "微信物流公司服务类型名称")
private String serviceName;
@ApiModelProperty(value = "非码运单号")
private String deliveryId;
@ApiModelProperty(value = "是否大订单 : 0-否 , 1-是")
private Integer isLargeOrder;
@ApiModelProperty(value = "是否实时送达: 0-否 , 1-是")
private Integer isImmediateDelivery;
@ApiModelProperty(value = "预计送达时间-UTC 时间")
private String expectDeliveryTimeByUTC;
@ApiModelProperty(value = "餐品总额(单位:分)")
private Integer productTotal;
@ApiModelProperty(value = "是否支付: 0-否 , 1-是 ")
private Integer isPayed;
@ApiModelProperty(value = "付款类型")
private String tenderType;
@ApiModelProperty(value = "启用新版税率规则计算开票:0-关闭,1-开启")
private Integer taxFlag;
@ApiModelProperty(value = "配送费(单位:分)")
private Integer deliveryTotal;
@ApiModelProperty(value = "订单显示ID(餐道专用)")
private String displayOrderId;
}
package cn.freemud.entities.dto.delivery;
import lombok.Data;
@Data
public class MCCafeDeliveryBaseResponse<T> {
private String code;
private String msg;
private T data;
}
package cn.freemud.entities.dto.delivery;
import lombok.Data;
@Data
public class MCCafeDeliveryGetStoreIdResponse {
private Integer storeId;
private String storeName;
}
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: ItemJson
* @Package com.freemud.o2o.dto
* @Description:
* @author: canlong.wu
* @date: 2018/6/20 15:29
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目的
*/
package cn.freemud.entities.dto.delivery;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.NotBlank;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
@Data
@ApiModel(value = "ProductInfo",description = "商品信息")
public class ProductInfo {
/**
* 商品编号
*/
@ApiModelProperty(value = "商品编号")
@NotBlank(message = "productCode不能为空")
private String productCode;
// ----
@ApiModelProperty(value = "归属餐品 ID(一般套餐或者特殊要求时,该 ID 指向主餐品 ID) 0或者-1代表一级餐品数据; 一份餐品数据存在多级")
private Long parentCode;
@ApiModelProperty(value = "税率代码:10-餐品费用,13-非餐品费用;仅 taxFlag=1 改字段生效,具体税率代码参考麦 中定义")
private Integer taxId;
@ApiModelProperty(value = "税率:餐品费用-6,非餐品费用-13;仅 taxFlag=1 改字段生效,具体税率值参考麦中 定义")
private Integer taxRate;
@ApiModelProperty(value = "优惠金额 单位:分")
private Long discountAmount;
// ---
/**
* 商品名称
*/
@ApiModelProperty(value = "商品名称")
@NotBlank(message = "productName不能为空")
private String productName;
/**
* 商品数量
*/
@ApiModelProperty(value = "商品数量")
@NotNull(message = "productNumber不能为空")
@Min(value = 1,message = "productNumber不能小于1")
private Integer productNumber;
/**
* 商品价格(分)
*/
@ApiModelProperty(value = "商品价格(分)")
@NotNull(message = "productPrice不能为空")
//@Min(value = 1,message = "productPrice不能小于1")
private Integer productPrice;
/**
* 商品尺寸
*/
@ApiModelProperty(value = "商品尺寸")
private Integer productSize;
@ApiModelProperty(value = "商品图片 微信物流必传")
private String productImg;
/**
* 商品备注
*/
@ApiModelProperty(value = "商品备注")
private String productRemark;
@ApiModelProperty(value = "小计(单位分)")
private Integer cumulatedTotal;
@ApiModelProperty(value = "分组名称,如果订单采用分组形式,该参数为比传")
private String GroupName;
}
package cn.freemud.entities.dto.shoppingCart;
import cn.freemud.entities.dto.OrderProductAddInfo;
import cn.freemud.entities.vo.SubtractStockVO;
import com.alibaba.fastjson.JSON;
import lombok.Builder;
import lombok.Data;
import org.apache.commons.collections4.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Data
public class MCCafeShoppingCartGoodsDto extends ShoppingCartGoodsDto {
private String thirdCouponCode;
}
...@@ -200,6 +200,13 @@ public class ShoppingCartGoodsDto { ...@@ -200,6 +200,13 @@ public class ShoppingCartGoodsDto {
private String unit; private String unit;
/** /**
* 费率
*/
private double tax;
private String taxId;
/**
* 配料或属性 * 配料或属性
*/ */
private List<CartGoodsDetailDto.CartGoodsExtra> extraList = new ArrayList<>(0); private List<CartGoodsDetailDto.CartGoodsExtra> extraList = new ArrayList<>(0);
......
package cn.freemud.entities.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Data
public class CreateDeliveryVo {
/**
* 商品信息
* productInfos不能为空
*/
private List<ProductInfo> productInfos;
/**
* 取餐号
* serialNumber不能为空
*/
private String serialNumber;
/**
* 订单编号
* orderId不能为空
*/
private String orderId;
/**
* 订单备注
*/
private String orderRemark;
/**
* 订单来源 美团 ,饿了么,百度,口碑 等(中文)
*/
private String orderSource;
/**
* 订单总金额(分)
* orderTotalAmount不能为空
* orderTotalAmount不能小于1
*/
private Integer orderTotalAmount;
/**
* 订单实付金额(分)
* orderActualAmount不能为空
* orderActualAmount不能小于1
*/
private Integer orderActualAmount;
/**
* 订单重量(kg)
*/
private BigDecimal depatchWeight;
/**
* 发票抬头
*/
private String invoiceTitle;
/**
* 商户id
*/
private String partnerId;
/**
* 商户信息备注
*/
private String partnerRemark;
/**
* 订单渠道
*/
private String orderChannel;
/**
* 配送渠道
*/
private String deliveryChannel;
/**
* 是否预约单 0否 1是
* isPre不能为空
*
*/
private Integer isPre;
/**
* 门店id(非码)
* storeId不能为空
*/
private String storeId;
/**
* 第三方门店id
* storeCode不能为空
*/
private String storeCode;
/**
* 门店名称
* storeName不能为空
*/
private String storeName;
/**
* 门店地址
* storeAddress不能为空
*/
private String storeAddress;
// "门店所在区"
private String storeArea;
// "门店所在市"
private String storeCity;
// "门店所在省"
private String storeProvince;
/**
* 门店经度
* storeLng不能为空
*/
private BigDecimal storeLng;
/**
* 门店纬度
* storeLat不能为空
*/
private BigDecimal storeLat;
/**
* 门店电话
* storePhone不能为空
*/
private String storePhone;
/**
* 门店联系人
*/
private String storeContact;
/**
* 收货人姓名
* receiverName不能为空
*/
private String receiverName;
/**
* 收货人联系方式
* receiverPrimaryPhone不能为空
*/
private String receiverPrimaryPhone;
/**
* 收货人备用联系方式
*/
private String receiverSecondPhone;
/**
* 收货人地址
* receiverAddress不能为空
*/
private String receiverAddress;
/**
* 收货人经度
* receiverLng不能为空
*/
private BigDecimal receiverLng;
/**
* 收货人纬度
* receiverLat不能为空
*/
private BigDecimal receiverLat;
/**
* 所在城市
* cityName不能为空
*/
private String cityName;
//"所在省份"
private String provinceName;
//"所在区"
private String areaName;
/**
* 配送服务代码(飞速达:4002;快速达:4011;及时达:4012;集中送:4013)
*/
private Integer deliveryServiceCode;
/**
* 商品类型 1送餐; 2送药; 3百货;4脏衣收; 5干净衣派;6生鲜; 7保单;8饮品;9现场勘查;99其他
*/
private Integer productType;
private String callbackUrl;
/**
* 用户下单时间
* orderTime不能为空
*/
private Date orderTime;
//用户期望送达时间"
private Date expectTime;
// "微信token 渠道为微信物流时必传"
private String accessToken;
//"小程序openid 渠道为微信物流时必传"
private String openId;
// "商家小程序的路径,建议为订单页面 渠道为微信物流时必传")
private String wxaPath;
// "小程序appId 渠道为微信物流时必传")
private String wxAppId;
//"微信物流公司id")
private String wxCompanyId;
//"微信物流公司快递编码")
private String wxBizId;
//"微信物流公司服务类型ID")
private Integer serviceType;
// "微信物流公司服务类型名称")
private String serviceName;
//"非码运单号")
private String deliveryId;
//"是否大订单 : 0-否 , 1-是")
private Integer isLargeOrder;
// "是否实时送达: 0-否 , 1-是")
private Integer isImmediateDelivery;
// "预计送达时间-UTC 时间")
private String expectDeliveryTimeByUTC;
// "餐品总额(单位:分)")
private Integer productTotal;
// "是否支付: 0-否 , 1-是 ")
private Integer isPayed;
// "付款类型")
private String tenderType;
//"启用新版税率规则计算开票:0-关闭,1-开启")
private Integer taxFlag;
//"配送费(单位:分)"
private Integer deliveryTotal;
// "订单显示ID(餐道专用)")
private String displayOrderId;
}
...@@ -206,6 +206,21 @@ public class CreateOrderVo { ...@@ -206,6 +206,21 @@ public class CreateOrderVo {
private String channelType; private String channelType;
/** /**
* 是否需要餐具,1 需要 0不需要
*/
private Integer needTableware;
/**
* 是否需要开发票,1 需要 0不需要
*/
private Integer isInvoice;
/**
* 发票抬头
*/
private String invoiceTitle;
/**
* 微信配送地址信息 * 微信配送地址信息
*/ */
private WeixinDeliveryAddressDto weixinDeliveryAddress; private WeixinDeliveryAddressDto weixinDeliveryAddress;
......
package cn.freemud.entities.vo;
import lombok.Data;
@Data
public class ProductInfo {
/**
* 商品编号
* productCode不能为空
*/
private String productCode;
/**
* 归属餐品 ID(一般套餐或者特殊要求时,该 ID 指向主餐品 ID) 0或者-1代表一级餐品数据; 一份餐品数据存在多级(麦咖啡餐道专用)
*/
private Long parentCode;
/**
* "税率代码:10-餐品费用,13-非餐品费用;仅 taxFlag=1 改字段生效,具体税率代码参考麦 中定义")(麦咖啡餐道专用)
*
*/
private String taxId;
/**
* 税率:餐品费用-6,非餐品费用-13;仅 taxFlag=1 改字段生效,具体税率值参考麦中 定义 (麦咖啡餐道专用)
*/
private Double taxRate;
/**
* "优惠金额 单位:分"
*/
private Long discountAmount;
// ---
/**
* 商品名称
* productName不能为空
*/
private String productName;
/**
* 商品数量
* productNumber不能为空
* productNumber不能小于1
*/
private Integer productNumber;
/**
* 商品价格(分)
* productPrice不能为空
*/
private Integer productPrice;
/**
* 商品尺寸
*/
private Integer productSize;
/**
* 商品图片 微信物流必传
*/
private String productImg;
/**
* 商品备注
*/
private String productRemark;
/**
* 小计(单位分)(麦咖啡餐道专用)
*/
private Integer cumulatedTotal;
/**
* "分组名称,如果订单采用分组形式,该参数为比传" (麦咖啡餐道专用)
*/
private String GroupName;
}
package cn.freemud.enums;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: PayRefundStatus
* @Package cn.freemud.enums
* @Description:
* @author: jiaxin.liu
* @date: 2019/5/27 15:09
* @Copyright: 2019 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
public enum CouponReqTypeEnum {
QUERY(0,"查询"),
CANCEL_REDEEM(3,"冲正"),
REDEEM(71,"核销"),
LOCK(89,"锁定"),
UNLOCK(90,"解锁"),
;
private Integer code;
private String desc;
CouponReqTypeEnum(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
public static CouponReqTypeEnum getByCode(Integer code) {
if (code == null) {
return null;
}
for (CouponReqTypeEnum payStatus : values()) {
if (payStatus.getCode().equals(code)) {
return payStatus;
}
}
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;
}
}
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: OrderChannelType
* @Package cn.freemud.enums
* @Description:
* @author: liming.guo
* @date: 2018/7/3 15:06
* @version V1.0
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.enums;
public enum MCCafeChannelEnum {
MOCOFFEE_WX(1, "mocoffee_wx", "麦咖啡微信小程序"),
MOCOFFEE_ZFB(2, "mocoffee_zfb", "麦咖啡支付宝小程序"),
;
private int code;
private String name;
private String desc;
MCCafeChannelEnum(int code, String name, String desc) {
this.code = code;
this.name = name;
this.desc = desc;
}
public static MCCafeChannelEnum getByCode(int code) {
for (MCCafeChannelEnum type : values()) {
if (type.getCode() == code) {
return type;
}
}
return null;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package cn.freemud.enums;
public enum ReceiveOrderEnum {
NOT_RECEIVE_ORDER(0,"notReceiveOrder"),
RECEIVED_ORDER(1,"receivedOrder"),
;
private Integer code;
private String desc;
ReceiveOrderEnum(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;
}
}
...@@ -16,6 +16,7 @@ public enum ResponseResult { ...@@ -16,6 +16,7 @@ public enum ResponseResult {
NOT_LOGIN("40001", "用户未登录"), NOT_LOGIN("40001", "用户未登录"),
PARAMETER_MISSING("40002", "缺少必要参数"), PARAMETER_MISSING("40002", "缺少必要参数"),
OPERATE_TOO_OFTEN("40003", "忙不过来了,请稍后再试"), OPERATE_TOO_OFTEN("40003", "忙不过来了,请稍后再试"),
LOGIN_STORE_ERROR("40004", "登录门店异常"),
/** /**
* 用户信息状态码 * 用户信息状态码
...@@ -63,6 +64,9 @@ public enum ResponseResult { ...@@ -63,6 +64,9 @@ public enum ResponseResult {
STORE_DISCONTENT_DELIVERY_CUP("43016", "不满足起送杯数"), STORE_DISCONTENT_DELIVERY_CUP("43016", "不满足起送杯数"),
STORE_MAKE_AN_APPOINTMENT_STOP_BUSINESS("43017", "预约失败,请重新下单"), STORE_MAKE_AN_APPOINTMENT_STOP_BUSINESS("43017", "预约失败,请重新下单"),
STORE_MAKE_AN_APPOINTMENT_OPEN_BUSINESS("43018", "门店不支持预约,请重新选择"), STORE_MAKE_AN_APPOINTMENT_OPEN_BUSINESS("43018", "门店不支持预约,请重新选择"),
STORE_CLOSED_FOREVER("43017", "门店已关闭,请选择其他门店"),
STORE_CLOSED_THE_NIGHT("43018", "门店已打烊,请选择其他门店"),
STORE_DELIVERY_HOUR_ERROR("43019", "门店外卖时间错误"),
/** /**
* 购物车状态码 * 购物车状态码
...@@ -149,6 +153,11 @@ public enum ResponseResult { ...@@ -149,6 +153,11 @@ public enum ResponseResult {
ORDER_TAKEMEALTIME_INVALID("45061", "你的隔日预约时间有误,请重新刷新后选择!"), ORDER_TAKEMEALTIME_INVALID("45061", "你的隔日预约时间有误,请重新刷新后选择!"),
ORDER_CONVERT_ERROR("45062", "查询订单结果转换失败"), ORDER_CONVERT_ERROR("45062", "查询订单结果转换失败"),
ORDER_DELIVERY_CALL_BACK_FAILED("45083", "配送回调失败,为找到对应操作类型"), ORDER_DELIVERY_CALL_BACK_FAILED("45083", "配送回调失败,为找到对应操作类型"),
ORDER_TAKE_MEAL_TIME_ERROR("450062", "你的到店取餐时间异常,请重新选择!"),
ORDER_MEALTIME_MISSING("450063", "你的取餐方式或取餐时间异常,请重新选择!"),
ORDER_TAKE_OUT_TIME_ERROR("450062", "你的外卖送达时间异常,请重新选择!"),
ORDER_TAKE_OUT_ADDRESS_NOT_VALID("45063", "收货地址校验失败"),
/** /**
* 支付 * 支付
*/ */
......
package cn.freemud.service;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.dto.ConfirmOrderDto;
import cn.freemud.entities.dto.QueryOrdersResponseDto;
import cn.freemud.entities.vo.*;
import java.util.Map;
/**
* 订单服务
*
* @author liming.guo
* @date 2018/05/08
*/
public interface MCCafeOrderService {
/**
* 创建麦咖啡订单
*/
BaseResponse createMCCafeOrder(CreateOrderVo createOrderVo);
/**
* 麦咖啡支付成功回调
*/
String mcCafePaySuccessCallback(NewPaysuccessNoticeMessage message);
/**
* 支付回调
*/
String paySuccessCallback(PaysuccessNoticeMessage message, ConfirmOrderDto confirmOrderDto, Map<String, QueryOrdersResponseDto.DataBean.OrderBean> orderBeans);
/**
* 麦咖啡订单申请退款
*/
BaseResponse orderRefund(OrderRefundVo orderRefundVo);
}
...@@ -30,6 +30,13 @@ public interface OrderAdapterService { ...@@ -30,6 +30,13 @@ public interface OrderAdapterService {
BaseResponse createOrderNew(CreateOrderVo createOrderVo); BaseResponse createOrderNew(CreateOrderVo createOrderVo);
/** /**
* 麦咖啡创建订单
* @param createOrderVo
* @return
*/
BaseResponse createMCCafeOrder(CreateOrderVo createOrderVo);
/**
* 创建预支付 * 创建预支付
*/ */
BaseResponse createPrepay(CreatePrepayVo createPrepayVo); BaseResponse createPrepay(CreatePrepayVo createPrepayVo);
...@@ -44,4 +51,10 @@ public interface OrderAdapterService { ...@@ -44,4 +51,10 @@ public interface OrderAdapterService {
*/ */
BaseResponse appCreateOrder(AppCreateOrderVo createOrderVo); BaseResponse appCreateOrder(AppCreateOrderVo createOrderVo);
/**
* 支付回调处理
*/
String mcCafePaySuccessCallback(PaysuccessNoticeMessage message);
} }
...@@ -12,12 +12,10 @@ ...@@ -12,12 +12,10 @@
*/ */
package cn.freemud.service.impl; package cn.freemud.service.impl;
import cn.freemud.base.constant.Version;
import cn.freemud.base.util.DateUtil; import cn.freemud.base.util.DateUtil;
import cn.freemud.constant.ResponseCodeConstant; import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.constant.StoreConstant; import cn.freemud.constant.StoreConstant;
import cn.freemud.entities.db.OpenPlatformIappWxappConfig;
import cn.freemud.entities.db.OpenPlatformPartnerStoreDeliveryConfig;
import cn.freemud.entities.db.StoreTableNumber;
import cn.freemud.entities.dto.*; import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.order.BusinessDate; import cn.freemud.entities.dto.order.BusinessDate;
import cn.freemud.entities.dto.shoppingCart.GetShoppingCartGoodsApportionDto; import cn.freemud.entities.dto.shoppingCart.GetShoppingCartGoodsApportionDto;
...@@ -27,15 +25,15 @@ import cn.freemud.enums.CouponFlag; ...@@ -27,15 +25,15 @@ import cn.freemud.enums.CouponFlag;
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;
import cn.freemud.manager.OpenPlatformIappWxappConfigManager;
import cn.freemud.manager.OpenPlatformPartnerStoreDeliveryConfigManager;
import cn.freemud.manager.StoreTableNumberManager; import cn.freemud.manager.StoreTableNumberManager;
import cn.freemud.service.CouponService; import cn.freemud.service.CouponService;
import cn.freemud.service.adapter.OrderCheckAdapter; import cn.freemud.service.adapter.OrderCheckAdapter;
import cn.freemud.service.thirdparty.ShoppingCartClient; import cn.freemud.service.thirdparty.ShoppingCartClient;
import cn.freemud.service.thirdparty.StockClient; import cn.freemud.service.thirdparty.StockClient;
import cn.freemud.utils.LogUtil; import cn.freemud.utils.LogUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformIappWxappConfig; import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformIappWxappConfig;
import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformPartnerStoreDeliveryConfig; import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformPartnerStoreDeliveryConfig;
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo; import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
...@@ -43,6 +41,7 @@ import com.freemud.api.assortment.datamanager.manager.AssortmentOpenPlatformIapp ...@@ -43,6 +41,7 @@ import com.freemud.api.assortment.datamanager.manager.AssortmentOpenPlatformIapp
import com.freemud.api.assortment.datamanager.manager.AssortmentOpenPlatformPartnerStoreDeliveryConfigManager; import com.freemud.api.assortment.datamanager.manager.AssortmentOpenPlatformPartnerStoreDeliveryConfigManager;
import com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager; import com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager;
import com.freemud.application.sdk.api.base.BaseResponse; import com.freemud.application.sdk.api.base.BaseResponse;
import com.freemud.application.sdk.api.couponcenter.offline.response.CouponQueryResponse;
import com.freemud.application.sdk.api.log.LogThreadLocal; import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.membercenter.request.QueryReceiveAddressRequest; import com.freemud.application.sdk.api.membercenter.request.QueryReceiveAddressRequest;
import com.freemud.application.sdk.api.membercenter.request.StatisticalPropertyRequest; import com.freemud.application.sdk.api.membercenter.request.StatisticalPropertyRequest;
...@@ -55,6 +54,7 @@ import com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest; ...@@ -55,6 +54,7 @@ import com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest;
import com.freemud.application.sdk.api.storecenter.response.QueryDeliverDetailResponse; import com.freemud.application.sdk.api.storecenter.response.QueryDeliverDetailResponse;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse; import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.freemud.application.sdk.api.storecenter.service.StoreCenterService; import com.freemud.application.sdk.api.storecenter.service.StoreCenterService;
import cn.freemud.enums.CouponReqTypeEnum;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.gson.Gson; import com.google.gson.Gson;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
...@@ -467,14 +467,14 @@ public class CheckOrder { ...@@ -467,14 +467,14 @@ public class CheckOrder {
if (Objects.equals(getCouponDetailResponseDto, null) || CollectionUtils.isEmpty(getCouponDetailResponseDto.getDetails()) if (Objects.equals(getCouponDetailResponseDto, null) || CollectionUtils.isEmpty(getCouponDetailResponseDto.getDetails())
|| getCouponDetailResponseDto.getDetails().get(0).getActive() == null || getCouponDetailResponseDto.getDetails().get(0).getActive() == null
|| getCouponDetailResponseDto.getDetails().get(0).getActive().getActiveCode() == null) { || getCouponDetailResponseDto.getDetails().get(0).getActive().getActiveCode() == null) {
if ((CollectionUtils.isNotEmpty(getCouponDetailResponseDto.getDetails().get(0).getActiveRestrictionVOS()) if ((CollectionUtils.isNotEmpty(getCouponDetailResponseDto.getDetails().get(0).getActiveRestrictionVOS())
&& CollectionUtils.isEmpty(getCouponDetailResponseDto.getDetails().get(0).getActiveRestrictionVOS().stream() && CollectionUtils.isEmpty(getCouponDetailResponseDto.getDetails().get(0).getActiveRestrictionVOS().stream()
.filter(a -> Objects.equals(a.getStoreIdPartner(), createOrderVo.getShopId())).collect(Collectors.toList())) .filter(a -> Objects.equals(a.getStoreIdPartner(), createOrderVo.getShopId())).collect(Collectors.toList()))
)) { )) {
throw new ServiceException(ResponseResult.COUPON_SHOP_NOTSUPPORT); throw new ServiceException(ResponseResult.COUPON_SHOP_NOTSUPPORT);
} else { } else {
throw new ServiceException(ResponseResult.COUPON_GETINFO_INVAILD); throw new ServiceException(ResponseResult.COUPON_GETINFO_INVAILD);
} }
} }
String activeCode = getCouponDetailResponseDto.getDetails().get(0).getActive().getActiveCode(); String activeCode = getCouponDetailResponseDto.getDetails().get(0).getActive().getActiveCode();
// 校验点餐方式,查询购物车接口内部已校验 // 校验点餐方式,查询购物车接口内部已校验
......
...@@ -6,7 +6,6 @@ import cn.freemud.base.util.DateUtil; ...@@ -6,7 +6,6 @@ import cn.freemud.base.util.DateUtil;
import cn.freemud.entities.dto.AddProductEvaluationReqDto; import cn.freemud.entities.dto.AddProductEvaluationReqDto;
import cn.freemud.entities.dto.Evaluation.OrderEvaluationStatus; import cn.freemud.entities.dto.Evaluation.OrderEvaluationStatus;
import cn.freemud.entities.vo.AddUserOrderEvaluationNewRequestVo; import cn.freemud.entities.vo.AddUserOrderEvaluationNewRequestVo;
import cn.freemud.entities.vo.AddUserOrderEvaluationRequestVo;
import cn.freemud.entities.vo.GetEvaluationDetailByOrderIdRequestVo; import cn.freemud.entities.vo.GetEvaluationDetailByOrderIdRequestVo;
import cn.freemud.entities.vo.GetEvaluationStatusNewRequestVo; import cn.freemud.entities.vo.GetEvaluationStatusNewRequestVo;
import cn.freemud.enums.EvaluationStatus; import cn.freemud.enums.EvaluationStatus;
......
...@@ -29,7 +29,6 @@ import cn.freemud.service.BuriedPointService; ...@@ -29,7 +29,6 @@ import cn.freemud.service.BuriedPointService;
import cn.freemud.service.MallOrderService; import cn.freemud.service.MallOrderService;
import cn.freemud.service.thirdparty.EcologyAdminApplicationClient; import cn.freemud.service.thirdparty.EcologyAdminApplicationClient;
import cn.freemud.service.thirdparty.ShoppingCartClient; import cn.freemud.service.thirdparty.ShoppingCartClient;
import cn.freemud.service.thirdparty.WechatApplicationServiceClient;
import cn.freemud.utils.LogUtil; import cn.freemud.utils.LogUtil;
import cn.freemud.utils.ResponseUtil; import cn.freemud.utils.ResponseUtil;
import cn.freemud.utils.ValidationCode; import cn.freemud.utils.ValidationCode;
...@@ -46,7 +45,6 @@ import com.freemud.application.sdk.api.deliverycenter.response.CreateDeliveryOrd ...@@ -46,7 +45,6 @@ import com.freemud.application.sdk.api.deliverycenter.response.CreateDeliveryOrd
import com.freemud.application.sdk.api.deliverycenter.response.DeliveryInfoDto; import com.freemud.application.sdk.api.deliverycenter.response.DeliveryInfoDto;
import com.freemud.application.sdk.api.deliverycenter.response.DeliveryResponseDto; import com.freemud.application.sdk.api.deliverycenter.response.DeliveryResponseDto;
import com.freemud.application.sdk.api.deliverycenter.service.DeliveryService; import com.freemud.application.sdk.api.deliverycenter.service.DeliveryService;
import com.freemud.application.sdk.api.log.ErrorLog;
import com.freemud.application.sdk.api.log.LogThreadLocal; import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.ordercenter.enums.AfterSalesType; import com.freemud.application.sdk.api.ordercenter.enums.AfterSalesType;
import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType; import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
...@@ -69,7 +67,6 @@ import com.google.common.collect.Lists; ...@@ -69,7 +67,6 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.gson.Gson; import com.google.gson.Gson;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
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.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
......
...@@ -38,6 +38,7 @@ import org.apache.commons.collections4.MapUtils; ...@@ -38,6 +38,7 @@ 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.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Date; import java.util.Date;
...@@ -64,11 +65,16 @@ public class OrderAdapterServiceImpl implements OrderAdapterService { ...@@ -64,11 +65,16 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
private static Gson gson = new Gson(); private static Gson gson = new Gson();
@Value("${mccafe.partner.id}")
private String mcCafePartnerId;
@Autowired @Autowired
private EncircleOrderService encircleOrderService; private EncircleOrderService encircleOrderService;
@Autowired @Autowired
private OrderServiceImpl orderService; private OrderServiceImpl orderService;
@Autowired @Autowired
private MCCafeOrderService mcCafeOrderService;
@Autowired
private AssortmentCustomerInfoManager assortmentCustomerInfoManager; private AssortmentCustomerInfoManager assortmentCustomerInfoManager;
@Autowired @Autowired
private MallOrderService mallOrderService; private MallOrderService mallOrderService;
...@@ -83,7 +89,6 @@ public class OrderAdapterServiceImpl implements OrderAdapterService { ...@@ -83,7 +89,6 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
@Autowired @Autowired
private SellCouponOrderServiceImpl sellCouponOrderService; private SellCouponOrderServiceImpl sellCouponOrderService;
@Override @Override
public BaseResponse createOrderNew(CreateOrderVo createOrderVo) { public BaseResponse createOrderNew(CreateOrderVo createOrderVo) {
AssortmentCustomerInfoVo assortmentCustomerInfoVo = assortmentCustomerInfoManager.getCustomerInfoByObject(createOrderVo.getSessionId()); AssortmentCustomerInfoVo assortmentCustomerInfoVo = assortmentCustomerInfoManager.getCustomerInfoByObject(createOrderVo.getSessionId());
...@@ -113,8 +118,8 @@ public class OrderAdapterServiceImpl implements OrderAdapterService { ...@@ -113,8 +118,8 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
case 4:// 创建预支付订单 case 4:// 创建预支付订单
baseResponse = encircleOrderService.createPrepaymentOrder(createReserveOrderVo); baseResponse = encircleOrderService.createPrepaymentOrder(createReserveOrderVo);
break; break;
default: default:
throw new ServiceException(ResponseResult.ORDER_CREATE_OPERATION_ERROR); throw new ServiceException(ResponseResult.ORDER_CREATE_OPERATION_ERROR);
} }
return baseResponse; return baseResponse;
} }
...@@ -141,6 +146,27 @@ public class OrderAdapterServiceImpl implements OrderAdapterService { ...@@ -141,6 +146,27 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
return orderService.createOrderNew(createOrderVo); return orderService.createOrderNew(createOrderVo);
} }
@Override
public BaseResponse createMCCafeOrder(CreateOrderVo createOrderVo) {
AssortmentCustomerInfoVo assortmentCustomerInfoVo = assortmentCustomerInfoManager.getCustomerInfoByObject(createOrderVo.getSessionId());
if (assortmentCustomerInfoVo == null || StringUtils.isEmpty(assortmentCustomerInfoVo.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN);
}
if(!mcCafePartnerId.equals(assortmentCustomerInfoVo.getPartnerId())) {
return ResponseUtil.error(ResponseResult.LOGIN_STORE_ERROR);
}
// 扩展字段中存储 sessionKey
createOrderVo.setSessionKey(assortmentCustomerInfoVo.getSessionKey());
//原标准点餐程序逻辑处理
BaseResponse baseResponse = this.checkStandardParamInfo(createOrderVo);
if(ObjectUtils.notEqual(baseResponse.getCode(),ResponseResult.SUCCESS.getCode())){
return baseResponse;
}
return mcCafeOrderService.createMCCafeOrder(createOrderVo);
}
@Override @Override
public BaseResponse createPrepay(CreatePrepayVo createPrepayVo) { public BaseResponse createPrepay(CreatePrepayVo createPrepayVo) {
AssortmentCustomerInfoVo assortmentCustomerInfoVo = assortmentCustomerInfoManager.getCustomerInfoByObject(createPrepayVo.getSessionId()); AssortmentCustomerInfoVo assortmentCustomerInfoVo = assortmentCustomerInfoManager.getCustomerInfoByObject(createPrepayVo.getSessionId());
...@@ -199,6 +225,10 @@ public class OrderAdapterServiceImpl implements OrderAdapterService { ...@@ -199,6 +225,10 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
if(orderBean.getBizType() == 6) { if(orderBean.getBizType() == 6) {
return sellCouponOrderService.paySuccessCallback(message, confirmOrderDto, orderBeans); return sellCouponOrderService.paySuccessCallback(message, confirmOrderDto, orderBeans);
} }
//麦咖啡订单处理
if(mcCafePartnerId.equals(orderBean.getOid())) {
return mcCafeOrderService.paySuccessCallback(message, confirmOrderDto, orderBeans);
}
/** /**
* 默认点餐处理 * 默认点餐处理
*/ */
...@@ -211,6 +241,42 @@ public class OrderAdapterServiceImpl implements OrderAdapterService { ...@@ -211,6 +241,42 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
} }
} }
@Override
public String mcCafePaySuccessCallback(PaysuccessNoticeMessage message) {
//添加分布式锁,如果没有取得锁直接返回失败;整个方法执行完毕后会删掉该锁
String paySuccessKey = PAY_SUCCESS_KEY + message.getTrans_id();
if(!LockUtils.lockAfter(redisCache.getRedisTemplate(), paySuccessKey)){
return orderAdapter.newSendPayFaileMessage();
}
try {
ConfirmOrderDto confirmOrderDto = orderAdapter.convent2ConfirmOrderDto(message);
// 通过交易号从缓存中拿订单号,如果有数据则实际订单号为其value值
String orderId = redisCache.getValue(RedisUtil.getPaymentTransIdOrderKey(confirmOrderDto.getOrderId()));
if (StringUtils.isNotBlank(orderId)) {
log.info("从缓存中获取的订单数据,trackingNo:{},transId:{},orderId:{}", LogTreadLocal.getTrackingNo(), confirmOrderDto.getOrderId(), orderId);
confirmOrderDto.setOrderId(orderId);
}
Map<String, QueryOrdersResponseDto.DataBean.OrderBean> orderBeans = orderService.getOrderBeanByOrderId(confirmOrderDto.getOrderId());
if (MapUtils.isEmpty(orderBeans)) {
log.error("paySuccessCallback_queryOrderById_faild, trackingNo:{},PaysuccessNoticeMessage:{}", LogTreadLocal.getTrackingNo(), gson.toJson(message));
return gson.toJson(message);
}
QueryOrdersResponseDto.DataBean.OrderBean orderBean = orderBeans.get(OrderBeanType.SAASORDER.getCode());
if (!PayStatus.NOT_PAY.getCode().equals(orderBean.getPayStatus())){
return orderAdapter.sendPaySuccessNoticeMessage();
}
/**
* 默认点餐处理
*/
return mcCafeOrderService.paySuccessCallback(message, confirmOrderDto, orderBeans);
} catch (Exception e) {
throw e;
} finally {
//删除分布式锁
redisCache.delete("saas:lockAfter:" + paySuccessKey);
}
}
/** /**
* APP下单,下单带商品信息,不经过购物车服务,不唤起支付 * APP下单,下单带商品信息,不经过购物车服务,不唤起支付
*/ */
......
...@@ -2,7 +2,6 @@ package cn.freemud.service.impl; ...@@ -2,7 +2,6 @@ package cn.freemud.service.impl;
import cn.freemud.adapter.MessageNoticeAdapter; import cn.freemud.adapter.MessageNoticeAdapter;
import cn.freemud.adapter.OrderAdapter; import cn.freemud.adapter.OrderAdapter;
import cn.freemud.base.log.LogTreadLocal;
import cn.freemud.base.util.DateUtil; import cn.freemud.base.util.DateUtil;
import cn.freemud.constant.RedisKeyConstant; import cn.freemud.constant.RedisKeyConstant;
import cn.freemud.constant.ResponseCodeConstant; import cn.freemud.constant.ResponseCodeConstant;
...@@ -43,7 +42,6 @@ import com.freemud.application.sdk.api.structure.service.MessageCenterClient; ...@@ -43,7 +42,6 @@ import com.freemud.application.sdk.api.structure.service.MessageCenterClient;
import com.freemud.sdk.api.assortment.order.request.order.*; import com.freemud.sdk.api.assortment.order.request.order.*;
import com.freemud.sdk.api.assortment.order.response.order.AssortmentAffirmGroupOrderResponse; import com.freemud.sdk.api.assortment.order.response.order.AssortmentAffirmGroupOrderResponse;
import com.freemud.sdk.api.assortment.order.response.order.BaseOrderResponse; import com.freemud.sdk.api.assortment.order.response.order.BaseOrderResponse;
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 com.freemud.sdk.api.assortment.order.response.payment.OrderPayResponse; import com.freemud.sdk.api.assortment.order.response.payment.OrderPayResponse;
import com.freemud.sdk.api.assortment.order.service.OrderCenterSdkService; import com.freemud.sdk.api.assortment.order.service.OrderCenterSdkService;
...@@ -59,8 +57,6 @@ import org.springframework.beans.factory.annotation.Value; ...@@ -59,8 +57,6 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.sql.Time;
import java.text.MessageFormat;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
......
package cn.freemud.service.mccafe;
import cn.freemud.entities.dto.QueryOrdersResponseDto;
import com.freemud.application.sdk.api.couponcenter.offline.response.CouponBaseResponse;
import com.freemud.application.sdk.api.couponcenter.offline.response.CouponQueryResponse;
import com.freemud.application.sdk.api.couponcenter.offline.response.CouponRedeemResponse;
import cn.freemud.management.entities.dto.request.order.MCCafeCouponRequest;
import cn.freemud.management.entities.dto.request.order.MCCafeCouponLockRequest;
import com.freemud.sdk.api.assortment.order.request.order.CreateOrderAccountRequest;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import java.util.List;
public interface CouponClientService {
CouponRedeemResponse redeem(QueryOrdersResponse.DataBean.OrderBean orderBean, List<CreateOrderAccountRequest> accounts);
CouponRedeemResponse redeem(MCCafeCouponRequest mcCafeCouponRequest);
CouponRedeemResponse redeemBatch(QueryOrdersResponse.DataBean.OrderBean orderBean, List<CreateOrderAccountRequest> accounts);
List<CouponRedeemResponse> redeemBatch(QueryOrdersResponseDto.DataBean.OrderBean orderBean);
CouponRedeemResponse cancelRedeem(QueryOrdersResponse.DataBean.OrderBean orderBean, List<CreateOrderAccountRequest> accounts);
CouponQueryResponse query(MCCafeCouponRequest mcCafeCouponRequest);
CouponBaseResponse lock(QueryOrdersResponse.DataBean.OrderBean orderBean, List<CreateOrderAccountRequest> accounts);
CouponBaseResponse lock(MCCafeCouponLockRequest mcCafeCouponLockRequest);
CouponBaseResponse lockBatch(QueryOrdersResponse.DataBean.OrderBean orderBean, List<CreateOrderAccountRequest> accounts);
List<CouponBaseResponse> lockBatch(QueryOrdersResponseDto.DataBean.OrderBean orderBean);
CouponBaseResponse unlock(MCCafeCouponLockRequest mcCafeCouponLockRequest);
}
package cn.freemud.service.mccafe;
import com.freemud.application.sdk.api.ordercenter.request.QueryAfterSalesOrderConditionsReq;
import com.freemud.application.sdk.api.ordercenter.response.AfterSalesListResp;
import com.freemud.sdk.api.assortment.order.request.order.*;
import com.freemud.sdk.api.assortment.order.response.order.*;
public interface MCCafeOrderCenterSdkService {
/**
* 创建麦咖啡订单
*
* @return
*/
CreateOrderResponse createMCCafeOrderFlow(CreateOrderRequest createOrderRequest);
}
package cn.freemud.service.mccafe.thirdparty;
import cn.freemud.entities.dto.coupon.BatchQueryActivityInfoRequestDto;
import cn.freemud.entities.dto.coupon.GetAppKeyRequestDto;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
//测试环境:http://115.159.65.101:8082 生产环境:https://onlinecoupon.sandload.cn
@FeignClient(name = "CARDBINMCCafeCLIENT",url="fff")
@RequestMapping(produces = {"application/json;charset=UTF-8"})
public interface CardBinMCCafeClient {
/**
* 获取麦咖啡券码密钥
* @param requestDto
* @return
*/
@PostMapping("/mccafe/getAppKey")
GetAppKeyRequestDto getMCCafeAppKey(GetAppKeyRequestDto requestDto);
/**
* 麦咖啡活动信息批量查询
* @param requestDto
* @return
*/
@PostMapping(value = "/mccafe/batchQueryActivityInfo")
BatchQueryActivityInfoRequestDto batchQueryMCCafeActivityInfo(BatchQueryActivityInfoRequestDto requestDto);
}
package cn.freemud.service.mccafe.thirdparty;
import cn.freemud.entities.dto.BaseResponseDto;
import cn.freemud.entities.dto.CancelDeliveryRequest;
import cn.freemud.entities.dto.CreateOrderRequestDto;
import cn.freemud.entities.dto.delivery.*;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
@FeignClient(name = "DELIVERYMCCAFECENTER", url = "${delivery.center.baseUrl}")
public interface DeliveryFeiginMCCafeClient {
@PostMapping("/delivery/cancel")
CancelDeliveryResponseDto cancelRequest(@RequestBody CancelDeliveryRequest request);
}
package cn.freemud.service.mccafe.thirdparty;
import cn.freemud.entities.dto.CancelDeliveryRequest;
import cn.freemud.entities.dto.CreateOrderRequestDto;
import cn.freemud.entities.dto.delivery.CancelDeliveryResponseDto;
import cn.freemud.entities.dto.delivery.MCCafeDeliveryBaseResponse;
import cn.freemud.entities.dto.delivery.MCCafeDeliveryGetStoreIdResponse;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
@FeignClient(name = "DELIVERYSERVICEMCCAFECENTER", url = "${delivery.mcCafe.feign.url}")
public interface DeliveryServiceFeiginMCCafeClient {
@PostMapping("/delivery/client")
MCCafeDeliveryBaseResponse client(@RequestBody CreateOrderRequestDto request);
}
...@@ -2,6 +2,10 @@ package cn.freemud.service.thirdparty; ...@@ -2,6 +2,10 @@ package cn.freemud.service.thirdparty;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.dto.delivery.*; import cn.freemud.entities.dto.delivery.*;
import cn.freemud.entities.dto.delivery.QueryDeliveryAmountRequestDto;
import cn.freemud.entities.dto.delivery.QueryDeliveryAmountResponseDto;
import cn.freemud.entities.vo.CreateDeliveryVo;
import com.freemud.application.sdk.api.deliverycenter.response.CreateDeliveryOrderResponseDto;
import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
...@@ -17,4 +21,9 @@ public interface DeliveryFeiginClient { ...@@ -17,4 +21,9 @@ public interface DeliveryFeiginClient {
@PostMapping("/delivery/listFreeRider") @PostMapping("/delivery/listFreeRider")
BaseResponse<ResRiderTrackDto> listFreeRider(@RequestBody QueryLocusRiderTrackDto request); BaseResponse<ResRiderTrackDto> listFreeRider(@RequestBody QueryLocusRiderTrackDto request);
@PostMapping("/delivery/create")
CreateDeliveryOrderResponseDto deliveryOrderAdd(@RequestBody CreateDeliveryVo request);
} }
...@@ -59,6 +59,15 @@ public interface ShoppingCartClient { ...@@ -59,6 +59,15 @@ public interface ShoppingCartClient {
@PostMapping(value = "/clearCartGoods?lang=zh_CN") @PostMapping(value = "/clearCartGoods?lang=zh_CN")
ShoppingCartBaseResponse clearShoppingCart(@RequestBody NewShoppingCartClearDto request); ShoppingCartBaseResponse clearShoppingCart(@RequestBody NewShoppingCartClearDto request);
/**
* 麦咖啡清空购物车
* @param request
* @return
*/
@PostMapping(value = "/MCoffee/clearCartGoods?lang=zh_CN")
ShoppingCartBaseResponse clearMCCafeShoppingCart(@RequestBody NewShoppingCartClearDto request);
/** /**
* 删除购物车一个商品 * 删除购物车一个商品
* @param request * @param request
...@@ -73,4 +82,10 @@ public interface ShoppingCartClient { ...@@ -73,4 +82,10 @@ public interface ShoppingCartClient {
@PostMapping(value = "/getShoppingCartGoodsApportion?lang=zh_CN") @PostMapping(value = "/getShoppingCartGoodsApportion?lang=zh_CN")
BaseResponse<ShoppingCartGoodsDto> getShoppingCartGoodsApportionNew(@RequestBody GetShoppingCartGoodsApportionDto getShoppingCartGoodsApportionDto); BaseResponse<ShoppingCartGoodsDto> getShoppingCartGoodsApportionNew(@RequestBody GetShoppingCartGoodsApportionDto getShoppingCartGoodsApportionDto);
/**
* 麦咖啡获取购物车详情,包含均摊信息
*/
@PostMapping(value = "/MCoffee/getShoppingCartGoodsApportion?lang=zh_CN")
BaseResponse<ShoppingCartGoodsDto> getMCCafeShoppingCartGoodsApportionNew(@RequestBody GetShoppingCartGoodsApportionDto getShoppingCartGoodsApportionDto);
} }
package cn.freemud.service.impl; package cn.freemud.service.impl;
import cn.freemud.adapter.DeliveryAdapter;
import cn.freemud.entities.dto.QueryOrdersResponseDto;
import cn.freemud.entities.vo.CreateDeliveryVo;
import cn.freemud.entities.vo.CreateOrderVo; import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.encircle.CreateReserveOrderVo; import cn.freemud.entities.vo.encircle.CreateReserveOrderVo;
import cn.freemud.entities.vo.encircle.EmptyTableNumberVo; import cn.freemud.entities.vo.encircle.EmptyTableNumberVo;
import cn.freemud.enums.OrderBeanType;
import cn.freemud.service.EncircleOrderService; import cn.freemud.service.EncircleOrderService;
import cn.freemud.service.thirdparty.DeliveryFeiginClient;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.freemud.application.sdk.api.deliverycenter.response.CreateDeliveryOrderResponseDto;
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.ObjectUtils;
import org.junit.Test; import org.junit.Test;
import org.junit.Before; import org.junit.Before;
import org.junit.After; import org.junit.After;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients; import org.springframework.cloud.netflix.feign.EnableFeignClients;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
import java.util.Map;
/** /**
* EncircleOrderServiceImpl Tester. * EncircleOrderServiceImpl Tester.
* *
...@@ -32,6 +45,18 @@ public class EncircleOrderServiceImplTest { ...@@ -32,6 +45,18 @@ public class EncircleOrderServiceImplTest {
@Autowired @Autowired
private EncircleOrderService encircleOrderService; private EncircleOrderService encircleOrderService;
@Autowired
private OrderServiceImpl orderService;
@Autowired
private StoreCenterService storeCenterService;
@Value("${saas.order.delivery.callBackUrl}")
private String deliveryCallBackUrl;
@Autowired
private DeliveryFeiginClient deliveryFeiginClient;
@Autowired
private DeliveryAdapter deliveryAdapter;
@Before @Before
public void before() throws Exception { public void before() throws Exception {
} }
...@@ -55,6 +80,28 @@ public class EncircleOrderServiceImplTest { ...@@ -55,6 +80,28 @@ public class EncircleOrderServiceImplTest {
System.out.println(JSON.toJSONString(encircleOrderService.createReserveOrder(createOrderVo))); System.out.println(JSON.toJSONString(encircleOrderService.createReserveOrder(createOrderVo)));
} }
@Test
public void testd() throws Exception {
Map<String, QueryOrdersResponseDto.DataBean.OrderBean> orderBeans = orderService.getOrderBeanByOrderId("18550453673517366500002");
QueryOrdersResponseDto.DataBean.OrderBean orderBean = orderBeans.get(OrderBeanType.SAASORDER.getCode());
//获取门店信息
StoreResponse storeInfo = storeCenterService.getStoreInfo(new StoreInfoRequest(orderBean.getCompanyId(), orderBean.getShopId()), "");
if (storeInfo == null || ObjectUtils.notEqual(cn.freemud.management.enums.ResponseResult.SUCCESS.getCode(), storeInfo.getStatusCode().toString()) || storeInfo.getBizVO() == null) {
//return sendPaySuccessNoticeMessage();
}
CreateDeliveryVo createDeliveryVo = deliveryAdapter.buildDeliveryOrderRequestDto(orderBean, storeInfo, deliveryCallBackUrl,"");
//创建配送单
CreateDeliveryOrderResponseDto deliveryResponse = deliveryFeiginClient.deliveryOrderAdd(createDeliveryVo);
//创建配送单失败,更新订单为异常单
if (deliveryResponse == null || 100 != deliveryResponse.getCode() || deliveryResponse.getData() == null) {
String deliveryId = deliveryResponse != null && deliveryResponse.getData() != null ? deliveryResponse.getData().getDeliveryId() : "";
String operator = "系统" ;
//updateDeliveryAbnormal(orderBean.getCompanyId(), orderBean.getOid(), deliveryId, operator);
// return sendPaySuccessNoticeMessage();
}
}
/** /**
* Method: updateReserveOrder(CreateReserveOrderVo createReserveOrderVo) * Method: updateReserveOrder(CreateReserveOrderVo createReserveOrderVo)
*/ */
......
package cn.freemud.service.impl; package cn.freemud.service.impl;
import com.alibaba.fastjson.JSON;
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
import com.freemud.sdk.api.assortment.order.request.order.ClearTableRequest; import com.freemud.sdk.api.assortment.order.request.order.ClearTableRequest;
import com.freemud.sdk.api.assortment.order.service.OrderCenterSdkService; import com.freemud.sdk.api.assortment.order.service.OrderCenterSdkService;
import org.junit.Test; import org.junit.Test;
......
...@@ -39,6 +39,13 @@ ...@@ -39,6 +39,13 @@
<dependency> <dependency>
<groupId>com.freemud.application.service.sdk</groupId> <groupId>com.freemud.application.service.sdk</groupId>
<artifactId>couponcenter-sdk</artifactId>
<version>1.9.2.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
<artifactId>sdk-common-base</artifactId> <artifactId>sdk-common-base</artifactId>
<version>1.3.9-SNAPSHOT</version> <version>1.3.9-SNAPSHOT</version>
<scope>provided</scope> <scope>provided</scope>
......
package cn.freemud.management.entities.dto.request.order;
import lombok.Data;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: CouponCodeVerificationReqVO
* @Package cn.freemud.entities.dto
* @Description:
* @author: biao.zhang
* @date: 2018/7/17 14:45
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class MCCafeCouponLockRequest {
private Integer ver;
/**
* 71 核销
* 89 锁定
* 90 解锁
*/
private Integer reqType;
/**
* 核销渠道
* 1:线下Pos
* 2:线上
* 3:pickup:麦当劳点餐
* 4:delivery:麦当劳外送
* 5:mccafe:麦当劳咖啡
* 6:mc_dessert麦当劳甜品站
* 7:SOK
* 8:ECP/CMA
* 9:mcd_alipay:麦当劳支付宝点餐
*/
private String channel;
//商户编号
private String partnerId;
//商家门店号
private String storeId;
//营业员编号
private String operatorId;
//POS机编号
private String stationId;
//交易序号
private String transId;
//券编号
private String coupon;
//三方券号
private String offerId;
//锁定/解锁次数
private String number;
private String appFlag;
private String businessDate;
//----非必传---
//预约订单时间,为空则为及时单,如:2020-06-17 12:00:00
private String advancedOrderTime;
//签名
private String sign;
private List<MCCafeTransactionVo> transactions;
}
package cn.freemud.management.entities.dto.request.order;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class MCCafeCouponRequest {
/**
* 接口版本
*/
@NotNull
private Integer ver;
/**
* kdg.Y 开个店渠道且需要回调三方
* kgd.N 开个店渠道且不需要回调三方
*/
private String appFlag;
/**
* 需要查询的券码,仅供查询券使用
*/
private String coupon;
/**
* 请求操作类型,0是卡券查询,2是卡券交易查询,3是卡券冲正,71是卡券核销
*/
@NotNull(message = "操作不能为空")
private Integer reqtype;
/**
* 商家门店号
*/
@NotBlank(message = "商家门店号不能为空")
private String store_id;
/**
* 子品牌 ID 可以为空
*/
private String organize_id;
/**
* 组织机构ID(注意和channle的区别)
*/
private List<String> channel_ids;
/**
* 组织机构code(注意和channle的区别)
*/
private List<String> channel_codes;
/**
* 商家POS机编号
*/
@NotBlank(message = "商家POS机编号不能为空")
private String station_id;
/**
* 营业员编号
*/
@NotBlank(message = "营业员编号不能为空")
private String operator_id;
/**
* 商户编号
*/
@NotNull(message = "商户编号不能为空")
private Integer partnerId;
private Integer checkValue;
private Integer clientReqCount;
/**
* POS交易序号
*/
private String trans_id;
/**
* 营业日
*/
private String business_date;
/**
* 优惠券列表
*/
private List<MCCafeTransactionVo> transactions;
/**
* 签名
*/
private String sign;
/**
* 追加key
*/
private String appSecret;
private String openid;
private String transactionuuid;
private String status;
private Boolean isManual;
private String channel;
}
package cn.freemud.management.entities.dto.request.order;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class MCCafeProductRedeemVo {
private String pid;
/**
* 第三方商品编号 有的话会校验
*/
private String customer_code;
private Integer seq;
private Integer consume_num;
private Integer gid;
private Integer DiscountAmount;
private String brand_code;
private String pcata;
private BigDecimal redeem_price;
//键位商品编号
private String keyProductCode;
}
package cn.freemud.management.entities.dto.request.order;
import lombok.Data;
import java.util.List;
@Data
public class MCCafeTransactionVo {
private Integer pay_amount;
private String code;
private String ebcode;
/**
* 优惠总金额,由第三方计算,单位分
*/
private Long totalAmount;
private List<MCCafeProductRedeemVo> products;
}
package cn.freemud.management.thirdparty; package cn.freemud.management.thirdparty;
import cn.freemud.management.entities.dto.request.coupon.MCCafeCouponLockRequest; import cn.freemud.management.entities.dto.request.order.MCCafeCouponLockRequest;
import cn.freemud.management.entities.dto.request.coupon.MCCafeCouponRequest; import cn.freemud.management.entities.dto.request.order.MCCafeCouponRequest;
import com.freemud.application.sdk.api.couponcenter.offline.response.CouponBaseResponse;
import com.freemud.application.sdk.api.couponcenter.offline.response.CouponQueryResponse; import com.freemud.application.sdk.api.couponcenter.offline.response.CouponQueryResponse;
import com.freemud.application.sdk.api.couponcenter.offline.response.CouponRedeemResponse; import com.freemud.application.sdk.api.couponcenter.offline.response.CouponRedeemResponse;
import com.freemud.application.sdk.api.couponcenter.offline.response.CouponBaseResponse;
import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient(name = "COUPONMCCafe",url="http://coupon-api-gateway-koderover-dev-coupon.api-ingress.sandload.cn") @FeignClient(name = "COUPONMCCafe",url="${saas.couponadapterclient.feign.url}")
@RequestMapping(produces = {"application/json;charset=UTF-8"}) @RequestMapping(produces = {"application/json;charset=UTF-8"})
public interface CouponOfflineMCCafeClient { public interface CouponOfflineMCCafeClient {
// 核销优惠券 @PostMapping("/mccafe/redeem")
@PostMapping("/mccafe1/redeem") CouponRedeemResponse redeem(MCCafeCouponRequest mcCafeCouponRequest);
CouponRedeemResponse redeem(MCCafeCouponRequest mcCafeConponRequest);
@PostMapping("/mccafe1/cancelRedeem") @PostMapping("/mccafe/cancelRedeem")
CouponRedeemResponse cancelRedeem(MCCafeCouponRequest mcCafeConponRequest); CouponRedeemResponse cancelRedeem(MCCafeCouponRequest mcCafeCouponRequest);
@PostMapping("/mccafe1/query") @PostMapping("/mccafe/query")
CouponQueryResponse query(MCCafeCouponRequest mcCafeConponRequest); CouponQueryResponse query(MCCafeCouponRequest mcCafeCouponRequest);
// 优惠券锁定 @PostMapping("/mccafe/lock")
@PostMapping("/mccafe1/lock")
CouponBaseResponse lock(MCCafeCouponLockRequest MCCafeCouponLockRequest); CouponBaseResponse lock(MCCafeCouponLockRequest MCCafeCouponLockRequest);
//优惠券解锁 @PostMapping("/mccafe/unlock")
@PostMapping("/mccafe1/unlock")
CouponBaseResponse unlock(MCCafeCouponLockRequest MCCafeCouponLockRequest); CouponBaseResponse unlock(MCCafeCouponLockRequest MCCafeCouponLockRequest);
} }
...@@ -155,4 +155,19 @@ public class OrderExtInfoDto { ...@@ -155,4 +155,19 @@ public class OrderExtInfoDto {
* 支付渠道编号(参考支付组payment_platform) * 支付渠道编号(参考支付组payment_platform)
*/ */
private String payCode; private String payCode;
/**
* 是否需要餐具,1 需要 0不需要
*/
private Integer needTableware;
/**
* 是否需要开发票,1 需要 0不需要
*/
private Integer isInvoice;
/**
* 发票抬头
*/
private String invoiceTitle;
} }
package cn.freemud.entities.dto;
import lombok.Data;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: CouponCodeBaseReqVO
* @Package cn.freemud.entities.dto
* @Description:
* @author: biao.zhang
* @date: 2018/11/19 16:07
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class CouponCodeMCCafeBaseDto {
private Integer ver;
/**
* 71 核销
* 89 锁定
* 90 解锁
*/
private Integer reqType;
/**
* 核销渠道
* 1:线下Pos
* 2:线上
* 3:pickup:麦当劳点餐
* 4:delivery:麦当劳外送
* 5:mccafe:麦当劳咖啡
* 6:mc_dessert麦当劳甜品站
* 7:SOK
* 8:ECP/CMA
* 9:mcd_alipay:麦当劳支付宝点餐
*/
private String channel;
//商户编号
private String partnerId;
//商家门店号
private String storeId;
//营业员编号
private String operatorId;
//POS机编号
private String stationId;
}
package cn.freemud.entities.dto;
import lombok.Data;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: CouponCodeVerificationReqVO
* @Package cn.freemud.entities.dto
* @Description:
* @author: biao.zhang
* @date: 2018/7/17 14:45
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class CouponCodeVerificationMCCafeDto extends CouponCodeMCCafeBaseDto {
//交易序号
private String transId;
//券编号
private String coupon;
//三方券号
private String offerId;
//锁定/解锁次数
private String number;
//----非必传---
//预约订单时间,为空则为及时单,如:2020-06-17 12:00:00
private String advancedOrderTime;
//签名
private String sign;
private List<CouponCodeVerificationTransDto> transactions;
}
...@@ -59,6 +59,14 @@ public interface CouponService { ...@@ -59,6 +59,14 @@ public interface CouponService {
List<GetCouponDetailResponseDto.Details> getMemberCoupons(String partnerId, String storeId, List<String> codes); List<GetCouponDetailResponseDto.Details> getMemberCoupons(String partnerId, String storeId, List<String> codes);
/** /**
* 获取麦咖啡卡券详情
*
* @param requestVo
* @return
*/
GetCouponDetailResponseDto getMCCafeMemberCoupon(GetMemberCouponRequestVo requestVo);
/**
* 同步券到会员卡包(投放会员卡包) * 同步券到会员卡包(投放会员卡包)
* *
* @param requestVo * @param requestVo
...@@ -80,6 +88,11 @@ public interface CouponService { ...@@ -80,6 +88,11 @@ public interface CouponService {
String getAppSecret(String partnerId); String getAppSecret(String partnerId);
/** /**
* 获取卡券服务麦咖啡商户密钥
*/
String getMCCafeAppSecret(String partnerId);
/**
* 通过code校验券是否存在,返回商品券信息pid、price、code * 通过code校验券是否存在,返回商品券信息pid、price、code
* *
* @param requestDto * @param requestDto
......
...@@ -89,6 +89,8 @@ public class CouponServiceImpl implements CouponService { ...@@ -89,6 +89,8 @@ public class CouponServiceImpl implements CouponService {
@Autowired @Autowired
private CouponOnlineClient couponOnlineClient; private CouponOnlineClient couponOnlineClient;
@Autowired @Autowired
private CouponOnlineMCCafeClient couponOnlineMCCafeClient;
@Autowired
private CouponAvailableService couponAvailableService; private CouponAvailableService couponAvailableService;
@Value("${coupon.app.id}") @Value("${coupon.app.id}")
private String appid; private String appid;
...@@ -97,6 +99,8 @@ public class CouponServiceImpl implements CouponService { ...@@ -97,6 +99,8 @@ public class CouponServiceImpl implements CouponService {
@Autowired @Autowired
private CardBinClient cardBinClient; private CardBinClient cardBinClient;
@Autowired @Autowired
private CardBinMCCafeClient cardBinMCCafeClient;
@Autowired
private StoreItemClient storeItemClient; private StoreItemClient storeItemClient;
@Autowired @Autowired
private StoreItemAdapter storeItemAdapter; private StoreItemAdapter storeItemAdapter;
...@@ -254,6 +258,32 @@ public class CouponServiceImpl implements CouponService { ...@@ -254,6 +258,32 @@ public class CouponServiceImpl implements CouponService {
return null; return null;
} }
@Override
public GetCouponDetailResponseDto getMCCafeMemberCoupon(GetMemberCouponRequestVo requestVo) {
log.info("getMemberCoupon:" + gson.toJson(requestVo));
//TODO 券详情查券服务
Map<String, String> map = new TreeMap<String, String>();
if (StringUtils.isBlank(requestVo.getPartnerId()) || StringUtils.isBlank(requestVo.getCouponCode())) {
return null;
}
map.put(Finals.CODES, requestVo.getCouponCode());
map.put(Finals.PARTNER_ID, requestVo.getPartnerId());
map.put(Finals.MERCHANT_ID, requestVo.getPartnerId());
map.put(Finals.ACTION, "code.allDetails");
// 券码接口新增参数:组织机构(多个用英文逗号分离)
String channelIds = commonService.getOrgIdsAsString(requestVo.getPartnerId(), requestVo.getStoreId());
map.put(Finals.CHANNEL_CODE_LIST, channelIds);
String appSecret = getMCCafeAppSecret(requestVo.getPartnerId());
String sign = SignUtil.createMD5Sign(map, appSecret);
map.put(Finals.SIGN, sign);
GetCouponDetailResponseDto responseDto = couponOnlineMCCafeClient.getMCCafeCouponDetails(map);
LogUtil.info("couponOnlineClient.getCouponDetails****", map, gson.toJson(responseDto));
if (ResponseCodeConstant.RESPONSE_SUCCESS_1.equals(responseDto.getResult())) {
return responseDto;
}
return null;
}
/** /**
* 批次查询 * 批次查询
*/ */
...@@ -309,6 +339,22 @@ public class CouponServiceImpl implements CouponService { ...@@ -309,6 +339,22 @@ public class CouponServiceImpl implements CouponService {
return appSecret; return appSecret;
} }
@Override
public String getMCCafeAppSecret(String partnerId) {
// 获取券服务的密钥
String couponAppSecret = RedisUtil.getCouponAppSecret(partnerId);
String appSecret = redisCache.getValue(couponAppSecret);
if (StringUtils.isBlank(appSecret)) {
GetAppKeyResponseDto getAppKeyResponseDto = cardBinMCCafeClient.getMCCafeAppKey(GetAppKeyRequestDto.builder().partnerId(partnerId).appId(appid).build());
if (Objects.equals(String.valueOf(getAppKeyResponseDto.getStatusCode()), ResponseResult.SUCCESS.getCode())
&& getAppKeyResponseDto.getData() != null) {
redisCache.save(couponAppSecret, getAppKeyResponseDto.getData().getAppKey());
appSecret = getAppKeyResponseDto.getData().getAppKey();
}
}
return appSecret;
}
/** /**
* key = 活动code , value = 返回是否匹配点餐方式 * key = 活动code , value = 返回是否匹配点餐方式
*/ */
......
package cn.freemud.service.thirdparty;
import cn.freemud.entities.dto.BatchQueryActivityInfoRequestDto;
import cn.freemud.entities.dto.BatchQueryActivityInfoResponseDto;
import cn.freemud.entities.dto.GetAppKeyRequestDto;
import cn.freemud.entities.dto.GetAppKeyResponseDto;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
//测试环境:http://115.159.65.101:8082 生产环境:https://onlinecoupon.sandload.cn
@FeignClient(name = "CARDBINMCCafeCLIENT",url="fff")
@RequestMapping(produces = {"application/json;charset=UTF-8"})
public interface CardBinMCCafeClient {
/**
* 获取麦咖啡券码密钥
* @param requestDto
* @return
*/
@PostMapping("/mccafe/getAppKey")
GetAppKeyResponseDto getMCCafeAppKey(GetAppKeyRequestDto requestDto);
/**
* 麦咖啡活动信息批量查询
* @param requestDto
* @return
*/
@PostMapping(value = "/mccafe/batchQueryActivityInfo")
BatchQueryActivityInfoResponseDto batchQueryMCCafeActivityInfo(BatchQueryActivityInfoRequestDto requestDto);
}
package cn.freemud.service.thirdparty;
import cn.freemud.entities.dto.CouponCodeResponseDto;
import cn.freemud.entities.dto.CouponCodeVerificationMCCafeDto;
import com.freemud.application.sdk.api.couponcenter.offline.response.CouponRedeemResponse;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
@FeignClient(name = "COUPONMCCafe",url="http://coupon-api-gateway-koderover-dev-coupon.api-ingress.sandload.cn")
public interface CouponOfflineMCCafeClient {
@PostMapping("/mccafe/redeem")
CouponRedeemResponse redeem(CouponCodeVerificationMCCafeDto couponCodeVerificationMCCafeDto);
@PostMapping("/mccafe/cancelRedeem")
CouponRedeemResponse cancelRedeem(CouponCodeVerificationMCCafeDto couponCodeVerificationMCCafeDto);
@PostMapping("/mccafe/query")
CouponRedeemResponse query(CouponCodeVerificationMCCafeDto couponCodeVerificationMCCafeDto);
@PostMapping("/mccafe/lock")
CouponRedeemResponse lock(CouponCodeVerificationMCCafeDto couponCodeVerificationMCCafeDto);
@PostMapping("/mccafe/unlock")
CouponRedeemResponse unlock(CouponCodeVerificationMCCafeDto couponCodeVerificationMCCafeDto);
}
package cn.freemud.service.thirdparty;
//import cn.freemud.constant.IgnoreFeignLogAnnotation;
import cn.freemud.entities.dto.GetCouponDetailResponseDto;
import cn.freemud.interceptor.FormSupportConfig;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.Map;
//@IgnoreFeignLogAnnotation
@FeignClient(name = "COUPONOLINEMCCafe", url = "fffff", configuration = FormSupportConfig.class)
public interface CouponOnlineMCCafeClient {
/**
* 查询券详情
*/
@PostMapping(value = "/mccafe/code_v4", produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}
)
GetCouponDetailResponseDto getMCCafeCouponDetails(@RequestBody Map<String, ?> map);
}
...@@ -6,6 +6,11 @@ import cn.freemud.entities.dto.CheckSpqInfoRequestDto; ...@@ -6,6 +6,11 @@ import cn.freemud.entities.dto.CheckSpqInfoRequestDto;
import cn.freemud.entities.dto.CheckSpqInfoResponseDto; import cn.freemud.entities.dto.CheckSpqInfoResponseDto;
import cn.freemud.entities.dto.GetCouponDetailResponseDto; import cn.freemud.entities.dto.GetCouponDetailResponseDto;
import cn.freemud.entities.vo.*; import cn.freemud.entities.vo.*;
import com.alibaba.fastjson.JSON;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.storecenter.request.vo.GetOrgTreeListRequest;
import com.freemud.card.sdk.comm.Finals;
import com.freemud.card.sdk.comm.SignUtil;
import com.freemud.card.sdk.vo.coupon.request.MemberAddCouponVo; import com.freemud.card.sdk.vo.coupon.request.MemberAddCouponVo;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
...@@ -22,6 +27,7 @@ import org.springframework.test.context.junit4.SpringRunner; ...@@ -22,6 +27,7 @@ import org.springframework.test.context.junit4.SpringRunner;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.TreeMap;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
...@@ -48,6 +54,9 @@ public class CouponServiceTest { ...@@ -48,6 +54,9 @@ public class CouponServiceTest {
@Autowired @Autowired
private CouponService couponService; private CouponService couponService;
@Autowired
private CommonService commonService;
@Test @Test
public void getCouponList() { public void getCouponList() {
//1617,1617,88600017957134272219 //1617,1617,88600017957134272219
...@@ -161,4 +170,26 @@ public class CouponServiceTest { ...@@ -161,4 +170,26 @@ public class CouponServiceTest {
System.out.println(couponOrderWayMap); System.out.println(couponOrderWayMap);
} }
/**
* 批量券详情查询code_v4
*/
@Test
public void couponCodeV4() {
GetMemberCouponRequestVo getMemberCouponRequestVo = new GetMemberCouponRequestVo();
getMemberCouponRequestVo.setCouponCode("");
getMemberCouponRequestVo.setPartnerId("");
getMemberCouponRequestVo.setStoreId("");
GetCouponDetailResponseDto responseDto = couponService.getMCCafeMemberCoupon(getMemberCouponRequestVo);
System.out.println(JSON.toJSONString(responseDto));
}
@Test
public String getAppSecret(String partner) {
String appSecret = couponService.getMCCafeAppSecret(partner);
System.out.println(appSecret);
return appSecret;
}
} }
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