Commit 19aaeef2 by 周晓航

Merge branch 'master' into pre

parents 71ff516b 0cbc0e4d
......@@ -619,6 +619,7 @@ public class OrderSdkAdapter {
orderConditionsReq.setPartnerId(queryOrdersRequest.getCompanyId());
orderConditionsReq.setUserId(queryOrdersRequest.getUserId());
orderConditionsReq.setUserIds(queryOrdersRequest.getUserIds());
orderConditionsReq.setPageSize(queryOrdersRequest.getPageSize());
orderConditionsReq.setPageNum(queryOrdersRequest.getPageNumber());
orderConditionsReq.setNeedInvoice(queryOrdersRequest.getNeedInvoice());
......@@ -658,25 +659,28 @@ public class OrderSdkAdapter {
for (int i = 0; i < queryOrdersRequest.getSource().length; i++) {
if ("saas".equals(queryOrdersRequest.getSource()[i])) {
orderClients.add(OrderClientType.SAAS.getIndex());
orderClients.add(OrderClientType.ALIPAY.getIndex());
}
else if ("meals".equals(queryOrdersRequest.getSource()[i])) {
orderClients.add(OrderClientType.WAI_MEAL.getIndex());
orderClients.add(OrderClientType.ALIPAY.getIndex());
}
else if ("saasmall".equals(queryOrdersRequest.getSource()[i])) {
orderClients.add(OrderClientType.SAASMALL.getIndex());
}
else if ("app".equals(queryOrdersRequest.getSource()[i])) {
orderClients.add(OrderClientType.APP.getIndex());
orderClients.add(OrderClientType.ALIPAY.getIndex());
}
else if ("beautiful".equals(queryOrdersRequest.getSource()[i])) {
orderClients.add(OrderClientType.BEAUTIFUL.getIndex());
orderClients.add(OrderClientType.ALIPAY.getIndex());
}
else if ("cashier".equals(queryOrdersRequest.getSource()[i])) {
orderClients.add(OrderClientType.CASHIER.getIndex());
}
}
orderClients.add(OrderClientType.TIKTOKPAY.getIndex());
orderClients.add(OrderClientType.ALIPAY.getIndex());
orderConditionsReq.setOrderClients(orderClients);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
......
......@@ -13,6 +13,10 @@ public class QueryOrdersRequest extends BaseConfig {
*/
private String userId;
/**
* 用户id集合(userId和userIds两者不能同时为空)
*/
private List<String> userIds;
/**
* 商户ID
*/
private String companyId;
......
......@@ -72,4 +72,10 @@ public class CombPayRequest {
private String ver ="10";
private String storeName;
private Long merchantDiscount;
/**
* @see com.freemud
* 下单所用小程序类型:1微信,2支付宝,3抖音")
*/
private Integer applicationType;
}
......@@ -38,6 +38,19 @@ public class RedisKeyConstant {
* 用户购物车总价在redis的key前缀
*/
public final static String SAAS_SHOPPINGCART_AMOUNT_PREFIX = "saas:user:info:cart:amount:goods:";
/**
* 用户购物车赠品在redis中的缓存key
* {0}:商户号
* {1}:门店号
* {2}:用户的userId
*
* 缓存结构为hash
* hashKey为购物车行uid
* value为 CartGoods类型的json字符串
*/
public final static String SAAS_SHOPPING_CART_GIFT_KEY = "saas:user:info:cart:gift:{0}:{1}:{2}";
/**
* 商品的信息前缀
*/
......
......@@ -1020,7 +1020,6 @@ public class OrderAdapter {
public QueryOrdersDto convent2QueryOrdersDto(QueryOrderDto queryOrderDto, String memberId, String channelType) {
QueryOrdersDto queryOrdersDto = new QueryOrdersDto();
queryOrdersDto.setUserId(memberId);
queryOrdersDto.setCompanyId(queryOrderDto.getPartnerId());
queryOrdersDto.setPageSize(queryOrderDto.getPageSize() != null ? queryOrderDto.getPageSize() : 10);
queryOrdersDto.setPageNumber(queryOrderDto.getPageNumber() != null ? queryOrderDto.getPageNumber() : 1);
......@@ -4172,6 +4171,7 @@ public class OrderAdapter {
orderPayDto.setPlatforms(platforms);
orderPayDto.setOut_order_no(orderBean.getOid());
orderPayDto.setCardCode(cardNo);
orderPayDto.setApplicationType(getPayApplicationType(orderBean.getOrderClient()));
return orderPayDto;
}
......@@ -4253,7 +4253,6 @@ public class OrderAdapter {
public OrderConditionsReq convent2QueryOrdersDtoES(OrderConditionsReq query, String memberId, String channelType, Integer queryOrderStatus, Integer queryOrderType, Integer queryPayStatus) {
OrderConditionsReq queryOrdersDto = new OrderConditionsReq();
queryOrdersDto.setUserId(memberId);
queryOrdersDto.setPartnerId(query.getPartnerId());
queryOrdersDto.setPageSize(query.getPageSize() != null ? query.getPageSize() : 10);
queryOrdersDto.setPageNum(query.getPageNum() != null ? query.getPageNum() : 1);
......@@ -4265,23 +4264,22 @@ public class OrderAdapter {
List<Integer> orderClients = new ArrayList<>();
if (OrderChannelType.IWC.getCode().equals(channelType)) {
orderClients.add(OrderClientType.WAI_MEAL.getIndex());
//queryOrdersDto.setSource(new String[]{"meals"});
orderClients.add(OrderClientType.ALIPAY.getIndex());
} else if (OrderChannelType.SAASMALL.getCode().equals(channelType)) {
orderClients.add(OrderClientType.SAASMALL.getIndex());
//queryOrdersDto.setSource(new String[]{"saasmall"});
} else if (OrderChannelType.APP.getCode().equals(channelType)) {
orderClients.add(OrderClientType.APP.getIndex());
//queryOrdersDto.setSource(new String[]{"app"});
orderClients.add(OrderClientType.ALIPAY.getIndex());
} else if (OrderChannelType.BEAUTIFUL.getCode().equals(channelType)) {// 美业新加
orderClients.add(OrderClientType.BEAUTIFUL.getIndex());
orderClients.add(OrderClientType.ALIPAY.getIndex());
} else if (OrderChannelType.CASHIER.getCode().equals(channelType)) {
orderClients.add(OrderClientType.CASHIER.getIndex());
} else {
orderClients.add(OrderClientType.SAAS.getIndex());
//queryOrdersDto.setSource(new String[]{"saas"});
orderClients.add(OrderClientType.ALIPAY.getIndex());
}
orderClients.add(OrderClientType.TIKTOKPAY.getIndex());
orderClients.add(OrderClientType.ALIPAY.getIndex());
queryOrdersDto.setOrderClients(orderClients);
List<Integer> payStatus = new ArrayList<>();
......@@ -4622,4 +4620,25 @@ public class OrderAdapter {
return name;
}
/**
* 礼品卡支付参数转化
*/
public Integer getPayApplicationType(String orderClient) {
Integer applicationType = PayApplicationTypeEnum.WECHAT.getType();
switch (orderClient) {
case "2":
applicationType = PayApplicationTypeEnum.WECHAT.getType();
break;
case "3":
applicationType = PayApplicationTypeEnum.ALIPAY.getType();
break;
case "27":
applicationType = PayApplicationTypeEnum.BYTE_DANCE.getType();
break;
default:
break;
}
return applicationType;
}
}
package cn.freemud.entities.dto.member;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* @author Clover.z
* @Date 2021/11/2
* @Desc
*/
@Data
@AllArgsConstructor
public class GetMemberIdsReq {
/**
* 商户号
*/
private String partnerId;
/**
* 会员编号
*/
private String memberId;
}
package cn.freemud.entities.dto.member;
import lombok.Data;
import java.util.List;
/**
* @author Clover.z
* @Date 2021/11/2
* @Desc
*/
@Data
public class GetMemberIdsResp {
private String code;
private String message;
private List<String> data;
}
package cn.freemud.entities.dto.order;
import com.freemud.application.sdk.api.paymentcenter.client.request.CodePayRequest;
import lombok.Data;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
......@@ -32,6 +35,13 @@ public class FacePayRequestDto {
private Long clientCode;
private String code;
private Long undisAmount;
// private List<CodePayRequest.PayProduct> products;
private String payCode;
private String cardPassword;
private Long merchantDiscount;
//下单所用小程序类型:1微信,2支付宝,3抖音 礼品卡支付新增,记录渠道
private Integer applicationType;
private List<CodePayRequest.PayProduct> products;
}
......@@ -41,6 +41,11 @@ public class ShoppingCartGoodsDto {
private Long packageAmount;
/**
* 包装费 收费规则 1= 商品级别 2=订单级别
*/
private Integer packageAmountCollectType;
/**
* 积分扣减金额
*/
private Long scoreReduceAmount;
......
package cn.freemud.enums;
public enum PayApplicationTypeEnum {
WECHAT(1, "微信小程序"),
ALIPAY(2, "支付宝小程序"),
BYTE_DANCE(3, "抖音小程序"),
;
private int type;
private String desc;
PayApplicationTypeEnum() {
}
PayApplicationTypeEnum(Integer type, String desc) {
this.type = type;
this.desc = desc;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
package cn.freemud.service.customer;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.dto.member.GetMemberIdsReq;
import cn.freemud.entities.dto.member.GetMemberIdsResp;
import cn.freemud.service.thirdparty.CustomerClient;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
/**
* @author Clover.z
* @Date 2021/11/2
* @Desc 会员信息通用
*/
@Component
@RequiredArgsConstructor
public class MemberInfoManager {
private final CustomerClient customerClient;
/**
* 查询会员名下的所有会员id(合并前的)
* @param partnerId 商户号
* @param memberId 会员编号
* @return 所有的会员id集合
*/
public List<String> getMemberAllIds(String partnerId, String memberId) {
List<String> result = new ArrayList<>();
GetMemberIdsReq query = new GetMemberIdsReq(partnerId, memberId);
try {
GetMemberIdsResp resp = customerClient.getMemberIds(query);
if (null == resp || !ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(resp.getCode()) || CollectionUtils.isEmpty(resp.getData())) {
result.add(memberId);
} else {
result = resp.getData();
}
} catch (Exception e) {
// 该接口如果异常,不影响主链路流程
result.add(memberId);
}
return result;
}
}
......@@ -55,6 +55,7 @@ import cn.freemud.redis.RedisCache;
import cn.freemud.service.CouponActivityService;
import cn.freemud.service.Orderservice;
import cn.freemud.service.business.OrderBusinessService;
import cn.freemud.service.customer.MemberInfoManager;
import cn.freemud.service.order.OrderRelationFactory;
import cn.freemud.service.order.OrderRelationService;
import cn.freemud.service.thirdparty.*;
......@@ -241,6 +242,8 @@ public class OrderServiceImpl implements Orderservice {
@Autowired
private OrderManager orderManager;
@Autowired
private MemberInfoManager memberInfoManager;
@Autowired
private OrderServiceClient orderServiceClient;
......@@ -768,6 +771,9 @@ public class OrderServiceImpl implements Orderservice {
BeanUtil.convertBean(queryOrdersDto, queryOrdersRequest2);
queryOrdersRequest2.setTrackingNo(LogThreadLocal.getTrackingNo());
queryOrdersRequest2.setNeedInvoice(queryOrderVo.getNeedInvoice());
// 查询支持查询会员合并后的所有订单
List<String> memberIds = memberInfoManager.getMemberAllIds(partnerId, userId);
queryOrdersRequest2.setUserIds(memberIds);
if (Objects.equals(QueryOrderStatus.REFUND_BILL.getCode(), queryOrderVo.getQueryOrderStatus())) {
queryOrdersRequest2.setPayStatus(new Integer[]{3});//发票其他订单查询已退款
}
......@@ -783,6 +789,7 @@ public class OrderServiceImpl implements Orderservice {
es.setMarketingType(queryOrderVo.getMarketingType());
OrderConditionsReq queryEs = orderAdapter.convent2QueryOrdersDtoES(es, userId, channelType, queryOrderVo.getQueryOrderStatus(), queryOrderVo.getQueryOrderType(), queryOrderVo.getQueryPayStatus());
queryEs.setNeedInvoice(queryOrderVo.getNeedInvoice());
queryEs.setUserIds(memberIds);
BaseDownLoadResponse<List<OrderInfoReqs>> response = orderDownLoadSdkService.queryOrderByConditions(queryEs, LogThreadLocal.getTrackingNo());
queryOrderResponse = orderAdapter.conventEs2queryOrderResponse(response);
......@@ -2696,6 +2703,9 @@ public class OrderServiceImpl implements Orderservice {
if (null != shoppingCartGoodsDto && null != shoppingCartGoodsDto.getTotalScore()) {
orderExtInfoDto.setTotalScore(shoppingCartGoodsDto.getTotalScore());
}
if (null != shoppingCartGoodsDto && null != shoppingCartGoodsDto.getPackageAmountCollectType()) {
orderExtInfoDto.setPackageAmountCollectType(shoppingCartGoodsDto.getPackageAmountCollectType());
}
orderExtInfoDto.setUnDistribution(createOrderVo.getUnDistribution());
return orderExtInfoDto;
......
......@@ -735,7 +735,7 @@ public class PayServiceImpl {
* 纯储值卡或礼品卡支付
*/
public OrderPayResponse svcPay(String cardCode, OrderBeanV1 orderBean, PaymentRequest paymentRequest, String transId, String trackingNo) {
CodePayRequest request = new CodePayRequest();
FacePayRequestDto request = new FacePayRequestDto();
OrderPayResponse orderPayResponse = new OrderPayResponse();
String partnerId = orderBean.getCompanyId();
request.setBody(orderBean.getShopName());
......@@ -749,6 +749,7 @@ public class PayServiceImpl {
request.setOperatorId("1");
request.setVer("2");
request.setMerchantDiscount(orderBean.getOriginalAmount().longValue() - orderBean.getAmount());
request.setApplicationType(orderAdapter.getPayApplicationType(orderBean.getOrderClient()));
SVCCardAmountRequestDto svcRequest = new SVCCardAmountRequestDto();
svcRequest.setPartnerId(partnerId);
svcRequest.setCardCodes(Arrays.asList(cardCode));
......@@ -769,12 +770,13 @@ public class PayServiceImpl {
return orderPayResponse;
}
//svc卡支付
com.freemud.application.sdk.api.base.BaseResponse<CodePayResponse> responseBase = paymentNewService.codePay(request, trackingNo);
if (responseBase == null || !ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(responseBase.getCode()) || responseBase.getData().getData() == null) {
com.freemud.application.sdk.api.base.BaseResponse<FacePayResponseDto> responseBase = paymentNewClient.codePay(request);
if (responseBase == null || !ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(responseBase.getCode())
|| responseBase.getData() == null || !Objects.equals(responseBase.getData().getResultCode(), ResponseCodeConstant.RESPONSE_SUCCESS)) {
// 1.9.34 预支付失败需要把原因进行记录
orderPayResponse.setMsg(Objects.isNull(responseBase) ? "卡支付异常" : responseBase.getMessage());
} else {
CodePayResponse.CodePayDate codePayResponse = responseBase.getData().getData();
FacePayResponseDto codePayResponse = responseBase.getData();
orderPayResponse.setFmId(codePayResponse.getFmId());
orderPayResponse.setPayTransId(codePayResponse.getPayTransId());
orderPayResponse.setWxAppid(paymentRequest.getWxAppId());
......
......@@ -14,7 +14,12 @@
package cn.freemud.service.thirdparty;
import cn.freemud.annotations.LogIgnoreFeign;
import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.GetMemberExtendInfoRequestDto;
import cn.freemud.entities.dto.GetMemberExtendInfoResponseDto;
import cn.freemud.entities.dto.GetMemberInfoByIdRequestDto;
import cn.freemud.entities.dto.GetMemberInfoByIdResponseDto;
import cn.freemud.entities.dto.member.GetMemberIdsReq;
import cn.freemud.entities.dto.member.GetMemberIdsResp;
import com.freemud.application.sdk.api.base.BaseResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
......@@ -48,6 +53,16 @@ public interface CustomerClient {
*/
@PostMapping(value = "/customerservice/getMemberById")
GetMemberInfoByIdResponseDto getMemberInfoById(@RequestBody GetMemberInfoByIdRequestDto getMemberInfoByIdRequestDto);
/**
* 查询memberId的对应的客户下所有会员编号(资产合并前的)
*/
@PostMapping("/customerservice/customer/getMemberIds")
@LogIgnoreFeign
GetMemberIdsResp getMemberIds(@RequestBody GetMemberIdsReq request);
//
// /**
// * 修改顾客信息
......
......@@ -58,4 +58,10 @@ public interface PaymentNewClient {
@PostMapping("paymentcenter/invoice/create")
com.freemud.application.sdk.api.base.BaseResponse<InvoiceCreateResponse> createInvoice(@RequestBody InvoiceCreateRequest request);
//线下付,储值卡/礼品卡支付
@LogIgnoreFeign(logMessage="codePay",statusCodeFieldName= ResponseCodeKeyConstant.STATUS_CODE)
@PostMapping("paymentcenter/codePay")
com.freemud.application.sdk.api.base.BaseResponse<FacePayResponseDto> codePay(@RequestBody FacePayRequestDto orderPayDto);
}
......@@ -215,4 +215,10 @@ public class OrderExtInfoDto {
* 1 表示不分账 ,其他情况 不传值 给基础服务
*/
private Integer unDistribution;
/**
* 包装费 收费规则 1= 商品级别 2=订单级别
*/
private Integer packageAmountCollectType;
}
......@@ -22,6 +22,11 @@ public class OrderUserConditionsReq {
//用户ID
private String userId;
/**
* 用户id集合(userId和userIds两者不能同时为空)
*/
private List<String> userIds;
//商户号
private String partnerId;
......
......@@ -12,17 +12,13 @@
*/
package cn.freemud.adapter;
import cn.freemud.entities.dto.GetMenuResponseDto;
import cn.freemud.entities.dto.activity.ActivityDiscountsDto;
import cn.freemud.entities.dto.calculate.ApportionDetails;
import cn.freemud.entities.dto.calculate.ApportionGoods;
import cn.freemud.entities.dto.calculate.SendGoods;
import cn.freemud.entities.dto.openplatform.WeixinProductRequestDto;
import cn.freemud.entities.dto.product.*;
import cn.freemud.entities.dto.product.info.GroupDetailType;
import cn.freemud.entities.dto.product.info.ProductComboType;
import cn.freemud.entities.dto.product.info.ProductGroupType;
import cn.freemud.entities.dto.product.info.SkuProductBean;
import cn.freemud.entities.dto.product.info.*;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.ActivityTypeEnum;
......@@ -405,10 +401,10 @@ public class ShoppingCartConvertAdapter {
cartGoodsRequestVo.setAppId(request.getAppId());
cartGoodsRequestVo.setSpuId(request.getEncryptCode());
// cartGoodsRequestVo.setSkuId(getProductsVo.getSkuId());
List<GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean.ProductAttributeGroupListBean> productAttributeGroupList = getProductsVo.getProductAttributeGroupList();
List<ProductAttributeGroupListBean> productAttributeGroupList = getProductsVo.getProductAttributeGroupList();
if (productAttributeGroupList != null && productAttributeGroupList.size() > 0) {
List<CartGoods.CartGoodsExtra> cartGoodsExtraList = new ArrayList<>();
for (GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean.ProductAttributeGroupListBean productAttributeList : productAttributeGroupList) {
for (ProductAttributeGroupListBean productAttributeList : productAttributeGroupList) {
CartGoods.CartGoodsExtra goodsExtra = new CartGoods.CartGoodsExtra();
goodsExtra.setAttributeId(productAttributeList.getAttributeValues().get(0).getAttributeId());
goodsExtra.setAttributeName(productAttributeList.getAttributeValues().get(0).getAttributeValue());
......
......@@ -13,7 +13,6 @@
package cn.freemud.adapter;
import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.CProductType;
import cn.freemud.enums.ProductType;
......@@ -223,63 +222,6 @@ public class StoreItemAdapter {
}
public ProductVo convert2ProductVo(GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean productBean) {
ProductVo productVo = BeanUtil.convertBean(productBean, ProductVo::new);
productVo.setStatusDesc(Optional.ofNullable(StoreItemStatus.getByCode(productVo.getStatus()))
.map(StoreItemStatus::getDesc).orElse(""));
List<ProductGroupDto> productGroups = Lists.newArrayList();
if (CollectionUtils.isNotEmpty(productBean.getProductAttributeGroupList())) {
productBean.getProductAttributeGroupList().sort(Comparator.comparing(ProductBean.ProductAttributeGroupListBean::getAttributeType));
for (ProductBean.ProductAttributeGroupListBean attribute : productBean.getProductAttributeGroupList()) {
ProductGroupDto productGroupDto = new ProductGroupDto();
productGroupDto.setName(attribute.getAttributeName());
List<ProductGroupDto.GroupDetailBean> groupDetailBeans = Lists.newArrayList();
if (CollectionUtils.isNotEmpty(attribute.getAttributeValues())) {
for (ProductBean.ProductAttributeGroupListBean.AttributeValueBean attributeValue : attribute.getAttributeValues()) {
/**
* 过滤下架的规格和售罄的规格
*/
if (StoreItemStatus.PUT_ON_SALE.getCode().equals(attributeValue.getStatus())) {
ProductGroupDto.GroupDetailBean groupDetailBean = new ProductGroupDto.GroupDetailBean();
groupDetailBean.setGroupId(attribute.getAttributeType().toString());
groupDetailBean.setProductId(attributeValue.getAttributeId());
groupDetailBean.setProductName(attributeValue.getAttributeValue());
groupDetailBean.setSequence(attributeValue.getSequence());
groupDetailBean.setProductFinalPrice(attributeValue.getPrice());
groupDetailBean.setProductPrice(attributeValue.getPrice());
groupDetailBean.setStatus(attributeValue.getStatus());
groupDetailBean.setStatusDesc(Optional.ofNullable(StoreItemStatus.getByCode(attributeValue.getStatus()))
.map(StoreItemStatus::getDesc).orElse(""));
groupDetailBeans.add(groupDetailBean);
}
}
}
productGroupDto.setGroupDetail(groupDetailBeans);
//如果规格为空则不返回该规格
if (CollectionUtils.isNotEmpty(groupDetailBeans)) {
productGroups.add(productGroupDto);
}
}
//设置规格类型
productVo.setType(8);
}
if (CollectionUtils.isNotEmpty(productBean.getProductPictureList())) {
productVo.setPicture(productBean.getProductPictureList().get(0).getUrl());
}
//商品标签信息
List<ProductVo.ProductLabel> productLabels = Lists.newArrayList();
if (CollectionUtils.isNotEmpty(productBean.getLabelNames())) {
productBean.getLabelNames().forEach(label -> {
ProductVo.ProductLabel productLabel = new ProductVo.ProductLabel();
productLabel.setLabelName(label.getName());
productLabels.add(productLabel);
});
}
productVo.setProductLabels(productLabels);
productVo.setProductGroups(productGroups);
return productVo;
}
/**
* 处理多余规格
* 多规格商品的下架或者不是限时特购商品去除不需要的规格值
......
......@@ -22,6 +22,7 @@ import cn.freemud.entities.vo.coupon.CouponAvailableRequestVo;
import cn.freemud.enums.CouponTypeEnum;
import cn.freemud.enums.OrderChannelType;
import cn.freemud.enums.ResponseResult;
import cn.freemud.service.CartGiftService;
import cn.freemud.service.OpenStoreIappWxappConfigService;
import cn.freemud.service.ShoppingCartNewService;
import cn.freemud.service.impl.ShoppingCartMallServiceImpl;
......@@ -29,7 +30,6 @@ import cn.freemud.service.impl.ShoppingCartMealServiceImpl;
import cn.freemud.service.impl.ShoppingCartNewServiceImpl;
import cn.freemud.service.impl.ShoppingCartToolsServiceImpl;
import cn.freemud.utils.ResponseUtil;
import com.alibaba.fastjson.JSON;
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
import com.freemud.api.assortment.datamanager.enums.IappIdType;
import com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager;
......@@ -38,8 +38,8 @@ import com.freemud.application.sdk.api.log.ApiAnnotation;
import com.freemud.application.sdk.api.log.LogParams;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl;
import com.freemud.sdk.api.assortment.shoppingcart.util.ShoppingSdkLogUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import ma.glasnost.orika.MapperFacade;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
......@@ -70,6 +70,8 @@ public class ShoppingCartController {
@Autowired
private ShoppingCartDemoController shoppingCartDemoController;
@Autowired
private CartGiftService cartGiftService;
@Resource
private MapperFacade mapperFacade;
......@@ -115,6 +117,14 @@ public class ShoppingCartController {
}
}
@IsConvertEN
@PostMapping(value = "/updateGiftAttr")
@ApiAnnotation(logMessage = "updateGiftAttr")
@ApiOperation("修改购物车中赠品的属性")
public BaseResponse<CartGoods> updateGiftAttr(@Validated @LogParams @RequestBody UpdateGiftAttrRequestVo request) {
return ResponseUtil.success(cartGiftService.updateGiftAttr(request));
}
/**
* 查询购物车信息
*/
......
......@@ -3,9 +3,9 @@ package cn.freemud.demo.adapter.manager;
import cn.freemud.demo.entities.bo.goods.ProductBO;
import cn.freemud.demo.entities.bo.goods.ValiadShopProductBO;
import cn.freemud.demo.entities.bo.product.ProductStockBO;
import cn.freemud.entities.dto.GetMenuResponseDto;
import cn.freemud.entities.dto.GetProductStockResponseDto;
import cn.freemud.entities.dto.product.ValiadShopProductResponse;
import cn.freemud.entities.dto.product.info.ProductBean;
import cn.freemud.utils.BeanUtil;
import ma.glasnost.orika.MapperFacade;
import org.springframework.stereotype.Component;
......@@ -19,7 +19,7 @@ public class ProductDTO2BOAdapter {
@Resource
private MapperFacade mapperFacade;
public ProductBO convert2ProductBO(GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean productBeanDTO) {
public ProductBO convert2ProductBO(ProductBean productBeanDTO) {
ProductBO productBO = BeanUtil.convertBean(productBeanDTO, ProductBO::new);
productBO.setGoodsId(productBeanDTO.getPid());
......
package cn.freemud.demo.entities.bo.goods;
import cn.freemud.entities.dto.GetMenuResponseDto;
import cn.freemud.entities.dto.product.info.ProductAttributeGroupListBean;
import cn.freemud.entities.vo.CartGoods;
import lombok.Data;
......@@ -38,7 +38,7 @@ public class GetProductBySkuIdResponseBO {
/**
* 属性
*/
private List<GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean.ProductAttributeGroupListBean> productAttributeGroupList;
private List<ProductAttributeGroupListBean> productAttributeGroupList;
/**
* 分类id
*/
......
......@@ -11,6 +11,7 @@ import cn.freemud.demo.entities.bo.product.ProductStockBO;
import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.product.ValiadShopProductResponse;
import cn.freemud.entities.dto.product.ValidateShopProductRequest;
import cn.freemud.entities.dto.product.info.ProductBean;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.ItemService;
......@@ -61,11 +62,11 @@ public class KgdProductServiceImpl implements ProductService {
public List<ProductBO> getProductInfo(GetProductBO getProductBO) {
// 获取添加商品的详细信息
List<GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean> productBeanListSpuClass = assortmentSdkService.getProductsInfo(getProductBO.getPartnerId(),
List<ProductBean> productBeanListSpuClass = assortmentSdkService.getProductsInfo(getProductBO.getPartnerId(),
getProductBO.getStoreId(), getProductBO.getGoodsId(), getProductBO.getMenuType(), shoppingCartBaseService);
List<ProductBO> productList = new ArrayList<>();
for (GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean dto : productBeanListSpuClass){
for (ProductBean dto : productBeanListSpuClass){
ProductBO platformProductBO = productDTO2BOAdapter.convert2ProductBO(dto);
productList.add(platformProductBO);
}
......
//package cn.freemud.entities.dto;
//
//import lombok.Data;
//import lombok.NoArgsConstructor;
//
//import java.util.List;
//import java.util.Objects;
//
//@Data
//public class ActivityCalculationDiscountRequestDto {
// /**
// * 区域
// */
// private String area;
// /**
// * 可用渠道
// */
// private String channel;
// /**
// * 渠道
// */
// private String productChannel;
// /**
// * 绑定的小程序id
// */
// private String appId;
// /**
// * i应用传isaas,快中台传fast
// */
// private String application = "isaas";
// /**
// * 是否展示活动列表 0:默认,不展示 1:展示
// */
// private Integer isShowActivities;
// /**
// * 是否显示商品的活动信息 0:默认,不展示 1:展示
// */
// private Integer isShowGoodsActivity;
// /**
// * 商户
// */
// private String partnerCode;
// /**
// * 门店
// */
// private String storeId;
//
// /**
// * 门店的组织机构树
// */
// private List<String> orgIds;
//
// /**
// * 用户id(有优惠券时,该字段必传)
// */
// private String userId;
// /**
// * 版本号
// */
// private Integer ver;
// /**
// * 优惠券集合
// */
// private List<CalculationDiscountCoupon> coupons;
// /**
// * 商品集合
// */
// private List<CalculationDiscountGoods> goods;
//
// private Long distributionFee;
// /**
// * 购买月卡费用(分)
// */
// private Long payCardFee;
// /**
// * 是否是会员
// */
// private Boolean isMember;
//
// @Data
// public static class CalculationDiscountCoupon {
// /**
// * 优惠券码
// */
// private String code;
// /**
// * 活动号
// */
// private String activityCode;
// /**
// * 购物车商品行uid(种子券商品才传)
// */
// private String cartGoodsUid;
// /**
// * 优惠券类型
// */
// private Integer couponType;
// }
//
// @Data
// public static class CalculationDiscountGoods {
// /**
// * 键位编号(麦咖啡)
// */
// private String goodsCode;
// /**
// * 商品核销券号
// */
// private String couponCode;
// /**
// * 商品ID
// */
// private String goodsId;
// /**
// * 购物车行uid
// */
// private String cartGoodsUid;
// /**
// * 加车时间
// */
// private Long addCartTime;
// /**
// * 商品品类
// */
// private String category;
// /**
// * 商品数量
// */
// private Integer goodsQuantity;
// /**
// * 原价(分)
// */
// private Long originalPrice;
// /**
// * 折扣比例
// * 例如8折为80
// */
// private Integer memberDiscount;
// /**
// * 加料
// */
// private List<Material> smallMaterial;
// private String spuId;
//
// @Override
// public boolean equals(Object o) {
// if (this == o)
// return true;
// if (o == null || getClass() != o.getClass())
// return false;
// CalculationDiscountGoods that = (CalculationDiscountGoods) o;
// return Objects.equals(goodsId, that.goodsId) &&
// Objects.equals(category, that.category) &&
// Objects.equals(cartGoodsUid, that.cartGoodsUid) &&
// Objects.equals(originalPrice, that.originalPrice);
// }
//
// @Override
// public int hashCode() {
// return Objects.hash(super.hashCode(), goodsId, category, originalPrice);
// }
//
// @Data
// @NoArgsConstructor
// static public class Material {
// /**
// * 加料商品ID
// */
// private String goodsId;
// /**
// * 加料数量
// */
// private Integer goodsQuantity;
// /**
// * 加料原价
// */
// private Long originalPrice;
// /**
// * 加料现价
// */
// private Integer nowPrice;
// /**
// * 1 :小料、2:可选搭配
// */
// private int type;
// }
// }
//
//}
......@@ -35,6 +35,7 @@ public class GetCouponDetailResponseDto {
private Integer storeChannelLimit;
private Active active;
private List<ActiveProduct> activeProduct;
//活动门店限制(非发券指定门店活动使用)
private List<ActiveRestrictionVOS> activeRestrictionVOS;
/**
* 可核销周,时间段设置
......@@ -66,6 +67,8 @@ public class GetCouponDetailResponseDto {
private List<ActiveChannel> activeChannels;
// private List<ActiveRedeemTimeIntervalVO> activeRedeemTimeIntervalList;
private Integer storeLimitLevel;
//为0可用
private Integer storelimit;
private String limitStoreId;
// private Integer today_available_times;
private Integer total_available_times;
......
......@@ -12,7 +12,7 @@
*/
package cn.freemud.entities.dto;
import cn.freemud.entities.dto.GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean;
import cn.freemud.entities.dto.product.info.ProductBean;
import lombok.Data;
import lombok.NoArgsConstructor;
......
......@@ -38,6 +38,11 @@ public class GetProductInfoDto {
private Integer productInfoType;
/**
* 查询商品的属性(不管spu还是sku,都返回其spu对于的属性信息)
*/
private Boolean autoFillSkuAttr = false;
/**
* 门店商品渠道,不传则默认为default,仅对开放了门店商品渠道信息商户使用,请慎用该参数
*/
private String channel;
......
......@@ -12,7 +12,7 @@
*/
package cn.freemud.entities.dto;
import cn.freemud.entities.dto.GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean;
import cn.freemud.entities.dto.product.info.ProductBean;
import lombok.Data;
import lombok.NoArgsConstructor;
......@@ -24,7 +24,6 @@ public class ProductInfosDto {
private DataBean data;
private Integer errcode;
private Integer code;
private String errmsg;
@NoArgsConstructor
......
......@@ -9,6 +9,9 @@ public class PackAmountConfig {
private List<CollectType> collectType;
//自定义字段,非缓存对象
private Long newPackAmount;
@Data
public static class CollectType {
......
......@@ -7,8 +7,32 @@ import java.util.List;
@Data
public class ProductAttributeGroupListBean {
/**
* 名称
*/
private String attributeName;
/**
* 别名
*/
private String foreignAttributeName;
/**
* 属性类型
*/
private Integer attributeType;
/**
* 三方编号
*/
private String customerCode;
private Integer maxNumber;
private Integer minNumber;
private Integer must;
private String options;
/**
* 排序,越小越靠前
*/
private Integer sequence;
private List<AttributeValueBean> attributeValues;
}
package cn.freemud.entities.dto.product.info;
import cn.freemud.entities.dto.BindingCouponTypeDto;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
public class ProductBean {
private String barcode;
private String brandId;
private String brandName;
private String category;
private String categoryName;
private String companyId;
/**
* 加料最大限购
*/
private Integer maxNum;
/**
* 加料最小限购
*/
private Integer minNum;
private String customerCode;
/**
* 最终价格 单位分
*/
private Long finalPrice;
/**
* 是否是SKU商品 1是0否
*/
private Integer isSkuProduct;
private String name;
private String foreignName;
/**
* 原始价格 单位分
*/
private Long originalPrice;
/**
* 包装费 单位分
*/
private Long packPrice;
private String picture;
/**
* 商品id, 单规格为spuId,多规格为skuId
*/
private String pid;
/**
* 商品父id, 多规格商品,该字段为多规格的spuId
*/
private String specProductId;
private Integer pknumber;
private String productionLocation;
private String remark;
private Integer saleCount;
private String sellTimeName;
private Integer sequence;
private String sourceChannel;
private String specification;
private Integer status;
private Integer stock;
private Integer stockLimit;
/**
* type=10 多规格 type=1 单规格
*/
private int type;
/**
* 是否是称重商品 1、表示为称重
*/
private Integer weightType;
/**
* 重量,最多四位小数,单位kg
*/
private Double weight;
/**
* 税率代码
*/
private String taxId;
/**
* 税率
*/
private Double tax;
private String unit;
private int updateStatus;
private boolean valid;
private int version;
private List<ProductLabelNameListBean> labelNames;
private List<ProductAttributeGroupListBean> productAttributeGroupList;
private List<?> productGroupList;
private List<ProductPictureListBean> productPictureList;
private List<?> productSpecification;
private List<?> sellTimeList;
private List<?> specificationList;
//SKU
private List<SkuProductBean> skuList;
//规格信息
private List<SpecificationGroupBean> specificationGroupList;
//Sku 规格 如果 当前是sku 则有值
private List<SkuSpecValue> skuSpecValues;
/**
* 虚拟商品 绑定的券信息
*/
private List<BindingCouponTypeDto> productBindingCouponTypes;
@NoArgsConstructor
@Data
public static class SpecificationGroupBean {
private String partnerId;
private Integer sequence;
private String specId;
private String specName;
private String foreignSpecName;
private List<SpecValueVo> specValueVos;
@NoArgsConstructor
@Data
public static class SpecValueVo {
private Integer sequence;
private String specId;
private String specValue;
private String foreignSpecValue;
private String specValueId;
}
}
@NoArgsConstructor
@Data
public static class ProductLabelNameListBean {
private String id;
private String name;
private String foreignName;
private String partnerId;
List<?> productList;
private String storeId;
private String type;
}
}
\ No newline at end of file
......@@ -60,6 +60,11 @@ public class ShoppingCartGoodsDto {
* 购物车总包装费
*/
private Long packageAmount;
/**
* 包装费 收费规则 1= 商品级别 2=订单级别
*/
private Integer packageAmountCollectType;
/**
* 积分扣减金额
*/
......
......@@ -18,4 +18,7 @@ public class GetMemberCouponRequestVo {
private String couponCode;
// 门店ID
private String storeId;
//是否 校验券门店是否可用
private Boolean checkStoreId = false;
}
package cn.freemud.entities.vo;
import cn.freemud.entities.dto.BindingCouponTypeDto;
import cn.freemud.entities.dto.GetMenuResponseDto;
import cn.freemud.entities.dto.product.info.ProductAttributeGroupListBean;
import lombok.Data;
import java.util.List;
......@@ -37,7 +37,7 @@ public class GetProductsVo {
/**
* 属性
*/
private List<GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean.ProductAttributeGroupListBean> productAttributeGroupList;
private List<ProductAttributeGroupListBean> productAttributeGroupList;
/**
* 分类id
*/
......
......@@ -59,6 +59,11 @@ public class ShoppingCartGoodsResponseVo extends ShoppingCartGoodsBaseResponseV
private Long newPackAmount;
/**
* 包装费 收费规则 1= 商品级别 2=订单级别
*/
private Integer packageAmountCollectType;
/**
* 优惠券折扣
*/
private Long couponDiscount;
......
package cn.freemud.entities.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.util.List;
/**
* @author Clover.z
* @Date 2021/11/1
* @Desc
*/
@Data
public class UpdateGiftAttrRequestVo {
/**
* 商户Id
*/
@ApiModelProperty("商户Id")
@NotBlank(message = "partnerId不能为空")
private String partnerId;
/**
* 门店号
*/
@ApiModelProperty("门店号")
@NotBlank(message = "shopId不能为空")
private String shopId;
/**
* 用户登陆session
*/
@ApiModelProperty("用户登陆session")
@NotBlank(message = "请先登陆")
private String sessionId;
/**
* 要更新的购物车赠品行id
*/
@ApiModelProperty("要更新的购物车赠品行id")
@NotBlank(message = "购物车行id不能为空")
private String uid;
/**
* 赠品选择的属性信息
*/
@ApiModelProperty("赠品选择的属性信息")
@NotEmpty(message = "请选择属性")
@Valid
private List<ExtraAttr> extra;
@Data
public static class ExtraAttr {
@ApiModelProperty("属性id")
@NotBlank
private String attributeId;
@ApiModelProperty("属性名称")
@NotBlank
private String attributeName;
}
}
......@@ -37,19 +37,22 @@ public class CommonFunctionHandle {
/**
* 查询配置,比较配送费
*/
public Long packAmountConfig(ShoppingCartInfoRequestVo shoppingCartInfoRequestVo, Long newPackAmount,Long totalAmount) {
public PackAmountConfig getPackAmountByOrderConfig(ShoppingCartInfoRequestVo shoppingCartInfoRequestVo, PackAmountConfig newPackAmountConfig,Long totalAmount) {
if (Objects.equals(shoppingCartInfoRequestVo.getOrderType(), CreateOrderType.TAKE_OUT.getCode())
|| Objects.equals(shoppingCartInfoRequestVo.getReachStoreType(), OrderType.COLLECT_GOODS.getCode())) {
String redisKey = RedisUtil.packAmountConfig + shoppingCartInfoRequestVo.getPartnerId() + "_" + null;
String value = redisCache.hashGet(redisKey, "packAmountType");
if(StringUtils.isEmpty(value)){
return newPackAmount;
return newPackAmountConfig;
}
Long newPackAmount = newPackAmountConfig.getNewPackAmount();
ApiLog.printLog("查询订单餐盒费配置", String.valueOf(newPackAmount), String.valueOf(totalAmount), value);
PackAmountConfig packAmountConfig = JSONObject.parseObject(value, PackAmountConfig.class);
//按商品级别收取餐盒费
if(packAmountConfig == null || CollectionUtils.isEmpty(packAmountConfig.getCollectType())){
return newPackAmount;
return newPackAmountConfig;
}
//按订单级别收取餐盒费
List<PackAmountConfig.CollectType> collectTypes = packAmountConfig.getCollectType();
collectTypes.sort((p1, p2) -> p2.getOrderAmount() - p1.getOrderAmount());
newPackAmount = 0L;
......@@ -59,8 +62,10 @@ public class CommonFunctionHandle {
break;
}
}
newPackAmountConfig.setNewPackAmount(newPackAmount);
newPackAmountConfig.setCollectType(collectTypes);
}
return newPackAmount;
return newPackAmountConfig;
}
/**
......@@ -70,11 +75,15 @@ public class CommonFunctionHandle {
* @param newPackAmount
* @return 外卖 true 打包带走 false null 为其他业务问题 不进入需求
*/
public Long getPackAmountByStoreConfig(ShoppingCartInfoRequestVo shoppingCartInfoRequestVo, Long newPackAmount,Long totalAmount) {
public PackAmountConfig getPackAmountByStoreConfig(ShoppingCartInfoRequestVo shoppingCartInfoRequestVo, Long newPackAmount,Long totalAmount) {
PackAmountConfig newPackAmountConfig = new PackAmountConfig();
newPackAmountConfig.setNewPackAmount(newPackAmount);
if (Objects.isNull(shoppingCartInfoRequestVo)) {
return newPackAmount;
return newPackAmountConfig;
}
newPackAmount = packAmountConfig(shoppingCartInfoRequestVo, newPackAmount, totalAmount);
//查询餐盒费配置,按订单金额或商品配置
newPackAmountConfig = getPackAmountByOrderConfig(shoppingCartInfoRequestVo, newPackAmountConfig, totalAmount);
newPackAmount = newPackAmountConfig.getNewPackAmount();
Boolean isTakeOut = null;
if (Objects.equals(shoppingCartInfoRequestVo.getOrderType(), CreateOrderType.TAKE_OUT.getCode())) {
isTakeOut = true;
......@@ -83,10 +92,12 @@ public class CommonFunctionHandle {
}
ApiLog.printLog("自提根据模板配置计算餐具包装费", String.valueOf(newPackAmount), String.valueOf(isTakeOut), null);
if (Objects.isNull(newPackAmount) || newPackAmount.compareTo(0L) == 0) {
return 0L;
newPackAmountConfig.setNewPackAmount(0L);
return newPackAmountConfig;
}
//isTakeOut 非外卖或到店自提,直接返回
if (Objects.isNull(isTakeOut)) {
return newPackAmount;
return newPackAmountConfig;
}
GetStoreMixRequest request = GetStoreMixRequest.builder().partnerId(shoppingCartInfoRequestVo.getPartnerId()).storeCode(shoppingCartInfoRequestVo.getShopId()).build();
// 查询 业务设置信息数据
......@@ -101,18 +112,20 @@ public class CommonFunctionHandle {
// 外卖 是否计算 包装费
if (Objects.nonNull(expandFields.getDeliveryPackageFeeSwitch())
&& ExpandFieldsDTO.STR_FALSE.equals(expandFields.getDeliveryPackageFeeSwitch())) {
return 0L;
newPackAmountConfig.setNewPackAmount(0L);
return newPackAmountConfig;
}
} else {
// 打包带走 是否计算包装费
if (Objects.nonNull(expandFields.getPickupPackageFeeSwitch())
&& ExpandFieldsDTO.STR_FALSE.equals(expandFields.getPickupPackageFeeSwitch())) {
return 0L;
newPackAmountConfig.setNewPackAmount(0L);
return newPackAmountConfig;
}
}
}
}
return newPackAmount;
return newPackAmountConfig;
}
}
package cn.freemud.service;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.UpdateGiftAttrRequestVo;
/**
* @author Clover.z
* @Date 2021/11/1
* @Desc 购物车赠品信息Service
*/
public interface CartGiftService {
/**
* 更新赠品的购物车行中属性信息
* @param requestVo
* @return
*/
CartGoods updateGiftAttr(UpdateGiftAttrRequestVo requestVo);
}
......@@ -20,21 +20,7 @@ import java.util.List;
import java.util.Map;
public interface CouponService {
/**
* 获取优惠券列表
*
* @param getMemberCouponListRequestVo
* @return
*/
// BaseResponse<GetMemberCouponListResponseVo> getCouponList(GetMemberCouponListRequestVo getMemberCouponListRequestVo);
/**
* 添加到微信卡包
*
* @param requestVo
* @return
*/
// AddWeiXinCardResponseVo addWeiXinCard(AddWeiXinCardRequestVo requestVo);
/**
* 获取卡券详情
......@@ -47,40 +33,6 @@ public interface CouponService {
List<GetMemberCouponListResponseDto.Result.MemberCoupon> getValidMemberCouponList(GetMemberCouponListRequestDto getMemberCouponListRequestDto, Integer orderType);
/**
* 批次查询券详情
*
* @param partnerId
* @param storeId
* @param codes
* @return
*/
List<GetCouponDetailResponseDto.Details> getMemberCoupons(String partnerId, String storeId, List<String> codes);
/**
* 获取麦咖啡卡券详情
*
* @param requestVo
* @return
*/
// GetCouponDetailResponseDto getMCCafeMemberCoupon(GetMemberCouponRequestVo requestVo);
/**
* 同步券到会员卡包(投放会员卡包)
*
* @param requestVo
* @return
*/
// BaseResponse receiveMemberCoupon(ReceiveMemberCouponRequestVo requestVo);
/**
* 调用会员接口列表
*
* @param cartGoods
* @return
*/
//ActivityClassifyCouponBean availableCoupon(List<CartGoods> cartGoods, String partnerId, String userId, String storeId, String couponCode, boolean hasGoodsCoupon, Integer orderType, int isNew,String appId,String MenuType, String unChooseCouponCode);
/**
* 调用会员接口列表
*
* @param cartGoods
......@@ -93,18 +45,6 @@ public interface CouponService {
*/
String getAppSecret(String partnerId);
/**
* 获取卡券服务麦咖啡商户密钥
*/
// String getMCCafeAppSecret(String partnerId);
/**
* 通过code校验券是否存在,返回商品券信息pid、price、code
*
* @param requestDto
* @return
*/
// CheckSpqInfoResponseDto checkSpqInfo(CheckSpqInfoRequestDto requestDto);
CheckSpqInfoResponseDto checkSpqInfo(CheckSpqInfoRequestDto requestDto, String goodsId);
......@@ -113,17 +53,6 @@ public interface CouponService {
GetProductsVo getSpqProductInfo(CheckSpqInfoRequestDto requestDto, String goodsId);
// /**
// * 领券
// *
// * @param activityCodes
// * @param partnerId
// * @param storeId
// * @param mobile
// * @param userId
// */
// List<CreateCouponBeanVo> createCoupon(List<ActivityDiscountDto> activityCodes, String partnerId, String storeId, String mobile, String userId);
GetCouponBarCodeResponseVo getCouponBarCode(String couponCode);
......@@ -136,5 +65,4 @@ public interface CouponService {
*/
Map<String, Boolean> couponOrderWay(String partnerId, List<String> activityCodes, Integer orderTye);
void checkValidCoupon(CouponPromotionVO couponPromotionVO, List<String> couponList, Map<String, List<String>> spqIdToCartUuid, String couponCode, List<CartGoods> cartGoodsList);
}
package cn.freemud.service;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.demo.entities.bo.goods.GetProductBySkuIdResponseBO;
import cn.freemud.entities.dto.GetMenuResponseDto;
import cn.freemud.entities.vo.*;
import cn.freemud.entities.dto.product.info.ProductBean;
import cn.freemud.entities.vo.GetProductsVo;
import java.util.List;
import java.util.Map;
......@@ -20,7 +19,7 @@ public interface ItemService {
boolean hasAttributeAll(List<String> attributeIds, GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean productBean);
boolean hasAttributeAll(List<String> attributeIds, ProductBean productBean);
/**
* 通过sku或单品组装MAP商品详情信息
......
......@@ -15,9 +15,9 @@ package cn.freemud.service.active;
import cn.freemud.entities.dto.calculate.ActivityCalculationDiscountRequestDto;
import cn.freemud.entities.dto.calculate.CalculationDiscountResult;
import cn.freemud.entities.dto.product.info.ProductBean;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.ShoppingCartInfoRequestVo;
import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
import java.util.List;
......@@ -35,9 +35,11 @@ public interface ActiveService {
*/
void gifAddCart(List<CartGoods> oldcartGoodsLists,
List<CartGoods> addcartGoodsList,
List<ProductBeanDTO> products ,
List<ProductBean> products ,
ShoppingCartInfoRequestVo shoppingCartInfoRequestVo,
CalculationDiscountResult discountResult,
String partnerId,
String storeId,
String userId,
Integer flag);
}
......@@ -13,13 +13,16 @@
package cn.freemud.service.active.impl;
import cn.freemud.entities.dto.calculate.*;
import cn.freemud.entities.dto.calculate.ActivityCalculationDiscountRequestDto;
import cn.freemud.entities.dto.calculate.CalculationDiscountResult;
import cn.freemud.entities.dto.calculate.Goods;
import cn.freemud.entities.dto.calculate.GoodsDiscount;
import cn.freemud.entities.dto.product.info.ProductBean;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.ShoppingCartInfoRequestVo;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.enums.CalculationGoodsType;
import cn.freemud.service.active.ActiveService;
import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
import com.google.common.collect.Lists;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
......@@ -71,10 +74,12 @@ public class CocoActiveServiceImpl implements ActiveService {
@Override
public void gifAddCart(List<CartGoods> oldcartGoodsLists,
List<CartGoods> addcartGoodsList,
List<ProductBeanDTO> products ,
List<ProductBean> products ,
ShoppingCartInfoRequestVo shoppingCartInfoRequestVo,
CalculationDiscountResult discountResult,
String partnerId,
String storeId,
String userId,
Integer flag) {
// 点餐页赠品分行显示,赠品显示小料
......
......@@ -13,25 +13,37 @@
package cn.freemud.service.active.impl;
import cn.freemud.entities.dto.calculate.*;
import cn.freemud.entities.dto.calculate.ActivityCalculationDiscountRequestDto;
import cn.freemud.entities.dto.calculate.CalculationDiscountResult;
import cn.freemud.entities.dto.calculate.Goods;
import cn.freemud.entities.dto.calculate.GoodsDiscount;
import cn.freemud.entities.dto.product.info.ProductBean;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.ShoppingCartInfoRequestVo;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.enums.CalculationGoodsType;
import cn.freemud.service.active.ActiveService;
import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
import cn.freemud.service.cache.GiftCacheManager;
import cn.freemud.service.impl.BuyAndGiftsPromotionService;
import org.apache.commons.lang.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;
@Service("platformActiveService")
public class PlatformActiveServiceImpl implements ActiveService {
@Autowired
private BuyAndGiftsPromotionService buyAndGiftsPromotionService;
@Autowired
private GiftCacheManager giftCacheManager;
/**
* 用户选择的商品和数量都要传给促销
* @param calculationSharingDiscountRequestDto
......@@ -66,27 +78,29 @@ public class PlatformActiveServiceImpl implements ActiveService {
@Override
public void gifAddCart(List<CartGoods> oldcartGoodsLists,
List<CartGoods> addcartGoodsList, List<ProductBeanDTO> products ,
List<CartGoods> addcartGoodsList,
List<ProductBean> products ,
ShoppingCartInfoRequestVo shoppingCartInfoRequestVo,
CalculationDiscountResult discountResult,
String partnerId,
String storeId,
String userId,
Integer flag) {
Map<String, Goods> discountForGift = this.getDiscountForGift(discountResult);
for (ProductBeanDTO product : products) {
String k = product.getPid();
Goods goods = discountForGift.get(k);
List<CartGoods> list = new ArrayList<>();
for (ProductBean product : products) {
Goods goods = discountForGift.get(product.getPid());
GoodsDiscount discount = goods.getDiscounts()
.stream()
.filter(g -> ActivityTypeEnum.TYPE_63.getCode().equals(g.getType()) ||ActivityTypeEnum.TYPE_62.getCode().equals(g.getType()) || ActivityTypeEnum.TYPE_61.getCode().equals(g.getType()) || ActivityTypeEnum.TYPE_230.getCode().equals(g.getType()))
.findFirst()
.get();
CartGoods cartGood = new CartGoods();
cartGood.setGoodsId(goods.getGoodsId());
cartGood.setGoodsType(1);
cartGood.setSpuId(goods.getGoodsId());
cartGood.setSpuId(Objects.equals(product.getIsSkuProduct(), 1) ? product.getSpecProductId() : goods.getGoodsId());
cartGood.setSkuId(goods.getGoodsId());
cartGood.setOriginalPrice(product.getFinalPrice());
cartGood.setPackPrice(product.getPackPrice());
......@@ -98,6 +112,7 @@ public class PlatformActiveServiceImpl implements ActiveService {
cartGood.setPic(product.getPicture());
cartGood.setSkuName(product.getName());
cartGood.setActivityType(discount.getType());
cartGood.setActivityCode(discount.getActivityCode());
cartGood.setStockLimit(ObjectUtils.equals(1, product.getStockLimit()));
cartGood.setCustomerCode(product.getCustomerCode());
cartGood.setUnit(product.getUnit());
......@@ -107,8 +122,10 @@ public class PlatformActiveServiceImpl implements ActiveService {
cartGood.setClassificationName(product.getCategoryName());
// nodeId标识activeCode,用于计算均摊时每个商品在每个活动上均摊金额
cartGood.setNodeId(discount.getActivityCode());
addcartGoodsList.add(cartGood);
list.addAll(buyAndGiftsPromotionService.setGiftExtra(cartGood, product, addcartGoodsList));
}
// 因为有涉及到用户选择的属性,存入redis
addcartGoodsList.addAll(giftCacheManager.resetGiftCache(list, null, partnerId, storeId, userId));
}
public Map<String, Goods> getDiscountForGift(CalculationDiscountResult discountResult) {
......
package cn.freemud.service.cache;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import com.alibaba.fastjson.JSON;
import com.freemud.sdk.api.assortment.shoppingcart.constant.RedisKeyConstant;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.BoundHashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.text.MessageFormat;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
* @author Clover.z
* @Date 2021/10/28
* @Desc 购物车对应的赠品缓存
*/
@Component
@RequiredArgsConstructor
public class GiftCacheManager {
private final RedisTemplate<String, String> redisTemplate;
/**
* 购物车中赠品缓存有效期,默认3天
*/
@Value("${saas.shoppingCart.giftCache.expireDay:3}")
private Integer expireDay;
/**
* 重置购物车赠品缓存
* @param giftList 赠品行信息
* @param activityCode 赠品对应的活动号(不传则覆盖缓存所有数据,传则只会重置指定活动的赠品数据)
* @param partnerId 商户号
* @param storeCode 门店号
* @param userId 用户userId
* @return 返回更新后的赠品信息
*/
public List<CartGoods> resetGiftCache(@NotNull List<CartGoods> giftList,
String activityCode,
@NotBlank String partnerId,
@NotBlank String storeCode,
@NotBlank String userId) {
String redisKey = MessageFormat.format(RedisKeyConstant.SAAS_SHOPPING_CART_GIFT_KEY, partnerId, storeCode, userId);
BoundHashOperations<String, String, String> operations = redisTemplate.boundHashOps(redisKey);
List<String> values = operations.values();
// 将缓存转为对象
List<CartGoods> oldGiftList = CollectionUtils.isEmpty(values)
? new ArrayList<>()
: values.stream().map(v -> JSON.parseObject(v, CartGoods.class)).collect(Collectors.toList());
// 存放最新的赠品缓存信息
Map<String, String> newValues = new HashMap<>();
for (CartGoods gift : giftList) {
// 匹配赠品的商品属性,将原有赠品的属性更新到新计算出的赠品中
Iterator<CartGoods> it = oldGiftList.iterator();
while (it.hasNext()) {
CartGoods old = it.next();
boolean isSameType = StringUtils.isBlank(activityCode) || activityCode.equals(old.getActivityCode());
if (! old.getGoodsId().equals(gift.getGoodsId()) || ! isSameType) continue;
// 赠品匹配上了,copy赠品属性
gift.setExtra(old.getExtra());
gift.setSubName(old.getSubName());
gift.setCartGoodsUid(old.getCartGoodsUid());
// 如果赠品为多个同一商品,并且每个商品都有不同的属性,所以这里要移除掉已经匹配上的商品
it.remove();
break;
}
newValues.put(gift.getCartGoodsUid(), JSON.toJSONString(gift));
}
// oldGiftList中剩下的, 属于其他活动的数据,不变,需要原样放入缓存中
if (StringUtils.isNotBlank(activityCode)) {
oldGiftList = oldGiftList.stream().filter(old -> !activityCode.equals(old.getActivityCode())).collect(Collectors.toList());
for (CartGoods old : oldGiftList) {
newValues.put(old.getCartGoodsUid(), JSON.toJSONString(old));
}
}
if (CollectionUtils.isNotEmpty(values)) {
//旧值不为空,清掉
redisTemplate.delete(redisKey);
}
if (!newValues.isEmpty()) {
operations.putAll(newValues);
operations.expire(expireDay, TimeUnit.DAYS);
}
return giftList;
}
/**
* 查询赠品的购物车信息
* @param partnerId 商户号
* @param storeCode 门店号
* @param userId 用户id
* @param uid 购物车行id
* @return
*/
public CartGoods queryGiftGoods(@NotBlank String partnerId,
@NotBlank String storeCode,
@NotBlank String userId,
@NotBlank String uid) {
String redisKey = MessageFormat.format(RedisKeyConstant.SAAS_SHOPPING_CART_GIFT_KEY, partnerId, storeCode, userId);
BoundHashOperations<String, String, String> operations = redisTemplate.boundHashOps(redisKey);
String value = operations.get(uid);
if (StringUtils.isBlank(value)) throw new ServiceException(ResponseResult.SHOPPING_CART_GETINFO_INVAILD);
return JSON.parseObject(value, CartGoods.class);
}
/**
* 查询赠品的购物车信息
* @param partnerId 商户号
* @param storeCode 门店号
* @param userId 用户id
* @param goods 赠品信息
* @return
*/
public void updateGiftGoods(@NotBlank String partnerId,
@NotBlank String storeCode,
@NotBlank String userId,
@NotNull CartGoods goods) {
String redisKey = MessageFormat.format(RedisKeyConstant.SAAS_SHOPPING_CART_GIFT_KEY, partnerId, storeCode, userId);
BoundHashOperations<String, String, String> operations = redisTemplate.boundHashOps(redisKey);
operations.put(goods.getCartGoodsUid(), JSON.toJSONString(goods));
}
/**
* 清空赠品的购物车信息
* @param partnerId 商户号
* @param storeCode 门店号
* @param userId 用户id
* @return
*/
public void clearGiftCache(@NotBlank String partnerId,
@NotBlank String storeCode,
@NotBlank String userId) {
String redisKey = MessageFormat.format(RedisKeyConstant.SAAS_SHOPPING_CART_GIFT_KEY, partnerId, storeCode, userId);
redisTemplate.delete(redisKey);
}
}
package cn.freemud.service.customer;
import cn.freemud.entities.vo.CustomerInfoVo;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
import com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
/**
* @author Clover.z
* @Date 2021/11/1
* @Desc 会员信息通用能力下沉
*/
@Component
@RequiredArgsConstructor
public class CustomerInfoManager {
private final AssortmentCustomerInfoManager assortmentCustomerInfoManager;
/**
* 获取登陆用户信息
* @param sessionId
* @return
*/
public CustomerInfoVo getCustomerInfoVo(String sessionId) {
AssortmentCustomerInfoVo info = assortmentCustomerInfoManager.getCustomerInfoByObject(sessionId);
if (info == null) throw new ServiceException(ResponseResult.NOT_LOGIN);
CustomerInfoVo customer = new CustomerInfoVo();
BeanUtils.copyProperties(info, customer);
return customer;
}
}
......@@ -2,13 +2,14 @@ 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;
import cn.freemud.entities.dto.calculate.CalculationDiscountResult;
import cn.freemud.entities.dto.calculate.SendActivity;
import cn.freemud.entities.dto.calculate.SendGoods;
import cn.freemud.entities.dto.product.info.ProductBean;
import cn.freemud.entities.dto.product.info.SkuProductBean;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.ActivityTypeEnum;
......@@ -19,7 +20,6 @@ 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;
import org.apache.commons.collections4.CollectionUtils;
......@@ -107,17 +107,17 @@ public class AdditionalPromotionService implements IPromotionService {
// 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()
List<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 productsInfo.stream().map(productBean -> {
CreateOrderVo.PremiumExchangeActivity.Product product = new CreateOrderVo.PremiumExchangeActivity.Product();
List<GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean.SkuProductBean> skuList = productBean.getSkuList();
List<SkuProductBean> skuList = productBean.getSkuList();
List<String> skuIds = null;
if (null != skuList) {
skuIds = skuList.stream().map(GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean.SkuProductBean::getSkuId).collect(Collectors.toList());
skuIds = skuList.stream().map(SkuProductBean::getSkuId).collect(Collectors.toList());
}
if (!CollectionUtils.isEmpty(skuIds)) {
for (String skuId : skuIds) {
......
......@@ -4,8 +4,8 @@ import cn.freemud.adapter.ShoppingCartConvertAdapter;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean;
import cn.freemud.entities.dto.product.CheckCartRequest;
import cn.freemud.entities.dto.product.info.ProductBean;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.ShoppingCartGoodsBaseResponseVo;
import cn.freemud.entities.vo.ShoppingCartGoodsResponseVo;
......
package cn.freemud.service.impl;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.CustomerInfoVo;
import cn.freemud.entities.vo.UpdateGiftAttrRequestVo;
import cn.freemud.service.CartGiftService;
import cn.freemud.service.cache.GiftCacheManager;
import cn.freemud.service.customer.CustomerInfoManager;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* @author Clover.z
* @Date 2021/11/1
* @Desc
*/
@RequiredArgsConstructor
@Service
public class CartGiftServiceImpl implements CartGiftService {
private final CustomerInfoManager customerInfoManager;
private final GiftCacheManager giftCacheManager;
/**
* 更新赠品的购物车行中属性信息
*
* @param requestVo
* @return
*/
@Override
public CartGoods updateGiftAttr(UpdateGiftAttrRequestVo requestVo) {
// 查询登陆用户信息
CustomerInfoVo user = customerInfoManager.getCustomerInfoVo(requestVo.getSessionId());
String partnerId = requestVo.getPartnerId();
String storeCode = requestVo.getShopId();
// 查询赠品缓存
CartGoods goods = giftCacheManager.queryGiftGoods(partnerId, storeCode, user.getMemberId(), requestVo.getUid());
List<CartGoods.CartGoodsExtra> attrList = new ArrayList<>();
List<String> nameList = new ArrayList<>();
requestVo.getExtra().forEach(a -> {
CartGoods.CartGoodsExtra e = new CartGoods.CartGoodsExtra();
e.setAttributeId(a.getAttributeId());
e.setAttributeName(a.getAttributeName());
attrList.add(e);
nameList.add(a.getAttributeName());
});
goods.setExtra(attrList);
goods.setSubName(StringUtils.join(nameList, "/"));
// 更新赠品缓存
giftCacheManager.updateGiftGoods(partnerId, storeCode, user.getMemberId(), goods);
return goods;
}
}
......@@ -228,6 +228,7 @@ public class CouponPromotionService implements IPromotionService {
if (activityDiscountsDto != null) {
ActivityDiscountsDto activityDiscountsDto1 = new ActivityDiscountsDto();
BeanUtils.copyProperties(activityDiscountsDto, activityDiscountsDto1);
//商品级别优惠为正数
activityDiscountsDto1.setDiscountAmount(-activityDiscountsDto.getDiscountAmount());
cartGoods.setTotalDiscountAmount(-activityDiscountsDto.getDiscountAmount());
......@@ -269,6 +270,7 @@ public class CouponPromotionService implements IPromotionService {
activityDiscountsDto.setActivityCode(apportionDetails.getActivityCode());
activityDiscountsDto.setActivityName(apportionDetails.getActivityName());
activityDiscountsDto.setActivityType(this.convent2ActivityType(apportionDetails.getActivityType()));
//订单活动级别优惠为负值
activityDiscountsDto.setDiscountAmount(0 - couponDiscount.getDiscountAmount());
return activityDiscountsDto;
}
......@@ -285,7 +287,8 @@ public class CouponPromotionService implements IPromotionService {
activityDiscountsDto.setActivityCode(discounts.get(0).getActivityCode());
activityDiscountsDto.setActivityName(discounts.get(0).getActivityName());
activityDiscountsDto.setActivityType(this.convent2ActivityType(discounts.get(0).getType()));
activityDiscountsDto.setDiscountAmount(0 - discounts.get(0).getDiscount().intValue());
//商品级别优惠为正数
activityDiscountsDto.setDiscountAmount(discounts.get(0).getDiscount().intValue());
activityDiscountsDto.setActualActivityGoodsNumber(discounts.get(0).getActualGoodsNumber());
activityDiscountsDto.setCartGoodsUid(goods1.getCartGoodsUid());
......
......@@ -105,6 +105,7 @@ public class DefaultPromotionService implements IPromotionService {
shoppingCartGoodsDto.setTotalDiscountAmount(shoppingCartGoodsResponseVo.getTotalDiscountAmount());
// todo 包装费
shoppingCartGoodsDto.setPackageAmount(shoppingCartGoodsResponseVo.getNewPackAmount());
shoppingCartGoodsDto.setPackageAmountCollectType(shoppingCartGoodsResponseVo.getPackageAmountCollectType());
//快递费
shoppingCartGoodsDto.setDeliveryAmount(shoppingCartGoodsResponseVo.getDeliveryAmount());
shoppingCartGoodsDto.setDiscountDeliveryAmount(shoppingCartGoodsResponseVo.getDiscountDeliveryAmount());
......
......@@ -17,8 +17,9 @@ import cn.freemud.adapter.StoreItemAdapter;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.demo.entities.bo.goods.GetProductBySkuIdResponseBO;
import cn.freemud.entities.dto.GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean;
import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.product.info.AttributeValueBean;
import cn.freemud.entities.dto.product.info.ProductBean;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.GetProductsVo;
import cn.freemud.enums.ProductInfoType;
......@@ -62,7 +63,7 @@ public class ItemServiceImpl implements ItemService {
public BaseResponse<Map<String, ProductBean>> getProducts(String partnerId, String shopId, List<String> productIds, boolean reflash ,String menuType) {
public BaseResponse<Map<String, ProductBean>> getProducts(String partnerId, String shopId, List<String> productIds, boolean reflash , String menuType) {
Map<String, ProductBean> newProductBeanMap = Maps.newTreeMap();
if (CollectionUtils.isEmpty(productIds)) {
return ResponseUtil.success(newProductBeanMap);
......@@ -101,8 +102,8 @@ public class ItemServiceImpl implements ItemService {
* @param productBean
* @return
*/
public Map<String, ProductBean.ProductAttributeGroupListBean.AttributeValueBean> getAttributeValuesByProduct(ProductBean productBean) {
Map<String, ProductBean.ProductAttributeGroupListBean.AttributeValueBean> attributeValueBeanMap = Maps.newTreeMap();
public Map<String, AttributeValueBean> getAttributeValuesByProduct(ProductBean productBean) {
Map<String, AttributeValueBean> attributeValueBeanMap = Maps.newTreeMap();
if (productBean == null) {
return attributeValueBeanMap;
}
......@@ -128,7 +129,7 @@ public class ItemServiceImpl implements ItemService {
if (CollectionUtils.isEmpty(attributeIds)) {
return true;
}
Map<String, ProductBean.ProductAttributeGroupListBean.AttributeValueBean> attributeValueBeanMap = getAttributeValuesByProduct(productBean);
Map<String, AttributeValueBean> attributeValueBeanMap = getAttributeValuesByProduct(productBean);
for (String attributeId : attributeIds) {
if (!attributeValueBeanMap.containsKey(attributeId)) {
return false;
......
......@@ -23,17 +23,17 @@ import cn.freemud.constant.ShoppingCartConstant;
import cn.freemud.demo.controller.ShoppingCartDemoController;
import cn.freemud.demo.entities.dto.goods.add.list.BaseListCartGoodsVO;
import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.calculate.ActivityCalculationDiscountRequestDto;
import cn.freemud.entities.dto.calculate.ActivityCalculationDiscountResponseDto;
import cn.freemud.entities.dto.GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean;
import cn.freemud.entities.dto.activity.ActivityQueryDto;
import cn.freemud.entities.dto.activity.ActivityQueryResponseDto;
import cn.freemud.entities.dto.activity.DiscountSharingDto;
import cn.freemud.entities.dto.calculate.*;
import cn.freemud.entities.dto.openplatform.WeixinProductRequestDto;
import cn.freemud.entities.dto.openplatform.WeixinProductResponseDto;
import cn.freemud.entities.dto.order.PackAmountConfig;
import cn.freemud.entities.dto.pay.*;
import cn.freemud.entities.dto.product.CheckCartRequest;
import cn.freemud.entities.dto.product.info.ProductBean;
import cn.freemud.entities.dto.product.info.SkuProductBean;
import cn.freemud.entities.dto.shoppingCart.SendPoint;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.dto.user.GetUserScoreUseDetailRequest;
......@@ -48,6 +48,7 @@ import cn.freemud.interceptor.BizServiceException;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.redis.RedisCache;
import cn.freemud.service.*;
import cn.freemud.service.cache.GiftCacheManager;
import cn.freemud.service.delivery.DeliveryFactory;
import cn.freemud.service.delivery.DeliveryService;
import cn.freemud.service.impl.calculate.*;
......@@ -213,6 +214,8 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
@Autowired
private GetActivityMsgHandle getActivityMsgHandle;
@Autowired
private GiftCacheManager giftCacheManager;
/**
* 从微信卡券向购物车中添加商品
......@@ -380,7 +383,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
//更新购物车券状态
newCalculationUpdateCouponStatus(userId, partnerId, storeId, bizType, cartGoods, allCartGoodsList, discountResult);
sharingCartService.distribute(discountResult, allCartGoodsList, shoppingCartGoodsResponseVo, null
, null, null, activityQueryDto, menuType, deliveryAmount
, userLoginInfoDto, null, activityQueryDto, menuType, deliveryAmount
, ShoppingCartConstant.ADD_AND_UPDATE, partnerId, null, userId, storeId);
buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo, discountResult, null, partnerId);
......@@ -1034,6 +1037,8 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
ShoppingCartRelationService shoppingCartRelationService = shoppingCartRelationFactory.cleanAfter(shoppingCartClearRequestVo.getPartnerId());
shoppingCartRelationService.cleanAfter(shoppingCartGoodsResponseVo, shoppingCartClearRequestVo);
// 清空购物车赠品的缓存信息
giftCacheManager.clearGiftCache(partnerId, storeId, userId);
return ResponseUtil.success(shoppingCartGoodsResponseVo);
}
......@@ -2184,7 +2189,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
&& productBeanListSpuClass.get(0).getStockLimit() == 1) {
stockLimit = true;
} else {
for (ProductBean.SkuProductBean skuProductBean : productBeanListSpuClass.get(0).getSkuList()) {
for (SkuProductBean skuProductBean : productBeanListSpuClass.get(0).getSkuList()) {
if (spuId2.equals(skuProductBean.getSkuId()) && skuProductBean.getStockLimit() == 1) {
stockLimit = true;
break;
......@@ -2219,7 +2224,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
&& productBeanListSpuClass.get(0).getStockLimit() == 1) {
isLimit = true;
} else {
for (ProductBean.SkuProductBean skuProductBean : productBeanListSpuClass.get(0).getSkuList()) {
for (SkuProductBean skuProductBean : productBeanListSpuClass.get(0).getSkuList()) {
if (skuId.equals(skuProductBean.getSkuId()) && skuProductBean.getStockLimit() == 1) {
isLimit = true;
break;
......@@ -2297,8 +2302,10 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
} else if ((Objects.equals(shoppingCartInfoRequestVo.getOrderType(), CreateOrderType.TAKE_OUT.getCode())
|| Objects.equals(shoppingCartInfoRequestVo.getReachStoreType(), OrderType.COLLECT_GOODS.getCode()))) {
//fisherman 【ID1033456】自提根据模板配置计算餐具包装费
Long packAmount = commonFunctionHandle.getPackAmountByStoreConfig(shoppingCartInfoRequestVo, shoppingCartGoodsResponseVo.getNewPackAmount(),shoppingCartGoodsResponseVo.getTotalAmount());
PackAmountConfig packAmountByStoreConfig = commonFunctionHandle.getPackAmountByStoreConfig(shoppingCartInfoRequestVo, shoppingCartGoodsResponseVo.getNewPackAmount(),shoppingCartGoodsResponseVo.getTotalAmount());
Long packAmount = packAmountByStoreConfig.getNewPackAmount();
shoppingCartGoodsResponseVo.setNewPackAmount(packAmount);
shoppingCartGoodsResponseVo.setPackageAmountCollectType(CollectionUtils.isEmpty(packAmountByStoreConfig.getCollectType()) ? 1 : 2);
if (Objects.equals(shoppingCartInfoRequestVo.getFlag(), SubmitPageEnum.YES.getCode())) {
Long originalTotalAmount = shoppingCartGoodsResponseVo.getOriginalTotalAmount() + packAmount;
Long totalAmount = shoppingCartGoodsResponseVo.getTotalAmount() + packAmount;
......@@ -3340,7 +3347,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
&& productBeanListSpuClass.get(0).getStockLimit() == 1) {
availableStocks = stockClient.getAvailableStocks(requestDto);
} else {
for (ProductBean.SkuProductBean skuProductBean : productBeanListSpuClass.get(0).getSkuList()) {
for (SkuProductBean skuProductBean : productBeanListSpuClass.get(0).getSkuList()) {
if (skuId.equals(skuProductBean.getSkuId()) && skuProductBean.getStockLimit() == 1) {
availableStocks = stockClient.getAvailableStocks(requestDto);
break;
......
......@@ -8,6 +8,7 @@ import cn.freemud.entities.dto.GetPaidRuleRequestDto;
import cn.freemud.entities.dto.GetPaidRuleResponseDto;
import cn.freemud.entities.dto.activity.ActivityDiscountsDto;
import cn.freemud.entities.dto.calculate.*;
import cn.freemud.entities.dto.order.PackAmountConfig;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.ShoppingCartGoodsResponseVo;
......@@ -105,7 +106,9 @@ public class CalculationCommonService {
shoppingCartGoodsResponseVo.setShoppingCartGoodsAmount(shoppingCartGoodsResponseVo.getTotalAmount());
shoppingCartGoodsResponseVo.setShoppingCartOriginalGoodsAmount(shoppingCartGoodsResponseVo.getOriginalTotalAmount());
//fisherman 【ID1033456】自提根据模板配置计算餐具包装费 新算价一起处理
shoppingCartGoodsResponseVo.setNewPackAmount(commonFunctionHandle.getPackAmountByStoreConfig(shoppingCartInfoRequestVo,totalPackageAmount,shoppingCartGoodsResponseVo.getTotalAmount()));
PackAmountConfig packAmountByStoreConfig = commonFunctionHandle.getPackAmountByStoreConfig(shoppingCartInfoRequestVo, totalPackageAmount, shoppingCartGoodsResponseVo.getTotalAmount());
shoppingCartGoodsResponseVo.setNewPackAmount(packAmountByStoreConfig.getNewPackAmount());
shoppingCartGoodsResponseVo.setPackageAmountCollectType(CollectionUtils.isEmpty(packAmountByStoreConfig.getCollectType()) ? 1 : 2);
// fisehrman 总优惠金额 需要+配送券的优惠金额
if (discountResult == null) {
shoppingCartGoodsResponseVo.setTotalDiscountAmount(0L);
......
......@@ -95,7 +95,7 @@ public class CalculationSharingCartService {
/**
* 买赠
*/
giftSharingService.giftResponse(discountResult, cartGoodsList, shoppingCartInfoRequestVo, activityQueryDto, partnerId,flag);
giftSharingService.giftResponse(discountResult, cartGoodsList, shoppingCartInfoRequestVo, activityQueryDto, partnerId, storeId, userId, flag);
/**
* 加价购
......
......@@ -128,7 +128,7 @@ public class CalculationSharingEquallyService {
/**
* 赠品
*/
giftSharingService.equally(discountResult, cartGoodsDetailDtoList, activityQueryDto, menuType);
giftSharingService.equally(discountResult, cartGoodsDetailDtoList, activityQueryDto, menuType, userLoginInfoDto);
/**
* 加价购商品
......@@ -158,6 +158,7 @@ public class CalculationSharingEquallyService {
shoppingCartGoodsDto.setDiscountDeliveryActivityCode(shoppingCartGoodsResponseVo.getDiscountDeliveryActivityCode());
//总计价
shoppingCartGoodsDto.setPackageAmount(shoppingCartGoodsResponseVo.getNewPackAmount());
shoppingCartGoodsDto.setPackageAmountCollectType(shoppingCartGoodsResponseVo.getPackageAmountCollectType());
shoppingCartGoodsDto.setOriginalTotalAmount(shoppingCartGoodsResponseVo.getOriginalTotalAmount());
shoppingCartGoodsDto.setTotalAmount(shoppingCartGoodsResponseVo.getTotalAmount());
shoppingCartGoodsDto.setTotalDiscountAmount(shoppingCartGoodsResponseVo.getTotalDiscountAmount());
......
......@@ -3,11 +3,11 @@ package cn.freemud.service.impl.mcoffee.calculation;
import cn.freemud.adapter.ShoppingCartMccafeAdapter;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.dto.GetMenuResponseDto;
import cn.freemud.entities.dto.activity.ActivityDiscountsDto;
import cn.freemud.entities.dto.activity.ActivityQueryDto;
import cn.freemud.entities.dto.activity.ShareDiscountActivityDto;
import cn.freemud.entities.dto.calculate.*;
import cn.freemud.entities.dto.product.info.ProductBean;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.ActivityChannelEnum;
......@@ -284,11 +284,11 @@ public class CalculationServiceImpl {
List<String> productIds = products.stream().map(t -> t.getSkuId()).collect(Collectors.toList());
//调用商品的接口获取商品键位
BaseResponse<Map<String, GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean>> baseResponse = itemService.getProducts(shoppingCartInfoRequestVo.getPartnerId(),
BaseResponse<Map<String, ProductBean>> baseResponse = itemService.getProducts(shoppingCartInfoRequestVo.getPartnerId(),
shoppingCartInfoRequestVo.getShopId(), productIds, false, shoppingCartInfoRequestVo.getMenuType());
if (ResponseResult.SUCCESS.getCode().equals(baseResponse.getCode()) && baseResponse.getResult() != null){
for (ShoppingCartGoodsDto.CartGoodsDetailDto cartGoods: products) {
GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean productBean = baseResponse.getResult().get(cartGoods.getSkuId());
ProductBean productBean = baseResponse.getResult().get(cartGoods.getSkuId());
cartGoods.setProductCode(productBean.getCustomerCode());
}
}
......
package cn.freemud.service.product;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.dto.GetProductInfoDto;
import cn.freemud.entities.dto.ProductInfosDto;
import cn.freemud.entities.dto.product.info.ProductBean;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.thirdparty.ProductClient;
import com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @author Clover.z
* @Date 2021/10/29
* @Desc 商品服务通用能力下沉
*/
@Component
@RequiredArgsConstructor
public class ProductInfoManager {
private final ProductClient productClient;
/**
* 查询商品信息
* @param partnerId 商户号
* @param storeCode 门店号
* @param menuType 菜单类型
* @param goodsIdList 商品id集合
* @return
*/
public List<ProductBean> getProductsInfo(String partnerId,
String storeCode,
String menuType,
List<String> goodsIdList) {
return this.getProductsInfo(partnerId, storeCode, menuType, false, goodsIdList);
}
/**
* 查询商品信息(可指定查询sku对于spu的信息,不需要spu信息的情况下不要使用)
* @param partnerId 商户号
* @param storeCode 门店号
* @param menuType 菜单类型
* @param querySkuAttr 是否查询自规格对应spu的属性信息 不需要属性信息就不要传true
* @param goodsIdList 商品id集合
* @return
*/
public List<ProductBean> getProductsInfo(String partnerId,
String storeCode,
String menuType,
Boolean querySkuAttr,
List<String> goodsIdList) {
if (CollectionUtils.isEmpty(goodsIdList)) {
return new ArrayList<>();
}
//移除空的goodsId及spq的商品券
goodsIdList = goodsIdList.parallelStream().filter(StringUtils::isNotEmpty).filter(goodsId -> !goodsId.startsWith(CommonsConstant.COUPON_PREFIX)).collect(Collectors.toList());
if (CollectionUtils.isEmpty(goodsIdList)) {
return new ArrayList<>();
}
GetProductInfoDto query = new GetProductInfoDto();
query.setPartnerId(partnerId);
query.setShopId(storeCode);
query.setProductInfoType(2);
query.setProductIds(goodsIdList);
query.setChannel(StringUtils.isBlank(menuType) ? "saas" : menuType);
query.setAutoFillSkuAttr(querySkuAttr);
ProductInfosDto response = productClient.listProductInfos(query);
if (null == response || !Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS, response.getErrcode()) || null == response.getData()) {
throw new ServiceException(ResponseResult.STORE_ITEM_QUERY_ERROR);
}
return CollectionUtils.isEmpty(response.getData().getProducts()) ? new ArrayList<>() : response.getData().getProducts();
}
}
package cn.freemud.service.thirdparty;
//import cn.freemud.constant.IgnoreFeignLogAnnotation;
import cn.freemud.annotations.IgnoreFeignLogAnnotation;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.constant.ResponseCodeKeyConstant;
......@@ -10,12 +9,10 @@ import cn.freemud.interceptor.FormSupportConfig;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.Map;
//@IgnoreFeignLogAnnotation
@FeignClient(name = "OPEN-STORE-ONLINE-COUPON-SERVICE", url = "${saas.coupononlineclient.feign.url}", configuration = FormSupportConfig.class)
public interface CouponOnlineClient {
/**
......
......@@ -94,11 +94,11 @@ public class CouponServiceTest {
assertEquals(getCouponDetailResponseDto.getStatusCode().toString(), "100");
}
@Test
public void getMemberCoupons() {
List<GetCouponDetailResponseDto.Details> details = couponService.getMemberCoupons("1864", "1001",Arrays.asList("8812412","88141242"));
assertTrue(CollectionUtils.isNotEmpty(details));
}
// @Test
// public void getMemberCoupons() {
// List<GetCouponDetailResponseDto.Details> details = couponService.getMemberCoupons("1864", "1001",Arrays.asList("8812412","88141242"));
// assertTrue(CollectionUtils.isNotEmpty(details));
// }
// @Test
// public void receiveMemberCoupon() {
......
package cn.freemud.service;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.dto.GetMenuResponseDto;
import cn.freemud.entities.vo.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Arrays;
import java.util.Map;
import static org.junit.Assert.*;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title:
* @Package: cn.freemud.service.thirdpart
* @Description:
* @author: biao.zhang
* @date: 2018/12/17 16:34
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@RunWith(SpringRunner.class)
@SpringBootTest
@EnableDiscoveryClient
@EnableFeignClients
@EnableAutoConfiguration
public class ItemServiceTest {
@Autowired
private ItemService itemService;
@Test
public void hasAttributeAll() {
GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean productBean = new GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean();
boolean result = itemService.hasAttributeAll(Arrays.asList("1", "2"), productBean);
assertTrue(result);
}
@Test
public void getProducts() {
Map<String, GetProductsVo> maps = itemService.getProducts(Arrays.asList("1", "2"), "1864", "1011","saas");
assertFalse(maps == null || maps.isEmpty());
}
}
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