Commit d8f25d53 by 徐康

Merge branch 'feature/xukang_20210907_麦咖啡订单数据推送到麦当劳'

# Conflicts:
#	order-application-service/src/main/java/cn/freemud/service/impl/MCCafeOrderServiceImpl.java
#	order-application-service/src/main/java/cn/freemud/service/thirdparty/PaymentNewClient.java
parents 20f8c0cf 4d349f1e
...@@ -325,12 +325,12 @@ ...@@ -325,12 +325,12 @@
<dependency> <dependency>
<groupId>com.freemud.application.service.sdk</groupId> <groupId>com.freemud.application.service.sdk</groupId>
<artifactId>paymentcenter-sdk</artifactId> <artifactId>paymentcenter-sdk</artifactId>
<version>2.9.10.RELEASE</version> <version>2.9.17-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.freemud.sdk.api.assortment</groupId> <groupId>com.freemud.sdk.api.assortment</groupId>
<artifactId>assortment-payment-sdk</artifactId> <artifactId>assortment-payment-sdk</artifactId>
<version>2.6.7.RELEASE</version> <version>2.6.10.SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.rocketmq</groupId> <groupId>org.apache.rocketmq</groupId>
......
...@@ -108,5 +108,32 @@ public class OrderApplication { ...@@ -108,5 +108,32 @@ public class OrderApplication {
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
return executor; return executor;
} }
@Bean("mcCafePushOrderExecutor")
public Executor mcCafePushOrderExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(1);
executor.setMaxPoolSize(1);
executor.setKeepAliveSeconds(60);
executor.setQueueCapacity(100);
executor.setWaitForTasksToCompleteOnShutdown(true);
executor.setAwaitTerminationSeconds(60);
executor.setThreadNamePrefix("mcCafePushOrderExecutor-");
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
return executor;
}
@Bean("mcCafePushOrderSubExecutor")
public Executor mcCafePushOrderSubExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(8);
executor.setMaxPoolSize(16);
executor.setKeepAliveSeconds(60);
executor.setQueueCapacity(100);
executor.setWaitForTasksToCompleteOnShutdown(true);
executor.setAwaitTerminationSeconds(60);
executor.setThreadNamePrefix("mcCafePushOrderSubExecutor-");
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
return executor;
}
} }
} }
...@@ -120,6 +120,30 @@ public class McCafeController { ...@@ -120,6 +120,30 @@ public class McCafeController {
return mcCafeOrderService.mcCafeQueryRecentOrder(queryOrderVo); return mcCafeOrderService.mcCafeQueryRecentOrder(queryOrderVo);
} }
/**
* 麦咖啡推送订单数据到麦当劳
*/
@ApiAnnotation(logMessage = "mcCafePushOrder")
@PostMapping("/mcCafePushOrder")
public BaseResponse mcCafePushOrder(@Validated @LogParams @RequestBody McCafeQueryOrderVo queryOrderVo) {
return mcCafeOrderService.mcCafePushOrder(queryOrderVo);
}
/**
* 麦咖啡推送订单数据到麦当劳 -- 补偿/修正
*/
@ApiAnnotation(logMessage = "mcCafePushOrderMakeUp")
@PostMapping("/mcCafePushOrderMakeUp")
public BaseResponse mcCafePushOrderMakeUp(@Validated @LogParams @RequestBody McCafeQueryOrderVo queryOrderVo) {
return mcCafeOrderService.mcCafePushOrderMakeUp(queryOrderVo);
}
} }
package cn.freemud.entities.db;
import cn.freemud.comm.entity.BaseEntity;
import lombok.Data;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import java.util.Date;
/**
* 商户
*
* @author liming.guo
* @date 2018/05/10
*/
@Data
public class PushMccafeOrder extends BaseEntity {
private Long id;
/**
* 订单编号
*/
private String orderCode;
/**
* 商户ID
*/
private String partnerId;
/**
* 门店id
*/
private String storeId;
private Integer status;
private String failReason;
private Date createTime;
private Date updateTime;
}
package cn.freemud.entities.dto;
import lombok.Data;
@Data
public class McCafePushOrderResponseDto {
private String code;
private String message;
private String data;
}
package cn.freemud.entities.dto.order;
import lombok.Data;
import java.util.List;
@Data
public class McCafePushOrderDto {
//小程序订单ID
private String mpOrderId;
//对接iRMS业务ID
private String displayOrderId;
//订单类型-枚举 1: 堂食 2: 外卖
private String type;
//销售类型-枚举 1: 即时单 2: 预约单
private String saleType;
//用餐类型-枚举 1: 堂食 2: 外带 3: 得来速 4: 取餐柜
private String eatType;
//配送类型-枚举 1: MDS
private String deliveryType;
//订单来源-枚举 APP: CMA WEB: WOS MT: 美团 ELE: 饿了么 WXMP: 微信小程序 ALIMP: 支付宝小程序
private String sourceType;
//业务类型枚举 1: FC母店 2: MDS麦乐送 3: McCafe麦咖啡 4: Kiosk甜品站
private String beType;
//餐段标识枚举 1: 早餐 2: 正餐
private String dayPart;
//渠道枚举 07: 微信小程序Pickup 08: 支付宝小程序Pickup 09: 微信小程序MDS 10:麦咖啡微信小程序
private String channel;
//订单状态枚举 10: 待支付 20: 已支付 30: 餐厅已确认 31: 餐厅配餐中(pickup) 32: 订单配送中 33: 餐厅配餐中(delivery) 34: 待用户取餐(取餐柜) 40: 订单已完成 60: 已取消 61: 取消审核中 80: 已退款
private String status;
//是否需要发票 0: 不需要 1: 需要
private Integer invoiceNeeded;
//是否已开票 0: 未开票 1: 已发票
private Integer Invoiced;
//用户MeddyId
private String customer_id;
//期望配送时间: yyyy-MM-dd hh:mi:ss
private String expectDeliveryTime;
//平台来源枚举 1: Android 2: IPhone
private String platformSource;
//门店编码
private String storeCode;
//门店名称
private String storeName;
//门店营业日期 yyyy-MM-dd
private String businessDate;
//餐具需求 01: 需要 02: 不需要
private String tablewareInfo;
//订单应收金额
private Integer totalAmount;
//订单税额金额
private Integer taxTotalAmount;
//订单折扣金额
private Integer discountTotalAmount;
//订单实收金额
private Integer realTotalAmount;
//运费原始金额
private Integer deliveryPrice;
//运费实际金额
private Integer realDeliveryPrice;
//备注
private String remark;
//销售时间 yyyy-MM-dd HH:mm:ss
private String saleTime;
//完成时间 yyyy-MM-dd HH:mm:ss
private String completionTime;
//订单取消原因Code枚举 1: 改主意了 2: 重复下单 3: 点错了/点多了/点少了 4: 地址/电话填错了 5: 送达时间选错了 -1: 其它原因 100: 超时未支付,自动取消 101: 订单入机失败,自动取消 102: 订单推送IRMS失败,自动取消订单
private String cancellationReasonCode;
//订单取消评论
private String cancellationRemark;
//接单时间 yyyy-MM-dd HH:mm:ss.SSS
private String acceptTime;
//取餐码
private String pickupCode;
//用户三方ID
private String openId;
//UNION ID
private String unionId;
//yyyy-MM-dd HH:mm:ss
private String createdDate;
//订单项
private List<OrderItem> orderItem;
//订单支付
private List<OrderPayment> orderPayment;
//订单配送
private OrderDelivery orderDelivery;
//订单地址
private OrderAddress orderAddress;
//订单入机
private List<OrderFoe> orderFoe;
@Data
public static class OrderItem {
//订单项ID
private String mpItemId;
//订单项序号
private String sequenceId;
//轮次序列号
private String round;
//父项ID
private String mpParentItemId;
//商品类型枚举 1: 单品 2: 套餐 3: 组合商品 4: 配送费 99: 餐具费 101: Oh麦卡
private String productType;
//商品CODE
private String productCode;
//商品属性列表
private List<productAttribute> productAttribute;
//商品名称
private String productName;
//商品长名称
private String productLongName;
//商品名称英文
private String productNameEn;
//商品长名称英文
private String productLongNameEn;
//订单项数量
private String quantity;
//订单项实际数量
private String real_quantity;
//订单项键位价格
private String original_price;
//订单项原始价格
private String price;
//订单项原始金额小计
private String subtotal;
//订单项优惠金额小计
private String discountAmount;
//订单项实际金额小计
private String realAmount;
//订单项税额小计
private String taxAmount;
//订单项税额明细(单品和套餐/组合商品的父项)
private List<TaxAmountDetail> taxAmountDetail;
//订单项税ID
private String taxId;
//订单项税率: 6,12
private String taxRate;
//是否成本包含(套餐子项使用) 0: 套餐成本不包含当前子项 1: 套餐成本包含当前子项 空: 套餐父项
private String costInclusive;
//创建时间 yyyy-MM-dd HH;mm:ss
private String createdDate;
}
@Data
public static class productAttribute {
//特调编号
private String grillCode;
//商品特调列表
private List<GrillItem> grillItemList;
//特调中文
private String grillNameCn;
//特调中文
private String grillNameEn;
//特调税额
private String taxAmount;
//特调税费ID
private String taxId;
//特调税率
private String taxRate;
}
@Data
public static class GrillItem {
//特调编码
private String grillItemCode;
//特调中文
private String grillItemNameCn;
//特调英文
private String grillItemNameEn;
//特调价格
private String grillItemPrice;
//是否修改
private String isModify;
//特调数量
private String quantity;
}
@Data
public static class TaxAmountDetail {
//订单项商品编号
private String uniqueCode;
//税费明细
private List<TaxItem> taxItems;
}
@Data
public static class TaxItem {
//实际金额(分为单位)
private Integer realAmount;
//税额(分为单位)
private Integer taxAmount;
//税费ID
private String taxId;
//税率(6/12)
private String taxRate;
}
@Data
public static class OrderPayment {
//支付交易ID
private String channelPayTransactionId;
//支付状态-枚举 UNPAID: 未支付 PAYING: 支付中 PAID: 支付成功 FAILED 支付失败 CLOSE 支付关闭
private String payStatus;
//订单来源枚举 07: 微信小程序Pickup 08: 支付宝小程序pickup 09: 微信小程序MDS 10:麦咖啡微信小程序
private String paySource;
//支付渠道枚举 ALI: 支付宝 WX: 微信支付 ARCHCARD: 麦钱包
private String payChannel;
//支付金额
private Integer payAmount;
//退款类型枚举 1: 整单退款
private String refundType;
//退款金额
private Integer refundAmount = 0;
//退款时间 yyyy-MM-dd HH:mm:ss
private String refundTime;
//退款原因
private String refundReason;
//支付标记类型0-非预付券,1-预付券
private String signType;
//订单目的01-充值,02-消费
private String payPurpose;
//消费类型 01: pickup, 02: delivery pay_purpose为02,必传
private String consumeType;
//pay_purpose为02,必传
private String tenderCode;
//支付网关-支付订单号
private String upgPayInstructionId;
//支付网关-支付订单号
private String upgPayOrderId;
//支付状态枚举 REFUNDED: 已退款
private String refundStatus;
//退款交易ID
private String channelRefundTransactionId;
//支付网关-退款指令号
private String upgRefundInstructionId;
//支付网关-退款订单号
private String upgRefundOrder_id;
//创建时间 yyyy-MM-dd HH:mm:ss
private String createdDate;
}
@Data
public static class OrderDelivery {
//配送状态枚举 accept:接单 assembly: 汇集订单 intransit: 配送订单 completed: 完成订单
private String status;
//骑手昵称
private String riderNickName;
//骑手手机号
private String riderMobileNo;
//派单时间 yyy-MM-dd HH:mm:ss
private String dispatchTime;
//接单时间yyy-MM-dd HH:mm:ss
private String acceptTime;
//汇合时间yyy-MM-dd HH:mm:ss
private String assemblyTime;
//配送中时间yyy-MM-dd HH:mm:ss
private String transitTime;
//完成时间yyy-MM-dd HH:mm:ss
private String completedTime;
//骑手备注
private String remark;
//创建时间yyy-MM-dd HH:mm:ss
private String createdDate;
}
@Data
public static class OrderAddress {
//渠道枚举 01: CMA 5 02: WOS 03: CMA 6 04: NEW WEB 19: 美团 20: 饿了么 45: 微信小程序 54: 支付宝小程序 10:麦咖啡微信小程序
private String channel;
//用户账号-MeddyId
private String customerId;
//昵称
private String customerNickName;
//性别枚举 1: 男 2: 女
private String gender;
//手机号
private String phone_no;
//省份-麦中码表 江苏省: 320000
private String provinceCode;
//城市-字典表配置 苏州市: 320500
private String cityCode;
//区域-字典表配置 吴中区: 320506
private String districtCode;
//地址-地图定位地址 新桥商务中心
private String address;
//详细地址-用户输入 B栋701
private String detail;
//经度
private String longitude;
//纬度
private String latitude;
//创建时间yyy-MM-dd HH:mm:ss
private String createdDate;
}
@Data
public static class OrderFoe {
//入机生成的外部订单ID
private String foeOrderKey;
//门店编码
private String storeCode;
//订单类型枚举 1: 堂食 2: 外卖
private String orderType;
//取餐码
private String pickupCode;
//入机状态枚举 10: 未入机 20: 入机成功 30: 入机失败
private String status;
//入机状态描述 status=30时, status description存储入机失败原因
private String statusDescription;
//入机类型 1: 正向单 2: 负向单
private String foeType;
//创建时间yyy-MM-dd HH:mm:ss
private String createdDate;
}
}
package cn.freemud.entities.dto.order;
import lombok.Data;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: FacePayRequestDto
* @Package cn.freemud.entities.dto.order
* @Description:
* @author: ping1.wu
* @date: 2019/12/25 19:28
* @Copyright: 2019 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class RefundQueryRequestDto {
private String partnerId;
private String storeId;
private String frontTransId;
private String stationId;
private String operatorId;
private String transId;
private String clientCode;
}
package cn.freemud.entities.dto.order;
import lombok.Data;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: FacePayResponseDto
* @Package cn.freemud.entities.dto.order
* @Description:
* @author: ping1.wu
* @date: 2019/12/25 19:23
* @Copyright: 2019 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class RefundQueryResponseDto {
private Integer resultCode;
private String resultMsg;
private String tradeNo;
private String thirdPartTradeNo;
private String totalAmount;
private String refundCount;
}
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: QueryOrderVo
* @Package cn.freemud.entities.vo
* @Description:
* @author: liming.guo
* @date: 2018/5/22 17:35
* @version V1.0
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.entities.vo;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
public class McCafePushOrderVo {
@NotBlank
private String startDate;
@NotBlank
private String endDate;
}
package cn.freemud.manager;
import cn.freemud.entities.db.Partner;
import cn.freemud.entities.db.PushMccafeOrder;
import cn.freemud.manager.dao.PartnerDao;
import cn.freemud.manager.dao.PushMccafeOrderDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 商户小程序manager
*
* @author liming.guo
* @date 2018/05/10
*/
@Component
public class PushMccafeOrderManager {
@Autowired
private PushMccafeOrderDao pushMccafeOrderDao;
public PushMccafeOrder selectOrder(String orderCode) {
return pushMccafeOrderDao.selectOrder(orderCode);
}
public List<PushMccafeOrder> selectOrderByStatus(Integer id) {
return pushMccafeOrderDao.selectOrderByStatus(id);
}
public Integer insertOrder(PushMccafeOrder pushMccafeOrder) {
return pushMccafeOrderDao.insertOrder(pushMccafeOrder);
}
public Integer updateOrder(PushMccafeOrder pushMccafeOrder) {
return pushMccafeOrderDao.updateOrder(pushMccafeOrder);
}
}
package cn.freemud.manager.dao;
import cn.freemud.entities.db.Partner;
import cn.freemud.entities.db.PushMccafeOrder;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface PushMccafeOrderDao {
PushMccafeOrder selectOrder(@Param("orderCode") String orderCode);
List<PushMccafeOrder> selectOrderByStatus(@Param("status") Integer status);
Integer insertOrder(PushMccafeOrder pushMccafeOrder);
Integer updateOrder(PushMccafeOrder pushMccafeOrder);
}
...@@ -56,4 +56,8 @@ public interface MCCafeOrderService { ...@@ -56,4 +56,8 @@ public interface MCCafeOrderService {
*/ */
BaseResponse mcCafeQueryRecentOrder(McCafeQueryOrderVo queryOrderVo); BaseResponse mcCafeQueryRecentOrder(McCafeQueryOrderVo queryOrderVo);
BaseResponse mcCafePushOrder(McCafeQueryOrderVo queryOrderVo);
BaseResponse mcCafePushOrderMakeUp(McCafeQueryOrderVo queryOrderVo);
} }
...@@ -25,6 +25,8 @@ import cn.freemud.base.entity.BaseResponse; ...@@ -25,6 +25,8 @@ import cn.freemud.base.entity.BaseResponse;
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;
import cn.freemud.entities.db.PushMccafeOrder;
import cn.freemud.entities.dto.order.McCafePushOrderDto;
import cn.freemud.entities.dto.MCCafeDeliveryBaseResponse; import cn.freemud.entities.dto.MCCafeDeliveryBaseResponse;
import cn.freemud.entities.dto.PayAccessResponse; import cn.freemud.entities.dto.PayAccessResponse;
import cn.freemud.entities.dto.*; import cn.freemud.entities.dto.*;
...@@ -47,12 +49,14 @@ import cn.freemud.entities.vo.CreateDeliveryVo; ...@@ -47,12 +49,14 @@ import cn.freemud.entities.vo.CreateDeliveryVo;
import cn.freemud.entities.vo.*; import cn.freemud.entities.vo.*;
import cn.freemud.entities.vo.mccafe.RecentGoodsInfoVo; import cn.freemud.entities.vo.mccafe.RecentGoodsInfoVo;
import cn.freemud.enums.*; import cn.freemud.enums.*;
import cn.freemud.enums.OrderType;
import cn.freemud.interceptor.ServiceException; import cn.freemud.interceptor.ServiceException;
import cn.freemud.management.entities.dto.request.order.MCCafeCouponRequest; import cn.freemud.management.entities.dto.request.order.MCCafeCouponRequest;
import cn.freemud.management.entities.dto.request.order.MCCafeCouponVo; import cn.freemud.management.entities.dto.request.order.MCCafeCouponVo;
import cn.freemud.management.entities.dto.response.coupon.McdNetBatchQueryResponse; import cn.freemud.management.entities.dto.response.coupon.McdNetBatchQueryResponse;
import cn.freemud.management.enums.OrderSource; import cn.freemud.management.enums.OrderSource;
import cn.freemud.management.service.OrderBaseService; import cn.freemud.management.service.OrderBaseService;
import cn.freemud.manager.PushMccafeOrderManager;
import cn.freemud.redis.RedisCache; import cn.freemud.redis.RedisCache;
import cn.freemud.service.BuriedPointService; import cn.freemud.service.BuriedPointService;
import cn.freemud.service.MCCafeOrderService; import cn.freemud.service.MCCafeOrderService;
...@@ -82,9 +86,16 @@ import com.freemud.application.sdk.api.ordercenter.entities.v1.RefundBeanV1; ...@@ -82,9 +86,16 @@ import com.freemud.application.sdk.api.ordercenter.entities.v1.RefundBeanV1;
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;
import com.freemud.application.sdk.api.ordercenter.enums.ProductTypeEnum; import com.freemud.application.sdk.api.ordercenter.enums.ProductTypeEnum;
import com.freemud.application.sdk.api.membercenter.request.QueryReceiveAddressRequest;
import com.freemud.application.sdk.api.membercenter.response.QueryReceiveAddressResponse;
import com.freemud.application.sdk.api.membercenter.service.MemberCenterService;
import com.freemud.application.sdk.api.ordercenter.enums.*;
import com.freemud.application.sdk.api.ordercenter.request.*; import com.freemud.application.sdk.api.ordercenter.request.*;
import com.freemud.application.sdk.api.ordercenter.response.OrderBaseResp; import com.freemud.application.sdk.api.ordercenter.response.OrderBaseResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderSettlementResp; import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderSettlementResp;
import com.freemud.application.sdk.api.ordercenter.response.BaseDownLoadResponse;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.*;
import com.freemud.application.sdk.api.ordercenter.service.OrderDownLoadSdkService;
import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService; import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService;
import com.freemud.application.sdk.api.paymentcenter.client.request.CodePayRequest; import com.freemud.application.sdk.api.paymentcenter.client.request.CodePayRequest;
import com.freemud.application.sdk.api.paymentcenter.client.request.SVCCardAmountRequest; import com.freemud.application.sdk.api.paymentcenter.client.request.SVCCardAmountRequest;
...@@ -97,6 +108,7 @@ import com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest; ...@@ -97,6 +108,7 @@ import com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest;
import com.freemud.application.sdk.api.storecenter.response.GetListByCodesResponse; import com.freemud.application.sdk.api.storecenter.response.GetListByCodesResponse;
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 com.freemud.application.sdk.api.util.Md5Util;
import com.freemud.sdk.api.assortment.message.config.MessageOfficialRefundPushMqConfig; import com.freemud.sdk.api.assortment.message.config.MessageOfficialRefundPushMqConfig;
import com.freemud.sdk.api.assortment.message.entity.MpTemplateMsg; import com.freemud.sdk.api.assortment.message.entity.MpTemplateMsg;
import com.freemud.sdk.api.assortment.message.entity.MpTemplateMsgDataValue; import com.freemud.sdk.api.assortment.message.entity.MpTemplateMsgDataValue;
...@@ -104,6 +116,7 @@ import com.freemud.sdk.api.assortment.message.enums.MessageEventType; ...@@ -104,6 +116,7 @@ import com.freemud.sdk.api.assortment.message.enums.MessageEventType;
import com.freemud.sdk.api.assortment.message.request.MessagePushOrderTemplateRequest; import com.freemud.sdk.api.assortment.message.request.MessagePushOrderTemplateRequest;
import com.freemud.sdk.api.assortment.message.request.MessageTemplateRequest; import com.freemud.sdk.api.assortment.message.request.MessageTemplateRequest;
import com.freemud.sdk.api.assortment.message.service.IMessageTemplatePushService; import com.freemud.sdk.api.assortment.message.service.IMessageTemplatePushService;
import com.freemud.sdk.api.assortment.order.enums.NewOrderType;
import com.freemud.sdk.api.assortment.order.enums.OldOrderAccountType; import com.freemud.sdk.api.assortment.order.enums.OldOrderAccountType;
import com.freemud.sdk.api.assortment.order.enums.OldOrderStatus; import com.freemud.sdk.api.assortment.order.enums.OldOrderStatus;
import com.freemud.sdk.api.assortment.order.enums.OldOrderType; import com.freemud.sdk.api.assortment.order.enums.OldOrderType;
...@@ -114,10 +127,14 @@ import cn.freemud.service.mccafe.CouponClientService; ...@@ -114,10 +127,14 @@ import cn.freemud.service.mccafe.CouponClientService;
import cn.freemud.service.mccafe.MCCafeOrderCenterSdkService; import cn.freemud.service.mccafe.MCCafeOrderCenterSdkService;
import com.freemud.sdk.api.assortment.order.service.OrderCenterSdkService; import com.freemud.sdk.api.assortment.order.service.OrderCenterSdkService;
import com.freemud.sdk.api.assortment.order.vo.ProductGroupVo; import com.freemud.sdk.api.assortment.order.vo.ProductGroupVo;
import com.freemud.sdk.api.assortment.payment.request.OrderRefundQueryRequest;
import com.freemud.sdk.api.assortment.payment.request.UnifiedOrderRequest; import com.freemud.sdk.api.assortment.payment.request.UnifiedOrderRequest;
import com.freemud.sdk.api.assortment.payment.response.OrderRefundQueryResponse;
import com.freemud.sdk.api.assortment.payment.response.OrderRefundResponse; import com.freemud.sdk.api.assortment.payment.response.OrderRefundResponse;
import com.freemud.sdk.api.assortment.payment.response.UnifiedOrderResponse; import com.freemud.sdk.api.assortment.payment.response.UnifiedOrderResponse;
import com.freemud.sdk.api.assortment.payment.service.PaymentCenterService;
import com.freemud.sdk.api.assortment.payment.service.StandardPaymentService; import com.freemud.sdk.api.assortment.payment.service.StandardPaymentService;
import com.freemud.sdk.api.assortment.payment.service.process.NewPaymentCenterServiceImpl;
import com.google.common.collect.Lists; 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;
...@@ -126,14 +143,23 @@ import ma.glasnost.orika.impl.DefaultMapperFactory; ...@@ -126,14 +143,23 @@ import ma.glasnost.orika.impl.DefaultMapperFactory;
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.apache.http.client.HttpClient;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.*;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -161,6 +187,18 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService { ...@@ -161,6 +187,18 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
private String deliveryCallBackUrl; private String deliveryCallBackUrl;
@Value("${mcCafe.quickOrder.interval}") @Value("${mcCafe.quickOrder.interval}")
private String quickOrderInterval; private String quickOrderInterval;
@Value("${mccafe.partner.id}")
private String mcCafePartnerId;
@Value("${mccafe.push.order.url}")
private String mccafePushOrderUrl;
@Value("${mccafe.push.order.gateway.url}")
private String mccafePushOrderGatewayUrl;
@Value("${mccafe.pushorder.MerchantId}")
private String mccafePushOrderMerchantId;
@Value("${mccafe.pushorder.AppId}")
private String mccafePushOrderAppId;
@Value("${mccafe.pushorder.Key}")
private String mccafePushOrderKey;
@Autowired @Autowired
private DeliveryFeiginClient deliveryFeiginClient; private DeliveryFeiginClient deliveryFeiginClient;
...@@ -231,6 +269,23 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService { ...@@ -231,6 +269,23 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
private CustomerExtendClient customerExtendClient; private CustomerExtendClient customerExtendClient;
@Autowired @Autowired
private AssortmentOpenPlatformPartnerConfigManager openPlatformPartnerConfigManager; private AssortmentOpenPlatformPartnerConfigManager openPlatformPartnerConfigManager;
@Resource(name = "mcCafePushOrderExecutor")
private ThreadPoolTaskExecutor executor;
@Resource(name = "mcCafePushOrderSubExecutor")
private ThreadPoolTaskExecutor subExecutor;
@Autowired
private OrderDownLoadSdkService orderDownLoadSdkService;
@Autowired
private CustomerClient customerClient;
@Autowired
private MemberCenterService memberCenterService;
@Autowired
private McCafePushOrderClient mcCafePushOrderClient;
@Autowired
private PushMccafeOrderManager pushMccafeOrderManager;
@Autowired
private NewPaymentCenterServiceImpl paymentCenterService;
private static MapperFacade mapper = new DefaultMapperFactory.Builder().build().getMapperFacade(); private static MapperFacade mapper = new DefaultMapperFactory.Builder().build().getMapperFacade();
...@@ -606,11 +661,6 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService { ...@@ -606,11 +661,6 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
return mcCafeOrderCenterSdkService.createMCCafeOrderFlow(createOrderRequest); return mcCafeOrderCenterSdkService.createMCCafeOrderFlow(createOrderRequest);
} }
public static void main(String[] args) {
MCCafeOrderServiceImpl mcCafeOrderService = new MCCafeOrderServiceImpl();
mcCafeOrderService.processRepeatGoodsWithSeedCoupon(JSON.parseObject("{\"activityDiscountsDtos\":[{\"activityCode\":\"DPTJ2021022511040306293\",\"activityName\":\"月享卡特价1\",\"activityType\":2,\"discountAmount\":-1710},{\"activityCode\":\"216628714314049\",\"activityName\":\"啡常月享卡(商城)测试券\",\"activityType\":37,\"cartGoodsUid\":\"734d0689-111d-4ca7-a4d1-580d9dcf0105\",\"discountAmount\":-900,\"extendType\":10},{\"activityCode\":\"216628714314049\",\"activityName\":\"啡常月享卡(商城)测试券\",\"activityType\":37,\"cartGoodsUid\":\"82767a8b-0ad9-440c-9b37-d0bfc594179b\",\"discountAmount\":-1800,\"extendType\":10}],\"buyThreeGiveOneCouponFee\":0,\"deliveryAmount\":0,\"discountDeliveryAmount\":0,\"isDiscountDelivery\":false,\"originalTotalAmount\":11400,\"packageAmount\":0,\"payCardFee\":0,\"products\":[{\"activityDiscountsDtos\":[{\"activityCode\":\"216628714314049\",\"activityName\":\"啡常月享卡(商城)测试券\",\"activityType\":37,\"discountAmount\":-900,\"extendType\":10,\"tenderId\":\"508527\"}],\"attributeNames\":\"{\\\"attributeNames\\\":\\\"\\\"}\",\"cartGoodsUid\":\"734d0689-111d-4ca7-a4d1-580d9dcf0105\",\"classificationId\":\"\",\"classificationName\":\"\",\"couponCode\":\"216628714314049\",\"customerCode\":\"508527\",\"extraList\":[],\"hasProductCoupon\":false,\"isMonthCard\":0,\"isSeedCouponGoods\":0,\"isTableware\":0,\"materialList\":[],\"originalPrice\":1900,\"picture\":\"https://picture.sandload.cn/1605356768489.png\",\"productCode\":\"2217\",\"qty\":1,\"salePrice\":0,\"skuId\":\"191220974548593707\",\"skuName\":\"中杯拿铁\",\"spuId\":\"191220974497213481\",\"spuName\":\"拿铁\",\"stockLimit\":false,\"tax\":0.01,\"taxId\":\"\",\"totalDiscountAmount\":900,\"unit\":\"\",\"weight\":0.0},{\"activityDiscountsDtos\":[{\"activityCode\":\"216628714314049\",\"activityName\":\"啡常月享卡(商城)测试券\",\"activityType\":37,\"discountAmount\":-1800,\"extendType\":10,\"tenderId\":\"508527\"}],\"attributeNames\":\"{\\\"attributeNames\\\":\\\"\\\"}\",\"cartGoodsUid\":\"82767a8b-0ad9-440c-9b37-d0bfc594179b\",\"classificationId\":\"\",\"classificationName\":\"\",\"couponCode\":\"216628714314049\",\"customerCode\":\"508527\",\"extraList\":[],\"hasProductCoupon\":false,\"isMonthCard\":0,\"isSeedCouponGoods\":0,\"isTableware\":0,\"materialList\":[],\"originalPrice\":1900,\"picture\":\"https://picture.sandload.cn/1606184178473.png\",\"productCode\":\"2214\",\"qty\":2,\"salePrice\":0,\"skuId\":\"189264448691747619\",\"skuName\":\"中杯卡布奇诺\",\"spuId\":\"189264448647707425\",\"spuName\":\"卡布奇诺\",\"stockLimit\":false,\"tax\":0.01,\"taxId\":\"\",\"totalDiscountAmount\":1800,\"unit\":\"\",\"weight\":0.0},{\"activityDiscountsDtos\":[{\"activityCode\":\"DPTJ2021022511040306293\",\"activityName\":\"月享卡特价1\",\"activityType\":2,\"actualActivityGoodsNumber\":1,\"discountAmount\":1710}],\"activityType\":2,\"attributeNames\":\"{\\\"attributeNames\\\":\\\"\\\"}\",\"cartGoodsUid\":\"ad4af27a-e24f-4264-a3ae-d6a3c3c38e6d\",\"classificationId\":\"\",\"classificationName\":\"\",\"customerCode\":\"509387\",\"extraList\":[],\"hasProductCoupon\":false,\"isMonthCard\":1,\"isSeedCouponGoods\":0,\"isTableware\":0,\"materialList\":[],\"monthCardInfo\":{\"cardCode\":\"216628714314049\",\"cardNo\":\"MQYK8563DBFBEA942693898E7F919C94ADDD\",\"type\":2},\"originalPrice\":1900,\"picture\":\"https://picture.sandload.cn/1609750514452.png\",\"productCode\":\"508554\",\"productType\":9,\"qty\":3,\"salePrice\":1900,\"skuId\":\"196061855703358215\",\"skuName\":\"月享卡\",\"spuId\":\"196061855703358215\",\"spuName\":\"月享卡\",\"stockLimit\":false,\"tax\":0.01,\"taxId\":\"\",\"totalDiscountAmount\":1710,\"unit\":\"\",\"weight\":0.0}],\"shareDiscountActivityDtos\":[],\"stocks\":[{\"activityCode\":\"DPTJ2021022511040306293\",\"activityType\":2,\"goodsStock\":[{\"goodsId\":\"196061855703358215\",\"stock\":1}]}],\"totalAmount\":6990,\"totalDiscountAmount\":4410}", ShoppingCartGoodsDto.class));
}
private void processRepeatGoodsWithSeedCoupon(ShoppingCartGoodsDto shoppingCartGoodsDto) { private void processRepeatGoodsWithSeedCoupon(ShoppingCartGoodsDto shoppingCartGoodsDto) {
List<String> cardCodeList = shoppingCartGoodsDto.getProducts().stream().filter(o -> ProductTypeEnum.VIRTUAL_PRODUCT.getCode().equals(o.getProductType())) List<String> cardCodeList = shoppingCartGoodsDto.getProducts().stream().filter(o -> ProductTypeEnum.VIRTUAL_PRODUCT.getCode().equals(o.getProductType()))
.map(o -> o.getMonthCardInfo().getCardCode()).collect(Collectors.toList()); .map(o -> o.getMonthCardInfo().getCardCode()).collect(Collectors.toList());
...@@ -2497,4 +2547,528 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService { ...@@ -2497,4 +2547,528 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
return channelType; return channelType;
} }
public BaseResponse mcCafePushOrder(McCafeQueryOrderVo queryOrderVo) {
executor.submit(() -> {
for(int i=1;;i++) {
OrderConditionsReq orderConditionsReq = new OrderConditionsReq();
orderConditionsReq.setPartnerId(mcCafePartnerId);
orderConditionsReq.setOrderStatuses(Arrays.asList(6,7));
orderConditionsReq.setPayStatuses(Arrays.asList(2,3,5));
orderConditionsReq.setOrderTypes(Arrays.asList(1,2,3,4,5,6));
orderConditionsReq.setStartTimestamp(DateUtil.convert2Date(queryOrderVo.getStartDate(), "yyyy-MM-dd HH:mm:ss").getTime()/1000);
orderConditionsReq.setEndTimestamp(DateUtil.convert2Date(queryOrderVo.getEndDate(), "yyyy-MM-dd HH:mm:ss").getTime()/1000);
orderConditionsReq.setPageNum(i);
orderConditionsReq.setPageSize(500);
orderConditionsReq.setSortRule(1);
BaseDownLoadResponse<List<OrderInfoReqs>> response = orderDownLoadSdkService.queryOrderByConditions(orderConditionsReq, LogThreadLocal.getTrackingNo());
AppLogUtil.infoLog("queryOrderByConditions:"+ JSON.toJSONString(response),null,null);
if(CollectionUtils.isEmpty(response.getResult())) {
break;
}
RestTemplate client = new RestTemplate();
for(OrderInfoReqs orderInfoReqs : response.getResult()) {
try {
McCafePushOrderDto mcCafePushOrderDto = convert2McCafePushOrderInfo(orderInfoReqs);
AppLogUtil.infoLog("订单推送入参: "+JSON.toJSONString(mcCafePushOrderDto),null,null);
String timestamp = System.currentTimeMillis()+"";
String sign = getMcdOpenApiSign(mccafePushOrderAppId,JSON.toJSONString(mcCafePushOrderDto),mccafePushOrderMerchantId,timestamp,mccafePushOrderKey);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("Provider", "WX");
headers.set("Version", "1.0");
headers.set("AppId", mccafePushOrderAppId);
headers.set("MerchantId", mccafePushOrderMerchantId);
headers.set("Timestamp", timestamp);
headers.set("Sign", sign);
headers.add("Accept", MediaType.APPLICATION_JSON_VALUE);
Gson gson = new Gson();
String json = JSON.toJSONString(mcCafePushOrderDto);
HttpEntity<String> requestEntity = new HttpEntity<>(json, headers);
ResponseEntity<String> responseEntity = client.exchange(mccafePushOrderGatewayUrl+"/mp/order", HttpMethod.POST, requestEntity, String.class);
McCafePushOrderResponseDto responseDto = JSON.parseObject(responseEntity.getBody(), McCafePushOrderResponseDto.class);
// McCafePushOrderResponseDto responseDto = mcCafePushOrderClient.mcCafePushOrder(mcCafePushOrderDto);
PushMccafeOrder pushMccafeOrder = new PushMccafeOrder();
pushMccafeOrder.setOrderCode(orderInfoReqs.getOrderCode());
pushMccafeOrder.setPartnerId(orderInfoReqs.getPartnerId());
pushMccafeOrder.setStoreId(orderInfoReqs.getStoreId());
if(!"SUCCESS".equals(responseDto.getCode())) {
pushMccafeOrder.setStatus(0);
pushMccafeOrder.setFailReason(JSON.toJSONString(responseDto));
} else {
pushMccafeOrder.setStatus(1);
}
pushMccafeOrderManager.insertOrder(pushMccafeOrder);
} catch (ServiceException e) {
AppLogUtil.errorLog("麦咖啡历史订单推送失败: "+JSON.toJSONString(orderInfoReqs)
+" 异常信息: "+e.getMessage(),null,null, null);
PushMccafeOrder pushMccafeOrder = new PushMccafeOrder();
pushMccafeOrder.setOrderCode(orderInfoReqs.getOrderCode());
pushMccafeOrder.setPartnerId(orderInfoReqs.getPartnerId());
pushMccafeOrder.setStoreId(orderInfoReqs.getStoreId());
pushMccafeOrder.setStatus(0);
pushMccafeOrder.setFailReason(e.getMessage());
pushMccafeOrderManager.insertOrder(pushMccafeOrder);
} catch (Exception e) {
AppLogUtil.errorLog("麦咖啡历史订单推送失败: "+JSON.toJSONString(orderInfoReqs)
+" 异常信息: "+ExceptionUtils.getExceptionInfo(e),null,null, null);
e.printStackTrace();
PushMccafeOrder pushMccafeOrder = new PushMccafeOrder();
pushMccafeOrder.setOrderCode(orderInfoReqs.getOrderCode());
pushMccafeOrder.setPartnerId(orderInfoReqs.getPartnerId());
pushMccafeOrder.setStoreId(orderInfoReqs.getStoreId());
pushMccafeOrder.setStatus(0);
pushMccafeOrder.setFailReason(ExceptionUtils.getExceptionInfo(e));
pushMccafeOrderManager.insertOrder(pushMccafeOrder);
}
}
}
});
BaseResponse baseResponse = new BaseResponse();
baseResponse.setCode("100");
baseResponse.setMessage("success");
return baseResponse;
}
public BaseResponse mcCafePushOrderMakeUp(McCafeQueryOrderVo queryOrderVo) {
executor.submit(() -> {
int id = 0;
while (true) {
List<PushMccafeOrder> pushMccafeOrderList = pushMccafeOrderManager.selectOrderByStatus(id);
if(CollectionUtils.isEmpty(pushMccafeOrderList)) {
break;
}
List<String> orderCodes = pushMccafeOrderList.stream().map(o -> o.getOrderCode()).collect(Collectors.toList());
OrderConditionsReq orderConditionsReq = new OrderConditionsReq();
orderConditionsReq.setOrderCodes(orderCodes);
orderConditionsReq.setPageNum(1);
orderConditionsReq.setPageSize(500);
orderConditionsReq.setSortRule(1);
BaseDownLoadResponse<List<OrderInfoReqs>> response = orderDownLoadSdkService.queryOrderByConditions(orderConditionsReq, LogThreadLocal.getTrackingNo());
AppLogUtil.infoLog("queryOrderByConditions:"+ JSON.toJSONString(response),null,null);
if(CollectionUtils.isEmpty(response.getResult())) {
break;
}
RestTemplate client = new RestTemplate();
for(OrderInfoReqs orderInfoReqs : response.getResult()) {
try {
McCafePushOrderDto mcCafePushOrderDto = convert2McCafePushOrderInfo(orderInfoReqs);
AppLogUtil.infoLog("订单推送入参: "+JSON.toJSONString(mcCafePushOrderDto),null,null);
String timestamp = System.currentTimeMillis()+"";
String sign = getMcdOpenApiSign(mccafePushOrderAppId,JSON.toJSONString(mcCafePushOrderDto),mccafePushOrderMerchantId,timestamp,mccafePushOrderKey);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("Provider", "WX");
headers.set("Version", "1.0");
headers.set("AppId", mccafePushOrderAppId);
headers.set("MerchantId", mccafePushOrderMerchantId);
headers.set("Timestamp", timestamp);
headers.set("Sign", sign);
headers.add("Accept", MediaType.APPLICATION_JSON_VALUE);
Gson gson = new Gson();
String json = gson.toJson(mcCafePushOrderDto);
HttpEntity<String> requestEntity = new HttpEntity<>(json, headers);
ResponseEntity<String> responseEntity = client.exchange(mccafePushOrderGatewayUrl+"/mp/order", HttpMethod.POST, requestEntity, String.class);
McCafePushOrderResponseDto responseDto = JSON.parseObject(responseEntity.getBody(), McCafePushOrderResponseDto.class);
// McCafePushOrderResponseDto responseDto = mcCafePushOrderClient.mcCafePushOrder(mcCafePushOrderDto);
PushMccafeOrder pushMccafeOrder = new PushMccafeOrder();
pushMccafeOrder.setOrderCode(orderInfoReqs.getOrderCode());
pushMccafeOrder.setPartnerId(orderInfoReqs.getPartnerId());
pushMccafeOrder.setStoreId(orderInfoReqs.getStoreId());
if(!"SUCCESS".equals(responseDto.getCode())) {
pushMccafeOrder.setStatus(0);
pushMccafeOrder.setFailReason(JSON.toJSONString(responseDto));
} else {
pushMccafeOrder.setStatus(1);
}
pushMccafeOrderManager.insertOrder(pushMccafeOrder);
} catch (ServiceException e) {
AppLogUtil.errorLog("麦咖啡历史订单推送失败: "+JSON.toJSONString(orderInfoReqs)
+" 异常信息: "+e.getMessage(),null,null, null);
PushMccafeOrder pushMccafeOrder = new PushMccafeOrder();
pushMccafeOrder.setOrderCode(orderInfoReqs.getOrderCode());
pushMccafeOrder.setPartnerId(orderInfoReqs.getPartnerId());
pushMccafeOrder.setStoreId(orderInfoReqs.getStoreId());
pushMccafeOrder.setStatus(0);
pushMccafeOrder.setFailReason(e.getMessage());
pushMccafeOrderManager.insertOrder(pushMccafeOrder);
} catch (Exception e) {
AppLogUtil.errorLog("麦咖啡历史订单推送失败: "+JSON.toJSONString(orderInfoReqs)
+" 异常信息: "+ExceptionUtils.getExceptionInfo(e),null,null, null);
e.printStackTrace();
PushMccafeOrder pushMccafeOrder = new PushMccafeOrder();
pushMccafeOrder.setOrderCode(orderInfoReqs.getOrderCode());
pushMccafeOrder.setPartnerId(orderInfoReqs.getPartnerId());
pushMccafeOrder.setStoreId(orderInfoReqs.getStoreId());
pushMccafeOrder.setStatus(0);
pushMccafeOrder.setFailReason(ExceptionUtils.getExceptionInfo(e));
pushMccafeOrderManager.insertOrder(pushMccafeOrder);
}
}
}
});
BaseResponse baseResponse = new BaseResponse();
baseResponse.setCode("100");
baseResponse.setMessage("success");
return baseResponse;
}
private McCafePushOrderDto convert2McCafePushOrderInfo(OrderInfoReqs orderInfoReqs) {
if(StringUtils.isBlank(orderInfoReqs.getReceiveTime())) {
orderInfoReqs.setReceiveTime(DateUtil.addHours(new Date(Long.valueOf(orderInfoReqs.getCreateTime())), 1).getTime()+"");
}
if(StringUtils.isBlank(orderInfoReqs.getAcceptTime())) {
orderInfoReqs.setAcceptTime(orderInfoReqs.getCreateTime());
}
OrderExtInfoDto orderExtInfoDto = JSON.parseObject(orderInfoReqs.getExtInfo(), OrderExtInfoDto.class);
McCafePushOrderDto mcCafePushOrderDto = new McCafePushOrderDto();
mcCafePushOrderDto.setMpOrderId(orderInfoReqs.getOrderCode());
mcCafePushOrderDto.setDisplayOrderId(orderInfoReqs.getDownstreamThirdOrderCode());
mcCafePushOrderDto.setType(orderInfoReqs.getOrderType()==3||orderInfoReqs.getOrderType()==4?"2":"1");
mcCafePushOrderDto.setSaleType(orderInfoReqs.getOrderType()==1||orderInfoReqs.getOrderType()==3||orderInfoReqs.getOrderType()==5?"1":"2");
mcCafePushOrderDto.setEatType(orderInfoReqs.getOrderType()==3||orderInfoReqs.getOrderType()==4?"2":"1");
mcCafePushOrderDto.setDeliveryType("1");
mcCafePushOrderDto.setSourceType(orderInfoReqs.getOrderClient().equals(OrderClientType.ALIPAY.getIndex())?"ALIMP":"WXMP");
mcCafePushOrderDto.setBeType("3");
mcCafePushOrderDto.setDayPart("2");
mcCafePushOrderDto.setChannel(orderInfoReqs.getOrderClient().equals(OrderClientType.ALIPAY.getIndex())?"43":"10");
mcCafePushOrderDto.setStatus(NewOrderStatus.COMPLETE.getIndex().equals(orderInfoReqs.getOrderState())?"40":"80");
mcCafePushOrderDto.setInvoiceNeeded(orderExtInfoDto.getNeedInvoice());
mcCafePushOrderDto.setInvoiced(orderExtInfoDto.getNeedInvoice());
mcCafePushOrderDto.setCustomer_id(orderExtInfoDto.getThirdPartyMemberId());
mcCafePushOrderDto.setStoreCode(orderInfoReqs.getStoreId());
mcCafePushOrderDto.setStoreName(orderInfoReqs.getStoreName());
mcCafePushOrderDto.setBusinessDate(DateUtil.convert2String(new Date(Long.valueOf(orderInfoReqs.getCreateTime())), "yyyy-MM-dd"));
mcCafePushOrderDto.setTablewareInfo(Integer.valueOf(1).equals(orderExtInfoDto.getNeedTableware())?"01":"02");
if(orderInfoReqs.getOriginalAmount().intValue() >= orderInfoReqs.getActualPayAmount().intValue()) {
mcCafePushOrderDto.setTotalAmount(orderInfoReqs.getOriginalAmount().intValue());
mcCafePushOrderDto.setDiscountTotalAmount(orderInfoReqs.getOriginalAmount().subtract(orderInfoReqs.getActualPayAmount()).intValue());
mcCafePushOrderDto.setRealTotalAmount(orderInfoReqs.getActualPayAmount().intValue());
} else {
mcCafePushOrderDto.setTotalAmount(orderInfoReqs.getActualPayAmount().intValue());
mcCafePushOrderDto.setDiscountTotalAmount(0);
mcCafePushOrderDto.setRealTotalAmount(orderInfoReqs.getActualPayAmount().intValue());
}
Optional<OrderCostResp> optionalOrderCostResp = orderInfoReqs.getOrderCostDetailList().stream().filter(
o -> CostTypeEnum.DELIVERY_AMOUNT.getCode().equals(o.getCostType())).findFirst();
if(optionalOrderCostResp.isPresent()) {
mcCafePushOrderDto.setDeliveryPrice(optionalOrderCostResp.get().getCostAmount().intValue());
mcCafePushOrderDto.setRealDeliveryPrice(optionalOrderCostResp.get().getActualCostAmount().intValue());
} else {
mcCafePushOrderDto.setDeliveryPrice(0);
mcCafePushOrderDto.setRealDeliveryPrice(0);
}
mcCafePushOrderDto.setRemark(orderInfoReqs.getNote());
mcCafePushOrderDto.setSaleTime(DateUtil.convert2String(new Date(Long.valueOf(orderInfoReqs.getPayTime())), "yyyy-MM-dd HH:mm:ss"));
mcCafePushOrderDto.setCompletionTime(DateUtil.convert2String(new Date(Long.valueOf(orderInfoReqs.getReceiveTime())), "yyyy-MM-dd HH:mm:ss"));
Optional<AfterSalesOrderResp> afterSalesOrderRespOptional = Optional.empty();
if(NewOrderStatus.CLOSED.getIndex().equals(orderInfoReqs.getOrderState()) && CollectionUtils.isNotEmpty(orderInfoReqs.getAfterSalesOrderList())) {
mcCafePushOrderDto.setCancellationReasonCode("-1");
afterSalesOrderRespOptional = orderInfoReqs.getAfterSalesOrderList().stream().filter(
o -> AfterSalesStatus.COMPLETE.getIndex().equals(o.getAfterSalesStatus())).findFirst();
if(afterSalesOrderRespOptional.isPresent()) {
mcCafePushOrderDto.setCancellationRemark(afterSalesOrderRespOptional.get().getReqRemark());
}
}
mcCafePushOrderDto.setAcceptTime(DateUtil.convert2String(new Date(Long.valueOf(orderInfoReqs.getAcceptTime())), "yyyy-MM-dd HH:mm:ss.SSS"));
mcCafePushOrderDto.setPickupCode(orderInfoReqs.getPickUpGoodsNo());
mcCafePushOrderDto.setOpenId(orderExtInfoDto.getOpenid());
GetMemberInfoByIdRequestDto getMemberInfoByIdRequestDto = new GetMemberInfoByIdRequestDto();
getMemberInfoByIdRequestDto.setPartnerId(mcCafePartnerId);
getMemberInfoByIdRequestDto.setMemberId(orderInfoReqs.getUserId());
GetMemberInfoByIdResponseDto getMemberInfoByIdResponseDto = customerClient.getMemberInfoById(getMemberInfoByIdRequestDto);
if(!ResponseConstant.SUCCESS_RESPONSE_CODE_STR.equals(getMemberInfoByIdResponseDto.getCode())) {
throw new ServiceException(ResponseResult.USER_GETPHONE_ERROR, "获取用户信息异常");
}
if(CollectionUtils.isNotEmpty(getMemberInfoByIdResponseDto.getData().getMemberChannels())) {
Optional<GetMemberInfoByChannelResponseDto.ResultBean.ChannelListBean> channelListBeanOptional = getMemberInfoByIdResponseDto.getData().getMemberChannels().stream().filter(o -> mcCafePartnerId.equals(o.getPartnerId())).findFirst();
if(channelListBeanOptional.isPresent()) {
mcCafePushOrderDto.setUnionId(channelListBeanOptional.get().getUnionId());
}
}
mcCafePushOrderDto.setCreatedDate(DateUtil.convert2String(new Date(Long.valueOf(orderInfoReqs.getCreateTime())), "yyyy-MM-dd HH:mm:ss"));
List<McCafePushOrderDto.OrderItem> orderItemList = new ArrayList<>();
List<OrderItemResp> materialList = orderInfoReqs.getOrderItemList().stream()
.filter(item -> ProductTypeEnum.LITTLE_MATERIAL_PRODUCT.getCode().equals(item.getProductType()))
.collect(Collectors.toList());
Integer taxTotalAmount = 0;
for (OrderItemResp orderItemResp : orderInfoReqs.getOrderItemList()) {
if(ProductTypeEnum.LITTLE_MATERIAL_PRODUCT.getCode().equals(orderItemResp.getProductType())) {
continue;
}
McCafePushOrderDto.OrderItem orderItem = new McCafePushOrderDto.OrderItem();
orderItem.setMpItemId(orderItemResp.getProductId());
orderItem.setSequenceId(orderItemResp.getProductSeq().toString());
orderItem.setRound(orderItemResp.getProductSeq().toString());
if(!"0".equals(orderItemResp.getParentProductId())) {
orderItem.setMpParentItemId(orderItemResp.getParentProductId().split("_")[0]);
orderItem.setProductType("1");
} else {
orderItem.setProductType(parse2McdProductType(orderItemResp.getProductType()));
}
orderItem.setProductCode(StringUtils.isNotBlank(orderItemResp.getProductCode())?orderItemResp.getProductCode():orderItemResp.getThirdProductId());
OrderProductAddInfoDto orderProductAddInfoDto = JSON.parseObject(orderItemResp.getExtInfo(), OrderProductAddInfoDto.class);
orderItem.setProductAttribute(new ArrayList<>());
if(CollectionUtils.isNotEmpty(orderProductAddInfoDto.getSpecialAttrs())) {
for(OrderSpecialExtraAttrRequest orderSpecialExtraAttrRequest : orderProductAddInfoDto.getSpecialAttrs()) {
if(StringUtils.isNotBlank(orderSpecialExtraAttrRequest.getSpecialCode())) {
String[] codes = orderSpecialExtraAttrRequest.getSpecialCode().split("_");
if(codes.length > 2) {
McCafePushOrderDto.productAttribute productAttribute = new McCafePushOrderDto.productAttribute();
productAttribute.setGrillCode(codes[0]);
McCafePushOrderDto.GrillItem grillItem = new McCafePushOrderDto.GrillItem();
grillItem.setGrillItemCode(codes[1]);
grillItem.setGrillItemNameCn(orderSpecialExtraAttrRequest.getAttributeName());
grillItem.setGrillItemNameEn(orderSpecialExtraAttrRequest.getAttributeForeignName());
grillItem.setQuantity(codes[2]);
if (codes.length == 4){
grillItem.setIsModify(codes[3]);
}
productAttribute.setGrillItemList(Arrays.asList(grillItem));
orderItem.getProductAttribute().add(productAttribute);
}
}
}
}
Integer materialPrice = 0;
if(CollectionUtils.isNotEmpty(materialList)) {
String parentProductId = orderItemResp.getProductId() + "_" + orderItemResp.getProductSeq();
List<OrderItemResp> productMaterialList = materialList.stream().filter(o -> parentProductId.equals(o.getParentProductId())).collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(productMaterialList)) {
for(OrderItemResp material : productMaterialList) {
if(material.getSalePrice().intValue() != 0) {
materialPrice += material.getSalePrice().intValue();
}
String[] codes = material.getThirdProductId().split("_");
if(codes.length > 1) {
McCafePushOrderDto.productAttribute productAttribute = new McCafePushOrderDto.productAttribute();
productAttribute.setGrillCode(codes[0]);
McCafePushOrderDto.GrillItem grillItem = new McCafePushOrderDto.GrillItem();
grillItem.setGrillItemCode(codes[1]);
grillItem.setGrillItemNameCn(material.getProductName());
grillItem.setGrillItemNameCn(material.getProductForeignName());
grillItem.setQuantity(material.getProductQuantity().toString());
if (codes.length == 3){
grillItem.setIsModify(codes[2]);
}
productAttribute.setGrillItemList(Arrays.asList(grillItem));
orderItem.getProductAttribute().add(productAttribute);
}
}
}
}
orderItem.setProductName(orderItemResp.getProductName());
orderItem.setProductLongName(orderItemResp.getProductName());
orderItem.setProductNameEn(orderItemResp.getProductForeignName());
orderItem.setProductLongNameEn(orderItemResp.getProductForeignName());
orderItem.setQuantity(orderItemResp.getProductQuantity().toString());
orderItem.setReal_quantity(orderItemResp.getProductQuantity().toString());
orderItem.setOriginal_price(String.valueOf(orderItemResp.getSalePrice().intValue()));
orderItem.setPrice(String.valueOf(orderItemResp.getSalePrice().intValue()+materialPrice));
orderItem.setSubtotal(new BigDecimal(orderItem.getPrice()).multiply(new BigDecimal(orderItemResp.getProductQuantity())).intValue()+"");
orderItem.setDiscountAmount(0+"");
orderItem.setRealAmount(new BigDecimal(orderItem.getPrice()).multiply(new BigDecimal(orderItemResp.getProductQuantity())).intValue()+"");
String taxId = "10";
orderItem.setTaxId(taxId);
Integer taxRate = 6;
orderItem.setTaxRate(String.valueOf(taxRate));
orderItem.setTaxAmount(String.valueOf(new BigDecimal(taxRate).multiply(new BigDecimal(orderItem.getPrice()))
.multiply(new BigDecimal(orderItemResp.getProductQuantity())).intValue()/100));
taxTotalAmount += Integer.parseInt(orderItem.getTaxAmount());
McCafePushOrderDto.TaxAmountDetail taxAmountDetail = new McCafePushOrderDto.TaxAmountDetail();
taxAmountDetail.setUniqueCode(orderItemResp.getProductCode());
McCafePushOrderDto.TaxItem taxItem = new McCafePushOrderDto.TaxItem();
taxItem.setRealAmount(new BigDecimal(orderItem.getPrice()).multiply(new BigDecimal(orderItemResp.getProductQuantity())).intValue());
taxItem.setTaxAmount(new BigDecimal(taxRate).multiply(new BigDecimal(orderItem.getPrice()))
.multiply(new BigDecimal(orderItemResp.getProductQuantity())).intValue()/100);
taxItem.setTaxId(taxId);
taxItem.setTaxRate(taxRate+"");
taxAmountDetail.setTaxItems(Arrays.asList(taxItem));
orderItem.setTaxAmountDetail(Arrays.asList(taxAmountDetail));
if(StringUtils.isBlank(orderItemResp.getParentProductId()) && "0".equals(orderItemResp.getParentProductId())) {
orderItem.setCostInclusive(null);
} else {
orderItem.setCostInclusive("1");
}
orderItem.setCreatedDate(DateUtil.convert2String(new Date(Long.valueOf(orderInfoReqs.getCreateTime())), "yyyy-MM-dd HH:mm:ss"));
orderItemList.add(orderItem);
}
mcCafePushOrderDto.setOrderItem(orderItemList);
mcCafePushOrderDto.setTaxTotalAmount(taxTotalAmount);
List<McCafePushOrderDto.OrderPayment> orderPaymentList = new ArrayList<>();
McCafePushOrderDto.OrderPayment orderPayment = new McCafePushOrderDto.OrderPayment();
orderPayment.setChannelPayTransactionId(orderExtInfoDto.getPayTransId());
orderPayment.setPayStatus("PAID");
orderPayment.setPaySource(orderInfoReqs.getOrderClient().equals(OrderClientType.ALIPAY.getIndex())?"43":"10");
orderPayment.setPayChannel(orderInfoReqs.getOrderClient().equals(OrderClientType.ALIPAY.getIndex())?"ALI":"WX");
orderPayment.setPayAmount(orderInfoReqs.getActualPayAmount().intValue());
if(NewOrderStatus.CLOSED.getIndex().equals(orderInfoReqs.getOrderState()) && CollectionUtils.isNotEmpty(orderInfoReqs.getAfterSalesOrderList())) {
orderPayment.setRefundType(String.valueOf(1));
orderPayment.setRefundAmount(orderInfoReqs.getActualPayAmount().intValue());
if(afterSalesOrderRespOptional.isPresent()) {
orderPayment.setRefundTime(DateUtil.convert2String(new Date(Long.valueOf(afterSalesOrderRespOptional.get().getCreateTime())), "yyyy-MM-dd HH:mm:ss"));
orderPayment.setRefundReason(afterSalesOrderRespOptional.get().getAfterSalesReason());
}
orderPayment.setRefundStatus("REFUNDED");
OrderRefundQueryRequest orderRefundQueryRequest = new OrderRefundQueryRequest();
orderRefundQueryRequest.setPartnerId(mcCafePartnerId);
orderRefundQueryRequest.setStoreId(orderInfoReqs.getStoreId());
orderRefundQueryRequest.setOrgTransId(orderInfoReqs.getOrderCode());
orderRefundQueryRequest.setOrgPayFmId(orderExtInfoDto.getFmId());
com.freemud.application.sdk.api.base.BaseResponse<OrderRefundQueryResponse> refundQueryResponseBaseResponse =
paymentCenterService.orderRefundQuery(orderRefundQueryRequest, LogThreadLocal.getTrackingNo());
if(ResponseConstant.SUCCESS_RESPONSE_CODE_STR.equals(refundQueryResponseBaseResponse.getCode())
&& null != refundQueryResponseBaseResponse.getData()
&& ResponseConstant.SUCCESS_RESPONSE_CODE.equals(refundQueryResponseBaseResponse.getData().getStatusCode())) {
orderPayment.setChannelRefundTransactionId(refundQueryResponseBaseResponse.getData().getRefundDetail().get(0).getEndTransId());
} else {
AppLogUtil.errorLog("获取退款三方流水号失败 request: "+ JSON.toJSONString(orderRefundQueryRequest) + " response: "+JSON.toJSONString(refundQueryResponseBaseResponse), null, null, null);
throw new ServiceException(ResponseResult.SYSTEM_BUSINESS_ERROR, "获取退款三方流水号失败");
}
}
orderPayment.setSignType("0");
orderPayment.setPayPurpose("02");
orderPayment.setConsumeType(NewOrderType.GENERAL_EXPRESS.getCode().equals(orderInfoReqs.getOrderType())?"02":"01");
if(OrderClientType.ALIPAY.getIndex().equals(orderInfoReqs.getOrderClient())) {
if(NewOrderType.GENERAL_EXPRESS.getCode().equals(orderInfoReqs.getOrderType())) {
orderPayment.setTenderCode("152");
} else {
orderPayment.setTenderCode("151");
}
} else {
if(NewOrderType.GENERAL_EXPRESS.getCode().equals(orderInfoReqs.getOrderType())) {
orderPayment.setTenderCode("26");
} else {
orderPayment.setTenderCode("150");
}
}
orderPayment.setCreatedDate(DateUtil.convert2String(new Date(Long.valueOf(orderInfoReqs.getPayTime())), "yyyy-MM-dd HH:mm:ss"));
orderPaymentList.add(orderPayment);
mcCafePushOrderDto.setOrderPayment(orderPaymentList);
if(NewOrderType.GENERAL_EXPRESS.getCode().equals(orderInfoReqs.getOrderType())) {
McCafePushOrderDto.OrderDelivery orderDelivery = new McCafePushOrderDto.OrderDelivery();
McCafePushOrderDto.OrderAddress orderAddress = new McCafePushOrderDto.OrderAddress();
orderDelivery.setStatus("completed");
if(CollectionUtils.isNotEmpty(orderInfoReqs.getDeliveryContactInfoList())) {
for (DeliveryContactInfoResp deliveryContactInfoResp : orderInfoReqs.getDeliveryContactInfoList()) {
//地址类型 1:订单地址 2:售后单地址 3:配送员信息
if (deliveryContactInfoResp.getRelateObjectType() == 3) {
orderDelivery.setRiderNickName(deliveryContactInfoResp.getContactsName());
orderDelivery.setRiderMobileNo(deliveryContactInfoResp.getMobile());
}
if (deliveryContactInfoResp.getRelateObjectType() == 1) {
QueryReceiveAddressRequest request = new QueryReceiveAddressRequest(JSON.parseObject(deliveryContactInfoResp.getExtInfo()).getString("receiveId"), mcCafePartnerId);
com.freemud.application.sdk.api.base.BaseResponse<QueryReceiveAddressResponse> queryReceiveAddressResponse = memberCenterService.queryReceiveAddressById(request, LogThreadLocal.getTrackingNo());
if (!ResponseResult.SUCCESS.getCode().equals(queryReceiveAddressResponse.getCode()) || queryReceiveAddressResponse.getData() == null) {
throw new ServiceException(ResponseResult.USER_GETRECEIVEADDRESS_ERROR, "查询收货地址异常");
}
orderAddress.setGender(queryReceiveAddressResponse.getData().getSex().toString());
orderAddress.setPhone_no(queryReceiveAddressResponse.getData().getReceiveMobile());
if(StringUtils.isNotBlank(queryReceiveAddressResponse.getData().getReceiveAddress())) {
JSONObject jsonObject = JSON.parseObject(queryReceiveAddressResponse.getData().getReceiveAddress());
orderAddress.setAddress(jsonObject.getString("officeName"));
orderAddress.setDetail(jsonObject.getString("address"));
}
orderAddress.setLongitude(queryReceiveAddressResponse.getData().getLongitude());
orderAddress.setLatitude(queryReceiveAddressResponse.getData().getLatitude());
orderAddress.setCreatedDate(queryReceiveAddressResponse.getData().getCreateTime());
}
}
}
orderDelivery.setCompletedTime(DateUtil.convert2String(new Date(Long.valueOf(orderInfoReqs.getReceiveTime())), "yyyy-MM-dd HH:mm:ss"));
orderDelivery.setCreatedDate(DateUtil.convert2String(new Date(Long.valueOf(orderInfoReqs.getCreateTime())), "yyyy-MM-dd HH:mm:ss"));
orderAddress.setChannel(orderInfoReqs.getOrderClient().equals(OrderClientType.ALIPAY.getIndex())?"43":"10");
orderAddress.setCustomerId(orderExtInfoDto.getThirdPartyMemberId());
orderAddress.setCustomerNickName(orderInfoReqs.getUserName());
mcCafePushOrderDto.setOrderDelivery(orderDelivery);
mcCafePushOrderDto.setOrderAddress(orderAddress);
}
List<McCafePushOrderDto.OrderFoe> orderFoeList = new ArrayList<>();
McCafePushOrderDto.OrderFoe orderFoe = new McCafePushOrderDto.OrderFoe();
orderFoe.setFoeOrderKey(orderInfoReqs.getThirdOrderCode());
orderFoe.setStoreCode(orderInfoReqs.getStoreId());
orderFoe.setOrderType(orderInfoReqs.getOrderType()==3?"2":"1");
orderFoe.setPickupCode(orderInfoReqs.getPickUpGoodsNo());
orderFoe.setStatus("20");
orderFoe.setFoeType("1");
orderFoe.setCreatedDate(DateUtil.convert2String(new Date(Long.valueOf(orderInfoReqs.getCreateTime())), "yyyy-MM-dd HH:mm:ss"));
orderFoeList.add(orderFoe);
if(NewOrderStatus.CLOSED.getIndex().equals(orderInfoReqs.getOrderState()) && CollectionUtils.isNotEmpty(orderInfoReqs.getAfterSalesOrderList())) {
McCafePushOrderDto.OrderFoe afterSaleOrderFoe = new McCafePushOrderDto.OrderFoe();
afterSaleOrderFoe.setFoeOrderKey("R".concat(orderInfoReqs.getThirdOrderCode()).concat(orderInfoReqs.getCreateTime()));
afterSaleOrderFoe.setStoreCode(orderInfoReqs.getStoreId());
afterSaleOrderFoe.setOrderType(orderInfoReqs.getOrderType()==3?"2":"1");
afterSaleOrderFoe.setPickupCode(orderInfoReqs.getPickUpGoodsNo());
afterSaleOrderFoe.setStatus("20");
afterSaleOrderFoe.setFoeType("2");
if(afterSalesOrderRespOptional.isPresent()) {
afterSaleOrderFoe.setCreatedDate(DateUtil.convert2String(new Date(Long.valueOf(afterSalesOrderRespOptional.get().getCreateTime())), "yyyy-MM-dd HH:mm:ss"));
}
orderFoeList.add(afterSaleOrderFoe);
}
mcCafePushOrderDto.setOrderFoe(orderFoeList);
return mcCafePushOrderDto;
}
private String parse2McdProductType(Integer productType) {
switch (productType) {
case 1:return "1";
case 88:return "1";
case 6:return "2";
case 3:return "3";
case 12:return "99";
default:return "1";
}
}
public static String getMcdOpenApiSign(String appId, String body, String merchantId, String timestamp, String key) {
String signStr = String.format("AppId=%s&Body=%s&MerchantId=%s&Timestamp=%s&key=%s", appId, body, merchantId, timestamp, key);
String sign = MD5Util.MD5Encode(signStr,"utf-8").toUpperCase();
return sign;
}
public static void main(String[] args) {
String t = String.valueOf(System.currentTimeMillis());
System.out.println(t);
System.out.println(getMcdOpenApiSign("132150066","{\"mpOrderId\":\"22210922765267866600006\",\"displayOrderId\":\"0\",\"type\":\"1\",\"saleType\":\"2\",\"eatType\":\"1\",\"deliveryType\":\"1\",\"sourceType\":\"WXMP\",\"beType\":\"3\",\"dayPart\":\"2\",\"channel\":\"10\",\"status\":\"80\",\"invoiceNeeded\":1,\"Invoiced\":1,\"customer_id\":\"MEDDY991578176625117171\",\"storeCode\":\"1450167\",\"storeName\":\"麦当劳麦咖啡(桂平路-漕河泾店)\",\"businessDate\":\"2021-09-17\",\"tablewareInfo\":\"02\",\"totalAmount\":2500,\"taxTotalAmount\":150,\"discountTotalAmount\":0,\"realTotalAmount\":2500,\"deliveryPrice\":0,\"realDeliveryPrice\":0,\"remark\":\"\",\"saleTime\":\"2021-09-17 14:51:28\",\"completionTime\":\"2021-09-17 15:51:05\",\"cancellationReasonCode\":\"-1\",\"cancellationRemark\":\"\",\"acceptTime\":\"2021-09-17 14:51:05.000\",\"pickupCode\":\"0\",\"openId\":\"oDF-Z5V60m2rgKYaHkf4ImhqR_XQ\",\"unionId\":\"oJeaRwyFU420hv0V3tddABipaH2I\",\"createdDate\":\"2021-09-17 14:51:05\",\"orderItem\":[{\"mpItemId\":\"190081895830260510\",\"sequenceId\":\"1\",\"round\":\"1\",\"productType\":\"1\",\"productCode\":\"507332\",\"productAttribute\":[{\"grillCode\":\"8008\",\"grillItemList\":[{\"grillItemCode\":\"1\",\"grillItemNameCn\":\"\",\"quantity\":\"1\"}]},{\"grillCode\":\"120146\",\"grillItemList\":[{\"grillItemCode\":\"0\",\"grillItemNameCn\":\"\",\"quantity\":\"1\"}]}],\"productName\":\"摩卡\",\"productLongName\":\"摩卡\",\"productNameEn\":\"\",\"productLongNameEn\":\"\",\"quantity\":\"1\",\"real_quantity\":\"1\",\"original_price\":\"2100\",\"price\":\"2500\",\"subtotal\":\"2500\",\"discountAmount\":\"0\",\"realAmount\":\"2500\",\"taxAmount\":\"150\",\"taxAmountDetail\":[{\"uniqueCode\":\"507332\",\"taxItems\":[{\"realAmount\":2500,\"taxAmount\":150,\"taxId\":\"10\",\"taxRate\":\"6\"}]}],\"taxId\":\"10\",\"taxRate\":\"6\",\"costInclusive\":\"1\",\"createdDate\":\"2021-09-17 14:51:05\"}],\"orderPayment\":[{\"channelPayTransactionId\":\"TSXA1205O347754218314084352\",\"payStatus\":\"PAID\",\"paySource\":\"10\",\"payChannel\":\"WX\",\"payAmount\":2500,\"refundType\":\"1\",\"refundAmount\":2500,\"refundTime\":\"2021-09-17 14:52:59\",\"refundReason\":\"用户申请退款\",\"signType\":\"0\",\"payPurpose\":\"02\",\"consumeType\":\"01\",\"tenderCode\":\"150\",\"refundStatus\":\"REFUNDED\",\"channelRefundTransactionId\":\"4200001214202109173002127737\",\"createdDate\":\"2021-09-17 14:51:28\"}],\"orderFoe\":[{\"foeOrderKey\":\"22210922765267866600006\",\"storeCode\":\"1450167\",\"orderType\":\"1\",\"pickupCode\":\"0\",\"status\":\"20\",\"foeType\":\"1\",\"createdDate\":\"2021-09-17 14:51:05\"},{\"foeOrderKey\":\"22210922765267866600006\",\"storeCode\":\"1450167\",\"orderType\":\"1\",\"pickupCode\":\"0\",\"status\":\"20\",\"foeType\":\"1\",\"createdDate\":\"2021-09-17 14:51:05\"}]}",
"M32118436",t, "78c915bb-a3a3-4957-b177-27667adb8df1"));
}
} }
...@@ -43,12 +43,11 @@ public interface CustomerClient { ...@@ -43,12 +43,11 @@ public interface CustomerClient {
// @PostMapping(value = "/customerservice/updateMemberChannel") // @PostMapping(value = "/customerservice/updateMemberChannel")
// JSONObject updateUserUnionId(@RequestBody UpdateMemUnionIdRequestDto updateMemUnionIdRequestDto); // JSONObject updateUserUnionId(@RequestBody UpdateMemUnionIdRequestDto updateMemUnionIdRequestDto);
// //
// /** /**
// * 根据会员id获取会员信息 * 根据会员id获取会员信息
// */ */
// @PostMapping(value = "/customerservice/getMemberById") @PostMapping(value = "/customerservice/getMemberById")
// GetMemberInfoByIdResponseDto getMemberInfoById(@RequestBody GetMemberInfoByIdRequestDto GetMemberInfoByIdResponseDto getMemberInfoById(@RequestBody GetMemberInfoByIdRequestDto getMemberInfoByIdRequestDto);
// getMemberInfoByIdRequestDto);
// //
// /** // /**
// * 修改顾客信息 // * 修改顾客信息
......
package cn.freemud.service.thirdparty;
import cn.freemud.annotations.LogIgnoreFeign;
import cn.freemud.entities.dto.order.McCafePushOrderDto;
import cn.freemud.entities.dto.McCafePushOrderResponseDto;
import feign.Headers;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient(name = "MCD-ORDER-DATA-PUSH-SERVICE", url = "${mccafe.push.order.url}")
@RequestMapping(produces = {"application/json;charset=UTF-8"})
public interface McCafePushOrderClient {
@LogIgnoreFeign(logMessage="mcCafePushOrder")
@PostMapping(value="/mp/order",headers={"ContentType=application/json","Provider=WX","Version=1.0"})
@Headers(value={"ContentType=application/json","Provider=WX","Version=1.0"})
McCafePushOrderResponseDto mcCafePushOrder(@RequestBody McCafePushOrderDto mcCafePushOrderDto);
}
...@@ -5,6 +5,7 @@ import cn.freemud.constant.ResponseCodeKeyConstant; ...@@ -5,6 +5,7 @@ import cn.freemud.constant.ResponseCodeKeyConstant;
import cn.freemud.entities.dto.order.FacePayRequestDto; import cn.freemud.entities.dto.order.FacePayRequestDto;
import cn.freemud.entities.dto.order.FacePayResponseDto; import cn.freemud.entities.dto.order.FacePayResponseDto;
import cn.freemud.entities.dto.pay.UnifiedOrderRequestDto; import cn.freemud.entities.dto.pay.UnifiedOrderRequestDto;
import cn.freemud.entities.dto.order.RefundQueryResponseDto;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.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;
...@@ -43,4 +44,8 @@ public interface PaymentNewClient { ...@@ -43,4 +44,8 @@ public interface PaymentNewClient {
@PostMapping("paymentcenter/unifiedOrder") @PostMapping("paymentcenter/unifiedOrder")
com.freemud.application.sdk.api.base.BaseResponse<FacePayResponseDto> unifiedOrder(@RequestBody UnifiedOrderRequestDto requestDto); com.freemud.application.sdk.api.base.BaseResponse<FacePayResponseDto> unifiedOrder(@RequestBody UnifiedOrderRequestDto requestDto);
@LogIgnoreFeign(logMessage="refundQuery")
@PostMapping("paymentcenter/refundQuery")
com.freemud.application.sdk.api.base.BaseResponse<RefundQueryResponseDto> refundQuery(@RequestBody FacePayRequestDto orderPayDto);
} }
...@@ -4,6 +4,7 @@ public class ExceptionUtils { ...@@ -4,6 +4,7 @@ public class ExceptionUtils {
public static String getExceptionInfo(Exception e) { public static String getExceptionInfo(Exception e) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append(e);
StackTraceElement[] trace = e.getStackTrace(); StackTraceElement[] trace = e.getStackTrace();
for (StackTraceElement traceElement : trace) { for (StackTraceElement traceElement : trace) {
sb.append("\tat " + traceElement); sb.append("\tat " + traceElement);
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cn.freemud.manager.dao.PushMccafeOrderDao">
<sql id="all_column">
id,
order_code as orderCode
partner_id as partnerId,
store_id as storeId,
status as status,
fail_reason as failReason,
create_time as createTime,
update_time as updateTime
</sql>
<select id="selectOrder" resultType="cn.freemud.entities.db.PushMccafeOrder">
SELECT
<include refid="all_column"/>
FROM push_mccafe_order WHERE order_code=#{orderCode}
</select>
<select id="selectOrderByStatus" resultType="cn.freemud.entities.db.PushMccafeOrder">
SELECT
<include refid="all_column"/>
FROM push_mccafe_order WHERE status = 0
id > #{id}
limit 500;
</select>
<insert id="insertOrder" parameterType="cn.freemud.entities.db.PushMccafeOrder">
INSERT INTO push_mccafe_order ( order_code, partner_id,store_id,status,fail_reason)
VALUES
( #{orderCode},#{partnerId},#{storeId},#{status},#{failReason} );
</insert>
<update id="updateOrder" parameterType="cn.freemud.entities.db.PushMccafeOrder">
updatee push_mccafe_order
set
status = #{status}
where order_code = #{orderCode}
</update>
</mapper>
\ No newline at end of file
...@@ -65,13 +65,13 @@ ...@@ -65,13 +65,13 @@
<dependency> <dependency>
<groupId>com.freemud.sdk.api.assortment</groupId> <groupId>com.freemud.sdk.api.assortment</groupId>
<artifactId>assortment-payment-sdk</artifactId> <artifactId>assortment-payment-sdk</artifactId>
<version>2.6.8.RELEASE</version> <version>2.6.10.SNAPSHOT</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.freemud.application.service.sdk</groupId> <groupId>com.freemud.application.service.sdk</groupId>
<artifactId>paymentcenter-sdk</artifactId> <artifactId>paymentcenter-sdk</artifactId>
<version>2.9.8.RELEASE</version> <version>2.9.17-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<artifactId>structure-center-sdk</artifactId> <artifactId>structure-center-sdk</artifactId>
......
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