Commit b9128025 by 王世昌

Merge branch 'feature/20210616-记录三方调用结果-wsc' into qa

# Conflicts:
#	order-application-service/src/main/java/cn/freemud/service/coupon/impl/PlatformCouponRelationServiceImpl.java
parents 3fb7c7f1 35a4cef3
package cn.freemud.entities.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @version: 1.0
* @Description: TODO
* @author: WangShiChang
* @date: 2021/6/16 上午11:20
* @Copyright: www.freemud.cn Inc.
*/
@Data
public class OrderResourcePushLogMsgDto implements Serializable {
private static final long serialVersionUID = -6166067775096844999L;
/**
* traceId
*/
private String traceId;
/**
* 订单编码
*/
private String orderCode;
/**
* 商户号
*/
private String partnerId;
/**
* 门店编号
*/
private String storeId;
/**
* 用户ID
*/
private String userId;
/**
* 动作类型
*/
private Integer optType;
/**
* 请求时间
*/
private Date requestDate;
/**
* 请求参数
*/
private String requestBody;
/**
* 失败原因
*/
private String failureReasons;
}
package cn.freemud.enums;
import lombok.Getter;
import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 补偿状态
*/
@Getter
public enum OrderResourcePushOptType {
COUPON_LOCK(11, "券锁定"),
COUPON_VERIFICATION(12, "券核销"),
COUPON_RECTIFICATION(13, "券冲正"),
Score_SEND(21, "积分发放"),
Score_RECTIFICATION(22, "积分冲正"),
POINT_SEND(31, "集点发放"),
POINT_RECTIFICATION(32, "集点冲正"),
;
private final Integer index;
private final String name;
OrderResourcePushOptType(Integer index, String name) {
this.index = index;
this.name = name;
}
private static class EnumCacheHolder {
private static final Map<Integer, OrderResourcePushOptType> CACHE;
static {
CACHE = Arrays.stream(OrderResourcePushOptType.values()).collect(Collectors.toMap(OrderResourcePushOptType::getIndex, v -> v));
}
}
public static OrderResourcePushOptType getByIndex(Integer index) {
return EnumCacheHolder.CACHE.get(index);
}
public static OrderResourcePushOptType getByIndexOrDefault(Byte index, OrderResourcePushOptType defaultEnum) {
OrderResourcePushOptType en = EnumCacheHolder.CACHE.get(index);
return en == null ? defaultEnum : en;
}
}
package cn.freemud.enums;
import lombok.Getter;
import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 补偿状态
*/
@Getter
public enum OrderResourcePushState {
DEFAULT((byte) 0, "失败"),
SUCCESS((byte) 1, "补偿成功"),
;
private final Byte index;
private final String name;
OrderResourcePushState(Byte index, String name) {
this.index = index;
this.name = name;
}
private static class EnumCacheHolder {
private static final Map<Byte, OrderResourcePushState> CACHE;
static {
CACHE = Arrays.stream(OrderResourcePushState.values()).collect(Collectors.toMap(OrderResourcePushState::getIndex, v -> v));
}
}
public static OrderResourcePushState getByIndex(Byte index) {
return EnumCacheHolder.CACHE.get(index);
}
public static OrderResourcePushState getByIndexOrDefault(Byte index, OrderResourcePushState defaultEnum) {
OrderResourcePushState en = EnumCacheHolder.CACHE.get(index);
return en == null ? defaultEnum : en;
}
}
......@@ -13,6 +13,10 @@
package cn.freemud.service.coupon.impl;
import cn.freemud.adapter.CouponAdapter;
import cn.freemud.amqp.Header;
import cn.freemud.amqp.MQAction;
import cn.freemud.amqp.MQMessage;
import cn.freemud.amqp.MQService;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.dto.*;
import cn.freemud.entities.vo.CreateOrderVo;
......@@ -34,6 +38,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.couponcenter.offline.service.OfflineCouponSdkService;
import com.freemud.application.sdk.api.log.ErrorLog;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.log.ThirdPartyLog;
import com.freemud.application.sdk.api.service.EmailAlertService;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
......@@ -44,6 +49,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
......@@ -60,6 +66,11 @@ public class PlatformCouponRelationServiceImpl implements CouponRelationService
private EmailAlertService emailAlertService;
@Autowired
private StoreServiceImpl storeService;
@Autowired
private MQService mqService;
private static final String ORDER_RESOURCE_PUSH_LOG_EXCHANGE = "order-resource-push-log-exchange";
private static final String ORDER_RESOURCE_PUSH_LOG_ROUTING_KEY = "order-resource-push-log-routing-key";
@Override
public BaseResponse verificationCoupon(List<QueryOrdersResponseDto.DataBean.OrderBean.AccountBean> accountList, QueryOrdersResponseDto.DataBean.OrderBean orderBean, CouponReqType couponReqType) {
......@@ -159,12 +170,14 @@ public class PlatformCouponRelationServiceImpl implements CouponRelationService
break;
}
if (!Objects.equals(couponCodeResponseDto.getStatusCode(), ResponseResult.SUCCESS.getCode())) {
sendMessage(orderBean, LogThreadLocal.getTrackingNo(), couponCodeVerificationDto, couponCodeResponseDto);
emailAlertService.sendEmailAlert("核销券码失败", String.format("request:%s \r\nresponse:%s", JSONObject.toJSONString(couponCodeVerificationDto), JSONObject.toJSONString(couponCodeResponseDto)));
return ResponseUtil.error(ResponseResult.COUPON_VERIFICATION_FAIL);
}
}
} catch (Exception ex) {
sendMessage(orderBean, LogThreadLocal.getTrackingNo(), couponCodeVerificationDto, ex);
emailAlertService.sendEmailAlert("核销券码异常", String.format("request:%s \r\nexception:%s", JSONObject.toJSONString(couponCodeVerificationDto), Throwables.getStackTraceAsString(ex)));
ErrorLog.printErrorLog("verification_error", "/api", couponCodeVerificationDto, ex);
return ResponseUtil.error(ResponseResult.COUPON_VERIFICATION_FAIL);
......@@ -174,83 +187,41 @@ public class PlatformCouponRelationServiceImpl implements CouponRelationService
return ResponseUtil.success();
}
// @Override
// public BaseResponse verificationCoupon(List<QueryOrdersResponseDto.DataBean.OrderBean.AccountBean> accountList, QueryOrdersResponseDto.DataBean.OrderBean orderBean, CouponReqType couponReqType) {
// for (QueryOrdersResponseDto.DataBean.OrderBean.AccountBean accountBean : accountList) {
// List<CouponCodeVerificationProductDto> products = new ArrayList<>();
// //商品券核销核销参数
// if (OrderAccountType.PRODUCT_COUPON.getCode().equals(accountBean.getType())) {
// for (int i = 0; i < orderBean.getProductList().size(); i++) {
// QueryOrdersResponseDto.DataBean.OrderBean.ProductBean productBean = orderBean.getProductList().get(i);
// String pid = StringUtils.isNotBlank(productBean.getSpecification()) ? productBean.getSpecification() : productBean.getProductId();
// if (!org.springframework.util.CollectionUtils.isEmpty(orderBean.getProductList().get(i).getDiscountList())) {
// List<QueryOrdersResponseDto.DataBean.OrderBean.ProductBean.ProductDiscount> discounts = orderBean.getProductList().get(i).getDiscountList().stream().
// filter(productDiscount -> productDiscount.getDiscountId().equals(accountBean.getAccountId())).collect(Collectors.toList());
// for (QueryOrdersResponseDto.DataBean.OrderBean.ProductBean.ProductDiscount productDiscount : discounts) {
// if (productDiscount.getDiscountType() == null || productDiscount.getDiscountType() == 0) {
// continue;
// }
// CouponCodeVerificationProductDto couponCodeVerificationProductDto = new CouponCodeVerificationProductDto();
// couponCodeVerificationProductDto.setPID(pid);
// couponCodeVerificationProductDto.setConsume_num(productDiscount.getDiscountQty());
// couponCodeVerificationProductDto.setSeq(i + 1);
// products.add(couponCodeVerificationProductDto);
// }
// }
// }
// }
//
// Integer orderType = orderBean.getType();
// //商城单子用NewOrderType
// if(Objects.equals(OrderSource.MALL.getSource(),orderBean.getSource())){
// orderType = orderBean.getNewOrderType();
// }
// ActivityChannelEnum activityChannelEnum = PropertyConvertUtil.orderTypeEnumConvert2ActivityChannel(orderType);
// if (activityChannelEnum == null) {
// activityChannelEnum = ActivityChannelEnum.pickup;
// }
//
// // 核销优惠券 需要一起核销 配送券
// if (OrderAccountType.COUPON.getCode().equals(accountBean.getType())
// || OrderAccountType.PRODUCT_COUPON.getCode().equals(accountBean.getType())
// // 运费券
// || OrderAccountType.FREIGHT_COUPON.getCode().equals(accountBean.getType())
// || OrderAccountType.DISCOUNT_COUPON.getCode().equals(accountBean.getType())) {
//
// CouponCodeVerificationDto couponCodeVerificationDto = couponAdapter.convert2CouponCodeVerificationDto(activityChannelEnum,
// // 这里是活动code
// accountBean.getAccountId(), orderBean.getOid(), orderBean.getCompanyId(),
// orderBean.getShopId(), orderBean.getUserId(), products, accountBean.getPrice().intValue(),couponReqType);
//
// couponCodeVerificationDto.setOrderTotalAmount(orderBean.getOriginalAmount()==null ? 0L: orderBean.getOriginalAmount().longValue());
// couponCodeVerificationDto.setOrderPaymentAmount(orderBean.getAmount());
// couponCodeVerificationDto.setOrderDiscountAmount(orderBean.getOriginalAmount().longValue()-orderBean.getAmount());
// // 核销券新增参数:组织机构ID
// couponCodeVerificationDto.setChannel_codes(storeService.getOrgIdsArr(orderBean.getCompanyId(), orderBean.getShopId()));
// try {
// //71.券核销
// for (int i = 2; i >= 0; i--) {
// LogUtil.info("核销券码开始==", JSON.toJSONString(couponCodeVerificationDto), null);
// CouponCodeResponseDto couponCodeResponseDto = couponOfflineClient.verification(couponCodeVerificationDto);
// LogUtil.info("核销券码返回==", JSON.toJSONString(couponCodeVerificationDto), null);
// ThirdPartyLog.infoConvertJson(System.currentTimeMillis(), System.currentTimeMillis(), "/api", couponCodeVerificationDto, couponCodeResponseDto);
// if (Objects.equals(couponCodeResponseDto.getStatusCode(), ResponseResult.SUCCESS.getCode())) {
// LogUtil.info("CouponReverseServiceImpl", JSON.toJSONString(couponCodeVerificationDto), JSON.toJSONString(couponCodeResponseDto));
// break;
// }
// if (!Objects.equals(couponCodeResponseDto.getStatusCode(), ResponseResult.SUCCESS.getCode())) {
// emailAlertService.sendEmailAlert("核销券码失败", String.format("request:%s \r\nresponse:%s", JSONObject.toJSONString(couponCodeVerificationDto), JSONObject.toJSONString(couponCodeResponseDto)));
// return ResponseUtil.error(ResponseResult.COUPON_VERIFICATION_FAIL);
// }
// }
//
// } catch (Exception ex) {
// emailAlertService.sendEmailAlert("核销券码异常", String.format("request:%s \r\nexception:%s", JSONObject.toJSONString(couponCodeVerificationDto), Throwables.getStackTraceAsString(ex)));
// ErrorLog.printErrorLog("verification_error", "/api", couponCodeVerificationDto, ex);
// return ResponseUtil.error(ResponseResult.COUPON_VERIFICATION_FAIL);
// }
// }
// }
// return ResponseUtil.success();
// }
/**
* 发送消息
*
* @param orderBean
*/
private void sendMessage(QueryOrdersResponseDto.DataBean.OrderBean orderBean, String trackingNo, CouponCodeVerificationDto req, Object failObject) {
OrderResourcePushLogMsgDto dto = new OrderResourcePushLogMsgDto();
try {
String failureReasons;
if (failObject instanceof String) {
failureReasons = (String) failObject;
} else if (failObject instanceof Throwable) {
failureReasons = ((Throwable) failObject).getMessage();
} else {
failureReasons = JsonUtil.toJSONString(failObject);
}
if (failureReasons.length() > 255) {
failureReasons = failureReasons.substring(0, 255);
}
dto.setTraceId(trackingNo);
dto.setOrderCode(orderBean.getOid());
dto.setPartnerId(orderBean.getCompanyId());
dto.setStoreId(orderBean.getShopId());
dto.setUserId(orderBean.getUserId());
dto.setOptType(OrderResourcePushOptType.COUPON_VERIFICATION.getIndex());
dto.setRequestDate(new Date());
dto.setRequestBody(JsonUtil.toJSONString(req));
dto.setFailureReasons(failureReasons);
Header header = new Header(MQAction.INSERT.getAction(), "verificationCoupon", orderBean.getOid(), ORDER_RESOURCE_PUSH_LOG_ROUTING_KEY);
MQMessage<OrderResourcePushLogMsgDto> message = new MQMessage<>(header, dto);
mqService.convertAndSend(ORDER_RESOURCE_PUSH_LOG_EXCHANGE, ORDER_RESOURCE_PUSH_LOG_ROUTING_KEY, message);
} catch (Exception e) {
LogUtil.error(trackingNo, "sendMessage error!!! routingKey = order-resource-push-log-routing-key", JSONObject.toJSONString(dto), null, e);
}
}
}
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