Commit dbd25698 by chongfu.liang

重构

parent ba3ae383
package cn.freemud.demo.adapter.manager;
import cn.freemud.demo.entities.GetProductStock;
import cn.freemud.demo.entities.ProductStockBO;
import cn.freemud.entities.dto.GetProductStockRequestDto;
import cn.freemud.entities.dto.GetProductStockResponseDto;
import org.springframework.stereotype.Component;
@Component
public class ProductBO2DTOAdapter {
public GetProductStockRequestDto convert2GetProductStockDto(GetProductStock getProductStock) {
GetProductStockRequestDto getProductStockRequestDto = new GetProductStockRequestDto();
getProductStockRequestDto.setChannel(getProductStock.getChannel());
getProductStockRequestDto.setPartnerId(getProductStock.getPartnerId());
getProductStockRequestDto.setProductIds(getProductStock.getProductIds());
getProductStockRequestDto.setStoreId(getProductStock.getStoreId());
return getProductStockRequestDto;
}
}
package cn.freemud.demo.adapter.manager; package cn.freemud.demo.adapter.manager;
import cn.freemud.demo.entities.ProductStockBO;
import cn.freemud.demo.entities.bo.goods.PlatformProductBO; import cn.freemud.demo.entities.bo.goods.PlatformProductBO;
import cn.freemud.demo.entities.bo.goods.ProductBO; import cn.freemud.demo.entities.bo.goods.ProductBO;
import cn.freemud.entities.dto.GetProductStockResponseDto;
import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO; import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -12,4 +14,8 @@ public class ProductDTO2BOAdapter { ...@@ -12,4 +14,8 @@ public class ProductDTO2BOAdapter {
return null; return null;
} }
public ProductStockBO convert2ProductStockBO(GetProductStockResponseDto.DataBean ProductStockDTO) {
return null;
}
} }
...@@ -53,7 +53,7 @@ public class AddGoodsBOAdapter { ...@@ -53,7 +53,7 @@ public class AddGoodsBOAdapter {
PlatformAddGoodsBO platformAddGoodsBO = mapperFacade.map(baseRequestDTO, PlatformAddGoodsBO.class); PlatformAddGoodsBO platformAddGoodsBO = mapperFacade.map(baseRequestDTO, PlatformAddGoodsBO.class);
PlatformProductBO platformProductBO = convert2PlatformProductBO(baseRequestDTO); ProductBO platformProductBO = convert2PlatformProductBO(baseRequestDTO);
platformAddGoodsBO.setAddGoods(platformProductBO); platformAddGoodsBO.setAddGoods(platformProductBO);
ManagerServiceBO managerService = ManagerServiceBO.builder() ManagerServiceBO managerService = ManagerServiceBO.builder()
...@@ -82,8 +82,8 @@ public class AddGoodsBOAdapter { ...@@ -82,8 +82,8 @@ public class AddGoodsBOAdapter {
} }
private PlatformProductBO convert2PlatformProductBO(AddGoodsRequestDTO baseRequestDTO) { private ProductBO convert2PlatformProductBO(AddGoodsRequestDTO baseRequestDTO) {
PlatformProductBO platformProductBO = mapperFacade.map(baseRequestDTO, PlatformProductBO.class); ProductBO platformProductBO = mapperFacade.map(baseRequestDTO, ProductBO.class);
String spuId = baseRequestDTO.getSpuId(); String spuId = baseRequestDTO.getSpuId();
String skuId = baseRequestDTO.getSkuId(); String skuId = baseRequestDTO.getSkuId();
...@@ -98,13 +98,13 @@ public class AddGoodsBOAdapter { ...@@ -98,13 +98,13 @@ public class AddGoodsBOAdapter {
goodsType = GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType(); goodsType = GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType();
} }
platformProductBO.setGoodsType(goodsType); platformProductBO.setGoodsType(goodsType);
List<PlatformComboxGoodsBO> productComboList = new ArrayList<>(); List<ComboxGoodsBO> productComboList = new ArrayList<>();
List<PlatformComboxGoodsBO> productGroupList = new ArrayList<>(); List<ComboxGoodsBO> productGroupList = new ArrayList<>();
List<PlatformMaterialBO> materialGoodsList = new ArrayList<>(); List<MaterialBO> materialGoodsList = new ArrayList<>();
//套餐 //套餐
if (CollectionUtils.isNotEmpty(baseRequestDTO.getProductComboList())) { if (CollectionUtils.isNotEmpty(baseRequestDTO.getProductComboList())) {
for (ComboxGoodsRequestVo vo : baseRequestDTO.getProductComboList()) { for (ComboxGoodsRequestVo vo : baseRequestDTO.getProductComboList()) {
PlatformComboxGoodsBO productCombox = new PlatformComboxGoodsBO(); ComboxGoodsBO productCombox = new ComboxGoodsBO();
productCombox.setGoodsId(vo.getSkuId()); productCombox.setGoodsId(vo.getSkuId());
productCombox.setSkuId(vo.getSkuId()); productCombox.setSkuId(vo.getSkuId());
productCombox.setQty(vo.getQty()); productCombox.setQty(vo.getQty());
...@@ -116,20 +116,20 @@ public class AddGoodsBOAdapter { ...@@ -116,20 +116,20 @@ public class AddGoodsBOAdapter {
//固定商品组 //固定商品组
if (CollectionUtils.isNotEmpty(baseRequestDTO.getProductGroupList())) { if (CollectionUtils.isNotEmpty(baseRequestDTO.getProductGroupList())) {
for (ComboxGoodsRequestVo vo : baseRequestDTO.getProductGroupList()) { for (ComboxGoodsRequestVo vo : baseRequestDTO.getProductGroupList()) {
PlatformComboxGoodsBO productCombox = new PlatformComboxGoodsBO(); ComboxGoodsBO productCombox = new ComboxGoodsBO();
productCombox.setGoodsId(vo.getSkuId()); productCombox.setGoodsId(vo.getSkuId());
productCombox.setSkuId(vo.getSkuId()); productCombox.setSkuId(vo.getSkuId());
productCombox.setQty(vo.getQty()); productCombox.setQty(vo.getQty());
List<CartGoodsExtra> cartGoodsExtras = mapperFacade.mapAsList(vo.getExtra(), CartGoodsExtra.class); List<CartGoodsExtra> cartGoodsExtras = mapperFacade.mapAsList(vo.getExtra(), CartGoodsExtra.class);
productCombox.setExtra(cartGoodsExtras); productCombox.setExtra(cartGoodsExtras);
productCombox.setProductGroupId(vo.getProductGroupId() == null ? null : vo.getProductGroupId()); productCombox.setProductGroupId(StringUtils.isBlank(vo.getProductGroupId()) ? null : Long.parseLong(vo.getProductGroupId()));
productGroupList.add(productCombox); productGroupList.add(productCombox);
} }
} }
//加料商品集 //加料商品集
if (CollectionUtils.isNotEmpty(baseRequestDTO.getProductMaterialList())) { if (CollectionUtils.isNotEmpty(baseRequestDTO.getProductMaterialList())) {
for (MaterialRequestVo materialRequestVo : baseRequestDTO.getProductMaterialList()) { for (MaterialRequestVo materialRequestVo : baseRequestDTO.getProductMaterialList()) {
PlatformMaterialBO materialGoods = new PlatformMaterialBO(); MaterialBO materialGoods = new MaterialBO();
materialGoods.setSpuId(materialRequestVo.getSpuId()); materialGoods.setSpuId(materialRequestVo.getSpuId());
materialGoodsList.add(materialGoods); materialGoodsList.add(materialGoods);
} }
......
...@@ -2,8 +2,11 @@ package cn.freemud.demo.entities; ...@@ -2,8 +2,11 @@ package cn.freemud.demo.entities;
import cn.freemud.demo.entities.bo.goods.GetProductBO; import cn.freemud.demo.entities.bo.goods.GetProductBO;
import cn.freemud.demo.entities.bo.goods.ProductBO; import cn.freemud.demo.entities.bo.goods.ProductBO;
import cn.freemud.entities.vo.CartGoods;
import lombok.Data; import lombok.Data;
import java.util.List;
@Data @Data
public class CheckBussinessRulesBO { public class CheckBussinessRulesBO {
...@@ -11,4 +14,6 @@ public class CheckBussinessRulesBO { ...@@ -11,4 +14,6 @@ public class CheckBussinessRulesBO {
private ProductBO product; private ProductBO product;
private List<CartGoods> cartGoods;
} }
package cn.freemud.demo.entities;
import cn.freemud.entities.dto.GetCouponDetailResponseDto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class CouponDetailBO {
/**
*表示接口处理是否成功,1表示成功,0表示失败
*/
private Integer result;
private Integer statusCode;
private Integer ver;
private List<CouponDetailBO.Errors> errors;
private List<CouponDetailBO.Details> details;
@Data
public static class Details{
private String code;
private String activeCode;
private String title;
private Integer type;
private Integer status;
private String create_time;
private String redeem_time;
private String valid_start;
private String valid_ends;
private String minAmount;
private CouponDetailBO.Active active;
private List<CouponDetailBO.ActiveProduct> activeProduct;
private List<CouponDetailBO.ActiveRestrictionVOS> activeRestrictionVOS;
}
@Data
public static class Active{
@JsonProperty("ActiveCode")
private String activeCode;
@JsonProperty("ActiveDesc")
private String activeDesc;
@JsonProperty("ActiveName")
private String activeName;
@JsonProperty("BusinessID")
private Integer businessId;
@JsonProperty("CreateDate")
private String createDate;
@JsonProperty("CreateUser")
private String createUser;
@JsonProperty("EBCode")
private String ebCode;
@JsonProperty("EndDate")
private String endDate;
@JsonProperty("EndString")
private String endString;
@JsonProperty("Inventory")
private Integer inventory;
@JsonProperty("LastEditDate")
private String lastEditDate;
@JsonProperty("LastEditUser")
private String lastEditUser;
@JsonProperty("MaxDiscount")
private Integer maxDiscount;
@JsonProperty("MaxRedeemTimes")
private Integer maxRedeemTimes;
@JsonProperty("MinAmount")
private Integer minAmount;
@JsonProperty("PartnerID")
private String partnerId;
@JsonProperty("PercentDiscount")
private Integer percentDiscount;
@JsonProperty("Percentage")
private Integer percentage;
@JsonProperty("PromotionType")
private String promotionType;
@JsonProperty("ShouldRedeemAll")
private Boolean shouldRedeemAll;
@JsonProperty("StartDate")
private String startDate;
@JsonProperty("StartString")
private String startString;
@JsonProperty("State")
private Integer state;
@JsonProperty("Type")
private Integer type;
}
@Data
public static class ActiveProduct{
@JsonProperty("ActiveID")
private Integer activeId;
@JsonProperty("Amount")
private Integer amount;
@JsonProperty("Paid")
private Integer paid;
@JsonProperty("Price_Discount")
private BigDecimal priceDiscount;
@JsonProperty("Price_Original")
private BigDecimal priceOriginal;
@JsonProperty("Product")
private String product;
@JsonProperty("ProductID")
private Integer productId;
@JsonProperty("ProductID_Partner")
private String productIdPartner;
@JsonProperty("Remain")
private Integer remain;
}
@Data
public static class ActiveProductSetting{
}
@Data
public static class ActiveRestrictionVOS{
@JsonProperty("ActiveID")
private String activeId;
@JsonProperty("City")
private String city;
@JsonProperty("StoreIDPartner")
private String storeIdPartner;
}
@Data
public static class Errors{
@JsonProperty("error_code")
private String errorCode;
private String parameter;
}
}
package cn.freemud.demo.entities;
import lombok.Data;
@Data
public class GetCouponDetailBO {
private String partnerId;
private String couponCode;
private String storeCode;
}
package cn.freemud.demo.entities;
import lombok.Data;
import java.util.List;
@Data
public class GetProductBySkuIdBO {
private List<String> skuids;
private String partnerId;
private String storeId;
private String menuType;
}
package cn.freemud.demo.entities;
import lombok.Data;
import java.util.List;
@Data
public class GetProductStock {
private String channel;
private String partnerId;
private String storeId;
private List<Long> productIds;
}
package cn.freemud.demo.entities;
import lombok.Data;
@Data
public class GetStoreBO {
private String partnerId;
private String storeCode;
}
package cn.freemud.demo.entities; package cn.freemud.demo.entities;
import cn.freemud.demo.manager.coupon.CouponService;
import cn.freemud.demo.manager.customer.CustomerService; import cn.freemud.demo.manager.customer.CustomerService;
import cn.freemud.demo.manager.product.ProductService; import cn.freemud.demo.manager.product.ProductService;
import cn.freemud.demo.manager.store.StoreService;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
...@@ -13,4 +15,9 @@ public class ManagerServiceBO { ...@@ -13,4 +15,9 @@ public class ManagerServiceBO {
private ProductService productService; private ProductService productService;
private CouponService couponService;
private StoreService storeService;
} }
package cn.freemud.demo.entities;
import lombok.Data;
@Data
public class ProductStockBO {
//商户商品id/编码
private String ccode;
private String channel;
// 采购中心id
private String pcid;
//非码商品id
private Long pid;
private String pname;
//商户id/编号
private String ptid;
private Integer qty;
//安全库存数
private Integer safeQty;
//门店id/编号
private String stid;
}
package cn.freemud.demo.entities.bo.goods;
import cn.freemud.entities.dto.GetMenuResponseDto;
import cn.freemud.entities.vo.CartGoods;
import lombok.Data;
import java.util.List;
@Data
public class GetProductBySkuIdResponseBO {
private String spuId;
private String spuName;
private String spuPicture;
private String skuId;
private String skuName;
private Long originalPrice;
/**
* 最终价格 单位分
*/
private Long finalPrice;
/**
* 上下架状态
*/
private Integer status;
// 1.5.4 对接库存新加
private Integer stock;
private Integer stockLimit;
/**
* type=10 多规格 type=1 单规格
*/
private Integer type;
/**
* 第三方商品编号
*/
private String customerCode;
/**
* 属性
*/
private List<GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean.ProductAttributeGroupListBean> productAttributeGroupList;
/**
* 分类id
*/
private String category;
/**
* 分类名称
*/
private String categoryName;
private String defaultSpecId;
private String defaultSpecName;
private List<CartGoods.CartGoodsExtra> extra;
}
package cn.freemud.demo.entities.bo.goods; package cn.freemud.demo.entities.bo.goods;
import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
...@@ -17,6 +18,12 @@ public class ProductBO { ...@@ -17,6 +18,12 @@ public class ProductBO {
private Integer goodsType; private Integer goodsType;
private int type;
private Integer stockLimit;
private List<SkuProductBean> skuList;
/** /**
* 数量 * 数量
*/ */
...@@ -41,16 +48,21 @@ public class ProductBO { ...@@ -41,16 +48,21 @@ public class ProductBO {
/** /**
* 套餐固定商品 * 套餐固定商品
*/ */
private List<McoffeeComboxGoodsBO> productComboList; private List<ComboxGoodsBO> productComboList;
/** /**
* 套餐可选商品 * 套餐可选商品
*/ */
private List<McoffeeComboxGoodsBO> productGroupList; private List<ComboxGoodsBO> productGroupList;
/** /**
* 加料 * 加料
*/ */
private List<McoffeeMaterialBO> productMaterialList; private List<MaterialBO> productMaterialList;
@Data
public static class SkuProductBean {
private String skuId;
private Integer stockLimit;
}
} }
...@@ -2,6 +2,7 @@ package cn.freemud.demo.entities.bo.goods.add; ...@@ -2,6 +2,7 @@ package cn.freemud.demo.entities.bo.goods.add;
import cn.freemud.demo.entities.ManagerServiceBO; import cn.freemud.demo.entities.ManagerServiceBO;
import cn.freemud.demo.entities.bo.goods.PlatformProductBO; import cn.freemud.demo.entities.bo.goods.PlatformProductBO;
import cn.freemud.demo.entities.bo.goods.ProductBO;
import lombok.Data; import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty; import org.hibernate.validator.constraints.NotEmpty;
...@@ -24,6 +25,9 @@ public class BaseAddGoodsBO { ...@@ -24,6 +25,9 @@ public class BaseAddGoodsBO {
private ManagerServiceBO managerService; private ManagerServiceBO managerService;
private ProductBO addGoods;
/** /**
* 微信appId * 微信appId
*/ */
......
...@@ -13,8 +13,6 @@ import java.util.List; ...@@ -13,8 +13,6 @@ import java.util.List;
@Data @Data
public class PlatformAddGoodsBO extends BaseAddGoodsBO { public class PlatformAddGoodsBO extends BaseAddGoodsBO {
private PlatformProductBO addGoods;
private String version; private String version;
/** /**
......
package cn.freemud.demo.manager.coupon;
import cn.freemud.demo.entities.CouponDetailBO;
import cn.freemud.demo.entities.GetCouponDetailBO;
import cn.freemud.demo.entities.bo.goods.GetProductBO;
import cn.freemud.demo.manager.product.ProductService;
import org.springframework.stereotype.Service;
@Service
public class CouponManager {
public CouponDetailBO getCouponDetail(GetCouponDetailBO getCouponDetail, CouponService couponService){
CouponDetailBO couponDetail = couponService.getCouponDetail(getCouponDetail);
return couponDetail;
}
}
package cn.freemud.demo.manager.coupon;
import cn.freemud.demo.entities.CouponDetailBO;
import cn.freemud.demo.entities.GetCouponDetailBO;
import cn.freemud.demo.entities.bo.goods.GetProductBO;
public interface CouponService {
CouponDetailBO getCouponDetail(GetCouponDetailBO getCouponDetailBO);
}
package cn.freemud.demo.manager.coupon;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.demo.entities.CouponDetailBO;
import cn.freemud.demo.entities.GetCouponDetailBO;
import cn.freemud.demo.entities.GetStoreBO;
import cn.freemud.demo.entities.bo.goods.add.MCoffeeAddGoodsBO;
import cn.freemud.demo.manager.store.StoreService;
import cn.freemud.entities.dto.GetAppKeyRequestDto;
import cn.freemud.entities.dto.GetAppKeyResponseDto;
import cn.freemud.entities.dto.GetCouponDetailResponseDto;
import cn.freemud.enums.ResponseResult;
import cn.freemud.redis.RedisCache;
import cn.freemud.service.thirdparty.CardBinClient;
import cn.freemud.service.thirdparty.CouponOnlineClient;
import cn.freemud.utils.LogUtil;
import cn.freemud.utils.RedisUtil;
import com.freemud.card.sdk.comm.Finals;
import com.freemud.card.sdk.comm.SignUtil;
import com.google.common.base.Joiner;
import ma.glasnost.orika.MapperFacade;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.TreeMap;
@Service("KgdCouponService")
public class KgdCouponServiceImpl implements CouponService {
@Autowired
CouponOnlineClient couponOnlineClient;
@Autowired
@Qualifier("KgdStoreService")
StoreService storeService;
@Autowired
CardBinClient cardBinClient;
@Autowired
private RedisCache redisCache;
@Value("${coupon.app.id}")
private String appid;
@Resource
private MapperFacade mapperFacade;
@Override
public CouponDetailBO getCouponDetail(GetCouponDetailBO getCouponDetailBO) {
Map<String, String> map = new TreeMap<String, String>();
if (StringUtils.isBlank(getCouponDetailBO.getPartnerId()) || StringUtils.isBlank(getCouponDetailBO.getCouponCode())) {
return null;
}
map.put(Finals.CODES, getCouponDetailBO.getCouponCode());
map.put(Finals.PARTNER_ID, getCouponDetailBO.getPartnerId());
map.put(Finals.MERCHANT_ID, getCouponDetailBO.getPartnerId());
map.put(Finals.ACTION, "code.allDetails");
// 券码接口新增参数:组织机构(多个用英文逗号分离)
GetStoreBO getStoreBO = new GetStoreBO();
getStoreBO.setPartnerId(getCouponDetailBO.getPartnerId());
getStoreBO.setStoreCode(getCouponDetailBO.getStoreCode());
List<String> orgIds = storeService.getOrgIds(getStoreBO);
String channelIds = CollectionUtils.isNotEmpty(orgIds) ? Joiner.on(",").join(orgIds) : "";
map.put(Finals.CHANNEL_CODE_LIST, channelIds);
String appSecret = getAppSecret(getCouponDetailBO.getPartnerId());
String sign = SignUtil.createMD5Sign(map, appSecret);
map.put(Finals.SIGN, sign);
GetCouponDetailResponseDto responseDto = couponOnlineClient.getCouponDetails(map);
if (ResponseCodeConstant.RESPONSE_SUCCESS_1.equals(responseDto.getResult())) {
return convert2CouponDetailBO(responseDto);
}
return null;
}
private CouponDetailBO convert2CouponDetailBO(GetCouponDetailResponseDto responseDto) {
CouponDetailBO couponDetailBO = mapperFacade.map(responseDto, CouponDetailBO.class);
return couponDetailBO;
}
public String getAppSecret(String partnerId) {
// 获取券服务的密钥
String couponAppSecret = RedisUtil.getCouponAppSecret(partnerId);
String appSecret = redisCache.getValue(couponAppSecret);
if (StringUtils.isBlank(appSecret)) {
GetAppKeyResponseDto getAppKeyResponseDto = cardBinClient.getAppKey(GetAppKeyRequestDto.builder().partnerId(partnerId).appId(appid).build());
if (Objects.equals(String.valueOf(getAppKeyResponseDto.getStatusCode()), ResponseResult.SUCCESS.getCode())
&& getAppKeyResponseDto.getData() != null) {
redisCache.save(couponAppSecret, getAppKeyResponseDto.getData().getAppKey());
appSecret = getAppKeyResponseDto.getData().getAppKey();
}
}
return appSecret;
}
}
package cn.freemud.demo.manager.product; package cn.freemud.demo.manager.product;
import cn.freemud.demo.adapter.manager.ProductBO2DTOAdapter;
import cn.freemud.demo.adapter.manager.ProductDTO2BOAdapter; import cn.freemud.demo.adapter.manager.ProductDTO2BOAdapter;
import cn.freemud.demo.entities.GetProductBySkuIdBO;
import cn.freemud.demo.entities.GetProductStock;
import cn.freemud.demo.entities.ProductStockBO;
import cn.freemud.demo.entities.bo.goods.GetProductBO; import cn.freemud.demo.entities.bo.goods.GetProductBO;
import cn.freemud.demo.entities.bo.goods.GetProductBySkuIdResponseBO;
import cn.freemud.demo.entities.bo.goods.PlatformProductBO; import cn.freemud.demo.entities.bo.goods.PlatformProductBO;
import cn.freemud.demo.entities.bo.goods.ProductBO; import cn.freemud.demo.entities.bo.goods.ProductBO;
import cn.freemud.entities.dto.GetProductStockRequestDto;
import cn.freemud.entities.dto.GetProductStockResponseDto;
import cn.freemud.entities.vo.GetProductsVo;
import cn.freemud.service.ItemService;
import cn.freemud.service.impl.AssortmentSdkService; import cn.freemud.service.impl.AssortmentSdkService;
import cn.freemud.service.thirdparty.StockClient;
import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO; import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
import com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map;
@Service("KgdProductService") @Service("KgdProductService")
public class KgdProductServiceImpl implements ProductService { public class KgdProductServiceImpl implements ProductService {
...@@ -22,11 +35,24 @@ public class KgdProductServiceImpl implements ProductService { ...@@ -22,11 +35,24 @@ public class KgdProductServiceImpl implements ProductService {
@Autowired @Autowired
private ProductDTO2BOAdapter productDTO2BOAdapter; private ProductDTO2BOAdapter productDTO2BOAdapter;
@Autowired
private ProductBO2DTOAdapter productBO2DTOAdapter;
@Autowired
private ItemService itemService;
@Autowired
private ShoppingCartBaseServiceImpl shoppingCartBaseService;
@Autowired
private StockClient stockClient;
@Override @Override
public ProductBO getProductInfo(GetProductBO getProductBO) { public ProductBO getProductInfo(GetProductBO getProductBO) {
// 获取添加商品的详细信息 // 获取添加商品的详细信息
List< ProductBeanDTO> productBeanListSpuClass = assortmentSdkService.getProductsInfoSdk(getProductBO.getPartnerId(), List< ProductBeanDTO> productBeanListSpuClass = assortmentSdkService.getProductsInfoSdk(getProductBO.getPartnerId(),
getProductBO.getStoreId(), Collections.singletonList(getProductBO.getSkuid()), getProductBO.getMenuType(), null); getProductBO.getStoreId(), Collections.singletonList(getProductBO.getSkuid()), getProductBO.getMenuType(), shoppingCartBaseService);
ProductBeanDTO productBeanDTO = productBeanListSpuClass.get(0); ProductBeanDTO productBeanDTO = productBeanListSpuClass.get(0);
ProductBO platformProductBO = productDTO2BOAdapter.convert2ProductBO(productBeanDTO); ProductBO platformProductBO = productDTO2BOAdapter.convert2ProductBO(productBeanDTO);
...@@ -34,5 +60,30 @@ public class KgdProductServiceImpl implements ProductService { ...@@ -34,5 +60,30 @@ public class KgdProductServiceImpl implements ProductService {
return platformProductBO; return platformProductBO;
} }
@Override
public Map<String, GetProductBySkuIdResponseBO> getProductInfoBySkuIds(GetProductBySkuIdBO getProductBySkuIdBO) {
Map<String, GetProductBySkuIdResponseBO> products = itemService.getProductsBySkuId(getProductBySkuIdBO.getSkuids(), getProductBySkuIdBO.getPartnerId(),
getProductBySkuIdBO.getStoreId(), getProductBySkuIdBO.getMenuType());
return products;
}
@Override
public List<ProductStockBO> getProductStock(GetProductStock getProductStock) {
GetProductStockRequestDto getProductStockRequestDto = productBO2DTOAdapter.convert2GetProductStockDto(getProductStock);
GetProductStockResponseDto availableStocks = stockClient.getAvailableStocks(getProductStockRequestDto);
List<GetProductStockResponseDto.DataBean> result = availableStocks.getResult();
List<ProductStockBO> list = new ArrayList<>();
for (GetProductStockResponseDto.DataBean dataBean : result){
ProductStockBO productStockBO = productDTO2BOAdapter.convert2ProductStockBO(dataBean);
list.add(productStockBO);
}
return list;
}
} }
package cn.freemud.demo.manager.product; package cn.freemud.demo.manager.product;
import cn.freemud.demo.entities.GetProductBySkuIdBO;
import cn.freemud.demo.entities.GetProductStock;
import cn.freemud.demo.entities.ProductStockBO;
import cn.freemud.demo.entities.bo.goods.GetProductBO; import cn.freemud.demo.entities.bo.goods.GetProductBO;
import cn.freemud.demo.entities.bo.goods.GetProductBySkuIdResponseBO;
import cn.freemud.demo.entities.bo.goods.PlatformProductBO; import cn.freemud.demo.entities.bo.goods.PlatformProductBO;
import cn.freemud.demo.entities.bo.goods.ProductBO; import cn.freemud.demo.entities.bo.goods.ProductBO;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
@Service @Service
public class ProductManager { public class ProductManager {
...@@ -20,6 +27,21 @@ public class ProductManager { ...@@ -20,6 +27,21 @@ public class ProductManager {
} }
public Map<String, GetProductBySkuIdResponseBO> getProductsInfoBySkuIds(GetProductBySkuIdBO getProductBySkuIdBO, ProductService productService){
Map<String, GetProductBySkuIdResponseBO> productInfo = productService.getProductInfoBySkuIds(getProductBySkuIdBO);
return productInfo;
}
public List<ProductStockBO> getProductStock(GetProductStock getProductStock, ProductService productService){
List<ProductStockBO> productStock = productService.getProductStock(getProductStock);
return productStock;
}
......
package cn.freemud.demo.manager.product; package cn.freemud.demo.manager.product;
import cn.freemud.demo.entities.GetProductBySkuIdBO;
import cn.freemud.demo.entities.GetProductStock;
import cn.freemud.demo.entities.ProductStockBO;
import cn.freemud.demo.entities.bo.goods.GetProductBO; import cn.freemud.demo.entities.bo.goods.GetProductBO;
import cn.freemud.demo.entities.bo.goods.GetProductBySkuIdResponseBO;
import cn.freemud.demo.entities.bo.goods.PlatformProductBO; import cn.freemud.demo.entities.bo.goods.PlatformProductBO;
import cn.freemud.demo.entities.bo.goods.ProductBO; import cn.freemud.demo.entities.bo.goods.ProductBO;
import java.util.List;
import java.util.Map;
public interface ProductService { public interface ProductService {
ProductBO getProductInfo(GetProductBO getProductBO); ProductBO getProductInfo(GetProductBO getProductBO);
Map<String, GetProductBySkuIdResponseBO> getProductInfoBySkuIds(GetProductBySkuIdBO getProductBySkuIdBO);
List<ProductStockBO> getProductStock(GetProductStock getProductStock);
} }
package cn.freemud.demo.manager.store;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.demo.entities.GetStoreBO;
import cn.freemud.utils.SpringBeanUtil;
import com.freemud.application.sdk.api.base.BaseResponse;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.storecenter.request.vo.GetOrgTreeListRequest;
import com.freemud.application.sdk.api.storecenter.service.StoreCenterService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service("KgdStoreService")
public class KgdStoreServiceImpl implements StoreService {
@Autowired
StoreCenterService storeCenterService;
@Override
public List<String> getOrgIds(GetStoreBO getStoreBO) {
GetOrgTreeListRequest request = new GetOrgTreeListRequest();
request.setPartnerId(getStoreBO.getPartnerId());
request.setStoreCode(getStoreBO.getStoreCode());
BaseResponse<List<String>> orgList = storeCenterService.getOrgList(request, LogThreadLocal.getTrackingNo());
if (orgList != null && ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(orgList.getCode())) {
return orgList.getData();
}
return null;
}
}
package cn.freemud.demo.manager.store;
public class StoreManager {
}
package cn.freemud.demo.manager.store;
import cn.freemud.demo.entities.GetStoreBO;
import java.util.List;
public interface StoreService {
List<String> getOrgIds(GetStoreBO getStoreBO);
}
package cn.freemud.demo.service; package cn.freemud.demo.service;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.demo.constant.ResponseConstant; import cn.freemud.demo.constant.ResponseConstant;
import cn.freemud.demo.entities.*; import cn.freemud.demo.entities.*;
import cn.freemud.demo.entities.bo.goods.GetProductBO; import cn.freemud.demo.entities.bo.goods.GetProductBO;
import cn.freemud.demo.entities.bo.goods.GetProductBySkuIdResponseBO;
import cn.freemud.demo.entities.bo.goods.PlatformProductBO; import cn.freemud.demo.entities.bo.goods.PlatformProductBO;
import cn.freemud.demo.entities.bo.goods.ProductBO; import cn.freemud.demo.entities.bo.goods.ProductBO;
import cn.freemud.demo.entities.bo.goods.add.BaseAddGoodsBO; import cn.freemud.demo.entities.bo.goods.add.BaseAddGoodsBO;
import cn.freemud.demo.manager.coupon.CouponManager;
import cn.freemud.demo.manager.coupon.CouponService;
import cn.freemud.demo.manager.product.ProductManager; import cn.freemud.demo.manager.product.ProductManager;
import cn.freemud.demo.manager.customer.CustomerManager; import cn.freemud.demo.manager.customer.CustomerManager;
import cn.freemud.demo.manager.product.ProductService;
import cn.freemud.entities.dto.GetCouponDetailResponseDto;
import cn.freemud.entities.dto.GetProductStockRequestDto;
import cn.freemud.entities.dto.GetProductStockResponseDto;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.GetProductsVo;
import cn.freemud.enums.CouponStatus;
import cn.freemud.enums.ProductType;
import cn.freemud.enums.ResponseResult; import cn.freemud.enums.ResponseResult;
import cn.freemud.enums.StoreItemStatus;
import cn.freemud.interceptor.BizServiceException;
import cn.freemud.interceptor.ServiceException; import cn.freemud.interceptor.ServiceException;
import cn.freemud.redis.RedisCache;
import cn.freemud.service.impl.AssortmentSdkService;
import cn.freemud.utils.BeanUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
import com.freemud.application.sdk.api.productcenter.request.product.valid.ValidateShopProductRequest;
import com.freemud.application.sdk.api.productcenter.response.ProductResponseDTO;
import com.freemud.application.sdk.api.productcenter.response.valid.ValiadShopProductResponse;
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.impl.ShoppingCartBaseServiceImpl;
import com.google.common.collect.Lists;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import java.util.*;
public abstract class AbstractAddGoodsService implements AddGoodsService { public abstract class AbstractAddGoodsService implements AddGoodsService {
@Autowired @Autowired
...@@ -22,6 +52,23 @@ public abstract class AbstractAddGoodsService implements AddGoodsService { ...@@ -22,6 +52,23 @@ public abstract class AbstractAddGoodsService implements AddGoodsService {
@Autowired @Autowired
private ProductManager productManager; private ProductManager productManager;
@Autowired
private CouponManager couponManager;
@Autowired
private AssortmentSdkService assortmentSdkService;
@Autowired
private ShoppingCartBaseServiceImpl shoppingCartBaseService;
@Autowired
private RedisCache redisCache;
private static final String limitCartKey = "ecology:kgd:wxappconfig:open_platform_partner_wxapp_config:appkey_";
/** /**
* 加车的流程 * 加车的流程
...@@ -101,27 +148,120 @@ public abstract class AbstractAddGoodsService implements AddGoodsService { ...@@ -101,27 +148,120 @@ public abstract class AbstractAddGoodsService implements AddGoodsService {
*/ */
public final CheckBussinessRulesBO getShoppingCartInfo(BaseAddGoodsBO baseRequestBO) { public final CheckBussinessRulesBO getShoppingCartInfo(BaseAddGoodsBO baseRequestBO) {
CheckBussinessRulesBO bo = new CheckBussinessRulesBO(); CheckBussinessRulesBO bo = new CheckBussinessRulesBO();
// 获取用户信息
String userId = customerManager.getUserId(baseRequestBO.getSessionId(), baseRequestBO.getManagerService().getCustomerService()); String userId = customerManager.getUserId(baseRequestBO.getSessionId(), baseRequestBO.getManagerService().getCustomerService());
bo.setUserId(userId); bo.setUserId(userId);
// 获取商品信息
GetProductBO getProductBO = convert2ProductBO(baseRequestBO); GetProductBO getProductBO = convert2ProductBO(baseRequestBO);
ProductBO productsInfo = productManager.getProductsInfo(getProductBO, baseRequestBO.getManagerService().getProductService()); ProductBO productsInfo = productManager.getProductsInfo(getProductBO, baseRequestBO.getManagerService().getProductService());
bo.setProduct(productsInfo); bo.setProduct(productsInfo);
// 获取购物车信息
// 注意,围餐和点餐redis数据结构不一样
List<CartGoods> allCartGoodsList = assortmentSdkService.getShoppingCart(baseRequestBO.getPartnerId(), baseRequestBO.getShopId(), userId, baseRequestBO.getSessionId(), null, shoppingCartBaseService);
if (CollectionUtils.isEmpty(allCartGoodsList)) {
allCartGoodsList = new ArrayList<>();
}
List<CartGoods> oldCartGoodsList = BeanUtil.convertBeans(allCartGoodsList, CartGoods::new);
bo.setCartGoods(oldCartGoodsList);
return bo; return bo;
} }
private GetCouponDetailBO convert2GetCouponDetailBO(BaseAddGoodsBO baseRequestBO) {
GetCouponDetailBO getCouponDetailBO = new GetCouponDetailBO();
getCouponDetailBO.setPartnerId(baseRequestBO.getPartnerId());
getCouponDetailBO.setCouponCode(baseRequestBO.getCouponCode());
getCouponDetailBO.setStoreCode(baseRequestBO.getShopId());
return getCouponDetailBO;
}
private GetProductBO convert2ProductBO(BaseAddGoodsBO baseRequestBO) { private GetProductBO convert2ProductBO(BaseAddGoodsBO baseRequestBO) {
GetProductBO getProductBO = new GetProductBO(); GetProductBO getProductBO = new GetProductBO();
GetCouponDetailBO getCouponDetail = convert2GetCouponDetailBO(baseRequestBO);
getProductBO.setStoreId(baseRequestBO.getShopId());
getProductBO.setMenuType(baseRequestBO.getMenuType()); getProductBO.setMenuType(baseRequestBO.getMenuType());
getProductBO.setPartnerId(baseRequestBO.getPartnerId()); getProductBO.setPartnerId(baseRequestBO.getPartnerId());
getProductBO.setSkuid(baseRequestBO.getSkuId()); if (baseRequestBO.getSpuId().startsWith(CommonsConstant.COUPON_PREFIX)) {
getProductBO.setSpuid(baseRequestBO.getSpuId()); // 如果是商品券,获取商品券信息
getProductBO.setStoreId(baseRequestBO.getShopId()); CouponDetailBO couponDetail = couponManager.getCouponDetail(getCouponDetail, baseRequestBO.getManagerService().getCouponService());
if (couponDetail == null || !couponDetail.getResult().equals(ResponseCodeConstant.RESPONSE_SUCCESS_1) || CollectionUtils.isEmpty(couponDetail.getDetails())) {
return null;
}
if (CollectionUtils.isEmpty(couponDetail.getDetails())) {
return null;
}
boolean productValid = false;
for (CouponDetailBO.Details detail : couponDetail.getDetails()) {
if (productValid) break;
if (!CouponStatus.STATUS_0.getCode().equals(detail.getStatus())) continue;
for (CouponDetailBO.ActiveProduct activeProduct : detail.getActiveProduct()) {
if (baseRequestBO.getSkuId().equals(activeProduct.getProductIdPartner())) {
productValid = true;
break;
}
}
}
//检查商品是否有效
if (!productValid) {
return null;
}
// 判断该券是否在这个门店下(一个券可以在多个门店下使用)
List<String> couPonstoreIds = Lists.newArrayList();
for (CouponDetailBO.Details detail : couponDetail.getDetails()) {
if (!CouponStatus.STATUS_0.getCode().equals(detail.getStatus())) continue;
for (CouponDetailBO.ActiveRestrictionVOS activeRestrictionVO : detail.getActiveRestrictionVOS()) {
couPonstoreIds.add(activeRestrictionVO.getStoreIdPartner());
}
}
if (CollectionUtils.isNotEmpty(couPonstoreIds) && !couPonstoreIds.contains(baseRequestBO.getShopId())) {
return null;
}
//券返回的商品id
List<String> skuIds = Lists.newArrayList();
String skuId = baseRequestBO.getSpuId();
skuIds.add(skuId);
// 通过skuid查询spuid
GetProductBySkuIdBO getProductBySkuIdBO = convert2GetProductBySkuIdBO(baseRequestBO);
Map<String, GetProductBySkuIdResponseBO> productsInfoBySkuIds = productManager.getProductsInfoBySkuIds(getProductBySkuIdBO, baseRequestBO.getManagerService().getProductService());
GetProductBySkuIdResponseBO productsVo = productsInfoBySkuIds.get(skuId);
if (null == productsVo || !Objects.equals(productsVo.getStatus(), StoreItemStatus.PUT_ON_SALE.getCode())) {
return null;
}
// TODO 后面做校验商品可用时间
/*
ValidateShopProductRequest request = getValidateShopProductRequest(productsVo, requestDto);
ProductResponseDTO<ValiadShopProductResponse> valiadProductResponse = storeItemClient.validateShopProduct(request);
if (null == valiadProductResponse || !Objects.equals(com.freemud.application.sdk.api.productcenter.constant.ResponseConstant.SUCCESS_RESPONSE_CODE, valiadProductResponse.getErrcode())
|| valiadProductResponse.getData() == null || CollectionUtils.isEmpty(valiadProductResponse.getData().getSuccessList())) {
return null;
}
*/
getProductBO.setSpuid(productsVo.getSpuId());
getProductBO.setSkuid(productsVo.getSkuId());
} else {
getProductBO.setSkuid(baseRequestBO.getSkuId());
getProductBO.setSpuid(baseRequestBO.getSpuId());
}
return getProductBO; return getProductBO;
} }
private GetProductBySkuIdBO convert2GetProductBySkuIdBO(BaseAddGoodsBO baseRequestBO) {
GetProductBySkuIdBO getProductBySkuIdBO = new GetProductBySkuIdBO();
getProductBySkuIdBO.setMenuType(baseRequestBO.getMenuType());
getProductBySkuIdBO.setPartnerId(baseRequestBO.getPartnerId());
List<String> skuids = new ArrayList<>();
skuids.add(baseRequestBO.getSkuId());
getProductBySkuIdBO.setSkuids(skuids);
getProductBySkuIdBO.setStoreId(baseRequestBO.getShopId());
return getProductBySkuIdBO;
}
/** /**
* 具体业务逻辑校验, 例如商品数量,库存等校验 * 具体业务逻辑校验, 例如商品数量,库存等校验
* *
...@@ -161,10 +301,29 @@ public abstract class AbstractAddGoodsService implements AddGoodsService { ...@@ -161,10 +301,29 @@ public abstract class AbstractAddGoodsService implements AddGoodsService {
} }
private AddGoodsToShoppingCartBO checkCommBusinessRules(BaseAddGoodsBO baseRequestDTO, CheckBussinessRulesBO checkBussinessRulesBO) { private AddGoodsToShoppingCartBO checkCommBusinessRules(BaseAddGoodsBO baseRequestDTO, CheckBussinessRulesBO checkBussinessRulesBO) {
// 校验商品券是否在可用时间
//购物车添加数量限制
ProductBO addGoods = baseRequestDTO.getAddGoods();
this.limitGoodsQty(checkBussinessRulesBO.getCartGoods(), addGoods, baseRequestDTO.getAppId());
// 校验数量, 库存
this.checkStocks(baseRequestDTO, checkBussinessRulesBO);
// 检查校验购物车商品(是否合法,上下架,点餐方式,是否在当前菜单中...),并移除非法商品
return null; return null;
} }
private CalCostBO commAddGoodsToShoppingCart(BaseAddGoodsBO baseRequestDTO, AddGoodsToShoppingCartBO addGoodsToShoppingCartBO) { private CalCostBO commAddGoodsToShoppingCart(BaseAddGoodsBO baseRequestDTO, AddGoodsToShoppingCartBO addGoodsToShoppingCartBO) {
if (!baseRequestDTO.getSpuId().startsWith(CommonsConstant.COUPON_PREFIX)) {
//添加非商品券商品
addNotProductGoods(addShoppingCartGoodsRequestVo, cartGoods, goodsId, userId, shoppingCartGoodsResponseVo, allCartGoodsList);
} else {
// 当商品是商品券,里面会判断如果购物车中已有商品券,会将cartGoods的CartGoodsUid设为null
this.addProductGoods(addShoppingCartGoodsRequestVo, cartGoods, spuId2, userId, shoppingCartGoodsResponseVo,
spuId, allCartGoodsList, productBeanListSpuClass, couponProductDto);
}
return null; return null;
} }
...@@ -180,4 +339,110 @@ public abstract class AbstractAddGoodsService implements AddGoodsService { ...@@ -180,4 +339,110 @@ public abstract class AbstractAddGoodsService implements AddGoodsService {
return null; return null;
} }
/**
* 查询生态配置限制加购开关与限制数量
*/
private Integer limitGoodsQty(List<CartGoods> oldCartGoodsList, ProductBO addGoods,String appid){
Integer qty = 0;
if(CollectionUtils.isNotEmpty(oldCartGoodsList)){
for (CartGoods goods : oldCartGoodsList) {
qty += goods.getQty();
}
}
qty += addGoods.getQty();
String redisKey = limitCartKey + appid;
Object value = redisCache.hashGet(redisKey, "2");
if (value == null) {
return qty;
} else {
boolean bool = value.getClass().getName().equals("java.lang.String");
if(bool){
return qty;
}
JSONArray jsonArray = (JSONArray)value;
int cartLimitFlag = 0;
int cartLimitCount = 0;
for (Object object : jsonArray){
JSONObject jsonObject = (JSONObject)object;
HashMap hashMap = JSONObject.parseObject(jsonObject.toJSONString(),HashMap.class);
if("cartLimitFlag".equals(hashMap.get("appKey"))){
if (StringUtils.isBlank((String)hashMap.get("appValue"))) {
return qty;
}
cartLimitFlag = Integer.parseInt((String)hashMap.get("appValue"));
}
if("cartLimitCount".equals(hashMap.get("appKey"))){
if (StringUtils.isBlank((String)hashMap.get("appValue"))) {
return qty;
}
cartLimitCount = Integer.parseInt((String)hashMap.get("appValue"));
}
}
if(cartLimitFlag == 1 && cartLimitCount != 0 && qty > cartLimitCount){
throw new ServiceException(ResponseResult.SHOPPING_CART_LIMIT_ADD);
}
}
return qty;
}
private void checkStocks(BaseAddGoodsBO baseRequestDTO, CheckBussinessRulesBO checkBussinessRulesBO){
GetProductStockRequestDto requestDto = new GetProductStockRequestDto();
requestDto.setChannel(BusinessTypeEnum.getByType(baseRequestDTO.getMenuType()).getCode());
requestDto.setPartnerId(baseRequestDTO.getPartnerId());
requestDto.setStoreId(baseRequestDTO.getShopId());
List<Long> productIds = new ArrayList<>();
productIds.add(Long.parseLong(checkBussinessRulesBO.getProduct().getSkuId()));
requestDto.setProductIds(productIds);
ProductBO product = checkBussinessRulesBO.getProduct();
ProductStockBO availableStocks = null;
GetProductStock getProductStock = new GetProductStock();
if (product.getType() == ProductType.NOSPEC.getCode()
&& product.getStockLimit() == 1) {
List<ProductStockBO> productStock = productManager.getProductStock(getProductStock, baseRequestDTO.getManagerService().getProductService());
if (CollectionUtils.isNotEmpty(productStock)){
availableStocks = productStock.get(0);
}
} else {
for (ProductBO.SkuProductBean skuProductBean : product.getSkuList()) {
if (baseRequestDTO.getSkuId().equals(skuProductBean.getSkuId()) && skuProductBean.getStockLimit() == 1) {
List<ProductStockBO> productStock = productManager.getProductStock(getProductStock, baseRequestDTO.getManagerService().getProductService());
if (CollectionUtils.isNotEmpty(productStock)){
availableStocks = productStock.get(0);
}
break;
}
}
}
if (availableStocks != null ) {
throw new ServiceException(ResponseResult.SHOPPING_CART_STOCK_NOT_HAVE);
}
List<CartGoods> oldCartGoodsList = checkBussinessRulesBO.getCartGoods();
ProductBO cartGoods = baseRequestDTO.getAddGoods();
Integer qty = 0;
if (CollectionUtils.isEmpty(oldCartGoodsList)) {
qty = cartGoods.getQty();
} else {
qty = cartGoods.getQty();
for (CartGoods goods : oldCartGoodsList) {
if (goods.getSkuId().equals(cartGoods.getSkuId()) && goods.getSpuId().equals(cartGoods.getSpuId())) {
qty += goods.getQty();
}
}
}
if (availableStocks != null &&
(availableStocks.getQty() == null
|| availableStocks.getQty() < qty)) {
Integer stock = 0;
if ((stock = availableStocks.getQty()) > 0) {
throw new BizServiceException(ResponseResult.SHOPPING_CART_STOCK_NOT_HAVE, "仅剩" + stock + "件库存了");
}
throw new ServiceException(ResponseResult.SHOPPING_CART_STOCK_NOT_HAVE);
}
}
} }
...@@ -14,9 +14,6 @@ public class PlatformAddGoodsService extends AbstractAddGoodsService { ...@@ -14,9 +14,6 @@ public class PlatformAddGoodsService extends AbstractAddGoodsService {
@Override @Override
public BaseResponse checkCustomParams(BaseAddGoodsBO baseRequestDTO) { public BaseResponse checkCustomParams(BaseAddGoodsBO baseRequestDTO) {
if (baseRequestDTO.getShopId().length() > MAX_SHOP_LENGTH){
throw new ServiceException(ResponseResult.SHOPPING_CART_SHOP_ID_NOT_EMPTY);
}
return ResponseBuilder.success(); return ResponseBuilder.success();
} }
......
package cn.freemud.demo.service;
import cn.freemud.entities.vo.CartGoods;
import java.util.List;
public class ShoppingBaseServiceImpl implements ShoppingCartService {
@Override
public List<CartGoods> updateAndGetShoppingCart() {
return null;
}
}
package cn.freemud.demo.service;
import cn.freemud.entities.vo.CartGoods;
import java.util.List;
public interface ShoppingCartService {
List<CartGoods> updateAndGetShoppingCart();
}
package cn.freemud.service; package cn.freemud.service;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.demo.entities.bo.goods.GetProductBySkuIdResponseBO;
import cn.freemud.entities.dto.GetMenuResponseDto; import cn.freemud.entities.dto.GetMenuResponseDto;
import cn.freemud.entities.vo.*; import cn.freemud.entities.vo.*;
...@@ -30,4 +31,14 @@ public interface ItemService { ...@@ -30,4 +31,14 @@ public interface ItemService {
*/ */
Map<String, GetProductsVo> getProducts(List<String> pids, String partnerId, String storeId ,String menuType); Map<String, GetProductsVo> getProducts(List<String> pids, String partnerId, String storeId ,String menuType);
/**
* 通过sku或单品组装MAP商品详情信息
* @param pids skuId
* @param partnerId
* @param storeId
* @return key = skuid
*/
Map<String, GetProductBySkuIdResponseBO> getProductsBySkuId(List<String> pids, String partnerId, String storeId , String menuType);
} }
...@@ -42,12 +42,10 @@ import cn.freemud.service.thirdparty.*; ...@@ -42,12 +42,10 @@ import cn.freemud.service.thirdparty.*;
import cn.freemud.utils.*; import cn.freemud.utils.*;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.freemud.application.sdk.api.productcenter.constant.ResponseConstant; import com.freemud.application.sdk.api.productcenter.constant.ResponseConstant;
import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
import com.freemud.application.sdk.api.productcenter.request.product.valid.ValidateShopProductRequest; import com.freemud.application.sdk.api.productcenter.request.product.valid.ValidateShopProductRequest;
import com.freemud.application.sdk.api.productcenter.request.product.valid.ValidateShopProductType; import com.freemud.application.sdk.api.productcenter.request.product.valid.ValidateShopProductType;
import com.freemud.application.sdk.api.productcenter.response.ProductResponseDTO; import com.freemud.application.sdk.api.productcenter.response.ProductResponseDTO;
import com.freemud.application.sdk.api.productcenter.response.valid.ValiadShopProductResponse; import com.freemud.application.sdk.api.productcenter.response.valid.ValiadShopProductResponse;
import com.freemud.application.sdk.api.productcenter.response.valid.ValiadShopProductResult;
import com.freemud.card.sdk.comm.Finals; import com.freemud.card.sdk.comm.Finals;
import com.freemud.card.sdk.comm.SignUtil; import com.freemud.card.sdk.comm.SignUtil;
import com.freemud.card.sdk.service.CouponAvailableService; import com.freemud.card.sdk.service.CouponAvailableService;
...@@ -61,7 +59,6 @@ import com.freemud.card.sdk.vo.comm.GetCouponVo; ...@@ -61,7 +59,6 @@ import com.freemud.card.sdk.vo.comm.GetCouponVo;
import com.freemud.card.sdk.vo.coupon.CreateCouponVo; import com.freemud.card.sdk.vo.coupon.CreateCouponVo;
import com.freemud.card.sdk.vo.coupon.request.MemberAddCouponVo; import com.freemud.card.sdk.vo.coupon.request.MemberAddCouponVo;
import com.freemud.card.sdk.vo.coupon.response.MemberBaseRespVo; import com.freemud.card.sdk.vo.coupon.response.MemberBaseRespVo;
import com.freemud.sdk.api.assortment.shoppingcart.constant.CartResponseConstant;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.gson.Gson; import com.google.gson.Gson;
...@@ -74,9 +71,10 @@ import org.springframework.beans.factory.annotation.Value; ...@@ -74,9 +71,10 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.IntStream;
@Service @Service
@Slf4j @Slf4j
...@@ -231,6 +229,11 @@ public class CouponServiceImpl implements CouponService { ...@@ -231,6 +229,11 @@ public class CouponServiceImpl implements CouponService {
if (getMemberCouponListResponseDto != null && Objects.equals(getMemberCouponListResponseDto.getCode(), ResponseResult.SUCCESS.getCode())) { if (getMemberCouponListResponseDto != null && Objects.equals(getMemberCouponListResponseDto.getCode(), ResponseResult.SUCCESS.getCode())) {
return getMemberCouponListResponseDto.getData(); return getMemberCouponListResponseDto.getData();
} }
AtomicInteger sum = new AtomicInteger();
IntStream.range(0, 10).forEach(value -> sum.getAndIncrement());
return null; return null;
} }
...@@ -767,6 +770,8 @@ public class CouponServiceImpl implements CouponService { ...@@ -767,6 +770,8 @@ public class CouponServiceImpl implements CouponService {
*/ */
@Override @Override
public CheckSpqInfoResponseDto checkSpqInfo(CheckSpqInfoRequestDto requestDto, String goodsId) { public CheckSpqInfoResponseDto checkSpqInfo(CheckSpqInfoRequestDto requestDto, String goodsId) {
log.info("checkSpqInfo****" + gson.toJson(requestDto)); log.info("checkSpqInfo****" + gson.toJson(requestDto));
String partnerId = requestDto.getPartnerId(); String partnerId = requestDto.getPartnerId();
String couponCode = requestDto.getCouponCode(); String couponCode = requestDto.getCouponCode();
......
...@@ -16,6 +16,7 @@ package cn.freemud.service.impl; ...@@ -16,6 +16,7 @@ package cn.freemud.service.impl;
import cn.freemud.adapter.StoreItemAdapter; import cn.freemud.adapter.StoreItemAdapter;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.constant.ResponseCodeConstant; import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.demo.entities.bo.goods.GetProductBySkuIdResponseBO;
import cn.freemud.entities.dto.*; import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean; import cn.freemud.entities.dto.GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean;
import cn.freemud.entities.vo.CartGoods; import cn.freemud.entities.vo.CartGoods;
...@@ -231,5 +232,92 @@ public class ItemServiceImpl implements ItemService { ...@@ -231,5 +232,92 @@ public class ItemServiceImpl implements ItemService {
return resultMap; return resultMap;
} }
@Override
public Map<String, GetProductBySkuIdResponseBO> getProductsBySkuId(List<String> pids, String partnerId, String storeId, String menuType) {
Map<String, GetProductBySkuIdResponseBO> resultMap = new HashMap<>();
if (CollectionUtils.isEmpty(pids)) {
return resultMap;
}
List<String> skuIds = Lists.newArrayList();
//查询商品详情
GetProductInfoDto getProductInfoDto = storeItemAdapter.convert2ProductInfoDto(partnerId, storeId, ProductInfoType.ALL.getCode(), pids,menuType);
ProductInfosDto productInfosDto = storeItemClient.listProductInfos(getProductInfoDto);
if (ResponseCodeConstant.RESPONSE_SUCCESS.equals(productInfosDto.getErrcode())
&& productInfosDto.getData() != null
&& CollectionUtils.isNotEmpty(productInfosDto.getData().getProducts())) {
productInfosDto.getData().getProducts().stream().forEach(productBean -> {
//多规格获取sku信息
GetProductBySkuIdResponseBO getProductBySkuId = new GetProductBySkuIdResponseBO();
getProductBySkuId.setSkuId(productBean.getPid());
getProductBySkuId.setSkuName(productBean.getName());
String picture = CollectionUtils.isNotEmpty(productBean.getProductPictureList())
? productBean.getProductPictureList().get(0).getUrl() : null;
getProductBySkuId.setSpuId(productBean.getPid());
getProductBySkuId.setSpuName(productBean.getName());
getProductBySkuId.setSpuPicture(picture);
getProductBySkuId.setOriginalPrice(productBean.getOriginalPrice());
getProductBySkuId.setFinalPrice(productBean.getFinalPrice());
getProductBySkuId.setProductAttributeGroupList(productBean.getProductAttributeGroupList());
getProductBySkuId.setStatus(productBean.getStatus());
getProductBySkuId.setStock(productBean.getStock());
getProductBySkuId.setStockLimit(productBean.getStockLimit());
getProductBySkuId.setCustomerCode(productBean.getCustomerCode());
getProductBySkuId.setCategory(productBean.getCategory());
getProductBySkuId.setCategoryName(productBean.getCategoryName());
resultMap.put(productBean.getPid(), getProductBySkuId);
getProductBySkuId.setType(1);
// 规格ID 剔除单品
if (Objects.equals(productBean.getIsSkuProduct(), YesOrNoEnum.YES.getCode())) {
getProductBySkuId.setType(10);
skuIds.add(productBean.getPid());
}
});
}
if (CollectionUtils.isEmpty(skuIds)) {
return resultMap;
}
// 通过skuid查询spuid
GetSpuIdsBySkuIdsDto bySkuIdsDto = new GetSpuIdsBySkuIdsDto();
bySkuIdsDto.setProductIds(skuIds);
bySkuIdsDto.setPartnerId(partnerId);
ProductListDto productListDto = storeItemClient.getSpuIdsBySkuIds(bySkuIdsDto);
if (ResponseCodeConstant.RESPONSE_SUCCESS.equals(productListDto.getErrcode())
&& CollectionUtils.isNotEmpty(productListDto.getData())) {
productListDto.getData().stream().forEach(product -> {
product.getSkuList().stream().forEach(skuProductBean -> {
if (resultMap.get(skuProductBean.getSkuId()) != null) {
GetProductBySkuIdResponseBO getProductBySkuId = resultMap.get(skuProductBean.getSkuId());
getProductBySkuId.setSpuId(product.getPid());
getProductBySkuId.setSpuName(product.getName());
String picture = CollectionUtils.isNotEmpty(product.getProductPictureList())
? product.getProductPictureList().get(0).getUrl() : product.getPicture();
getProductBySkuId.setSpuPicture(picture);
if (CollectionUtils.isNotEmpty(product.getProductAttributeGroupList())
&& CollectionUtils.isNotEmpty(product.getProductAttributeGroupList().get(0).getAttributeValues())) {
List<CartGoods.CartGoodsExtra> extras = new ArrayList<>();
List<String> specId = new ArrayList<>();
List<String> specName = new ArrayList<>();
for (ProductListDto.DataBean.ProductAttributeGroupListBean bean : product.getProductAttributeGroupList()) {
for (ProductListDto.DataBean.ProductAttributeGroupListBean.AttributeValueBean attr : bean.getAttributeValues()) {
CartGoods.CartGoodsExtra extra = new CartGoods.CartGoodsExtra();
extra.setAttributeId(attr.getAttributeId());
extra.setAttributeName(attr.getAttributeValue());
specName.add(attr.getAttributeValue());
specId.add(attr.getAttributeId());
break;
}
}
getProductBySkuId.setExtra(extras);
getProductBySkuId.setDefaultSpecName(StringUtils.join(specName, "/"));
getProductBySkuId.setDefaultSpecId(StringUtils.join(specId, "/"));
}
resultMap.put(skuProductBean.getSkuId(), getProductBySkuId);
}
});
});
}
return resultMap;
}
} }
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