Commit 7952ca86 by shuhu.hou

微信支付上传

parent 9029c5e9
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
<dependency> <dependency>
<groupId>com.freemud.application.service.sdk</groupId> <groupId>com.freemud.application.service.sdk</groupId>
<artifactId>sdk-common-base</artifactId> <artifactId>sdk-common-base</artifactId>
<version>1.2.1-SNAPSHOT</version> <version>1.3.9-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
......
...@@ -28,6 +28,8 @@ public class OrderCallBackConfig { ...@@ -28,6 +28,8 @@ public class OrderCallBackConfig {
public static final String OPEN_PLATFORM_ORDER_STATUS_CHANGE_PUSH_QUEUE_NAME = "open-platform-order-status-change-push-queue"; public static final String OPEN_PLATFORM_ORDER_STATUS_CHANGE_PUSH_QUEUE_NAME = "open-platform-order-status-change-push-queue";
public static final String OPEN_PLATFORM_ORDER_STATUS_CHANGE_PUSH_ROUTING_KEY = "open-platform-order-status-change-routing-key"; public static final String OPEN_PLATFORM_ORDER_STATUS_CHANGE_PUSH_ROUTING_KEY = "open-platform-order-status-change-routing-key";
public static final String WECHAT_REPORT_QUEUE_ROUTING_KEY="wechat-report-queue-routing-key";
/** /**
* 定义基于Fanout 的Exchange。 * 定义基于Fanout 的Exchange。
* 基于这个代码,也可以非常方便的定义其他的Exchange类型。 * 基于这个代码,也可以非常方便的定义其他的Exchange类型。
......
...@@ -38,7 +38,6 @@ import org.apache.commons.lang.ObjectUtils; ...@@ -38,7 +38,6 @@ 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.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -54,6 +53,10 @@ public class OrderCallBackMQService { ...@@ -54,6 +53,10 @@ public class OrderCallBackMQService {
@Autowired @Autowired
private OrderDistributionService orderDistributionService; private OrderDistributionService orderDistributionService;
@Autowired
private RedisCache redisCache;
@Autowired
private AssortmentOpenPlatformWxappManager openPlatformWxappManager;
public void sendOrderMQ(OrderCallBackRequestVo body) { public void sendOrderMQ(OrderCallBackRequestVo body) {
//发送订单回调 //发送订单回调
...@@ -66,8 +69,25 @@ public class OrderCallBackMQService { ...@@ -66,8 +69,25 @@ public class OrderCallBackMQService {
if (orderInfoReqs != null) { if (orderInfoReqs != null) {
orderDistributionService.pushOrder(convent2DisRequest(body, orderInfoReqs.getOrderState())); orderDistributionService.pushOrder(convent2DisRequest(body, orderInfoReqs.getOrderState()));
} }
//微信数据上传(创建新订单&支付成功时上传)
sendWechatReportMQ(body);
}
private void sendWechatReportMQ(OrderCallBackRequestVo body) {
try {
OrderInfoReqs orderInfoReqs = getWechatReportOrderInfoReqs(body);
if (orderInfoReqs != null) {
OrderExtInfoDto orderExtInfoDto = JSONObject.parseObject(orderInfoReqs.getExtInfo(), OrderExtInfoDto.class);
UserLoginInfoDto userLoginInfoDto = getUserLoginInfoBySessionId(orderExtInfoDto.getSessionId());
WechatReportOrderDto wechatReportOrderDto = getWechatReportOrderDto(orderInfoReqs, orderExtInfoDto, userLoginInfoDto);
Header header = new Header(MQAction.UPDATE.getAction(), "call-back-service-api",
OrderCallBackConfig.QUEUE_ROUTING_KEY, OrderCallBackConfig.QUEUE_NAME);
MQMessage<WechatReportOrderDto> message = new MQMessage<>(header, wechatReportOrderDto);
mqService.convertAndSend(OrderCallBackConfig.TOPIC_EXCHANGE_NAME, OrderCallBackConfig.WECHAT_REPORT_QUEUE_ROUTING_KEY, message);
}
} catch (Exception ex) {
ErrorLog.printErrorLog("sendWechatReportMQError",body.getOrderCode(),body,ex);
}
} }
private DisRequest convent2DisRequest(OrderCallBackRequestVo orderBean, Integer orderState) { private DisRequest convent2DisRequest(OrderCallBackRequestVo orderBean, Integer orderState) {
DisRequest disRequest = new DisRequest(); DisRequest disRequest = new DisRequest();
disRequest.setExtJson(orderBean.getContent()); disRequest.setExtJson(orderBean.getContent());
...@@ -97,4 +117,78 @@ public class OrderCallBackMQService { ...@@ -97,4 +117,78 @@ public class OrderCallBackMQService {
} }
return orderInfoReqs; return orderInfoReqs;
} }
private OrderInfoReqs getWechatReportOrderInfoReqs(OrderCallBackRequestVo body) {
// 订单所有状态正常变化通知通知开放平台
if (!ObjectUtils.equals("1", body.getMsgType()) || body.getOperateType() == null || body.getOperateType() == 2) {
return null;
}
try {
OrderInfoReqs orderInfoReqs = JSONObject.parseObject(body.getContent(), OrderInfoReqs.class);
if (orderInfoReqs != null && OrderClientType.SAAS.getIndex().equals(orderInfoReqs.getOrderClient()) &&
((body.getOperateType() == 0 && NewOrderStatus.PENDING_PAYMENT.getIndex().equals(orderInfoReqs.getOrderState())) ||
(body.getOperateType() == 1 && NewOrderStatus.COMPLETE.getIndex().equals(orderInfoReqs.getOrderState())))) {
return orderInfoReqs;
}
} catch (Exception ex) {
ErrorLog.infoConvertJson(context.getEnvironment().getProperty("spring.application.name"), LogThreadLocal.getTrackingNo(), this.getClass(), "parseObjectOrderInfoReqsError", ex);
return null;
}
return null;
}
private UserLoginInfoDto getUserLoginInfoBySessionId(String sessionId) {
String redisKey = RedisKeyConstant.SAAS_USER_INFO_SESSIONID_KEY_PREFIX + sessionId;
Map<String, Object> map = redisCache.getValue(redisKey);
UserLoginInfoDto userLoginInfoDto = new UserLoginInfoDto();
userLoginInfoDto.setOpenId(String.valueOf(map.get("openid")));
userLoginInfoDto.setWxAppid(String.valueOf(map.get("wxAppid")));
userLoginInfoDto.setSessionKey(String.valueOf(map.get("session_key")));
userLoginInfoDto.setMobile(String.valueOf(map.get("mobile")));
userLoginInfoDto.setAppsecret(String.valueOf(map.get("appsecret")));
userLoginInfoDto.setMemberId(String.valueOf(map.get("memberId")));
userLoginInfoDto.setPartnerId(String.valueOf(map.get("partnerId")));
userLoginInfoDto.setUnionId(String.valueOf(map.get("unionId")));
userLoginInfoDto.setNewMemeber(Boolean.valueOf(map.get("newMember").toString()));
userLoginInfoDto.setNickName(String.valueOf(map.get("nickName")));
return userLoginInfoDto;
}
private WechatReportOrderDto getWechatReportOrderDto(OrderInfoReqs orderInfoReqs, OrderExtInfoDto orderExtInfoDto, UserLoginInfoDto userLoginInfoDto) {
WechatReportOrderDto wechatReportOrderDto = new WechatReportOrderDto();
wechatReportOrderDto.setAppId(userLoginInfoDto.getWxAppid());
wechatReportOrderDto.setPartnerId(orderInfoReqs.getPartnerId());
wechatReportOrderDto.setShopId(orderInfoReqs.getStoreId());
wechatReportOrderDto.setSubMchId(orderExtInfoDto.getPlatformMchId());
if (StringUtils.isBlank(orderExtInfoDto.getPlatformMchId())) {
// 获取当前商户微信支付mchId
AssortmentOpenPlatformWxapp wxApp = openPlatformWxappManager.findByPartnerIdAndWxappId(userLoginInfoDto.getPartnerId(), userLoginInfoDto.getWxAppid());
wechatReportOrderDto.setSubMchId(wxApp == null ? "" : wxApp.getMchId());
}
wechatReportOrderDto.setPayVoucher(orderInfoReqs.getPayRequestNo());
wechatReportOrderDto.setSubAppId(userLoginInfoDto.getWxAppid());
wechatReportOrderDto.setOutShopNo(orderInfoReqs.getStoreId());
wechatReportOrderDto.setSubOpenId(userLoginInfoDto.getOpenId());
wechatReportOrderDto.setLoginToken(userLoginInfoDto.getSessionKey());
wechatReportOrderDto.setUserAmount(orderInfoReqs.getActualPayAmount().intValue());
wechatReportOrderDto.setOutOrderNo(orderInfoReqs.getOrderCode());
wechatReportOrderDto.setTransactionId(orderExtInfoDto.getPaid_no());
wechatReportOrderDto.setOutTradeNo(orderExtInfoDto.getPayTransId());
wechatReportOrderDto.setTotalAmount(orderInfoReqs.getOriginalAmount().intValue());
wechatReportOrderDto.setDiscountAmount(orderInfoReqs.getSettlementAmount().intValue());
//订单状态 (CREATE_DEAL—用户下单;PAY_SUCCESS—支付完成)
wechatReportOrderDto.setStatus(NewOrderStatus.PENDING_PAYMENT.getIndex().equals(orderInfoReqs.getOrderState()) ? "CREATE_DEAL" : "PAY_SUCCESS");
List<WechatReportOrderDto.DishInfo> list = new ArrayList<>();
for (OrderItemResp item : orderInfoReqs.getOrderItemList()) {
WechatReportOrderDto.DishInfo dishInfo = new WechatReportOrderDto.DishInfo();
dishInfo.setOutDishNo(item.getProductId());
dishInfo.setCount(item.getProductQuantity());
dishInfo.setName(item.getProductName());
dishInfo.setPrice(item.getProductPrice().intValue());
list.add(dishInfo);
}
wechatReportOrderDto.setDishList(list);
return wechatReportOrderDto;
}
} }
...@@ -18,43 +18,54 @@ import java.util.List; ...@@ -18,43 +18,54 @@ import java.util.List;
*/ */
@Data @Data
public class WechatReportOrderDto { public class WechatReportOrderDto {
/**
* 商户号
*/
private String partnerId; private String partnerId;
/** /**
* 门店号
*/
private String shopId;
/**
* 微信或支付宝appId
*/
private String appId;
/**
* 非码流水Id * 非码流水Id
*/ */
private String payVoucher; private String payVoucher;
/** /**
* 子商户号 * 子商户号
*/ */
private String sub_mchid; private String subMchId;
/** /**
* 子商户APPID,非必填 * 子商户APPID,非必填
*/ */
private String sub_appid; private String subAppId;
/** /**
* 门店编号 * 门店编号
*/ */
private String out_shop_no; private String outShopNo;
/** /**
* 用户子标识 ,非必填 * 用户子标识 ,非必填
*/ */
private String sub_openid; private String subOpenId;
/** /**
* 登录票据(微信用户登录接口返回的登 录票据 公众号,填写access_token; 小程序,填写session_key;) * 登录票据(微信用户登录接口返回的登 录票据 公众号,填写access_token; 小程序,填写session_key;)
*/ */
private String login_token; private String loginToken;
/** /**
* 总价,单位为分 * 总价,单位为分
*/ */
private int total_amount; private int totalAmount;
/** /**
* 优惠金额,单位为分 * 优惠金额,单位为分
*/ */
private int discount_amount; private int discountAmount;
/** /**
* 实际支付,单位为分 * 实际支付,单位为分
*/ */
private int user_amount; private int userAmount;
/** /**
* 订单状态 (CREATE_DEAL—用户下单;PAY_SUCCESS—支付完成) * 订单状态 (CREATE_DEAL—用户下单;PAY_SUCCESS—支付完成)
*/ */
...@@ -62,30 +73,30 @@ public class WechatReportOrderDto { ...@@ -62,30 +73,30 @@ public class WechatReportOrderDto {
/** /**
* 微信支付订单号(status 为 PAY_SUCCESS时必填) * 微信支付订单号(status 为 PAY_SUCCESS时必填)
*/ */
private String transaction_id; private String transactionId;
/** /**
* 服务商支付订单号(status为PAY_SUCCESS时 必填) * 服务商支付订单号(status为PAY_SUCCESS时 必填)
*/ */
private String out_trade_no; private String outTradeNo;
/** /**
* 服务商订单号 * 服务商订单号
*/ */
private String out_order_no; private String outOrderNo;
/** /**
* 菜品列表 * 菜品列表
*/ */
private List<DishInfo> dish_list; private List<DishInfo> dishList;
/** /**
* 消费人数 * 消费人数
*/ */
private int people_count; private int peopleCount;
@Data @Data
public static class DishInfo{ public static class DishInfo{
/** /**
* 商户菜品ID * 商户菜品ID
*/ */
private String out_dish_no; private String outDishNo;
/** /**
* 菜品名称 * 菜品名称
*/ */
......
...@@ -22,7 +22,7 @@ public class OptRequestDto { ...@@ -22,7 +22,7 @@ public class OptRequestDto {
private String appId; private String appId;
@SerializedName("mch_id") @SerializedName("mch_id")
private String mchId; private String mchId;
@SerializedName("sub_appid") @SerializedName("subAppid")
private String subAppId; private String subAppId;
@SerializedName("sub_mch_id") @SerializedName("sub_mch_id")
private String subMchId; private String subMchId;
......
...@@ -21,7 +21,7 @@ public class RecommendProductRequestDto { ...@@ -21,7 +21,7 @@ public class RecommendProductRequestDto {
private String appId; private String appId;
@JsonProperty("mch_id") @JsonProperty("mch_id")
private String mchId; private String mchId;
@JsonProperty("sub_appid") @JsonProperty("subAppid")
private String subAppId; private String subAppId;
@JsonProperty("sub_mch_id") @JsonProperty("sub_mch_id")
private String subMchId; private String subMchId;
......
...@@ -492,7 +492,7 @@ public class OrderBody { ...@@ -492,7 +492,7 @@ public class OrderBody {
*/ */
private String mchId; private String mchId;
/** /**
* 用户小程序Appid sub_appid * 用户小程序Appid subAppid
*/ */
private String wxAppid; private String wxAppid;
/** /**
......
...@@ -86,7 +86,7 @@ public class OpenPlatformPartnerReportDetail { ...@@ -86,7 +86,7 @@ public class OpenPlatformPartnerReportDetail {
/** /**
* 商户小程序id * 商户小程序id
*/ */
@Column(name = "sub_appid") @Column(name = "subAppid")
private String subAppid; private String subAppid;
/** /**
......
...@@ -25,7 +25,7 @@ public class SaoBeiFoodUploadRequset { ...@@ -25,7 +25,7 @@ public class SaoBeiFoodUploadRequset {
public String out_shop_no; public String out_shop_no;
//public string sub_appid { get; set; } //public string subAppid { get; set; }
......
...@@ -22,7 +22,7 @@ public class OptRequestDto { ...@@ -22,7 +22,7 @@ public class OptRequestDto {
private String appId; private String appId;
@SerializedName("mch_id") @SerializedName("mch_id")
private String mchId; private String mchId;
@SerializedName("sub_appid") @SerializedName("subAppid")
private String subAppId; private String subAppId;
@SerializedName("sub_mch_id") @SerializedName("sub_mch_id")
private String subMchId; private String subMchId;
......
...@@ -21,7 +21,7 @@ public class RecommendProductRequestDto { ...@@ -21,7 +21,7 @@ public class RecommendProductRequestDto {
private String appId; private String appId;
@JsonProperty("mch_id") @JsonProperty("mch_id")
private String mchId; private String mchId;
@JsonProperty("sub_appid") @JsonProperty("subAppid")
private String subAppId; private String subAppId;
@JsonProperty("sub_mch_id") @JsonProperty("sub_mch_id")
private String subMchId; private String subMchId;
......
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