Commit 28cc8495 by 周晓航

Merge branch 'feature/20211021_加价购支持虚拟商品' into qa

# Conflicts:
#	order-application-service/src/main/java/cn/freemud/adapter/OrderAdapter.java
#	order-application-service/src/main/java/cn/freemud/service/impl/OrderServiceImpl.java
#	shopping-cart-application-service/src/main/java/cn/freemud/adapter/ActivityAdapter.java
#	shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/calculate/ActivityCalculationDiscountResponseDto.java
#	shopping-cart-application-service/src/main/java/cn/freemud/service/impl/ShoppingCartNewServiceImpl.java
#	shopping-cart-application-service/src/main/java/cn/freemud/service/impl/calculate/promotion/AdditionSharingService.java
parents 75023918 990f9b8b
......@@ -3154,6 +3154,10 @@ public class OrderSdkAdapter {
extInfo.setNeedBonus(product.getNeedBonus());
}
if (product.getExtInfo() != null) {
extInfo.setProductBindingCoupons(JSONArray.parseArray(product.getExtInfo(),ProductBindingCouponType.class));
}
orderItemCreateReq.setExtInfo(JSONObject.toJSONString(extInfo));
// 拼单加购人信息 add by miaohui 2020.10.12 start
......
......@@ -275,4 +275,6 @@ public class CreateOrderProductRequest extends BaseConfig {
//积分商品活动使用总积分
private Long score;
private String extInfo;
}
......@@ -2148,6 +2148,18 @@ public class OrderAdapter {
return this.checkAdvanceOrder(orderBean.getGmtExpect());
}
// 加价购选择虚拟商品券包,订单完成前可申请退款,完成之后不能申请退款
if (OrderStatus.COMPLETE.equals(status) && CollectionUtils.isNotEmpty(orderBean.getProductList())) {
for (ProductBeanV1 productBeanV1 : orderBean.getProductList()){
if(StringUtils.isNotEmpty(productBeanV1.getExtInfo())){
OrderProductAddInfoDto extInfo = JSONObject.parseObject(productBeanV1.getExtInfo(), OrderProductAddInfoDto.class);
if(CollectionUtils.isNotEmpty(extInfo.getProductBindingCoupons())){
return false;
}
}
}
}
boolean canRefund = false;
String hkey = OrderType.TAKE_OUT.getCode().equals(orderBean.getOrderType()) ? KgdRedisKeyConstant.REFUND_CFG_TAKE_OUT : KgdRedisKeyConstant.REFUND_CFG_EAT_IN;
String configStr = redisCache.hashGet(MessageFormat.format(KgdRedisKeyConstant.ORDER_REFUND_CONFIG, orderBean.getCompanyId(), wxAppId), hkey);
......@@ -2847,6 +2859,7 @@ public class OrderAdapter {
createOrderProductDemoDto.setThirdCategoryId(cartGoodsDetailDto.getCustomerCategoryCode());
createOrderProductDemoDto.setCategoryId(cartGoodsDetailDto.getNodeId());
createOrderProductDemoDto.setCategoryName(cartGoodsDetailDto.getCategoryName());
createOrderProductDemoDto.setExtInfo(cartGoodsDetailDto.getExtInfo());
return createOrderProductDemoDto;
}
......@@ -4589,4 +4602,35 @@ public class OrderAdapter {
}
return orderCompareAfterSaleOrder;
}
/**
* 获取订单信息
*
* @param orderStatus
* @return
*/
public String getOrderStatusValue(Integer orderStatus) {
String name = "";
switch (orderStatus) {
case 1: {
name = "待审核";
break;
}
case 6: {
name = "审核通过";
break;
}
case 7: {
name = "审核未通过";
break;
}
case 8: {
name = "撤单";
break;
}
}
return name;
}
}
......@@ -346,6 +346,8 @@ public class ShoppingCartGoodsDto {
*/
private String originalGoodsUid;
private String extInfo;
@Data
public final static class CartGoodsExtra {
/**
......
......@@ -366,6 +366,11 @@ public class CreateOrderVo {
private String picture;
/**
* 加价购 可能会涉及 虚拟商品 类型 = 9
*/
private Integer productType;
/**
* 原价 入参不需要传,做对象组装使用
*/
private Long originalPrice;
......
......@@ -229,7 +229,7 @@ public class OrderBusinessServiceImpl implements OrderBusinessService {
}
//更新库存等信息
BaseOrderResponse baseOrderResponse = updateStockAndScore(createOrderResponse.getData(), config.getBaseCreateOrderRequest().getProducts(), config.getBaseCreateOrderRequest().getActivityUpdateStockRequest(),
config.getBaseCreateOrderRequest().getAccounts(), config.getMqMessageRequest(),config.getBaseCreateOrderRequest().getMenuType(),config.getOpenId(),config.getBaseCreateOrderRequest().getTotalScore());
config.getBaseCreateOrderRequest().getAccounts(), config.getBaseCreateOrderRequest().getMenuType(),config.getOpenId(),config.getBaseCreateOrderRequest().getTotalScore());
if (!RESPONSE_SUCCESS.equals(baseOrderResponse.getErrcode())) {
return getCreateOrderResponse(baseOrderResponse.getErrcode().toString(), baseOrderResponse.getErrmsg(), null);
}
......@@ -264,7 +264,7 @@ public class OrderBusinessServiceImpl implements OrderBusinessService {
* @return
*/
private BaseOrderResponse updateStockAndScore(OrderBeanV1 orderBean, List<CreateOrderProductRequest> products, ActivityUpdateStockRequest updateStockRequest,
List<CreateOrderAccountRequest> accounts, MqMessageRequest mqMessageRequest, String menuType, String openId,Long totalScore) {
List<CreateOrderAccountRequest> accounts, String menuType, String openId,Long totalScore) {
//TODO 转换获取库存信息,扣减库存
UpdateStocksRequest updateStocksRequest = orderSdkAdapter.getUpdateProductStock(orderBean, products, StockChangeType.REDUCE,menuType);
if (updateStocksRequest != null && CollectionUtils.isNotEmpty(updateStocksRequest.getProductStocks())) {
......
......@@ -732,10 +732,6 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
CreateOrderRequest createOrderRequest = new CreateOrderRequest();
baseCreateOrderRequest.setTrackingNo(LogThreadLocal.getTrackingNo());
createOrderRequest.setBaseCreateOrderRequest(baseCreateOrderRequest);
MqMessageRequest mqMessageRequest = new MqMessageRequest();
mqMessageRequest.setBackOrdersNotifyActivityExchange(backOrdersNotifyActivityExchange);
mqMessageRequest.setBackOrdersNotifyActivityQueue(backOrdersChangeOrderStatusConsumerQueue);
createOrderRequest.setMqMessageRequest(mqMessageRequest);
createOrderRequest.setTrackingNo(LogThreadLocal.getTrackingNo());
return mcCafeOrderCenterSdkService.createMCCafeOrderFlow(createOrderRequest);
}
......
......@@ -285,10 +285,6 @@ public class MallOrderServiceImpl implements MallOrderService {
CreateOrderRequest createOrderRequest = new CreateOrderRequest();
baseCreateOrderRequest.setTrackingNo(LogThreadLocal.getTrackingNo());
createOrderRequest.setBaseCreateOrderRequest(baseCreateOrderRequest);
MqMessageRequest mqMessageRequest = new MqMessageRequest();
// mqMessageRequest.setBackOrdersNotifyActivityExchange(backOrdersNotifyActivityExchange);
// mqMessageRequest.setBackOrdersNotifyActivityQueue(backOrdersChangeOrderStatusConsumerQueue);
createOrderRequest.setMqMessageRequest(mqMessageRequest);
createOrderRequest.getBaseCreateOrderRequest().setUserName(userLoginInfoDto.getNickName());
createOrderRequest.setTrackingNo(LogThreadLocal.getTrackingNo());
return orderBusinessService.createOrderFlow(createOrderRequest);
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -141,6 +141,9 @@ public class PayServiceImpl {
@Value("${collage.pre_order_pay.goods_tag}")
private String collageGoodsTag;
@Value("${query.pay.order:true}")
private Boolean queryPayOrder;
private static final Integer MULITI_RESPONSE = 200;
private static final String SUCCESS = "SUCCESS";
......@@ -818,6 +821,9 @@ public class PayServiceImpl {
public boolean closePrePay(OrderBeanV1 orderBean) {
//是否支付成功
boolean paySuccess = false;
if(!queryPayOrder){
return paySuccess;
}
OrderExtInfoDto extInfo = JSONObject.parseObject(orderBean.getExtInfo(), OrderExtInfoDto.class);
List<OrderPayItemResp> orderPayItemList = orderBean.getOrderPayItem();
......
......@@ -98,11 +98,6 @@ public class MCCafeOrderCenterSdkServiceImpl implements MCCafeOrderCenterSdkServ
|| createOrderResponse.getData() == null) {
return getCreateOrderResponse(createOrderResponse.getErrcode().toString(), createOrderResponse.getErrmsg(), null);
}
BaseOrderResponse baseOrderResponse = updateMCCafeStockAndScore(createOrderResponse.getData(), config.getBaseCreateOrderRequest().getProducts(), config.getBaseCreateOrderRequest().getActivityUpdateStockRequest(),
config.getBaseCreateOrderRequest().getAccounts(), config.getMqMessageRequest(),config.getBaseCreateOrderRequest().getMenuType());
if (!RESPONSE_SUCCESS.equals(baseOrderResponse.getErrcode())) {
return getCreateOrderResponse(baseOrderResponse.getErrcode().toString(), baseOrderResponse.getErrmsg(), null);
}
return createOrderResponse;
}
......
......@@ -2,9 +2,11 @@ package cn.freemud.service.thirdparty;
import cn.freemud.annotations.LogIgnoreFeign;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.dto.QueryInvoiceRepDto;
import cn.freemud.entities.dto.order.QueryInvoiceByCodesResponse;
import cn.freemud.entities.dto.pay.OrderInvoiceRequest;
import cn.freemud.entities.dto.pay.QueryInvoiceByCodesRequest;
import cn.freemud.entities.vo.QueryInvoiceReq;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
......@@ -24,7 +26,16 @@ public interface OrderServiceClient {
/**
* 查询用户订单号是否已开票
*/
@LogIgnoreFeign(logMessage="queryByCodes")
@LogIgnoreFeign(logMessage="queryInvoiceByCodes")
@PostMapping("/order/v2/invoice/queryByCodes")
BaseResponse<QueryInvoiceByCodesResponse> queryInvoiceByCodes(@RequestBody QueryInvoiceByCodesRequest request);
/**
* 2021年9月15日-开票历史列表接口+详情接口+发票所含订单接口-黄兆良
* 开票历史列表接口
*/
@LogIgnoreFeign(logMessage="queryInvoiceList")
@PostMapping(value = "/order/v2/invoice/list/forUser")
QueryInvoiceRepDto queryInvoiceList(@RequestBody QueryInvoiceReq queryInvoiceReq);
}
......@@ -30,6 +30,6 @@ public class CustomerExtendClientTest {
requestDto.setStatusFlags(new ArrayList<>(0));
requestDto.setIsProduct(1);
requestDto.setCouponType(0);
GetMemberCouponListResponseDto responseDto=customerExtendClient.getMemberCouponListRequestDto(requestDto);
// GetMemberCouponListResponseDto responseDto=customerExtendClient.getMemberCouponListRequestDto(requestDto);
}
}
......@@ -148,6 +148,8 @@ public class ActivityAdapter {
product.setOriginalPrice(sendGoods.getOriginalPrice());
product.setNowPrice(sendGoods.getNowPrice());
product.setNumber(sendGoods.getSendNumber());
// 设置商品原始属性, 本次需求 为了得到虚拟商品类型 进行参数组装
product.setProductType(sendGoods.getProductType());
products.add(product);
});
break;
......@@ -238,57 +240,8 @@ public class ActivityAdapter {
public PremiumExchangeResponseVo convert2PremiumExchangeSharing(CalculationDiscountResult discountResult) {
// 返回构造对象
PremiumExchangeResponseVo premiumExchangeResponseVo = new PremiumExchangeResponseVo();
// 组装验证商品对象
List<PremiumExchangeResponseVo.PremiumExchangeProduct> products = new ArrayList<>();
premiumExchangeResponseVo.setResultCode(ActivityResultCodeEnum.NON_PARTICIPATE.getCode());
if (discountResult == null) {
return premiumExchangeResponseVo;
}
// 只取最新活动
if (discountResult != null && CollectionUtils.isNotEmpty(discountResult.getSendGoods())) {
if (CollectionUtils.isNotEmpty(discountResult.getDiscounts())) {
List<Discount> discountList = discountResult.getDiscounts();
for (Discount discount : discountList) {
if (Objects.equals(discount.getType(), ActivityTypeEnum.TYPE_81.getCode())) {
Integer showType = discount.getIntegral() == null ? 0 : discount.getIntegral();
premiumExchangeResponseVo.setShowType(showType);
}
}
}
for (SendActivity sendActivity : discountResult.getSendGoods()) {
if (Objects.equals(sendActivity.getActivityType(), ActivityTypeEnum.TYPE_81.getCode())) {
// 判断加价购活动商品不存在直接跳出循环
if (CollectionUtils.isEmpty(sendActivity.getSendGoods())) {
break;
}
premiumExchangeResponseVo.setResultCode(ActivityResultCodeEnum.PARTICIPATE.getCode());
premiumExchangeResponseVo.setActivityCode(sendActivity.getActivityCode());
premiumExchangeResponseVo.setActivityName(sendActivity.getActivityName());
premiumExchangeResponseVo.setMaxNum(sendActivity.getMaxNum());
sendActivity.getSendGoods().forEach(sendGoods -> {
PremiumExchangeResponseVo.PremiumExchangeProduct product = new PremiumExchangeResponseVo.PremiumExchangeProduct();
product.setSpuId(sendGoods.getCategory());
product.setSkuId(sendGoods.getGoodsId());
product.setSkuName(sendGoods.getGoodsName());
product.setOriginalPrice(sendGoods.getOriginalPrice());
product.setNowPrice(sendGoods.getNowPrice());
product.setNumber(sendGoods.getSendNumber());
products.add(product);
});
break;
}
}
}
if(CollectionUtils.isEmpty(products)){
premiumExchangeResponseVo.setResultCode(ActivityResultCodeEnum.NO_ACTIVITY.getCode());
premiumExchangeResponseVo.setResultMsg(ActivityResultCodeEnum.NO_ACTIVITY.getDesc());
return premiumExchangeResponseVo;
}
premiumExchangeResponseVo.setProducts(products);
return premiumExchangeResponseVo;
public PremiumExchangeResponseVo convert2PremiumExchangeSharing(ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult) {
return this.convert2PremiumExchange(calculationDiscountResult);
}
public CouponAvailableCartInfo convert2CouponAvailableCartInfoSharing(String partnerId, String storeId, CalculationDiscountResult discountResult, List<String> orgCodes) {
......
......@@ -66,6 +66,7 @@ public class ShoppingCartConvertAdapter {
cartGoodsDetailDto.setSkuId(goodsId);
// fisherman 加价购商品类型设置
cartGoodsDetailDto.setOriginalProductType(getProductsVo.getType());
cartGoodsDetailDto.setProductType(sendGoods.getProductType());
cartGoodsDetailDto.setQty(product.getQty());
cartGoodsDetailDto.setSpuName(getProductsVo != null ? getProductsVo.getSpuName() : "");
cartGoodsDetailDto.setSkuName(product.getSkuName());
......
package cn.freemud.entities.dto;
import lombok.Data;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/10/23 下午4:16
* @description :
*/
@Data
public class BindingCouponTypeDto {
private String activityCode;
private String cardId;
private Integer num;
private String virtualCouponCode;
}
......@@ -195,6 +195,12 @@ public class GetMenuResponseDto {
private List<SpecificationGroupBean> specificationGroupList;
//Sku 规格 如果 当前是sku 则有值
private List<SkuProductBean.SkuSpecValue> skuSpecValues;
/**
* 虚拟商品 绑定的券信息
*/
private List<BindingCouponTypeDto> productBindingCouponTypes;
@NoArgsConstructor
@Data
public static class SkuProductBean {
......
......@@ -34,11 +34,13 @@ public class ValidateProductInfosDto {
private List<ProductData> failureList;
private List<ProductData> successList;
}
@NoArgsConstructor
@Data
public static class ProductData {
private ProductBean productType;
}
@NoArgsConstructor
@Data
public static class ProductBean {
......@@ -118,15 +120,22 @@ public class ValidateProductInfosDto {
*/
private List<SellTime> sellTimeList;
/**
* 虚拟商品 绑定的券信息
*/
private List<BindingCouponTypeDto> productBindingCouponTypes;
@Data
public static class SellTime{
public static class SellTime {
private Integer dateStatus;
private String startTime;
private String endTime;
}
private List<SellTimeMonth> sellTimeMonthList;
@Data
public static class SellTimeMonth{
public static class SellTimeMonth {
private Integer dayOfMonth;
private String endTime;
private String startTime;
......@@ -148,7 +157,7 @@ public class ValidateProductInfosDto {
private Integer stockLimit;
private Integer stockQty;
//sku商品包装费 1.5.4新加
private Long packPrice ;
private Long packPrice;
private List<SkuSpecValue> skuSpecValues;
@NoArgsConstructor
......@@ -261,6 +270,7 @@ public class ValidateProductInfosDto {
private String type;
private String url;
}
@NoArgsConstructor
@Data
public static class ProductComboListBean {
......
......@@ -371,6 +371,28 @@ public class ShoppingCartGoodsDto {
*/
private List<CartGoodsDetailDto.MaterialGoods> materialList = new ArrayList<>(0);
/**
* 当加价购有虚拟商品 需要送券的时候 这里存放的就是 券信息 比如
* [
* {
* "num": 1,
* "activityCode": "V1634609099412143",
* "activityName": "迦勒代金券2块"
* },
* {
* "num": 1,
* "activityCode": "V1634609296167070",
* "activityName": "迦勒代金券3块"
* },
* {
* "num": 1,
* "activityCode": "V1634643280844538",
* "activityName": "迦勒代金券11块"
* }
* ]
*/
private String extInfo;
@Data
public final static class CartGoodsExtra {
/**
......
......@@ -20,12 +20,19 @@ import lombok.NoArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.UUID;
@Data
public class CartGoods {
/**
* 如果加价购是虚拟券商品 这个集合会有券商品赠送的券信息
*/
private List<CouponMsg> couponData = new ArrayList<>();
/**
* 购物车一行的Id(后台生成)
*/
......@@ -720,5 +727,6 @@ public class CartGoods {
* 该字段,保持和商品服务的商品类型一致
*/
private Integer originalProductType;
}
}
package cn.freemud.entities.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/10/23 下午2:34
* @description :
*/
@Data
public class CouponMsg {
/**
* 券名称
*/
@ApiModelProperty(value = "券名称")
private String activityName;
/**
* 券code
*/
@ApiModelProperty(value = "券code")
private String activityCode;
/**
* 券数量
*/
private Integer num;
}
......@@ -12,6 +12,7 @@
*/
package cn.freemud.entities.vo;
import cn.freemud.entities.dto.BindingCouponTypeDto;
import cn.freemud.entities.dto.UserDeliveryInfoDto;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
......@@ -144,6 +145,16 @@ public class CreateOrderVo {
@Data
public static class Product {
/**
* 加价购 可能会涉及 虚拟商品 类型 = 9
*/
private Integer productType;
/**
* 虚拟商品 绑定的券信息
*/
private List<BindingCouponTypeDto> productBindingCouponTypes;
/**
* spuId 商品原始id
*/
@NotNull(message = "spuId不能为空")
......
package cn.freemud.entities.vo;
import cn.freemud.entities.dto.BindingCouponTypeDto;
import cn.freemud.entities.dto.GetMenuResponseDto;
import lombok.Data;
......@@ -48,4 +49,11 @@ public class GetProductsVo {
private String defaultSpecId;
private String defaultSpecName;
private List<CartGoods.CartGoodsExtra> extra;
/**
* 虚拟商品 绑定的券信息
*/
private List<BindingCouponTypeDto> productBindingCouponTypes;
}
\ No newline at end of file
......@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
@Data
......@@ -247,6 +248,13 @@ public class PremiumExchangeResponseVo {
@ApiModelProperty(value = "活动商品描述")
private String goodsDesc;
/**
* 如果加价购是虚拟券商品 这个集合会有券商品赠送的券信息
*/
private List<CouponMsg> couponData = new ArrayList<>();
@Data
@NoArgsConstructor
public static class ProductLabel {
......
......@@ -163,6 +163,11 @@ public class ShoppingCartInfoRequestVo extends BaseRequestVo {
private String activityCode;
private List<Attribute> attributes;
/**
* 加价购 可能会涉及 虚拟商品 类型 = 9
*/
private Integer productType;
}
@Data
......
package cn.freemud.handle;
import cn.freemud.entities.dto.BindingCouponTypeDto;
import cn.freemud.entities.vo.CouponMsg;
import cn.freemud.enums.ResponseResult;
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.sdk.api.assortment.shoppingcart.util.ShoppingSdkLogUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/10/22 下午7:54
* @description :
*/
@Component
public class GetActivityMsgHandle {
@Value("${coupon.app.id}")
private String appId;
/**
* fisherman 获取 虚拟商品 券数据
*
* @param productBindingCoupons
* @param partnerId
* @return
*/
public List<CouponMsg> getCouponData(List<BindingCouponTypeDto> productBindingCoupons, String partnerId) {
List<CouponMsg> retList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(productBindingCoupons)) {
// 处理 券数据 这里链路有问题 效率有点低, 后续需要优化
List<String> activityCodes = productBindingCoupons.stream()
.map(BindingCouponTypeDto::getActivityCode)
.collect(Collectors.toList());
List<ActiveDetailVO> activeDetailVOS = this.batchQueryActivityInfo(activityCodes, partnerId);
if (CollectionUtils.isNotEmpty(activeDetailVOS)) {
// 设置 券名称 数量
Map<String, ActiveDetailVO> collect = activeDetailVOS.stream().collect(Collectors.toMap(ActiveDetailVO::getActiveCode, a -> a, (k1, k2) -> k1));
productBindingCoupons.forEach(coupon -> {
CouponMsg msg = new CouponMsg();
ActiveDetailVO activeDetailVO = collect.get(coupon.getActivityCode());
msg.setActivityCode(coupon.getActivityCode());
msg.setNum(coupon.getNum());
msg.setActivityName(activeDetailVO.getActiveName());
retList.add(msg);
});
}
}
return retList;
}
private List<ActiveDetailVO> batchQueryActivityInfo(List<String> activityCodes, String partnerId) {
String trackingNo = LogThreadLocal.getTrackingNo();
String appKey = this.getAppKey(partnerId, trackingNo);
if (StringUtils.isEmpty(appKey)) {
return null;
}
ActiveBatchQueryRequest activeBatchQueryRequest = new ActiveBatchQueryRequest();
//去重
List<String> activeCodes = new ArrayList<>(new HashSet(activityCodes));
activeBatchQueryRequest.setActiveCode(activeCodes);
activeBatchQueryRequest.setAppSecret(appKey);
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 batchQueryResponse.getData();
}
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;
}
}
......@@ -2,6 +2,7 @@ package cn.freemud.service.impl;
import cn.freemud.adapter.ShoppingCartConvertAdapter;
import cn.freemud.constant.ShoppingCartConstant;
import cn.freemud.entities.dto.GetMenuResponseDto;
import cn.freemud.entities.dto.UserLoginInfoDto;
import cn.freemud.entities.dto.activity.ActivityDiscountsDto;
import cn.freemud.entities.dto.activity.ActivityQueryDto;
......@@ -12,9 +13,12 @@ import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.enums.ResponseResult;
import cn.freemud.handle.GetActivityMsgHandle;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.IPromotionService;
import cn.freemud.service.ItemService;
import com.alibaba.fastjson.JSON;
import com.freemud.application.sdk.api.ordercenter.enums.ProductTypeEnum;
import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
import com.freemud.sdk.api.assortment.shoppingcart.enums.BusinessTypeEnum;
import com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl;
......@@ -54,7 +58,8 @@ public class AdditionalPromotionService implements IPromotionService {
private AssortmentSdkService assortmentSdkService;
@Autowired
private ShoppingCartBaseServiceImpl shoppingCartBaseService;
@Autowired
private GetActivityMsgHandle getActivityMsgHandle;
@Override
public void updateShoppingCartGoodsDiscount(CouponPromotionVO couponPromotionVO, ActivityQueryDto activityQueryDto, CalculationDiscountResult calculationDiscountResult, List<CartGoods> cartGoodsList, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, UserLoginInfoDto userLoginInfoDto, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo) {
if (shoppingCartInfoRequestVo == null || CollectionUtils.isEmpty(shoppingCartInfoRequestVo.getSendGoods()) || calculationDiscountResult == null || CollectionUtils.isEmpty(calculationDiscountResult.getSendGoods())) {
......@@ -99,17 +104,20 @@ public class AdditionalPromotionService implements IPromotionService {
List<ShoppingCartInfoRequestVo.SendGoods> sendGoods = shoppingCartInfoRequestVo.getSendGoods();
List<String> goodsIds = sendGoods.stream().map(ShoppingCartInfoRequestVo.SendGoods::getGoodsId).collect(Collectors.toList());
Map<String, ShoppingCartInfoRequestVo.SendGoods> goodQtyMap = sendGoods.stream().collect(Collectors.toMap(ShoppingCartInfoRequestVo.SendGoods::getGoodsId, Function.identity(), (k1, k2) -> k1));
List<ProductBeanDTO> productBeanList = assortmentSdkService.getProductsInfoSdk(shoppingCartInfoRequestVo.getPartnerId()
, shoppingCartInfoRequestVo.getShopId(), goodsIds,shoppingCartInfoRequestVo.getMenuType(), shoppingCartBaseService);
if (CollectionUtils.isEmpty(productBeanList)) {
// List<ProductBeanDTO> productBeanList = assortmentSdkService.getProductsInfoSdk(shoppingCartInfoRequestVo.getPartnerId()
// , shoppingCartInfoRequestVo.getShopId(), goodsIds,shoppingCartInfoRequestVo.getMenuType(), shoppingCartBaseService);
// fisherman 剔除上面sdk的调用
List<GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean> productsInfo = assortmentSdkService.getProductsInfo(shoppingCartInfoRequestVo.getPartnerId()
, shoppingCartInfoRequestVo.getShopId(), goodsIds, shoppingCartInfoRequestVo.getMenuType(), shoppingCartBaseService);
if (CollectionUtils.isEmpty(productsInfo)) {
throw new ServiceException(ResponseResult.PREMIUM_EXCHANGE_ACTIVITY_NOT_EXIST);
}
return productBeanList.stream().map(productBean -> {
return productsInfo.stream().map(productBean -> {
CreateOrderVo.PremiumExchangeActivity.Product product = new CreateOrderVo.PremiumExchangeActivity.Product();
List<ProductBeanDTO.SkuProductBean> skuList = productBean.getSkuList();
List<GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean.SkuProductBean> skuList = productBean.getSkuList();
List<String> skuIds = null;
if (null != skuList) {
skuIds = skuList.stream().map(ProductBeanDTO.SkuProductBean::getSkuId).collect(Collectors.toList());
skuIds = skuList.stream().map(GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean.SkuProductBean::getSkuId).collect(Collectors.toList());
}
if (!CollectionUtils.isEmpty(skuIds)) {
for (String skuId : skuIds) {
......@@ -119,6 +127,8 @@ public class AdditionalPromotionService implements IPromotionService {
product.setSpuId(productBean.getPid());
product.setSkuId(sendGood.getGoodsId());
product.setStatus(productBean.getStatus());
product.setProductType(sendGood.getProductType());
product.setProductBindingCouponTypes(productBean.getProductBindingCouponTypes());
break;
}
}
......@@ -129,6 +139,8 @@ public class AdditionalPromotionService implements IPromotionService {
product.setSpuId(sendGood.getGoodsId());
product.setSkuId(sendGood.getGoodsId());
product.setStatus(productBean.getStatus());
product.setProductType(sendGood.getProductType());
product.setProductBindingCouponTypes(productBean.getProductBindingCouponTypes());
}
}
return product;
......@@ -215,7 +227,6 @@ public class AdditionalPromotionService implements IPromotionService {
Long totalDiscountAmount = shoppingCartGoodsResponseVo.getTotalDiscountAmount();
//加价换购活动总优惠
Long currenttotalDiscountAmount = 0L;
//购物车中添加加价购商品,并计算购物车总优惠价格
for (CreateOrderVo.PremiumExchangeActivity.Product product : additionalProducts) {
String goodsId = StringUtils.isEmpty(product.getSkuId()) ? product.getSpuId() : product.getSkuId();
GetProductsVo getProductsVo = getProductsVoMap.get(goodsId);
......@@ -225,6 +236,13 @@ public class AdditionalPromotionService implements IPromotionService {
SendGoods sendGoods = sendGoodsMap.get(goodsId);
//1.向购物车中添加商品
ShoppingCartGoodsDto.CartGoodsDetailDto cartGoodsDetailDto = shoppingCartConvertAdapter.getCartGoodsDetailDto(product, getProductsVo, goodsId, sendGoods);
// fisherman 结算页 如果是虚拟商品 需要设置 到 extinfo里面注意
if (cartGoodsDetailDto.getProductType().compareTo(ProductTypeEnum.VIRTUAL_PRODUCT.getCode()) == 0) {
List<CouponMsg> couponData = getActivityMsgHandle.getCouponData(getProductsVo.getProductBindingCouponTypes(), shoppingCartInfoRequestVo.getPartnerId());
if (CollectionUtils.isNotEmpty(couponData)) {
cartGoodsDetailDto.setExtInfo(JSON.toJSONString(couponData));
}
}
cartGoodsDetailDtoList.add(cartGoodsDetailDto);
//2.计算优惠价格
originalTotalAmount += getProductsVo.getFinalPrice();
......
......@@ -169,8 +169,9 @@ public class ItemServiceImpl implements ItemService {
getProductsVo.setCustomerCode(productBean.getCustomerCode());
getProductsVo.setCategory(productBean.getCategory());
getProductsVo.setCategoryName(productBean.getCategoryName());
getProductsVo.setProductBindingCouponTypes(productBean.getProductBindingCouponTypes());
resultMap.put(productBean.getPid(), getProductsVo);
getProductsVo.setType(1);
getProductsVo.setType(productBean.getType());
// 规格ID 剔除单品
if (Objects.equals(productBean.getIsSkuProduct(), YesOrNoEnum.YES.getCode())) {
getProductsVo.setType(10);
......
......@@ -43,6 +43,7 @@ import cn.freemud.entities.vo.coupon.CouponAvailableCartInfo;
import cn.freemud.entities.vo.coupon.CouponAvailableRequestVo;
import cn.freemud.enums.*;
import cn.freemud.handle.CommonFunctionHandle;
import cn.freemud.handle.GetActivityMsgHandle;
import cn.freemud.interceptor.BizServiceException;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.redis.RedisCache;
......@@ -68,6 +69,8 @@ import com.freemud.application.sdk.api.membercenter.request.QueryReceiveAddressR
import com.freemud.application.sdk.api.membercenter.request.StatisticalScoreRequest;
import com.freemud.application.sdk.api.membercenter.response.QueryReceiveAddressResponse;
import com.freemud.application.sdk.api.membercenter.service.MemberCenterService;
import com.freemud.application.sdk.api.membercenter.service.MemberPropertyService;
import com.freemud.application.sdk.api.ordercenter.enums.ProductTypeEnum;
import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
import com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
......@@ -76,7 +79,6 @@ import com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant;
import com.freemud.sdk.api.assortment.shoppingcart.enums.BusinessTypeEnum;
import com.freemud.sdk.api.assortment.shoppingcart.service.ShoppingCartBaseService;
import com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl;
import com.freemud.sdk.api.assortment.shoppingcart.util.ShoppingSdkLogUtil;
import com.google.common.collect.Lists;
import javafx.util.Pair;
import ma.glasnost.orika.MapperFacade;
......@@ -209,6 +211,9 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
@Autowired
private CommonFunctionHandle commonFunctionHandle;
@Autowired
private GetActivityMsgHandle getActivityMsgHandle;
/**
* 从微信卡券向购物车中添加商品
*/
......@@ -885,11 +890,15 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
cartGoods.setOriginalAmount(good.getOriginalPrice());
cartGoods.setAmount(good.getNowPrice());
cartGoods.setPhotoUrl(good.getPicture());
// fisherman 设置虚拟券商品 属性
cartGoods.setGoodsType(good.getProductType());
cartGoods.setOriginalProductType(good.getProductType());
cartGoods.setGoodsId(good.getPid());
cartGoods.setName(good.getName());
cartGoods.setSpuName(good.getSpuName());
cartGoods.setQty(first == null ? 1 : first.getQty());
cartGoods.setQty(first.getQty());
cartGoods.setActivityCode(first.getActivityCode());
cartGoods.setCouponData(good.getCouponData());
if (!CollectionUtils.isEmpty(first.getAttributes())) {
List<CartGoods.CartGoodsExtra> extra = new ArrayList();
first.getAttributes().forEach(attribute -> {
......@@ -3165,6 +3174,11 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
result.setOriginalPrice(productBean.getFinalPrice());
result.setNumber(premiumExchangeProduct.getNumber());
result.setArtNo(premiumExchangeProduct.getArtNo());
result.setProductType(premiumExchangeProduct.getProductType());
// fisherman 处理虚拟商品的 券名称获取
if (premiumExchangeProduct.getProductType().compareTo(ProductTypeEnum.VIRTUAL_PRODUCT.getCode()) == 0) {
result.setCouponData(getActivityMsgHandle.getCouponData(productBean.getProductBindingCouponTypes(), partnerId));
}
productResults.add(result);
}
}
......@@ -3177,6 +3191,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
return ResponseUtil.success(premiumExchangeResponseVo);
}
private void removeByProductStock(List<PremiumExchangeResponseVo.PremiumExchangeProduct> products, List<ValidateProductInfosDto.ProductData> productDataList, String partnerId, String storeId, String channel) {
List<Long> limitSkuIds = new ArrayList<>();
productDataList.stream().forEach(ProductData -> {
......
......@@ -8,12 +8,16 @@ import cn.freemud.entities.vo.*;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.enums.CalculationGoodsType;
import cn.freemud.enums.ResponseResult;
import cn.freemud.handle.GetActivityMsgHandle;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.ItemService;
import cn.freemud.service.impl.AssortmentSdkService;
import com.alibaba.fastjson.JSON;
import com.freemud.application.sdk.api.ordercenter.enums.ProductTypeEnum;
import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
import com.freemud.sdk.api.assortment.shoppingcart.enums.BusinessTypeEnum;
import com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl;
import com.freemud.sdk.api.assortment.shoppingcart.util.ShoppingSdkLogUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
......@@ -49,6 +53,10 @@ public class AdditionSharingService {
@Autowired
private ItemService itemService;
@Autowired
private GetActivityMsgHandle getActivityMsgHandle;
public void additionResponse(CalculationDiscountResult discountResult
, List<CartGoods> cartGoodsList
, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo
......@@ -266,6 +274,13 @@ public class AdditionSharingService {
continue;
}
ShoppingCartGoodsDto.CartGoodsDetailDto cartGoodsDetailDto = this.getCartGoodsDetailDto(product, getProductsVo, goodsId, hgGood);
// fisherman 结算页 如果是虚拟商品 需要设置 到 extinfo里面注意 新算价
if (cartGoodsDetailDto.getProductType().compareTo(ProductTypeEnum.VIRTUAL_PRODUCT.getCode()) == 0) {
List<CouponMsg> couponData = getActivityMsgHandle.getCouponData(getProductsVo.getProductBindingCouponTypes(), shoppingCartInfoRequestVo.getPartnerId());
if (CollectionUtils.isNotEmpty(couponData)) {
cartGoodsDetailDto.setExtInfo(JSON.toJSONString(couponData));
}
}
shoppingCartGoodsDto.getProducts().add(cartGoodsDetailDto);
//2.计算优惠价格
originalTotalAmount += getProductsVo.getFinalPrice();
......@@ -304,6 +319,7 @@ public class AdditionSharingService {
cartGoodsDetailDto.setClassificationId(getProductsVo.getCategory());
cartGoodsDetailDto.setClassificationName(getProductsVo.getCategoryName());
cartGoodsDetailDto.setStockLimit(ObjectUtils.equals(1, getProductsVo.getStockLimit()));
cartGoodsDetailDto.setProductType(getProductsVo.getType());
List<ShoppingCartGoodsDto.CartGoodsDetailDto.CartGoodsExtra> cartGoodsExtraList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(product.getAttributes())) {
for (CreateOrderVo.PremiumExchangeActivity.Product.Attribute attribute : product.getAttributes()) {
......
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