Commit cc944ee2 by 王世昌

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

# Conflicts:
#	order-application-service/src/main/java/cn/freemud/service/coupon/impl/PlatformCouponRelationServiceImpl.java
parents 61675223 5f07845b
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,40 +13,35 @@ ...@@ -13,40 +13,35 @@
package cn.freemud.service.coupon.impl; package cn.freemud.service.coupon.impl;
import cn.freemud.adapter.CouponAdapter; 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.base.entity.BaseResponse;
import cn.freemud.entities.dto.CouponCodeResponseDto; import cn.freemud.base.util.JsonUtil;
import cn.freemud.entities.dto.CouponCodeVerificationDto; import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.CouponCodeVerificationProductDto; import cn.freemud.enums.*;
import cn.freemud.entities.dto.QueryOrdersResponseDto;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.QueryOrderResponseVo;
import cn.freemud.enums.ActivityChannelEnum;
import cn.freemud.enums.CouponReqType;
import cn.freemud.enums.OrderAccountType;
import cn.freemud.enums.ResponseResult;
import cn.freemud.management.enums.OrderSource; import cn.freemud.management.enums.OrderSource;
import cn.freemud.service.coupon.CouponRelationFactory;
import cn.freemud.service.coupon.CouponRelationService; import cn.freemud.service.coupon.CouponRelationService;
import cn.freemud.service.impl.StoreServiceImpl; import cn.freemud.service.impl.StoreServiceImpl;
import cn.freemud.service.order.OrderRelationService;
import cn.freemud.service.thirdparty.CouponOfflineClient; import cn.freemud.service.thirdparty.CouponOfflineClient;
import cn.freemud.utils.LogUtil; import cn.freemud.utils.LogUtil;
import cn.freemud.utils.PropertyConvertUtil; import cn.freemud.utils.PropertyConvertUtil;
import cn.freemud.utils.ResponseUtil; import cn.freemud.utils.ResponseUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; 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.ErrorLog;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.log.ThirdPartyLog; import com.freemud.application.sdk.api.log.ThirdPartyLog;
import com.freemud.application.sdk.api.service.EmailAlertService; import com.freemud.application.sdk.api.service.EmailAlertService;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrderByIdResponse;
import com.google.common.base.Throwables; import com.google.common.base.Throwables;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -62,6 +57,14 @@ public class PlatformCouponRelationServiceImpl implements CouponRelationService ...@@ -62,6 +57,14 @@ public class PlatformCouponRelationServiceImpl implements CouponRelationService
private EmailAlertService emailAlertService; private EmailAlertService emailAlertService;
@Autowired @Autowired
private StoreServiceImpl storeService; 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";
@Value("${baffleOpen.verification.coupon:false}")
private Boolean baffleOpen=false;
@Override @Override
public BaseResponse verificationCoupon(List<QueryOrdersResponseDto.DataBean.OrderBean.AccountBean> accountList, QueryOrdersResponseDto.DataBean.OrderBean orderBean, CouponReqType couponReqType) { public BaseResponse verificationCoupon(List<QueryOrdersResponseDto.DataBean.OrderBean.AccountBean> accountList, QueryOrdersResponseDto.DataBean.OrderBean orderBean, CouponReqType couponReqType) {
...@@ -91,7 +94,7 @@ public class PlatformCouponRelationServiceImpl implements CouponRelationService ...@@ -91,7 +94,7 @@ public class PlatformCouponRelationServiceImpl implements CouponRelationService
Integer orderType = orderBean.getType(); Integer orderType = orderBean.getType();
//商城单子用NewOrderType //商城单子用NewOrderType
if(Objects.equals(OrderSource.MALL.getSource(),orderBean.getSource())){ if (Objects.equals(OrderSource.MALL.getSource(), orderBean.getSource())) {
orderType = orderBean.getNewOrderType(); orderType = orderBean.getNewOrderType();
} }
ActivityChannelEnum activityChannelEnum = PropertyConvertUtil.orderTypeEnumConvert2ActivityChannel(orderType); ActivityChannelEnum activityChannelEnum = PropertyConvertUtil.orderTypeEnumConvert2ActivityChannel(orderType);
...@@ -102,37 +105,82 @@ public class PlatformCouponRelationServiceImpl implements CouponRelationService ...@@ -102,37 +105,82 @@ public class PlatformCouponRelationServiceImpl implements CouponRelationService
if (OrderAccountType.COUPON.getCode().equals(accountBean.getType()) if (OrderAccountType.COUPON.getCode().equals(accountBean.getType())
|| OrderAccountType.PRODUCT_COUPON.getCode().equals(accountBean.getType()) || OrderAccountType.PRODUCT_COUPON.getCode().equals(accountBean.getType())
|| OrderAccountType.DISCOUNT_COUPON.getCode().equals(accountBean.getType())) { || OrderAccountType.DISCOUNT_COUPON.getCode().equals(accountBean.getType())) {
CouponCodeVerificationDto couponCodeVerificationDto = couponAdapter.convert2CouponCodeVerificationDto(activityChannelEnum, accountBean.getAccountId(), orderBean.getOid(), orderBean.getCompanyId(), orderBean.getShopId(), orderBean.getUserId(), products, accountBean.getPrice().intValue(),couponReqType); CouponCodeVerificationDto couponCodeVerificationDto = couponAdapter.convert2CouponCodeVerificationDto(activityChannelEnum, 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.setOrderTotalAmount(orderBean.getOriginalAmount() == null ? 0L : orderBean.getOriginalAmount().longValue());
couponCodeVerificationDto.setOrderPaymentAmount(orderBean.getAmount()); couponCodeVerificationDto.setOrderPaymentAmount(orderBean.getAmount());
// KA 【ID1032412】【订单聚合层】核销传入优惠金额之传劵优惠只设置券的优惠金额进行上报 // KA 【ID1032412】【订单聚合层】核销传入优惠金额之传劵优惠只设置券的优惠金额进行上报
couponCodeVerificationDto.setOrderDiscountAmount(Math.abs(accountBean.getPrice())); couponCodeVerificationDto.setOrderDiscountAmount(Math.abs(accountBean.getPrice()));
// 核销券新增参数:组织机构ID // 核销券新增参数:组织机构ID
couponCodeVerificationDto.setChannel_ids(storeService.getOrgIdsArr(orderBean.getCompanyId(), orderBean.getShopId())); couponCodeVerificationDto.setChannel_ids(storeService.getOrgIdsArr(orderBean.getCompanyId(), orderBean.getShopId()));
boolean ok = false;
Exception lastException = null;
CouponCodeResponseDto couponCodeResponseDto = null;
try { try {
//71.券核销 //71.券核销
// todo 这循环有啥用-.-
for (int i = 2; i >= 0; i--) { for (int i = 2; i >= 0; i--) {
LogUtil.info("核销券码开始==", JSON.toJSONString(couponCodeVerificationDto), null); LogUtil.info("核销券码开始==", JSON.toJSONString(couponCodeVerificationDto), null);
CouponCodeResponseDto couponCodeResponseDto = couponOfflineClient.verification(couponCodeVerificationDto); couponCodeResponseDto = couponOfflineClient.verification(couponCodeVerificationDto);
LogUtil.info("核销券码返回==", JSON.toJSONString(couponCodeVerificationDto), null); LogUtil.info("核销券码返回==", JSON.toJSONString(couponCodeVerificationDto), null);
ThirdPartyLog.infoConvertJson(System.currentTimeMillis(), System.currentTimeMillis(), "/api", couponCodeVerificationDto, couponCodeResponseDto); ThirdPartyLog.infoConvertJson(System.currentTimeMillis(), System.currentTimeMillis(), "/api", couponCodeVerificationDto, couponCodeResponseDto);
if (Objects.equals(couponCodeResponseDto.getStatusCode(), ResponseResult.SUCCESS.getCode())) { if (Objects.nonNull(couponCodeResponseDto) && Objects.equals(couponCodeResponseDto.getStatusCode(), ResponseResult.SUCCESS.getCode())) {
ok = true;
LogUtil.info("CouponReverseServiceImpl", JSON.toJSONString(couponCodeVerificationDto), JSON.toJSONString(couponCodeResponseDto)); 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);
} }
break;
} }
} catch (Exception ex) { } catch (Exception ex) {
emailAlertService.sendEmailAlert("核销券码异常", String.format("request:%s \r\nexception:%s", JSONObject.toJSONString(couponCodeVerificationDto), Throwables.getStackTraceAsString(ex))); lastException = ex;
ErrorLog.printErrorLog("verification_error", "/api", couponCodeVerificationDto, ex); ErrorLog.printErrorLog("verification_error", "/api", couponCodeVerificationDto, ex);
}
if (!ok || Objects.equals(baffleOpen,true)){
sendMessage(orderBean, LogThreadLocal.getTrackingNo(), couponCodeVerificationDto, Objects.equals(baffleOpen, true) ? "模拟券核销失败" : couponCodeResponseDto);
}
if (!ok){
emailAlertService.sendEmailAlert("核销券码失败", String.format("request:%s \r\nresponse:%s", JSONObject.toJSONString(couponCodeVerificationDto), JSONObject.toJSONString(lastException == null ? couponCodeResponseDto : lastException)));
return ResponseUtil.error(ResponseResult.COUPON_VERIFICATION_FAIL); return ResponseUtil.error(ResponseResult.COUPON_VERIFICATION_FAIL);
} }
} }
} }
return ResponseUtil.success(); return ResponseUtil.success();
} }
/**
* 发送消息
*
* @param orderBean
*/
private void sendMessage(QueryOrdersResponseDto.DataBean.OrderBean orderBean, String trackingNo, Object 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 COUPON_VERIFICATION 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