Commit 7952ca86 by shuhu.hou

微信支付上传

parent 9029c5e9
......@@ -20,7 +20,7 @@
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
<artifactId>sdk-common-base</artifactId>
<version>1.2.1-SNAPSHOT</version>
<version>1.3.9-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
......
......@@ -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_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。
* 基于这个代码,也可以非常方便的定义其他的Exchange类型。
......
......@@ -38,7 +38,6 @@ import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
......@@ -54,6 +53,10 @@ public class OrderCallBackMQService {
@Autowired
private OrderDistributionService orderDistributionService;
@Autowired
private RedisCache redisCache;
@Autowired
private AssortmentOpenPlatformWxappManager openPlatformWxappManager;
public void sendOrderMQ(OrderCallBackRequestVo body) {
//发送订单回调
......@@ -66,8 +69,25 @@ public class OrderCallBackMQService {
if (orderInfoReqs != null) {
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) {
DisRequest disRequest = new DisRequest();
disRequest.setExtJson(orderBean.getContent());
......@@ -97,4 +117,78 @@ public class OrderCallBackMQService {
}
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;
*/
@Data
public class WechatReportOrderDto {
/**
* 商户号
*/
private String partnerId;
/**
* 门店号
*/
private String shopId;
/**
* 微信或支付宝appId
*/
private String appId;
/**
* 非码流水Id
*/
private String payVoucher;
/**
* 子商户号
*/
private String sub_mchid;
private String subMchId;
/**
* 子商户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;)
*/
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—支付完成)
*/
......@@ -62,30 +73,30 @@ public class WechatReportOrderDto {
/**
* 微信支付订单号(status 为 PAY_SUCCESS时必填)
*/
private String transaction_id;
private String transactionId;
/**
* 服务商支付订单号(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
public static class DishInfo{
/**
* 商户菜品ID
*/
private String out_dish_no;
private String outDishNo;
/**
* 菜品名称
*/
......
......@@ -22,7 +22,7 @@ public class OptRequestDto {
private String appId;
@SerializedName("mch_id")
private String mchId;
@SerializedName("sub_appid")
@SerializedName("subAppid")
private String subAppId;
@SerializedName("sub_mch_id")
private String subMchId;
......
......@@ -21,7 +21,7 @@ public class RecommendProductRequestDto {
private String appId;
@JsonProperty("mch_id")
private String mchId;
@JsonProperty("sub_appid")
@JsonProperty("subAppid")
private String subAppId;
@JsonProperty("sub_mch_id")
private String subMchId;
......
......@@ -492,7 +492,7 @@ public class OrderBody {
*/
private String mchId;
/**
* 用户小程序Appid sub_appid
* 用户小程序Appid subAppid
*/
private String wxAppid;
/**
......
......@@ -86,7 +86,7 @@ public class OpenPlatformPartnerReportDetail {
/**
* 商户小程序id
*/
@Column(name = "sub_appid")
@Column(name = "subAppid")
private String subAppid;
/**
......
......@@ -25,7 +25,7 @@ public class SaoBeiFoodUploadRequset {
public String out_shop_no;
//public string sub_appid { get; set; }
//public string subAppid { get; set; }
......
......@@ -22,7 +22,7 @@ public class OptRequestDto {
private String appId;
@SerializedName("mch_id")
private String mchId;
@SerializedName("sub_appid")
@SerializedName("subAppid")
private String subAppId;
@SerializedName("sub_mch_id")
private String subMchId;
......
......@@ -21,7 +21,7 @@ public class RecommendProductRequestDto {
private String appId;
@JsonProperty("mch_id")
private String mchId;
@JsonProperty("sub_appid")
@JsonProperty("subAppid")
private String subAppId;
@JsonProperty("sub_mch_id")
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