Commit 8e4cf2bb by 周晓航

Merge branch 'feature-zxh-20211109-替换券码查询接口-1039131' into qa

# Conflicts:
#	order-application-service/src/main/java/cn/freemud/service/impl/SellCouponOrderServiceImpl.java
parents f26f5577 6dbe1827
package cn.freemud.entities.dto.coupon;
import lombok.Data;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/11/9 下午2:45
* @description :
*/
@Data
public class CouponResponseDTO<T> {
private Integer statusCode;
/**
* 返回信息
*/
private String msg;
private T result;
}
package cn.freemud.entities.dto.coupon;
import lombok.Data;
import java.util.Set;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/11/9 下午2:42
* @description :
*/
@Data
public class FastBatchQueryTemplateInfoRequest {
/**
* 商户号
*/
private String partnerId;
/**
* 模板编号列表
*/
private Set<String> templateCode;
private String trackingNo;
}
package cn.freemud.entities.dto.coupon;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/11/9 下午2:43
* @description :
*/
@Data
public class FastTemplateInfoResponseVO {
@ApiModelProperty(value = "模板编号", required = true)
private String templateCode;
@ApiModelProperty(value = "模板名称", required = true)
private String templateName;
@ApiModelProperty(value = "券类型:0 商品券 1 代金券 3 折扣券 4 换购券 5 配送券 6商品兑换券 7买M免N券", required = true)
private Integer type;
@ApiModelProperty("券子类型,目前只对商品券生效,0:白名单商品券,1:黑名单商品券")
private Integer subType;
@ApiModelProperty(value = "固定有效期开始时间,格式YYYY-MM-DD HH:mm:ss", required = true)
private Date effectiveStartTime;
@ApiModelProperty(value = "固定有效结束时间,格式YYYY-MM-DD HH:mm:ss", required = true)
private Date effectiveEndTime;
@ApiModelProperty(value = "领券结束时间,格式YYYY-MM-DD HH:mm:ss", required = true)
private Date receiveEndTime;
@ApiModelProperty(value = "领券开始时间,格式YYYY-MM-DD HH:mm:ss", required = true)
private Date receiveStartTime;
@ApiModelProperty(value = "启用金额,单位:分", required = true)
private Integer minAmount;
@ApiModelProperty(value = "券面值,折扣券时,10代表1折,65代表6.5折。其他券时单位为分,如100=1元", required = true)
private Integer faceValue;
@ApiModelProperty("固定时长有效期类型的券,领取后等待生效天数,0代表立即生效。")
private Integer fromDayEffective;
@ApiModelProperty("固定时长有效期类型的券,生效后几天内有效")
private Integer effectiveDays;
@ApiModelProperty("券图片")
private String logo;
@ApiModelProperty("券扩展类型")
private Integer extentType;
@ApiModelProperty("门店限制类型,当“门店或渠道限制类型”为“门店限制”时生效,当 1:所有门店,2:部分门店,3:发券指定门店")
private Integer storeLimitType;
@ApiModelProperty("门店或渠道限制类型,1:门店限制,2:渠道限制")
private Integer storeChannelLimitType;
@ApiModelProperty("活动状态:0未启用、 1启用、2开始、 3结束、 4暂停、5作废、6禁用")
private Integer status;
}
...@@ -11,6 +11,9 @@ import cn.freemud.constant.RedisKeyConstant; ...@@ -11,6 +11,9 @@ import cn.freemud.constant.RedisKeyConstant;
import cn.freemud.constant.ResponseCodeConstant; import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.Active; import cn.freemud.entities.Active;
import cn.freemud.entities.dto.*; import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.coupon.CouponResponseDTO;
import cn.freemud.entities.dto.coupon.FastBatchQueryTemplateInfoRequest;
import cn.freemud.entities.dto.coupon.FastTemplateInfoResponseVO;
import cn.freemud.entities.dto.order.CreatePrepayRequestDto; import cn.freemud.entities.dto.order.CreatePrepayRequestDto;
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;
...@@ -27,6 +30,7 @@ import cn.freemud.redis.RedisCache; ...@@ -27,6 +30,7 @@ import cn.freemud.redis.RedisCache;
import cn.freemud.service.CouponService; import cn.freemud.service.CouponService;
import cn.freemud.service.OrderFactoryService; import cn.freemud.service.OrderFactoryService;
import cn.freemud.service.business.OrderBusinessService; import cn.freemud.service.business.OrderBusinessService;
import cn.freemud.service.thirdparty.CouponOnlineClient;
import cn.freemud.service.thirdparty.PaymentNewClient; import cn.freemud.service.thirdparty.PaymentNewClient;
import cn.freemud.service.thirdparty.PromotionDiscountClient; import cn.freemud.service.thirdparty.PromotionDiscountClient;
import cn.freemud.service.thirdparty.StoreItemClient; import cn.freemud.service.thirdparty.StoreItemClient;
...@@ -44,6 +48,7 @@ import com.freemud.application.sdk.api.couponcenter.online.domain.AppKeyVO; ...@@ -44,6 +48,7 @@ import com.freemud.application.sdk.api.couponcenter.online.domain.AppKeyVO;
import com.freemud.application.sdk.api.couponcenter.online.request.ActiveBatchQueryRequest; import com.freemud.application.sdk.api.couponcenter.online.request.ActiveBatchQueryRequest;
import com.freemud.application.sdk.api.couponcenter.online.request.PartnerRequest; import com.freemud.application.sdk.api.couponcenter.online.request.PartnerRequest;
import com.freemud.application.sdk.api.couponcenter.online.service.FMActiveSdkService; import com.freemud.application.sdk.api.couponcenter.online.service.FMActiveSdkService;
import com.freemud.application.sdk.api.constant.ResponseResultEnum;
import com.freemud.application.sdk.api.log.LogThreadLocal; 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.ordercenter.entities.v1.OrderBeanV1; import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1;
...@@ -66,7 +71,6 @@ import com.freemud.application.sdk.api.promotioncenter.response.PromotionRespons ...@@ -66,7 +71,6 @@ import com.freemud.application.sdk.api.promotioncenter.response.PromotionRespons
import com.freemud.application.sdk.api.stockapi.request.UpdateStocksRequest; import com.freemud.application.sdk.api.stockapi.request.UpdateStocksRequest;
import com.freemud.application.sdk.api.stockapi.service.StockSdkService; import com.freemud.application.sdk.api.stockapi.service.StockSdkService;
import com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest; import com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest;
import com.freemud.application.sdk.api.storecenter.request.vo.GetOrgTreeListRequest;
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.sdk.api.assortment.order.adapter.OrderSdkAdapter; import com.freemud.sdk.api.assortment.order.adapter.OrderSdkAdapter;
...@@ -116,8 +120,6 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService { ...@@ -116,8 +120,6 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
@Autowired @Autowired
private OrderCenterSdkService orderCenterSdkService; private OrderCenterSdkService orderCenterSdkService;
@Autowired @Autowired
private OrderServiceImpl orderservice;
@Autowired
private StoreCenterService storeCenterService; private StoreCenterService storeCenterService;
@Autowired @Autowired
private OrderAdapter orderAdapter; private OrderAdapter orderAdapter;
...@@ -177,6 +179,8 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService { ...@@ -177,6 +179,8 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
@Autowired @Autowired
private AssortmentOpenPlatformIappWxappStoreManager assortmentOpenPlatformIappWxappStoreManager; private AssortmentOpenPlatformIappWxappStoreManager assortmentOpenPlatformIappWxappStoreManager;
@Autowired
private CouponOnlineClient couponOnlineClient;
/** /**
* 抖音卖券 * 抖音卖券
*/ */
...@@ -544,7 +548,7 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService { ...@@ -544,7 +548,7 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
// return ResponseUtil.error(ResponseResult.COUPON_INVAILD.getCode(),"您需要购买的券包,包含的优惠券券编号"+skuId+"包含的商品已失效,请联系门店尽快处理"); // return ResponseUtil.error(ResponseResult.COUPON_INVAILD.getCode(),"您需要购买的券包,包含的优惠券券编号"+skuId+"包含的商品已失效,请联系门店尽快处理");
// } // }
// } // }
List<String> activityCodes = new ArrayList<>(); Set<String> activityCodes = new HashSet<>();
//效验商品券是否有效 //效验商品券是否有效
List<ProductBindingCouponType> productBindingCoupons = productInfos.getData().getProducts().get(0).getProductBindingCouponTypes(); List<ProductBindingCouponType> productBindingCoupons = productInfos.getData().getProducts().get(0).getProductBindingCouponTypes();
if (CollectionUtils.isEmpty(productBindingCoupons)) { if (CollectionUtils.isEmpty(productBindingCoupons)) {
...@@ -554,25 +558,25 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService { ...@@ -554,25 +558,25 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
activityCodes.add(productBindingCouponType.getActivityCode()); activityCodes.add(productBindingCouponType.getActivityCode());
} }
//批量查询活动详情 //批量查询活动详情
List<ActiveDetailVO> activeDetailVOS = batchQueryActivityInfo(partnerId, activityCodes, trackingNo); List<FastTemplateInfoResponseVO> activeDetailVOS = batchQueryActivityInfo(partnerId, activityCodes, trackingNo);
if (CollectionUtils.isEmpty(activeDetailVOS) || activityCodes.size() != activeDetailVOS.size()) { if (CollectionUtils.isEmpty(activeDetailVOS) || activityCodes.size() != activeDetailVOS.size()) {
return ResponseUtil.error(ResponseResult.STORE_ITEM_CHECK_INVAILD); return ResponseUtil.error(ResponseResult.STORE_ITEM_CHECK_INVAILD);
} }
//优惠券是否失效 //优惠券是否失效
Date now = new Date(); Date now = new Date();
for (ActiveDetailVO activeDetailVO : activeDetailVOS) { for (FastTemplateInfoResponseVO activeDetailVO : activeDetailVOS) {
if (activeDetailVO.getEffectiveEndTime() != null && activeDetailVO.getEffectiveEndTime().before(now)) { if (activeDetailVO.getEffectiveEndTime() != null && activeDetailVO.getEffectiveEndTime().before(now)) {
return ResponseUtil.error(ResponseResult.COUPON_INVAILD.getCode(),"您需要购买的券包,包含的优惠券券编号"+activeDetailVO.getActiveCode()+"已过期,请联系门店尽快处理"); return ResponseUtil.error(ResponseResult.COUPON_INVAILD.getCode(),"您需要购买的券包,包含的优惠券券编号"+activeDetailVO.getTemplateCode()+"已过期,请联系门店尽快处理");
} }
// endDate 领券结束时间 校验 当前时间小鱼endDate // endDate 领券结束时间 校验 当前时间小鱼endDate
if (activeDetailVO.getEndDate() != null && activeDetailVO.getEndDate().before(now)) { if (activeDetailVO.getReceiveStartTime() != null && activeDetailVO.getReceiveStartTime().before(now)) {
return ResponseUtil.error(ResponseResult.COUPON_INVAILD.getCode(),"您需要购买的券包,包含的优惠券券编号"+activeDetailVO.getActiveCode()+"已过期,请联系门店尽快处理"); return ResponseUtil.error(ResponseResult.COUPON_INVAILD.getCode(),"您需要购买的券包,包含的优惠券券编号"+activeDetailVO.getTemplateCode()+"已过期,请联系门店尽快处理");
} }
// state = 1 || 2 可以买 // state = 1 || 2 可以买
if (activeDetailVO.getState() !=null) { if (activeDetailVO.getStatus() !=null) {
Integer state = activeDetailVO.getState(); Integer state = activeDetailVO.getStatus();
if (!Objects.equals(state,1) && !Objects.equals(state,2)) { if (!Objects.equals(state,1) && !Objects.equals(state,2)) {
return ResponseUtil.error(ResponseResult.COUPON_INVAILD.getCode(),"您需要购买的券包,包含的优惠券券编号"+activeDetailVO.getActiveCode()+"已失效,请联系门店尽快处理"); return ResponseUtil.error(ResponseResult.COUPON_INVAILD.getCode(),"您需要购买的券包,包含的优惠券券编号"+activeDetailVO.getTemplateCode()+"已失效,请联系门店尽快处理");
} }
} }
} }
...@@ -680,71 +684,26 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService { ...@@ -680,71 +684,26 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
* @param trackingNo * @param trackingNo
* @return * @return
*/ */
private List<ActiveDetailVO> batchQueryActivityInfo(String partnerId, List<String> activityCodes, String trackingNo) { private List<FastTemplateInfoResponseVO> batchQueryActivityInfo(String partnerId, Set<String> activityCodes, String trackingNo) {
String appKey = getAppKey(partnerId, trackingNo);
if (StringUtils.isEmpty(appKey)) { FastBatchQueryTemplateInfoRequest request = new FastBatchQueryTemplateInfoRequest();
return null; request.setPartnerId(partnerId);
} request.setTemplateCode(activityCodes);
ActiveBatchQueryRequest activeBatchQueryRequest = new ActiveBatchQueryRequest(); request.setTrackingNo(trackingNo);
//去重
List<String> activeCodes = new ArrayList<>(new HashSet(activityCodes)); CouponResponseDTO<List<FastTemplateInfoResponseVO>> responseDTO = couponOnlineClient.fastBatchQueryTemplateInfo(request);
activeBatchQueryRequest.setActiveCode(activeCodes); if (responseDTO == null
activeBatchQueryRequest.setAppSecret(appKey); || !Objects.equals(responseDTO.getStatusCode(),100)
activeBatchQueryRequest.setPartnerId(Integer.parseInt(partnerId)); || CollectionUtils.isEmpty(responseDTO.getResult())) {
FMActiveSdkService fmActiveSdkService = SDKCommonBaseContextWare.getBean(FMActiveSdkService.class);
com.freemud.application.sdk.api.base.BaseResponse<List<ActiveDetailVO>> batchQueryResponse = fmActiveSdkService.batchQueryActivityInfo(activeBatchQueryRequest, trackingNo);
if (batchQueryResponse == null || !SUCCESS.equals(batchQueryResponse.getCode()) || CollectionUtils.isEmpty(batchQueryResponse.getData())) {
return null; return null;
} }
return batchQueryResponse.getData(); List<FastTemplateInfoResponseVO> result = responseDTO.getResult();
return result;
} }
/**
* 查询组织机构
* @param partnerId
* @param storeId
* @return
*/
private List<String> getOrgIds(String partnerId, String storeId) {
GetOrgTreeListRequest request = new GetOrgTreeListRequest();
request.setPartnerId(partnerId);
request.setStoreCode(storeId);
StoreCenterService storeCenterService = SDKCommonBaseContextWare.getBean(StoreCenterService.class);
com.freemud.application.sdk.api.base.BaseResponse<List<String>> orgList = storeCenterService.getOrgList(request, LogThreadLocal.getTrackingNo());
if (orgList != null && SUCCESS.equals(orgList.getCode())) {
return orgList.getData();
}
return Collections.EMPTY_LIST;
}
/**
* 获取商户秘钥
*
* @param partnerId
* @param trackingNo
* @return
*/
private String getAppKey(String partnerId, String trackingNo) {
RedisCache redisCache = SDKCommonBaseContextWare.getBean(RedisCache.class);
String key = "kgd:coupon:appKey:partner:";
String appKey = redisCache.getValue(key + partnerId);
if (StringUtils.isEmpty(appKey)) {
PartnerRequest partnerRequest = new PartnerRequest();
partnerRequest.setPartnerId(Integer.parseInt(partnerId));
partnerRequest.setAppId(appId);
FMActiveSdkService fmActiveSdkService = SDKCommonBaseContextWare.getBean(FMActiveSdkService.class);
com.freemud.application.sdk.api.base.BaseResponse<AppKeyVO> appKeyVOBaseResponse = fmActiveSdkService.getAppKey(partnerRequest, trackingNo);
if (appKeyVOBaseResponse == null || !"100".equals(appKeyVOBaseResponse.getCode())
|| appKeyVOBaseResponse.getData() == null || StringUtils.isEmpty(appKeyVOBaseResponse.getData().getAppKey())) {
return null;
}
appKey = appKeyVOBaseResponse.getData().getAppKey();
redisCache.save(key + partnerId, appKey);
}
return appKey;
}
/** /**
* 转换对象,从购买优惠券业务提出重写 * 转换对象,从购买优惠券业务提出重写
...@@ -760,7 +719,7 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService { ...@@ -760,7 +719,7 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
* @return * @return
*/ */
private CreateOrderRequest convent2NEWCreateOrderRequest(AssortmentCustomerInfoVo userLoginInfoDto, private CreateOrderRequest convent2NEWCreateOrderRequest(AssortmentCustomerInfoVo userLoginInfoDto,
ProductInfosDto.DataBean dataBean,List<ActiveDetailVO> activeDetailVOS, ProductInfosDto.DataBean dataBean,List<FastTemplateInfoResponseVO> activeDetailVOS,
StoreResponse.BizVO storeInfo, StoreResponse.BizVO storeInfo,
String shopId, String shopId,
String cardCode, String cardCode,
...@@ -834,12 +793,12 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService { ...@@ -834,12 +793,12 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
OrderProductAddInfoDto orderProductAddInfoDto = new OrderProductAddInfoDto(); OrderProductAddInfoDto orderProductAddInfoDto = new OrderProductAddInfoDto();
List<ProductBindingCouponType> productBindingCoupons = new ArrayList<>(); List<ProductBindingCouponType> productBindingCoupons = new ArrayList<>();
for (ProductBindingCouponType productBindingCouponType : productBean.getProductBindingCouponTypes()){ for (ProductBindingCouponType productBindingCouponType : productBean.getProductBindingCouponTypes()){
for (ActiveDetailVO activeDetailVO : activeDetailVOS){ for (FastTemplateInfoResponseVO activeDetailVO : activeDetailVOS){
if(productBindingCouponType.getActivityCode().equals(activeDetailVO.getActiveCode())){ if(productBindingCouponType.getActivityCode().equals(activeDetailVO.getTemplateCode())){
ProductBindingCouponType productBindingCouponType2 = new ProductBindingCouponType(); ProductBindingCouponType productBindingCouponType2 = new ProductBindingCouponType();
productBindingCouponType2.setActivityCode(productBindingCouponType.getActivityCode()); productBindingCouponType2.setActivityCode(productBindingCouponType.getActivityCode());
productBindingCouponType2.setNum(productBindingCouponType.getNum()); productBindingCouponType2.setNum(productBindingCouponType.getNum());
productBindingCouponType2.setActivityName(activeDetailVO.getActiveName()); productBindingCouponType2.setActivityName(activeDetailVO.getTemplateName());
//新增是否分账,核销次数和券单价 //新增是否分账,核销次数和券单价
productBindingCouponType2.setIsSplitAccount(productBindingCouponType.getIsSplitAccount()); productBindingCouponType2.setIsSplitAccount(productBindingCouponType.getIsSplitAccount());
//分账的券包对应所有券都是一致,要么分账,要么不分账,循环赋值都是相同的 //分账的券包对应所有券都是一致,要么分账,要么不分账,循环赋值都是相同的
......
...@@ -2,11 +2,11 @@ package cn.freemud.service.thirdparty; ...@@ -2,11 +2,11 @@ package cn.freemud.service.thirdparty;
//import cn.freemud.constant.IgnoreFeignLogAnnotation; //import cn.freemud.constant.IgnoreFeignLogAnnotation;
import cn.freemud.annotations.LogIgnoreFeign; import cn.freemud.annotations.LogIgnoreFeign;
import cn.freemud.constant.ResponseCodeKeyConstant; import cn.freemud.constant.ResponseCodeKeyConstant;
import cn.freemud.entities.dto.GetCouponDetailResponseDto; import cn.freemud.entities.dto.GetCouponDetailResponseDto;
import cn.freemud.entities.dto.coupon.InvalidCouponsRequestDto; import cn.freemud.entities.dto.coupon.*;
import cn.freemud.entities.dto.coupon.InvalidCouponsResponseDto;
import cn.freemud.interceptor.FormSupportConfig; import cn.freemud.interceptor.FormSupportConfig;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
...@@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.PostMapping; ...@@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
import java.util.Map; import java.util.Map;
//@IgnoreFeignLogAnnotation //@IgnoreFeignLogAnnotation
...@@ -38,4 +39,15 @@ public interface CouponOnlineClient { ...@@ -38,4 +39,15 @@ public interface CouponOnlineClient {
@LogIgnoreFeign(logMessage="invalidCoupons",messageFieldName= ResponseCodeKeyConstant.MSG,statusCodeFieldName=ResponseCodeKeyConstant.STATUS_CODE) @LogIgnoreFeign(logMessage="invalidCoupons",messageFieldName= ResponseCodeKeyConstant.MSG,statusCodeFieldName=ResponseCodeKeyConstant.STATUS_CODE)
@PostMapping(value = "/coupon/state/invalid/coupons") @PostMapping(value = "/coupon/state/invalid/coupons")
InvalidCouponsResponseDto invalidCoupons(@RequestBody InvalidCouponsRequestDto invalidCouponsRequestDto); InvalidCouponsResponseDto invalidCoupons(@RequestBody InvalidCouponsRequestDto invalidCouponsRequestDto);
/**
* 新版 根据券模板查询 券基础信息数据
* @param request
* @return
*/
@LogIgnoreFeign(logMessage="fastBatchQueryTemplateInfo",messageFieldName= ResponseCodeKeyConstant.MSG,
statusCodeFieldName=ResponseCodeKeyConstant.STATUS_CODE)
@PostMapping(value = "/fastBatchQueryTemplateInfo")
CouponResponseDTO<List<FastTemplateInfoResponseVO>> fastBatchQueryTemplateInfo(@RequestBody FastBatchQueryTemplateInfoRequest request);
} }
package cn.freemud.entities.dto.coupon;
import lombok.Data;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/11/9 下午2:45
* @description :
*/
@Data
public class CouponResponseDTO<T> {
private Integer statusCode;
/**
* 返回信息
*/
private String msg;
private T result;
}
package cn.freemud.entities.dto.coupon;
import lombok.Data;
import java.util.Set;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/11/9 下午2:42
* @description :
*/
@Data
public class FastBatchQueryTemplateInfoRequest {
/**
* 商户号
*/
private String partnerId;
/**
* 模板编号列表
*/
private Set<String> templateCode;
private String trackingNo;
}
package cn.freemud.entities.dto.coupon;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/11/9 下午2:43
* @description :
*/
@Data
public class FastTemplateInfoResponseVO {
@ApiModelProperty(value = "模板编号", required = true)
private String templateCode;
@ApiModelProperty(value = "模板名称", required = true)
private String templateName;
@ApiModelProperty(value = "券类型:0 商品券 1 代金券 3 折扣券 4 换购券 5 配送券 6商品兑换券 7买M免N券", required = true)
private Integer type;
@ApiModelProperty("券子类型,目前只对商品券生效,0:白名单商品券,1:黑名单商品券")
private Integer subType;
@ApiModelProperty(value = "固定有效期开始时间,格式YYYY-MM-DD HH:mm:ss", required = true)
private Date effectiveStartTime;
@ApiModelProperty(value = "固定有效结束时间,格式YYYY-MM-DD HH:mm:ss", required = true)
private Date effectiveEndTime;
@ApiModelProperty(value = "领券结束时间,格式YYYY-MM-DD HH:mm:ss", required = true)
private Date receiveEndTime;
@ApiModelProperty(value = "领券开始时间,格式YYYY-MM-DD HH:mm:ss", required = true)
private Date receiveStartTime;
@ApiModelProperty(value = "启用金额,单位:分", required = true)
private Integer minAmount;
@ApiModelProperty(value = "券面值,折扣券时,10代表1折,65代表6.5折。其他券时单位为分,如100=1元", required = true)
private Integer faceValue;
@ApiModelProperty("固定时长有效期类型的券,领取后等待生效天数,0代表立即生效。")
private Integer fromDayEffective;
@ApiModelProperty("固定时长有效期类型的券,生效后几天内有效")
private Integer effectiveDays;
@ApiModelProperty("券图片")
private String logo;
@ApiModelProperty("券扩展类型")
private Integer extentType;
@ApiModelProperty("门店限制类型,当“门店或渠道限制类型”为“门店限制”时生效,当 1:所有门店,2:部分门店,3:发券指定门店")
private Integer storeLimitType;
@ApiModelProperty("门店或渠道限制类型,1:门店限制,2:渠道限制")
private Integer storeChannelLimitType;
@ApiModelProperty("活动状态:0未启用、 1启用、2开始、 3结束、 4暂停、5作废、6禁用")
private Integer status;
}
package cn.freemud.handle; package cn.freemud.handle;
import cn.freemud.entities.dto.BindingCouponTypeDto; import cn.freemud.entities.dto.BindingCouponTypeDto;
import cn.freemud.entities.dto.coupon.CouponResponseDTO;
import cn.freemud.entities.dto.coupon.FastBatchQueryTemplateInfoRequest;
import cn.freemud.entities.dto.coupon.FastTemplateInfoResponseVO;
import cn.freemud.entities.vo.CouponMsg; import cn.freemud.entities.vo.CouponMsg;
import cn.freemud.enums.ResponseResult; import cn.freemud.service.thirdparty.CouponOnlineClient;
import cn.freemud.redis.RedisCache;
import com.alibaba.fastjson.JSON;
import com.freemud.application.sdk.api.base.BaseResponse;
import com.freemud.application.sdk.api.base.SDKCommonBaseContextWare;
import com.freemud.application.sdk.api.couponcenter.online.domain.ActiveDetailVO;
import com.freemud.application.sdk.api.couponcenter.online.domain.AppKeyVO;
import com.freemud.application.sdk.api.couponcenter.online.request.ActiveBatchQueryRequest;
import com.freemud.application.sdk.api.couponcenter.online.request.PartnerRequest;
import com.freemud.application.sdk.api.couponcenter.online.service.FMActiveSdkService;
import com.freemud.application.sdk.api.log.LogThreadLocal; import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.sdk.api.assortment.shoppingcart.util.ShoppingSdkLogUtil;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.ArrayList; import java.util.*;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -34,8 +23,8 @@ import java.util.stream.Collectors; ...@@ -34,8 +23,8 @@ import java.util.stream.Collectors;
@Component @Component
public class GetActivityMsgHandle { public class GetActivityMsgHandle {
@Value("${coupon.app.id}") @Autowired
private String appId; private CouponOnlineClient couponOnlineClient;
/** /**
* fisherman 获取 虚拟商品 券数据 * fisherman 获取 虚拟商品 券数据
...@@ -48,19 +37,19 @@ public class GetActivityMsgHandle { ...@@ -48,19 +37,19 @@ public class GetActivityMsgHandle {
List<CouponMsg> retList = new ArrayList<>(); List<CouponMsg> retList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(productBindingCoupons)) { if (CollectionUtils.isNotEmpty(productBindingCoupons)) {
// 处理 券数据 这里链路有问题 效率有点低, 后续需要优化 // 处理 券数据 这里链路有问题 效率有点低, 后续需要优化
List<String> activityCodes = productBindingCoupons.stream() Set<String> activityCodes = productBindingCoupons.stream()
.map(BindingCouponTypeDto::getActivityCode) .map(BindingCouponTypeDto::getActivityCode)
.collect(Collectors.toList()); .collect(Collectors.toSet());
List<ActiveDetailVO> activeDetailVOS = this.batchQueryActivityInfo(activityCodes, partnerId); List<FastTemplateInfoResponseVO> activeDetailVOS = this.batchQueryActivityInfo(activityCodes, partnerId);
if (CollectionUtils.isNotEmpty(activeDetailVOS)) { if (CollectionUtils.isNotEmpty(activeDetailVOS)) {
// 设置 券名称 数量 // 设置 券名称 数量
Map<String, ActiveDetailVO> collect = activeDetailVOS.stream().collect(Collectors.toMap(ActiveDetailVO::getActiveCode, a -> a, (k1, k2) -> k1)); Map<String, FastTemplateInfoResponseVO> collect = activeDetailVOS.stream().collect(Collectors.toMap(FastTemplateInfoResponseVO::getTemplateCode, a -> a, (k1, k2) -> k1));
productBindingCoupons.forEach(coupon -> { productBindingCoupons.forEach(coupon -> {
CouponMsg msg = new CouponMsg(); CouponMsg msg = new CouponMsg();
ActiveDetailVO activeDetailVO = collect.get(coupon.getActivityCode()); FastTemplateInfoResponseVO activeDetailVO = collect.get(coupon.getActivityCode());
msg.setActivityCode(coupon.getActivityCode()); msg.setActivityCode(coupon.getActivityCode());
msg.setNum(coupon.getNum()); msg.setNum(coupon.getNum());
msg.setActivityName(activeDetailVO.getActiveName()); msg.setActivityName(activeDetailVO.getTemplateName());
retList.add(msg); retList.add(msg);
}); });
} }
...@@ -68,45 +57,22 @@ public class GetActivityMsgHandle { ...@@ -68,45 +57,22 @@ public class GetActivityMsgHandle {
return retList; return retList;
} }
private List<ActiveDetailVO> batchQueryActivityInfo(List<String> activityCodes, String partnerId) { private List<FastTemplateInfoResponseVO> batchQueryActivityInfo(Set<String> activityCodes, String partnerId) {
String trackingNo = LogThreadLocal.getTrackingNo(); String trackingNo = LogThreadLocal.getTrackingNo();
String appKey = this.getAppKey(partnerId, trackingNo); FastBatchQueryTemplateInfoRequest request = new FastBatchQueryTemplateInfoRequest();
if (StringUtils.isEmpty(appKey)) { request.setPartnerId(partnerId);
return null; request.setTemplateCode(activityCodes);
} request.setTrackingNo(trackingNo);
ActiveBatchQueryRequest activeBatchQueryRequest = new ActiveBatchQueryRequest();
//去重 CouponResponseDTO<List<FastTemplateInfoResponseVO>> responseDTO = couponOnlineClient.fastBatchQueryTemplateInfo(request);
List<String> activeCodes = new ArrayList<>(new HashSet(activityCodes)); if (responseDTO == null
activeBatchQueryRequest.setActiveCode(activeCodes); || !Objects.equals(responseDTO.getStatusCode(),100)
activeBatchQueryRequest.setAppSecret(appKey); || CollectionUtils.isEmpty(responseDTO.getResult())) {
activeBatchQueryRequest.setPartnerId(Integer.parseInt(partnerId));
FMActiveSdkService fmActiveSdkService = SDKCommonBaseContextWare.getBean(FMActiveSdkService.class);
BaseResponse<List<ActiveDetailVO>> batchQueryResponse = fmActiveSdkService.batchQueryActivityInfo(activeBatchQueryRequest, trackingNo);
if (batchQueryResponse == null
|| !ResponseResult.SUCCESS.getCode().equals(batchQueryResponse.getCode())
|| CollectionUtils.isEmpty(batchQueryResponse.getData())) {
return null; return null;
} }
return batchQueryResponse.getData();
}
private String getAppKey(String partnerId, String trackingNo) { List<FastTemplateInfoResponseVO> result = responseDTO.getResult();
RedisCache redisCache = SDKCommonBaseContextWare.getBean(RedisCache.class); return result;
String key = "kgd:coupon:appKey:partner:";
String appKey = redisCache.getValue(key + partnerId);
if (StringUtils.isEmpty(appKey)) {
PartnerRequest partnerRequest = new PartnerRequest();
partnerRequest.setPartnerId(Integer.parseInt(partnerId));
partnerRequest.setAppId(appId);
FMActiveSdkService fmActiveSdkService = SDKCommonBaseContextWare.getBean(FMActiveSdkService.class);
com.freemud.application.sdk.api.base.BaseResponse<AppKeyVO> appKeyVOBaseResponse = fmActiveSdkService.getAppKey(partnerRequest, trackingNo);
if (appKeyVOBaseResponse == null || !"100".equals(appKeyVOBaseResponse.getCode())
|| appKeyVOBaseResponse.getData() == null || StringUtils.isEmpty(appKeyVOBaseResponse.getData().getAppKey())) {
return null;
}
appKey = appKeyVOBaseResponse.getData().getAppKey();
redisCache.save(key + partnerId, appKey);
}
return appKey;
} }
} }
...@@ -5,12 +5,17 @@ import cn.freemud.annotations.IgnoreFeignLogAnnotation; ...@@ -5,12 +5,17 @@ import cn.freemud.annotations.IgnoreFeignLogAnnotation;
import cn.freemud.constant.ResponseCodeConstant; import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.constant.ResponseCodeKeyConstant; import cn.freemud.constant.ResponseCodeKeyConstant;
import cn.freemud.entities.dto.GetCouponDetailResponseDto; import cn.freemud.entities.dto.GetCouponDetailResponseDto;
import cn.freemud.entities.dto.coupon.CouponResponseDTO;
import cn.freemud.entities.dto.coupon.FastBatchQueryTemplateInfoRequest;
import cn.freemud.entities.dto.coupon.FastTemplateInfoResponseVO;
import cn.freemud.interceptor.FormSupportConfig; import cn.freemud.interceptor.FormSupportConfig;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
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.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
import java.util.Map; import java.util.Map;
@FeignClient(name = "OPEN-STORE-ONLINE-COUPON-SERVICE", url = "${saas.coupononlineclient.feign.url}", configuration = FormSupportConfig.class) @FeignClient(name = "OPEN-STORE-ONLINE-COUPON-SERVICE", url = "${saas.coupononlineclient.feign.url}", configuration = FormSupportConfig.class)
...@@ -24,4 +29,14 @@ public interface CouponOnlineClient { ...@@ -24,4 +29,14 @@ public interface CouponOnlineClient {
) )
GetCouponDetailResponseDto getCouponDetails(@RequestParam Map<String, ?> map); GetCouponDetailResponseDto getCouponDetails(@RequestParam Map<String, ?> map);
/**
* 新版 根据券模板查询 券基础信息数据
* @param request
* @return
*/
@IgnoreFeignLogAnnotation(logMessage="fastBatchQueryTemplateInfo",messageFieldName= ResponseCodeKeyConstant.MSG,
statusCodeFieldName=ResponseCodeKeyConstant.STATUS_CODE)
@PostMapping(value = "/fastBatchQueryTemplateInfo")
CouponResponseDTO<List<FastTemplateInfoResponseVO>> fastBatchQueryTemplateInfo(@RequestBody FastBatchQueryTemplateInfoRequest request);
} }
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