继续接前文手撕商城系统架构设计与实现
本文主要讲解商城体系下产商品系统的设计。商城系统可以拆分成多个业务中台和多个应用服务。
1、产商品系统业务架构
产商品系统作为商城重要的基础信息组成部分,主要划分为产品信息和商品信息,产品信息保持最原始的产品基础属性和内容,商品信息则根据不同的售卖策略、营销价格属性或SKU进行组装而成。
因此商品源于产品而不同于产品。简单概括来说,商品是营销属性的产品。
2、产商品关键内容信息
产商品中心关键内容包括:产品信息、商品信息、目录管理、标签信息、产品字典库、产品分类、产品属性、价格版本管理、商品SKU组合。
产品信息应该包括产品基本信息,产品价格(与报价系统产品价格统一库),产品工艺术属性信息。
3、产商品系统边界
产商品系统与其他系统关系
订单系统与产商品系统调用关系
4、产商品结构模型设计
5、关键代码片断
@RestController
@RequestMapping("/customer-api/v1/collect")
public class GoodsCollectController {
/**
* 分页获取当前会员的收藏列表
*
* @return 收藏列表
*/
@RestApi(module = "商品收藏-C端", name = "分页获取当前会员的收藏列表", logabled = true)
@PostMapping("/page")
public DataResponse> pageCurrentMemberGoodsCollect(@RequestBody @Valid GoodsCollectQry qry) {
CustomizePage goodsCollectE = MallGoodsCollectE.queryInstance().pageCurrentMemberGoodsCollect(qry);
return DataResponse.of(GoodsCollectVOConverter.convert(goodsCollectE));
}
/**
* 加入收藏
*
* @param cmd 商品id
* @return 收藏列表
*/
@RestApi(module = "商品收藏-C端", name = "加入收藏", logabled = true)
@PostMapping("/add")
public DataResponse addGoodsCollect(@RequestBody @Valid AddGoodsCollectCmd cmd) {
return DataResponse.of(MallGoodsCollectE.queryInstance().addGoodsCollect(cmd));
}
/**
* 取消收藏
*
* @param id 收藏id
* @return 操作结果
*/
@RestApi(module = "商品收藏-C端", name = "取消收藏", logabled = true)
@DeleteMapping("/{id}")
public DataResponse deleteGoodsCollect(@PathVariable Long id) {
return DataResponse.of(MallGoodsCollectE.queryInstance().deleteGoodsCollect(id));
}
/**
* 根据 商品id 查询当前商品收藏情况
*
* @param cmd 商品id
* @return 当前商品收藏情况
*/
@RestApi(module = "商品收藏-C端", name = "根据 商品id 查询当前商品收藏情况", logabled = true)
@PostMapping("/getGoodsCollect")
public DataResponse getGoodsCollect(@RequestBody GetGoodsCollectCmd cmd) {
MallGoodsCollectE mallGoodsCollectE = MallGoodsCollectE.queryInstance().getGoodsCollect(cmd);
return DataResponse.of(BeanToolkit.instance().copy(mallGoodsCollectE, GetGoodsCollectVO.class));
}
}
@Slf4j
@Service
public class GoodsService {
@Autowired
private GoodsSkuRpcService goodsSkuRpcService;
@Autowired
private GoodsGateway goodsGateway;
/**
* 查询商品详情
*/
public Map mapSkuCO(List skuIds) {
if (CollUtil.isEmpty(skuIds)) {
return Collections.emptyMap();
}
DataResponse
@Slf4j
@Component
public class GoodsGatewayImpl implements GoodsGateway {
@Autowired
private GoodsSkuRpcService goodsSkuRpcService;
@Autowired
private GoodsSupplierRpcService supplierRpcService;
@Override
public void updateInventory(List dtoList) {
List skuIncrementCmds = BeanToolkit.instance().copyList(dtoList, SkuIncrementCmd.class);
Response response = goodsSkuRpcService.increment(skuIncrementCmds);
if (!response.getStatus()) {
throw new RpcErrorException(response.getMessage(), "商品");
}
}
@Override
public Map mapSupplierCO() {
DataResponse> response = supplierRpcService.listAll();
List supplierCOS = ResponseUtil.resultValidate(response);
if (CollUtil.isEmpty(supplierCOS)) {
return Collections.emptyMap();
}
List supplierDTOS = BeanToolkit.instance().copyList(supplierCOS, SupplierDTO.class);
return supplierDTOS.stream().collect(Collectors.toMap(SupplierDTO::getId, Function.identity()));
}
}
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net