Commit 9810b8b1 by ping.wu

对接会员优惠券与券码可用优惠券

parent 2b27a2f3
......@@ -98,7 +98,7 @@ public class WebAspect {
throw new CommonServiceException(CommonResponseResult.USER_UNAUTHORIZED);
}
List<String> unauthorizedUrls = Arrays.asList(getNotFilterUrl(CommonRedisKeyConstant.SAAS_NOT_AUTHORIZED_URL, NOT_AUTHORIZED_KEY).split(","));
if (!unauthorizedUrls.contains(requestUrl) && StringUtils.isEmpty(userInfo.getUnionId())) {
if (!unauthorizedUrls.contains(requestUrl) && StringUtils.isEmpty(userInfo.getUnionId()) && !requestUrl.contains("MCoffee")) {
throw new CommonServiceException(CommonResponseResult.USER_UNAUTHORIZED);
}
} else {
......
......@@ -11,6 +11,7 @@ import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.CommonService;
import cn.freemud.service.thirdparty.ActivityClient;
import cn.freemud.utils.LogUtil;
import cn.freemud.utils.PropertyConvertUtil;
import com.freemud.application.sdk.api.log.ErrorLog;
import com.freemud.application.sdk.api.log.LogThreadLocal;
......@@ -42,7 +43,6 @@ import java.util.*;
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Slf4j
@Service
public class CalculationServiceImpl {
......@@ -162,8 +162,6 @@ public class CalculationServiceImpl {
if (StringUtils.isBlank(receiveId)) {
return deliveryAmount;
}
log.info("获取配送配逻辑 tackingNo:{},receiveId:{},partnerId:{},storeId:{}", LogThreadLocal.getTrackingNo(), receiveId, partnerId, storeId);
String trackingNo = LogThreadLocal.getTrackingNo();
QueryReceiveAddressRequest queryReceive = new QueryReceiveAddressRequest(receiveId, partnerId);
......
package cn.freemud.service.impl.mcoffee.calculation;
import cn.freemud.entities.dto.ActivityCalculationDiscountResponseDto;
import cn.freemud.entities.dto.CheckSpqInfoResponseDto;
import cn.freemud.entities.vo.ActivityClassifyCouponBean;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.CouponPromotionVO;
import cn.freemud.entities.vo.ShoppingCartGoodsResponseVo;
import cn.freemud.enums.CouponFlag;
import cn.freemud.service.CouponService;
import cn.freemud.adapter.CouponAdapter;
import cn.freemud.base.util.DateUtil;
import cn.freemud.entities.dto.*;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.*;
import cn.freemud.redis.RedisCache;
import cn.freemud.service.CommonService;
import cn.freemud.service.impl.mcoffee.entity.CouponAvailableReq;
import cn.freemud.service.impl.mcoffee.entity.CouponAvailableResp;
import cn.freemud.service.impl.mcoffee.entity.CouponProductVo;
import cn.freemud.service.thirdparty.CardBinClient;
import cn.freemud.service.thirdparty.CouponClient;
import cn.freemud.service.thirdparty.CustomerExtendClient;
import cn.freemud.utils.BarcodeUtil;
import cn.freemud.utils.LogUtil;
import cn.freemud.utils.RedisUtil;
import com.alibaba.fastjson.JSON;
import com.freemud.card.sdk.vo.coupon.CouponStateVo;
import com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
/**
......@@ -35,13 +44,28 @@ import java.util.stream.Collectors;
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Slf4j
@Service
public class CouponDiscountCalculation {
@Autowired
private CouponService couponService;
private CustomerExtendClient customerExtendClient;
@Autowired
private CommonService commonService;
@Autowired
// private CouponAvailableService couponAvailableService;
private CouponClient mCoffeeCouponClient;
@Autowired
private CouponAdapter couponAdapter;
@Autowired
private RedisCache redisCache;
@Autowired
private CardBinClient cardBinClient;
@Value("${coupon.app.id}")
private String appid;
public void updateShoppingCartGoodsDiscountCoupon(CouponPromotionVO couponPromotionVO, ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult, List<CartGoods> cartGoodsList, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo) {
// 用户选择了查询优惠券信息
......@@ -50,7 +74,7 @@ public class CouponDiscountCalculation {
// 是否存在商品券
boolean hasGoodssCoupon = CollectionUtils.isNotEmpty(tmpCartGoods);
// 构建可用不可用优惠券
ActivityClassifyCouponBean activityClassifyCouponBean = couponService.availableCoupon(cartGoodsList, couponPromotionVO.getPartnerId()
ActivityClassifyCouponBean activityClassifyCouponBean = availableCoupon(cartGoodsList, couponPromotionVO.getPartnerId()
, couponPromotionVO.getUserId(), couponPromotionVO.getStoreId(), couponPromotionVO.getCouponCode(), hasGoodssCoupon, couponPromotionVO.getOrderType());
if (Objects.equals(activityClassifyCouponBean, null)) {
// 构建一个空得订单券信息
......@@ -99,4 +123,338 @@ public class CouponDiscountCalculation {
}
public ActivityClassifyCouponBean availableCoupon(List<CartGoods> cartGoods, String partnerId, String userId
, String storeId, String couponCode, boolean hasGoodsCoupon, Integer orderType) {
GetMemberCouponListRequestDto getMemberCouponListRequestDto = new GetMemberCouponListRequestDto(partnerId, userId);
getMemberCouponListRequestDto.setStatusFlags(Arrays.asList(CouponStatus.STATUS_0.getCode()));
getMemberCouponListRequestDto.setPageNum(1);
getMemberCouponListRequestDto.setPageSize(Integer.MAX_VALUE);
GetMemberCouponListResponseDto.Result result = getMemberCouponList(getMemberCouponListRequestDto);
LogUtil.debug("CouponServiceImpl_getMemberCouponList", JSON.toJSONString(getMemberCouponListRequestDto), JSON.toJSONString(result));
ActivityClassifyCouponBean availableCouponResponseVo = new ActivityClassifyCouponBean();
// 可用优惠券信息
List<ActivityCouponBean> usableCoupons = Lists.newArrayList();
// 不可用优惠券信息
List<ActivityCouponBean> disableCoupons = Lists.newArrayList();
if (result == null || CollectionUtils.isEmpty(result.getMemberCoupons())) {
return returnEmptyAvailableCoupon(availableCouponResponseVo, usableCoupons, disableCoupons);
}
List<GetMemberCouponListResponseDto.Result.MemberCoupon> memberCoupons = result.getMemberCoupons();
// 对象转map
Map<String, GetMemberCouponListResponseDto.Result.MemberCoupon> memberCouponMap = memberCoupons.stream().collect(
Collectors.toMap(GetMemberCouponListResponseDto.Result.MemberCoupon::getCouponCode, a -> a, (k1, k2) -> k1));
List<String> couponCodes = Lists.newArrayList();
memberCoupons.forEach(memberCoupon -> {
// 只筛选小于结束时间得券
if (System.currentTimeMillis() < DateUtil.convert2Date(memberCoupon.getEndTime(), DateUtil.FORMAT_YYYY_MM_DD_HHMMSS).getTime()) {
couponCodes.add(memberCoupon.getCouponCode());
}
});
List<CouponStateVo> couponStateList = buildAvailiableCoupons(cartGoods, partnerId, storeId, couponCodes);
if (CollectionUtils.isNotEmpty(couponStateList)) {
return returnSuccessAvailiableCoupons(couponCode, hasGoodsCoupon, availableCouponResponseVo, usableCoupons, disableCoupons, memberCouponMap, couponStateList);
}
//临时代码
return returnAvailableCoupons(couponCode,availableCouponResponseVo,memberCouponMap,memberCoupons);
// return null;
}
/**
* 获取会员服务的优惠券列表
*
* @param getMemberCouponListRequestDto
* @return
*/
public GetMemberCouponListResponseDto.Result getMemberCouponList(GetMemberCouponListRequestDto getMemberCouponListRequestDto) {
GetMemberCouponListResponseDto getMemberCouponListResponseDto = null;
try {
getMemberCouponListResponseDto = customerExtendClient.getMemberCouponListRequestDto(getMemberCouponListRequestDto);
} catch (Exception ex) {
log.error("会员服务优惠券接口调用失败", ex);
}
if (getMemberCouponListResponseDto != null && Objects.equals(getMemberCouponListResponseDto.getCode(), ResponseResult.SUCCESS.getCode())) {
return getMemberCouponListResponseDto.getData();
}
return null;
}
private List<CouponStateVo> buildAvailiableCoupons(List<CartGoods> cartGoods, String partnerId, String storeId, List<String> couponCodes) {
String appSecret = getAppSecret(partnerId);
// 最大15一提交
int maxNum = 15;
int count = couponCodes.size() / maxNum;
// 计算可用不可用券
CouponAvailableReq couponAvailableReqVo = new CouponAvailableReq();
couponAvailableReqVo.setProviderId(partnerId);
couponAvailableReqVo.setMerchantId(partnerId);
couponAvailableReqVo.setStoreId(storeId);
List<CouponProductVo> productList = Lists.newArrayList();
// 优惠券优先级最高,根据商品原价做计算
// 订单金额
Long totalAmount = createProductRequest(cartGoods, productList);
couponAvailableReqVo.setTotalAmount(Integer.valueOf(totalAmount + ""));
couponAvailableReqVo.setProductList(productList);
couponAvailableReqVo.setChannelCodeList(commonService.getOrgCodes(partnerId, storeId));
// 构建计算SDK
List<CouponStateVo> couponStateList = Lists.newArrayList();
for (int j = 0; j <= count; j++) {
List calCouponCodes = null;
if (j == count) {
calCouponCodes = couponCodes.subList(maxNum * j, couponCodes.size());
} else {
calCouponCodes = couponCodes.subList(maxNum * j, maxNum * j + maxNum);
}
// 书写逻辑
couponAvailableReqVo.setCouponCodes(calCouponCodes);
CouponAvailableResp couponsAvailable = null;
try {
couponsAvailable = mCoffeeCouponClient.getCouponsAvailable(couponAvailableReqVo);
}catch (Exception e){
LogUtil.error("getCouponsAvailable_error",JSON.toJSONString(couponAvailableReqVo),null,e);
// throw new ServiceException(ResponseResult.SYSTEM_BUSINESS_ERROR);
}
LogUtil.info("getCouponsAvailable", JSON.toJSONString(couponAvailableReqVo), JSON.toJSONString(couponsAvailable));
if (couponsAvailable != null && Objects.equals(String.valueOf(couponsAvailable.getResult()), ResponseResult.SUCCESS.getCode())
&& CollectionUtils.isNotEmpty(couponsAvailable.getCouponStateList())) {
couponStateList.addAll(couponsAvailable.getCouponStateList());
}
}
return couponStateList;
}
public String getAppSecret(String partnerId) {
// 获取券服务的密钥
String couponAppSecret = RedisUtil.getCouponAppSecret(partnerId);
String appSecret = redisCache.getValue(couponAppSecret);
if (StringUtils.isBlank(appSecret)) {
GetAppKeyResponseDto getAppKeyResponseDto = cardBinClient.getAppKey(GetAppKeyRequestDto.builder().partnerId(partnerId).appId(appid).build());
if (Objects.equals(String.valueOf(getAppKeyResponseDto.getStatusCode()), ResponseResult.SUCCESS.getCode())
&& getAppKeyResponseDto.getData() != null) {
redisCache.save(couponAppSecret, getAppKeyResponseDto.getData().getAppKey());
appSecret = getAppKeyResponseDto.getData().getAppKey();
}
}
return appSecret;
}
private ActivityClassifyCouponBean returnEmptyAvailableCoupon(ActivityClassifyCouponBean availableCouponResponseVo, List<ActivityCouponBean> usableCoupons, List<ActivityCouponBean> disableCoupons) {
availableCouponResponseVo.setCouponNum(0);
availableCouponResponseVo.setDisableCouponNum(0);
availableCouponResponseVo.setUsableCouponNum(0);
availableCouponResponseVo.setDisableCoupons(disableCoupons);
availableCouponResponseVo.setUsableCoupons(usableCoupons);
return availableCouponResponseVo;
}
private Long createProductRequest(List<CartGoods> cartGoods, List<CouponProductVo> productList) {
Long totalAmount = 0L;
for (CartGoods cartGood : cartGoods) {
// 剔除商品券得商品
if (StringUtils.isEmpty(cartGood.getSkuId()) && StringUtils.isEmpty(cartGood.getSpuId())) {
continue;
}
CouponProductVo product = new CouponProductVo();
product.setKeyProductCode(cartGood.getCustomerCode());
product.setProductId(StringUtils.isEmpty(cartGood.getSkuId()) ? cartGood.getSpuId() : cartGood.getSkuId());
// 普通商品价格
product.setAmount(Integer.valueOf(cartGood.getOriginalPrice() + ""));
// 套餐价格为: 套餐价+可选商品总价格
if (ObjectUtils.equals(GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType(), cartGood.getGoodsType())) {
Long finalPrice = cartGood.getFinalPrice();
if (CollectionUtils.isNotEmpty(cartGood.getProductGroupList())){
finalPrice+=cartGood.getProductGroupList().stream().mapToLong(group->group.getFinalPrice()*group.getQty()).sum();
}
product.setAmount(finalPrice.intValue());
}
// 数量
product.setQuantity(cartGood.getQty());
productList.add(product);
totalAmount = totalAmount +product.getAmount() * cartGood.getQty();
}
return totalAmount;
}
private ActivityClassifyCouponBean returnSuccessAvailiableCoupons(String couponCode, boolean hasGoodsCoupon, ActivityClassifyCouponBean availableCouponResponseVo, List<ActivityCouponBean> usableCoupons, List<ActivityCouponBean> disableCoupons, Map<String, GetMemberCouponListResponseDto.Result.MemberCoupon> memberCouponMap, List<CouponStateVo> couponStateList) {
int disableCouponNum = 0;
int usableCouponNum = 0;
for (CouponStateVo couponStateVo : couponStateList) {
// 过滤0得代金券
if (Objects.equals(couponStateVo.getType(), CouponTypeEnum.TYPE_1.getCode())
&& (couponStateVo.getOriginalPrice() == null
|| couponStateVo.getOriginalPrice() == 0)) {
continue;
}
// 过滤折扣券为0折得
if (Objects.equals(couponStateVo.getType(), CouponTypeEnum.TYPE_3.getCode())
&& (couponStateVo.getDiscount() == null
|| couponStateVo.getDiscount() == 0)) {
continue;
}
ActivityCouponBean activityCouponBean = new ActivityCouponBean();
activityCouponBean.setCouponCode(couponStateVo.getCouponCode());
GetMemberCouponListResponseDto.Result.MemberCoupon memberCoupon = memberCouponMap.get(couponStateVo.getCouponCode());
if (memberCoupon != null) {
activityCouponBean.setCouponName(memberCoupon.getCouponName());
activityCouponBean.setEndTime(memberCoupon.getEndTime());
if (Objects.equals(couponStateVo.getType(), CouponTypeEnum.TYPE_1.getCode())) {
activityCouponBean.setDiscountAmount(couponStateVo.getOriginalPrice() + "");
} else if (Objects.equals(couponStateVo.getType(), CouponTypeEnum.TYPE_3.getCode())) {
// TODO 折扣券 百分值10 乘以10 前端统一除以100作为操作依据
activityCouponBean.setDiscountAmount(couponStateVo.getDiscount() != null ? couponStateVo.getDiscount() * 10 + "" : "0");
}
activityCouponBean.setThresholdDesc("满" + formatAmount((couponStateVo.getMinAmount() == null ? 0 : couponStateVo.getMinAmount()) * 1.00 / 100) + "元可用");
activityCouponBean.setActivityDesc("不与其他活动优惠同时享受。");
activityCouponBean.setUnusedReason(couponStateVo.getMessage());
// 详情
GetMemberCouponListResponseVo.MemberCouponDetail detail = new GetMemberCouponListResponseVo.MemberCouponDetail();
detail.setActivityName(memberCoupon.getCouponName());
String startDate = DateUtil.convert2String(DateUtil.convert2Date(memberCoupon.getStartTime(), DateUtil.FORMAT_yyyyMMdd_date), DateUtil.FORMAT_yyyyMMdd_date).replace("-", ".");
String endDate = DateUtil.convert2String(DateUtil.convert2Date(memberCoupon.getEndTime(), DateUtil.FORMAT_yyyyMMdd_date), DateUtil.FORMAT_yyyyMMdd_date).replace("-", ".");
detail.setEndTime(endDate);
detail.setStartTime(startDate);
String remark = memberCoupon.getActiveDesc();
detail.setRemark(couponAdapter.getDescribeText(remark));
if (Objects.equals(couponStateVo.getType(), CouponTypeEnum.TYPE_1.getCode())) {
detail.setAmountDesc("满" + formatAmount((couponStateVo.getMinAmount() == null ? 0 : couponStateVo.getMinAmount()) * 1.00 / 100) + "元减" + formatAmount((couponStateVo.getOriginalPrice() == null ? 0 : couponStateVo.getOriginalPrice()) * 1.00 / 100) + "元");
} else if (Objects.equals(couponStateVo.getType(), CouponTypeEnum.TYPE_3.getCode())) {
detail.setAmountDesc("满" + formatAmount((couponStateVo.getMinAmount() == null ? 0 : couponStateVo.getMinAmount()) * 1.00 / 100) + "元" + formatAmount((couponStateVo.getDiscount() == null ? 0 : couponStateVo.getDiscount()) * 1.00 / 10) + "折");
}
// 设置条形码
GetCouponBarCodeResponseVo responseVo = this.getCouponBarCode(couponStateVo.getCouponCode());
detail.setCouponBarCode(responseVo.getBase64Image());
activityCouponBean.setDetail(detail);
activityCouponBean.setActivityCode(memberCoupon.getActivityCode());
activityCouponBean.setCouponType(couponStateVo.getType());
activityCouponBean.setDateDescribe(couponAdapter.getDateDescribe(memberCoupon.getStatus(), memberCoupon.getStartTime(), memberCoupon.getEndTime()));
// 券状态 0 可用 1 不可用 2 限制可用
if (Objects.equals(activityCouponBean.getCouponCode(), couponCode)) {
activityCouponBean.setSelected(YesOrNoEnum.YES.getCode());
} else {
activityCouponBean.setSelected(YesOrNoEnum.NO.getCode());
}
if (hasGoodsCoupon) {
disableCoupons.add(activityCouponBean);
disableCouponNum = disableCouponNum + 1;
} else {
if (Objects.equals(couponStateVo.getState(), CouponStateEnum.STATE_1.getCode())) {
disableCoupons.add(activityCouponBean);
disableCouponNum = disableCouponNum + 1;
} else {
usableCoupons.add(activityCouponBean);
usableCouponNum = usableCouponNum + 1;
}
}
}
}
availableCouponResponseVo.setCouponNum(disableCouponNum + usableCouponNum);
availableCouponResponseVo.setDisableCouponNum(disableCouponNum);
availableCouponResponseVo.setUsableCouponNum(usableCouponNum);
availableCouponResponseVo.setDisableCoupons(disableCoupons);
availableCouponResponseVo.setUsableCoupons(usableCoupons);
return availableCouponResponseVo;
}
private ActivityClassifyCouponBean returnAvailableCoupons(String couponCode,ActivityClassifyCouponBean availableCouponResponseVo, Map<String, GetMemberCouponListResponseDto.Result.MemberCoupon> memberCouponMap,
// List<CouponStateVo> couponStateList,
List<GetMemberCouponListResponseDto.Result.MemberCoupon> memberCoupons) {
int disableCouponNum = 0;
int usableCouponNum = 0;
// 可用优惠券信息
List<ActivityCouponBean> usableCoupons = Lists.newArrayList();
for (GetMemberCouponListResponseDto.Result.MemberCoupon couponStateVo : memberCoupons) {
// // 过滤0得代金券
// if (Objects.equals(couponStateVo.getType(), CouponTypeEnum.TYPE_1.getCode())
// && (couponStateVo.getOriginalPrice() == null
// || couponStateVo.getOriginalPrice() == 0)) {
// continue;
// }
//
// // 过滤折扣券为0折得
// if (Objects.equals(couponStateVo.getType(), CouponTypeEnum.TYPE_3.getCode())
// && (couponStateVo.getDiscount() == null
// || couponStateVo.getDiscount() == 0)) {
// continue;
// }
ActivityCouponBean activityCouponBean = new ActivityCouponBean();
activityCouponBean.setCouponCode(couponStateVo.getCouponCode());
GetMemberCouponListResponseDto.Result.MemberCoupon memberCoupon = memberCouponMap.get(couponStateVo.getCouponCode());
if (memberCoupon != null) {
activityCouponBean.setCouponName(memberCoupon.getCouponName());
activityCouponBean.setEndTime(memberCoupon.getEndTime());
if (Objects.equals(couponStateVo.getCouponType(), CouponTypeEnum.TYPE_1.getCode())) {
activityCouponBean.setDiscountAmount(couponStateVo.getOriginalPrice() + "");
}
activityCouponBean.setThresholdDesc("满" + formatAmount((couponStateVo.getMinAmount() == null ? 0 : couponStateVo.getMinAmount()) * 1.00 / 100) + "元可用");
activityCouponBean.setActivityDesc("不与其他活动优惠同时享受。");
activityCouponBean.setUnusedReason(couponStateVo.getRemark());
// 详情
GetMemberCouponListResponseVo.MemberCouponDetail detail = new GetMemberCouponListResponseVo.MemberCouponDetail();
detail.setActivityName(memberCoupon.getCouponName());
String startDate = DateUtil.convert2String(DateUtil.convert2Date(memberCoupon.getStartTime(), DateUtil.FORMAT_yyyyMMdd_date), DateUtil.FORMAT_yyyyMMdd_date).replace("-", ".");
String endDate = DateUtil.convert2String(DateUtil.convert2Date(memberCoupon.getEndTime(), DateUtil.FORMAT_yyyyMMdd_date), DateUtil.FORMAT_yyyyMMdd_date).replace("-", ".");
detail.setEndTime(endDate);
detail.setStartTime(startDate);
String remark = memberCoupon.getActiveDesc();
detail.setRemark(couponAdapter.getDescribeText(remark));
if (Objects.equals(couponStateVo.getCouponType(), CouponTypeEnum.TYPE_1.getCode())) {
detail.setAmountDesc("满" + formatAmount((couponStateVo.getMinAmount() == null ? 0 : couponStateVo.getMinAmount()) * 1.00 / 100) + "元减" + formatAmount((couponStateVo.getOriginalPrice() == null ? 0 : couponStateVo.getOriginalPrice()) * 1.00 / 100) + "元");
}
// 设置条形码
GetCouponBarCodeResponseVo responseVo = this.getCouponBarCode(couponStateVo.getCouponCode());
detail.setCouponBarCode(responseVo.getBase64Image());
activityCouponBean.setDetail(detail);
activityCouponBean.setActivityCode(memberCoupon.getActivityCode());
activityCouponBean.setCouponType(couponStateVo.getCouponType());
activityCouponBean.setDateDescribe(couponAdapter.getDateDescribe(memberCoupon.getStatus(), memberCoupon.getStartTime(), memberCoupon.getEndTime()));
// 券状态 0 可用 1 不可用 2 限制可用
if (Objects.equals(activityCouponBean.getCouponCode(), couponCode)) {
activityCouponBean.setSelected(YesOrNoEnum.YES.getCode());
} else {
activityCouponBean.setSelected(YesOrNoEnum.NO.getCode());
}
usableCoupons.add(activityCouponBean);
usableCouponNum = usableCouponNum + 1;
}
}
availableCouponResponseVo.setCouponNum(disableCouponNum + usableCouponNum);
availableCouponResponseVo.setDisableCouponNum(disableCouponNum);
availableCouponResponseVo.setUsableCouponNum(usableCouponNum);
availableCouponResponseVo.setDisableCoupons(null);
availableCouponResponseVo.setUsableCoupons(usableCoupons);
return availableCouponResponseVo;
}
public GetCouponBarCodeResponseVo getCouponBarCode(String couponCode) {
byte[] bytes = BarcodeUtil.generateBarCode128(couponCode, 6D, null, true, false);
String base64Image = Base64.getEncoder().encodeToString(bytes);
String base64Prefix = "data:image/png;base64,";
GetCouponBarCodeResponseVo getCouponBarCodeResponseVo = new GetCouponBarCodeResponseVo();
getCouponBarCodeResponseVo.setBase64Image(base64Prefix + base64Image);
return getCouponBarCodeResponseVo;
}
private static Object formatAmount(Double amount) {
if (amount % (amount.intValue()) == 0.0) {
return amount.intValue();
} else {
return amount;
}
}
}
package cn.freemud.service.impl.mcoffee.entity;
import lombok.Data;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: CouponAvailableReq
* @Package cn.freemud.service.impl.mcoffee
* @Description:
* @author: ping1.wu
* @date: 2020/8/4 16:10
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class CouponAvailableReq {
//渠道id
private String providerId;
//商户号
private String merchantId;
private String city;
private String storeId;
//组织机构id列表(校验渠道限制)
private List<String> channelIdList;
//组织机构code列表(校验渠道限制)
private List<String> channelCodeList;
//券码列表
private List<String> couponCodes;
private Integer totalAmount;
//核销渠道 枚举: mocoffee_wx : 麦咖啡微信小程序 mocoffee_zfb : 麦咖啡支付宝小程序
private String redeemChannel;
//购物车商品列表
private List<CouponProductVo> productList;
}
package cn.freemud.service.impl.mcoffee.entity;
import com.freemud.card.sdk.vo.coupon.CouponStateVo;
import lombok.Data;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: CouponAvailableResp
* @Package cn.freemud.service.impl.mcoffee
* @Description:
* @author: ping1.wu
* @date: 2020/8/4 16:10
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class CouponAvailableResp {
private Integer result;
private String msg;
private List<CouponStateVo> couponStateList;
}
package cn.freemud.service.impl.mcoffee.entity;
import lombok.Data;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: CouponProductVo
* @Package cn.freemud.service.impl.mcoffee
* @Description:
* @author: ping1.wu
* @date: 2020/8/4 16:14
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class CouponProductVo {
private String keyProductCode;
private String productId;
private Integer amount;
private Integer quantity;
private String categoryCode;
}
......@@ -13,6 +13,8 @@
package cn.freemud.service.thirdparty;
import cn.freemud.entities.dto.*;
import cn.freemud.service.impl.mcoffee.entity.CouponAvailableReq;
import cn.freemud.service.impl.mcoffee.entity.CouponAvailableResp;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
......@@ -53,5 +55,11 @@ public interface CouponClient {
@PostMapping("/coupon/verification/notice")
CouponBaseResponseDto verifyNotice(VerifyNoticeRequestDto verifyNoticeRequestDto);
/**
* 麦咖啡校验券是否可用
*/
@PostMapping("/mccafe/getCouponsAvailable")
CouponAvailableResp getCouponsAvailable(CouponAvailableReq req);
}
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