一、业务介绍
1.1 数据库表结构
1.2 数据准备
1.1 平台属性添加
1.2 商品spu管理
二、保存skuInfo功能
2.1 图片加载功能
功能分析:图片列表是根据spuId得来,涉及到的数据库表spu_image
2.1.1 添加接口实现类
| 接口_/**
- 根据spuId 查询spuImageList
- @param **_spuId
_* @return
*/
_ListgetSpuImageList(Long spuId); | | —- | | 实现类@Override public List
getSpuImageList(Long spuId) { new QueryWrapper<>();
QueryWrapperqueryWrapper =
queryWrapper.eq(“spu_id”, spuId);
return spuImageMapper**.selectList(queryWrapper);
} |
2.1.2 添加控制器
| @Api(tags = “商品SKU接口”)
@RestController
@RequestMapping(“admin/product”)
public class SkuManageController {
@Autowired
private ManageService manageService;
_/**
* 根据spuId 查询spuImageList<br />
* **@param **_**_spuId<br />
_**_* **@return<br />
***/<br />
_@GetMapping(**"spuImageList/{spuId}"**)<br />
**public **Result<List<SpuImage>> getSpuImageList(@PathVariable(**"spuId"**) Long spuId) {<br />
List<SpuImage> spuImageList = **manageService**.getSpuImageList(spuId);<br />
**return **Result._ok_(spuImageList);<br />
}} |
| —- |
2.2 销售属性
2.2.1 编写接口以及实现类
| 接口:_/**
- 根据spuId 查询销售属性集合
- @param **_spuId
_* @return
*/
_ListgetSpuSaleAttrList(Long spuId); | | —- | | 实现类:@Override public List
getSpuSaleAttrList(Long spuId) { return spuSaleAttrMapper.selectSpuSaleAttrList(spuId);
} | | @Mapper
public interface SpuSaleAttrMapper extends BaseMapper{ xml version=”1.0” encoding=”UTF-8”?>
// 根据spuId 查询销售属性集合 _ListselectSpuSaleAttrList(Long spuId); } | | SpuSaleAttrMapper.xml<?_
<!DOCTYPE mapper SYSTEM “http://mybatis.org/dtd/mybatis-3-mapper.dtd“ >
<mapper namespace=”com.atguigu.gmall.product.mapper.SpuSaleAttrMapper”>
<resultMap id=”spuSaleAttrMap” type=”com.atguigu.gmall.model.product.SpuSaleAttr” autoMapping=”true”>
<id property=”id” column=”id”></id>
<collection property=”spuSaleAttrValueList” ofType=”com.atguigu.gmall.model.product.SpuSaleAttrValue” autoMapping=”true”**>
</collection><**id property="id" column="sale_attr_value_id"**></**id**>
</resultMap>
<sql id=”spuSaleAttr”> sa.id ,sa.spu_id, sa.sale_attr_name,sa.base_sale_attr_id,
sv.id sale_attr_value_id,
sv.sale_attr_value_name
</sql> <select id=”selectSpuSaleAttrList” resultMap=”spuSaleAttrMap”> select
<include refid=”spuSaleAttr”></include> from spu_sale_attr sa inner join spu_sale_attr_value sv
on sa.spu_id=sv.spu_id and sa.base_sale_attr_id=sv.base_sale_attr_id
where sa.spu_id=#{spu_id}
</select> </mapper> |
2.2.2 编写控制器
| _/**
- 根据spuId 查询销售属性集合
- @param **_spuId
_* @return
*/
_@GetMapping(“spuSaleAttrList/{spuId}”)
public Result- > getSpuSaleAttrList(@PathVariable(
ListspuSaleAttrList = manageService.getSpuSaleAttrList(spuId);
return **Result.ok(spuSaleAttrList);
} | | —- |
2.3 点击保存按钮
2.3.1 创建mapper
| 创建对应数据库表实体类,以及接口mapper
@Mapper
public interface SkuInfoMapper extends BaseMapper
} |
| —- |
| @Mapper
public interface SkuImageMapper extends BaseMapper
} |
| @Mapper
public interface SkuAttrValueMapper extends BaseMapper
} |
| @Mapper
public interface SkuSaleAttrValueMapper extends BaseMapper
} |
2.3.2 编写接口与实现
| 接口_/**
- 保存数据
- @param **_skuInfo
*/
void saveSkuInfo(SkuInfo skuInfo); | | —- | | 实现类@Override
@Transactional(rollbackFor = Exception.class) public void *saveSkuInfo(SkuInfo skuInfo) {
_/
/skuInfo 库存单元表 --- spuInfo! skuImage 库存单元图片表 --- spuImage!<br /> skuSaleAttrValue sku销售属性值表{sku与销售属性值的中间表} --- skuInfo ,spuSaleAttrValue<br /> skuAttrValue sku与平台属性值的中间表 --- skuInfo ,baseAttrValue<br />
_skuInfoMapper.insert(skuInfo);
ListskuImageList = skuInfo.getSkuImageList(); && skuImageList.size() > 0) {
if (skuImageList != *null
}_// 循环遍历 _**for **(SkuImage skuImage : skuImageList) {<br /> skuImage.setSkuId(skuInfo.getId());<br /> **skuImageMapper**.insert(skuImage);<br /> }<br />
ListskuSaleAttrValueList = skuInfo.getSkuSaleAttrValueList();
// 调用判断集合方法 if (!CollectionUtils.isEmpty(skuSaleAttrValueList)) {
}**for **(SkuSaleAttrValue skuSaleAttrValue : skuSaleAttrValueList) {<br /> skuSaleAttrValue.setSkuId(skuInfo.getId());<br /> skuSaleAttrValue.setSpuId(skuInfo.getSpuId());<br /> **skuSaleAttrValueMapper**.insert(skuSaleAttrValue);<br /> }<br />
ListskuAttrValueList = skuInfo.getSkuAttrValueList();
if (!CollectionUtils.isEmpty(skuAttrValueList)) {
}**for **(SkuAttrValue skuAttrValue : skuAttrValueList) {<br /> skuAttrValue.setSkuId(skuInfo.getId());<br /> **skuAttrValueMapper**.insert(skuAttrValue);<br /> }<br />
} |
2.3.3 编写控制器
SkuManageController
| _/**
- 保存sku
@param **_skuInfo
_* @return
*/
_@PostMapping(“saveSkuInfo”)
public Result saveSkuInfo(@RequestBody SkuInfo skuInfo) {
// 调用服务层 manageService.saveSkuInfo(skuInfo);
return **Result.ok();
} | | —- |2.4 查询sku列表以及上下架处理
2.4.1 编写接口与实现类
在ManageService 中添加
/ SKU分页列表 @param pageParam * @return */_IPage 商品上架 @param _skuId */void onSale(Long skuId); _/ 商品下架 @param **_skuId */void **cancelSale(Long skuId); |
---|
接口实现类 @Overridepublic IPage QueryWrapper queryWrapper.orderByDesc(“id”); |
IPage
return page;
}
@Override
@Transactionalpublic void onSale(Long skuId) {
// 更改销售状态
_SkuInfo skuInfoUp = new SkuInfo();
skuInfoUp.setId(skuId);
skuInfoUp.setIsSale(1);
skuInfoMapper.updateById(skuInfoUp);
}
@Override
@Transactionalpublic void cancelSale(Long skuId) {
// 更改销售状态
SkuInfo skuInfoUp = new SkuInfo();
skuInfoUp.setId(skuId);
skuInfoUp.setIsSale(0);
skuInfoMapper.updateById(skuInfoUp);
}
_ |
2.4.2 编写控制器
BaseManageController 控制器
| /
SKU分页列表
@param page
* @param limit
* @return
*/@GetMapping(“/list/{page}/{limit}”)public Result index(
@PathVariable Long page,
@PathVariable Long limit) {
Page<SkuInfo> pageParam = **new **Page<>(page, limit);<br /> IPage<SkuInfo> pageModel = manageService.getPage(pageParam);<br /> **return **Result.ok(pageModel);<br />}<br /> <br />_/**<br /> * 商品上架<br /> * **@param **skuId<br /> * **@return<br /> ***/_@GetMapping(**"onSale/{skuId}"**)**public **Result onSale(@PathVariable(**"skuId"**) Long skuId) {<br /> manageService.onSale(skuId);<br /> **return **Result.ok();<br />}<br />_/**<br /> * 商品下架<br /> * **@param **skuId<br /> * **@return<br /> ***/_@GetMapping(**"cancelSale/{skuId}"**)**public **Result cancelSale(@PathVariable(**"skuId"**) Long skuId) {<br /> manageService.cancelSale(skuId);<br /> **return **Result.ok();<br />}<br /> |
| —- |