Commit fcce0295 by 徐康

下单和发券

parent cc92303f
......@@ -106,6 +106,14 @@ public class OrderProductAddInfoDto extends BaseConfig {
* 虚拟商品种子券号
*/
private String cardCode;
/**
* 是否是月享卡商品
*/
private Integer isMonthCard = 0;
/**
* 是否是买3赠1券商品
*/
private Integer isB3S1Coupon = 0;
/**
* 是否赠品
......
......@@ -784,8 +784,13 @@ public class CreateOrderAdapter {
});
createOrderProductDemoDto.setComboProduct(comboProducts);
} else if (ProductTypeEnum.VIRTUAL_PRODUCT.getCode().equals(cartGoodsDetailDto.getProductType())) {
if(cartGoodsDetailDto.getIsMonthCard() == 1) {
createOrderProductDemoDto.setCardId(cartGoodsDetailDto.getMonthCardInfo().getCardNo());
createOrderProductDemoDto.setCardCode(cartGoodsDetailDto.getMonthCardInfo().getCardCode());
} else if(cartGoodsDetailDto.getIsB3S1Coupon() == 1) {
createOrderProductDemoDto.setCardId(cartGoodsDetailDto.getB3S1CouponGoodsInfo().getCardNo());
createOrderProductDemoDto.setCardCode(cartGoodsDetailDto.getB3S1CouponGoodsInfo().getCardCode());
}
}
}
if (CollectionUtils.isNotEmpty(cartGoodsDetailDto.getMaterialList())) {
......
......@@ -2391,6 +2391,9 @@ public class OrderAdapter {
if (OrderAccountType.BUY_DISCOUNT.getCode().equals(productDiscount.getDiscountType())) {
fullReduction = productDiscount.getDiscountAmount();
}
if (OldOrderAccountType.B3S1_COUPON.getCode().equals(productDiscount.getDiscountType())) {
productVo.setIsB3S1CouponGoods(1);
}
}
}
//优惠券满减总优惠
......@@ -2650,8 +2653,13 @@ public class OrderAdapter {
});
createOrderProductDemoDto.setComboProduct(comboProducts);
} else if(ProductTypeEnum.VIRTUAL_PRODUCT.getCode().equals(cartGoodsDetailDto.getProductType())) {
if(cartGoodsDetailDto.getIsMonthCard() == 1) {
createOrderProductDemoDto.setCardId(cartGoodsDetailDto.getMonthCardInfo().getCardNo());
createOrderProductDemoDto.setCardCode(cartGoodsDetailDto.getMonthCardInfo().getCardCode());
} else if(cartGoodsDetailDto.getIsB3S1Coupon() == 1) {
createOrderProductDemoDto.setCardId(cartGoodsDetailDto.getB3S1CouponGoodsInfo().getCardNo());
createOrderProductDemoDto.setCardCode(cartGoodsDetailDto.getB3S1CouponGoodsInfo().getCardCode());
}
}
}
if(CollectionUtils.isNotEmpty(cartGoodsDetailDto.getMaterialList())) {
......
......@@ -5,11 +5,13 @@ import cn.freemud.entities.vo.SubtractStockVO;
import com.alibaba.fastjson.JSON;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
......@@ -264,12 +266,28 @@ public class ShoppingCartGoodsDto {
* 购物车行id
*/
private String cartGoodsUid;
/**
* 是否是月享卡商品
*/
private int isMonthCard = 0;
/**
* 月享卡加购信息
*/
private MonthCardVo monthCardInfo;
/**
* 是否是买3赠1券商品
*/
private int isB3S1Coupon = 0;
/**
* 是否使用了买3赠1券
*/
private int isB3S1CouponGoods = 0;
/**
* 买3赠1券信息
*/
private B3S1CouponGoodsInfoVo b3S1CouponGoodsInfo;
/**
* 是否赠品
*/
private Boolean isSendGoods;
......@@ -385,4 +403,25 @@ public class ShoppingCartGoodsDto {
private String discountDesc;
}
@Data
@NoArgsConstructor
public static class B3S1CouponGoodsInfoVo {
/**
* 卡号
*/
private String cardNo;
/**
* 券号
*/
private String cardCode;
/**
* 券号
*/
private Set<String> cardCodeSet;
private Integer useTimes;
private int isUseB3S1Coupon = 1;
}
}
......@@ -186,6 +186,10 @@ public class ProductVo {
* 优惠券名称
*/
private String couponName;
/**
* 是否使用了买3赠1券
*/
private int isB3S1CouponGoods = 0;
/**
* 1.5.5版本添加
......
......@@ -559,13 +559,17 @@ public class CheckMCCafeOrder {
List<String> seedCardList = new ArrayList<>();
shoppingCartGoodsDto.getProducts().stream().filter(o -> ProductTypeEnum.getVirtualProductType().contains(o.getProductType()))
.forEach(o -> {
if(o.getMonthCardInfo() == null) {
if(o.getIsMonthCard() == 0 && o.getMonthCardInfo() == null) {
ShoppingCartGoodsDto.MonthCardVo monthCardVo = new ShoppingCartGoodsDto.MonthCardVo();
monthCardVo.setCardCode(withOrderBuyCouponCode);
monthCardVo.setCardNo(withOrderBuyCardId);
o.setMonthCardInfo(monthCardVo);
}
if(o.getIsMonthCard() == 1) {
seedCardList.add(o.getMonthCardInfo().getCardCode());
} else if(o.getIsB3S1Coupon() == 1) {
seedCardList.add(o.getB3S1CouponGoodsInfo().getCardCode());
}
});
seedCardList.add(withOrderBuyCouponCode);
if(CollectionUtils.isNotEmpty(shoppingCartGoodsDto.getActivityDiscountsDtos())) {
......
......@@ -131,6 +131,7 @@ import java.util.function.Function;
import java.util.stream.Collectors;
@Service
@Slf4j
public class MCCafeOrderServiceImpl implements MCCafeOrderService {
private final Integer RESPONSE_SUCCESS_CODE = 100;
......@@ -905,7 +906,7 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
// }
//麦咖啡随单购咖啡月卡
if(withOrderBuyCoupon2(orderBean, orderExtInfoDto.getThirdPartyMemberId())) {
if(withOrderBuyCoupon3(orderBean, orderExtInfoDto.getThirdPartyMemberId())) {
orderBean = getOrderBean(confirmOrderDto);
}
......@@ -1597,40 +1598,10 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
}
/**
* 开通会员卡
*
* @param partnerId 商户号
* @param ruleId 会员规则ID
* @param oid 订单号
* @param userId 用户ID
*/
private void activateMemberCard(String partnerId, String ruleId, String oid, String userId) {
PurchasePaidRequestDto purchasePaidRequestDto = new PurchasePaidRequestDto();
purchasePaidRequestDto.setPartnerId(partnerId);
purchasePaidRequestDto.setOperatorType(0);
purchasePaidRequestDto.setRuleId(ruleId);
purchasePaidRequestDto.setOrderId(oid);
purchasePaidRequestDto.setMemberId(userId);
// 尝试三次开通会员卡,中途成功则跳出
int count = 3;
for (int i = 1; i <= count; i++) {
BaseResponse baseResponse = customerApplicationClient.purchasePaid(purchasePaidRequestDto);
// 不以响应码为判断是否开通会员卡成功的标准
if (baseResponse != null && "SUCCESS".equals(baseResponse.getResult())) {
break;
}
// 尝试开通会员卡失败三次
if (i >= count) {
LogUtil.error("尝试开通会员卡失败" + count + "次", JSON.toJSONString(purchasePaidRequestDto), JSON.toJSONString(baseResponse));
}
}
}
/**
* 随单购月卡调会员发券与更新订单使用的优惠券与买的优惠券
* 月享卡2.0发券
* @param orderBean
*/
public boolean withOrderBuyCoupon(QueryOrdersResponseDto.DataBean.OrderBean orderBean, String thirdPartyMemberId){
public boolean withOrderBuyCoupon2(QueryOrdersResponseDto.DataBean.OrderBean orderBean, String thirdPartyMemberId){
LogUtil.info("发券入参:", thirdPartyMemberId, JSON.toJSONString(orderBean));
try{
List<String> cardIds = new ArrayList<>();
......@@ -1685,7 +1656,7 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
Map<String, Integer> cardStatusMap = mcdNetBatchQueryResponse.getCouponlist().stream()
.collect(Collectors.toMap(McdNetBatchQueryResponse.Coupon::getCode, McdNetBatchQueryResponse.Coupon::getStatusCode, (k1, k2) -> k1));
Map<String, List<SendCouponForqujiaDtoResponseDto.Card>> cardMap = new HashMap<>();
Map<String, String> cardMap = new HashMap<>();
UpdateCouponCodeReq req = new UpdateCouponCodeReq();
req.setOrderCode(orderBean.getOid());
......@@ -1705,11 +1676,16 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
cardFor:
for(int i=0;i<cardList.size();i++) {
if(cardList.get(i).getCard_id().equals(extInfo.getCardId())) {
cardCodeStr += cardList.get(i).getCard_code()+"/";
if(CollectionUtils.isEmpty(cardMap.get(extInfo.getCardCode()))) {
cardMap.put(extInfo.getCardCode(), new ArrayList<>(Arrays.asList(cardList.get(i))));
} else {
cardMap.get(extInfo.getCardCode()).add(cardList.get(i));
String couponCode = cardList.get(i).getCard_code();
cardCodeStr += couponCode+"/";
if(ResponseCodeConstant.RESPONSE_SUCCESS.equals(cardStatusMap.get(couponCode))) {
if(cardMap.get(extInfo.getCardCode()) == null) {
UpdateCouponCodeReq.CouponUpdateInfo couponUpdateInfo = new UpdateCouponCodeReq.CouponUpdateInfo();
couponUpdateInfo.setOldCouponCode(extInfo.getCardCode());
couponUpdateInfo.setCouponCode(couponCode);
req.getCouponUpdateInfoList().add(couponUpdateInfo);
cardMap.put(extInfo.getCardCode(), couponCode);
}
}
cardList.remove(i);
break cardFor;
......@@ -1721,39 +1697,9 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
}
}
for(QueryOrdersResponseDto.DataBean.OrderBean.ProductBean productBean : orderBean.getProductList()) {
if(!ProductTypeEnum.getVirtualProductType().contains(productBean.getProductType()) && CollectionUtils.isNotEmpty(productBean.getDiscountList())) {
for (QueryOrdersResponseDto.DataBean.OrderBean.ProductBean.ProductDiscount discount : productBean.getDiscountList()) {
if(null != discount.getDiscountType() && OldOrderAccountType.SEED_PRODUCT_COUPON.getCode().equals(discount.getDiscountType())
&& defaultCardCodes.contains(discount.getDiscountId())) {
UpdateCouponCodeReq.CouponUpdateInfo couponUpdateInfo = new UpdateCouponCodeReq.CouponUpdateInfo();
couponUpdateInfo.setProductSeq(productBean.getSequence());
couponUpdateInfo.setOldCouponCode(discount.getDiscountId());
List<SendCouponForqujiaDtoResponseDto.Card> list = new ArrayList<>(cardMap.get(discount.getDiscountId()));
if(CollectionUtils.isEmpty(list)) {
continue;
}
cardFor:
for(int i=0;i<list.size();i++) {
if(ResponseCodeConstant.RESPONSE_SUCCESS.equals(cardStatusMap.get(list.get(i).getCard_code()))) {
couponUpdateInfo.setCouponCode(list.get(i).getCard_code());
list.remove(i);
cardMap.put(discount.getDiscountId(), list);
break cardFor;
}
}
if(StringUtils.isBlank(couponUpdateInfo.getCouponCode())) {
continue;
}
req.getCouponUpdateInfoList().add(couponUpdateInfo);
}
}
}
}
LogUtil.info("生成参数完成:", req, null);
orderSdkService.updateCostCouponCode(req, LogTreadLocal.getTrackingNo());
orderSdkService.updateCostCouponCodeNew(req, LogTreadLocal.getTrackingNo());
return true;
} catch (Exception e){
......@@ -1766,23 +1712,26 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
* 月享卡2.0发券
* @param orderBean
*/
public boolean withOrderBuyCoupon2(QueryOrdersResponseDto.DataBean.OrderBean orderBean, String thirdPartyMemberId){
public boolean withOrderBuyCoupon3(QueryOrdersResponseDto.DataBean.OrderBean orderBean, String thirdPartyMemberId){
LogUtil.info("发券入参:", thirdPartyMemberId, JSON.toJSONString(orderBean));
try{
List<String> cardIds = new ArrayList<>();
List<String> defaultCardCodes = new ArrayList<>();
for (OrderBean.ProductBean productBean : orderBean.getProductList()){
UpdateCouponCodeReq req = new UpdateCouponCodeReq();
req.setOrderCode(orderBean.getOid());
req.setPartnerId(orderBean.getCompanyId());
req.setCouponReceiveInfoList(new ArrayList<>());
req.setCouponUpdateInfoList(new ArrayList<>());
for (OrderBean.ProductBean productBean : orderBean.getProductList()) {
if(ProductTypeEnum.getVirtualProductType().contains(productBean.getProductType())) {
List<String> cardIds = new ArrayList<>();
OrderProductAddInfoDto extInfo = JSON.parseObject(productBean.getExtInfo(), OrderProductAddInfoDto.class);
for(int i=0;i<productBean.getNumber();i++) {
cardIds.add(extInfo.getCardId());
}
defaultCardCodes.add(extInfo.getCardCode());
}
}
if(CollectionUtils.isEmpty(cardIds)){
return false;
continue;
}
SendCouponForqujiaRequestDto request = new SendCouponForqujiaRequestDto();
......@@ -1790,13 +1739,10 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
request.setCardIds(cardIds);
request.setThirdPartyMemberId(thirdPartyMemberId);
SendCouponForqujiaDtoResponseDto responseDto = customerExtendClient.sendCouponForqujia(request);
if(!Objects.equals(responseDto.getCode(), ResponseResult.SUCCESS.getCode())){
LogUtil.error("sendCouponForqujia", JSON.toJSONString(request), JSON.toJSONString(responseDto));
return false;
}
if(responseDto.getData() == null || CollectionUtils.isEmpty(responseDto.getData().getCard_list())){
return false;
if(!Objects.equals(responseDto.getCode(), ResponseResult.SUCCESS.getCode())
|| responseDto.getData() == null || CollectionUtils.isEmpty(responseDto.getData().getCard_list())){
log.error("发券异常 :" + JSON.toJSONString(request) + JSON.toJSONString(responseDto));
continue;
}
List<SendCouponForqujiaDtoResponseDto.Card> cardList = responseDto.getData().getCard_list();
......@@ -1815,54 +1761,50 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
McdNetBatchQueryResponse mcdNetBatchQueryResponse = couponClientService.batchQuery(mcCafeCouponRequest);
if (mcdNetBatchQueryResponse == null || !ResponseCodeConstant.RESPONSE_SUCCESS.equals(mcdNetBatchQueryResponse.getStatusCode())
|| CollectionUtils.isEmpty(mcdNetBatchQueryResponse.getCouponlist())) {
LogUtil.error("获取优惠券详情失败,发券失败", mcCafeCouponRequest, mcdNetBatchQueryResponse);
log.error("获取优惠券详情失败,发券失败" + JSON.toJSONString(mcCafeCouponRequest) + JSON.toJSONString(mcdNetBatchQueryResponse));
return false;
}
Map<String, Integer> cardStatusMap = mcdNetBatchQueryResponse.getCouponlist().stream()
.collect(Collectors.toMap(McdNetBatchQueryResponse.Coupon::getCode, McdNetBatchQueryResponse.Coupon::getStatusCode, (k1, k2) -> k1));
Map<String, String> cardMap = new HashMap<>();
UpdateCouponCodeReq req = new UpdateCouponCodeReq();
req.setOrderCode(orderBean.getOid());
req.setPartnerId(orderBean.getCompanyId());
req.setCouponReceiveInfoList(new ArrayList<>());
req.setCouponUpdateInfoList(new ArrayList<>());
LogUtil.info("准备开始生成参数:", orderBean, null);
for (QueryOrdersResponseDto.DataBean.OrderBean.ProductBean productBean : orderBean.getProductList()) {
if(ProductTypeEnum.getVirtualProductType().contains(productBean.getProductType())) {
UpdateCouponCodeReq.CouponReceiveInfo couponReceiveInfo = new UpdateCouponCodeReq.CouponReceiveInfo();
couponReceiveInfo.setGoodsId(productBean.getSpecification());
couponReceiveInfo.setProductSeq(productBean.getSequence());
OrderProductAddInfoDto extInfo = JSON.parseObject(productBean.getExtInfo(), OrderProductAddInfoDto.class);
String cardCodeStr = "";
numberFor:
for(int j=0;j<productBean.getNumber();j++) {
cardFor:
for(int i=0;i<cardList.size();i++) {
if(cardList.get(i).getCard_id().equals(extInfo.getCardId())) {
String couponCode = cardList.get(i).getCard_code();
cardCodeStr += couponCode+"/";
if(ResponseCodeConstant.RESPONSE_SUCCESS.equals(cardStatusMap.get(couponCode))) {
if(cardMap.get(extInfo.getCardCode()) == null) {
UpdateCouponCodeReq.CouponUpdateInfo couponUpdateInfo = new UpdateCouponCodeReq.CouponUpdateInfo();
couponUpdateInfo.setOldCouponCode(extInfo.getCardCode());
couponUpdateInfo.setCouponCode(couponCode);
req.getCouponUpdateInfoList().add(couponUpdateInfo);
cardMap.put(extInfo.getCardCode(), couponCode);
}
}
cardList.remove(i);
break cardFor;
couponReceiveInfo.setCouponCode(mcdNetBatchQueryResponse.getCouponlist().stream()
.map(o -> o.getCode()).collect(Collectors.joining("/")));
req.getCouponReceiveInfoList().add(couponReceiveInfo);
String couponCode = "";
if(extInfo.getIsMonthCard() != null && extInfo.getIsMonthCard() == 1) {
Optional<McdNetBatchQueryResponse.Coupon> couponOptional = mcdNetBatchQueryResponse.getCouponlist().stream()
.filter(o -> ResponseCodeConstant.RESPONSE_SUCCESS.equals(o.getStatusCode())).findFirst();
if(!couponOptional.isPresent()) {
log.error("没有有效的优惠券,更新失败 " + JSON.toJSONString(mcCafeCouponRequest) + JSON.toJSONString(mcdNetBatchQueryResponse));
continue;
} else {
couponCode = couponOptional.get().getCode();
}
} else if(extInfo.getIsB3S1Coupon() != null && extInfo.getIsB3S1Coupon() == 1) {
Optional<McdNetBatchQueryResponse.Coupon> couponOptional = mcdNetBatchQueryResponse.getCouponlist().stream()
.filter(o -> ResponseCodeConstant.RESPONSE_SUCCESS.equals(o.getStatusCode())).findFirst();
if(!couponOptional.isPresent()) {
log.error("没有有效的优惠券,更新失败 " + JSON.toJSONString(mcCafeCouponRequest) + JSON.toJSONString(mcdNetBatchQueryResponse));
continue;
} else {
couponCode = couponOptional.get().getCode();
}
}
couponReceiveInfo.setCouponCode(cardCodeStr.substring(0, cardCodeStr.length()-1));
req.getCouponReceiveInfoList().add(couponReceiveInfo);
if(StringUtils.isBlank(couponCode)) {
log.error("没有匹配的优惠券,更新失败 " + JSON.toJSONString(mcCafeCouponRequest) + JSON.toJSONString(mcdNetBatchQueryResponse));
continue;
}
UpdateCouponCodeReq.CouponUpdateInfo couponUpdateInfo = new UpdateCouponCodeReq.CouponUpdateInfo();
couponUpdateInfo.setOldCouponCode(extInfo.getCardCode());
couponUpdateInfo.setCouponCode(couponCode);
req.getCouponUpdateInfoList().add(couponUpdateInfo);
}
LogUtil.info("生成参数完成:", req, null);
}
orderSdkService.updateCostCouponCodeNew(req, LogTreadLocal.getTrackingNo());
......
......@@ -172,6 +172,9 @@ public class ShoppingCartMccafeAdapter {
//菜单购月享卡信息
cartGoodsDetailDto.setIsMonthCard(cartGoods.getIsMonthCard());
cartGoodsDetailDto.setMonthCardInfo(cartGoods.getMonthCardInfo());
cartGoodsDetailDto.setIsB3S1Coupon(cartGoods.getIsB3S1Coupon());
cartGoodsDetailDto.setB3S1CouponGoodsInfo(cartGoods.getB3S1CouponGoodsInfo());
cartGoodsDetailDto.setIsB3S1CouponGoods(cartGoods.getIsB3S1CouponGoods());
if (GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) {
cartGoodsDetailDto.setProductType(ProductType.SETMEAL.getCode());
} else if(GoodsTypeEnum.VIRTUAL_GOODS.getGoodsType().equals(cartGoods.getGoodsType())){
......
......@@ -274,10 +274,6 @@ public class ShoppingCartGoodsDto {
*/
private int isMonthCard;
/**
* 是否是买3赠1券商品
*/
private int isB3S1Coupon = 0;
/**
* 是否为种子券商品 1:是;0:否
*/
private int isSeedCouponGoods;
......@@ -286,6 +282,14 @@ public class ShoppingCartGoodsDto {
*/
private MonthCardVo monthCardInfo;
/**
* 是否是买3赠1券商品
*/
private int isB3S1Coupon = 0;
/**
* 是否使用了买3赠1券
*/
private int isB3S1CouponGoods = 0;
/**
* 买3赠1券信息
*/
private B3S1CouponGoodsInfoVo b3S1CouponGoodsInfo;
......
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