版权声明:★Study hard and make progress every day.☺★ https://blog.csdn.net/qq_38225558/article/details/86586325
sku属性管理
1、数据库t_sku表重新设计:
2、编写代码
service:
//添加sku属性
void addSkus(Long productId, List<Map<String,Object>> skuProperties, List<Map<String,Object>> skuDatas);
//通过商品id查询sku
List<Sku> querySkus(Long productId);
实现类:
@Autowired
private ProductMapper productMapper;
@Autowired
private ProductExtMapper productExtMapper;
@Autowired
private SkuMapper skuMapper;
@Override
public void addSkus(Long productId, List<Map<String,Object>> skuProperties, List<Map<String,Object>> skuDatas) {
Product product = productMapper.selectById(productId);
//skuProperties修改到product
product.setSkuTemplate(JSONArray.toJSONString(skuProperties));
productMapper.updateById(product);
//skuDatas放入sku表
//1 删除原来的
EntityWrapper<Sku> wapper = new EntityWrapper<>();
wapper.eq("productId", productId);
skuMapper.delete(wapper);
//2 插入新的
Map<String,Object> otherProp = new HashMap<>();
for (Map<String, Object> skuData : skuDatas) {
Sku sku = new Sku();
//处理了四个字段
sku.setProductId(productId);
for (String key : skuData.keySet()) {
//price,stock,state是直接传递进来
if ("price".equals(key)){
sku.setPrice(Integer.valueOf(skuData.get(key).toString()));
}
else if ("stock".equals(key)){
sku.setStock(Integer.valueOf(skuData.get(key).toString()));
}
else if ("state".equals(key)){
Integer state = (Integer) skuData.get(key);
sku.setState(state==1?true:false);
}else{//others 身高 三维
otherProp.put(key, skuData.get(key));
}
}
//处理其他值
List<Map<String,Object>> tmps = new ArrayList<>();
for (String key : otherProp.keySet()) {
Map<String,Object> map = new HashMap<>();
String properName = key;
Long properId = getProId(skuProperties,properName);//TODO
Object proValue = otherProp.get(key);//TODO
map.put("id", properId);
map.put("key", properName);
map.put("value", proValue);
tmps.add(map);
}
String skuValues = JSONArray.toJSONString(tmps);
sku.setSkuValues(skuValues);
//indexDexs 1_2_3
StringBuilder sb = new StringBuilder();
for (Map<String, Object> map : tmps) {
Long id = (Long) map.get("id"); //1 定位是哪个属性
String value = String.valueOf(map.get("value").toString()) ; //定位是哪个选项
Integer index = getIndex(skuProperties,id,value);
sb.append(index).append("_");
}
String indexDexs = sb.toString();
indexDexs= indexDexs.substring(0, indexDexs.lastIndexOf("_"));
sku.setIndexs(indexDexs);
skuMapper.insert(sku);
}
}
@Override
public List<Sku> querySkus(Long productId) {
Wrapper<Sku> w = new EntityWrapper<>();
w.eq("productId", productId);
return skuMapper.selectList(w);
}
//获取某个属性选项索引值
/**
* 从所有的属性(里面包含选项)拿到某个属性某个选项索引值.
* @param skuProperties 所有的属性(里面包含选项)
* @param proId 要获取哪个属性
* @param value 哪个选项
* @return
*/
private Integer getIndex(List<Map<String, Object>> skuProperties, Long proId, String value) {
for (Map<String, Object> skuProperty : skuProperties) {
Long proIdTmp = Long.valueOf(skuProperty.get("id").toString());
if (proIdTmp.longValue() == proId.longValue()){
//找到属性的选项
List<String> skuValues = (List<String>) skuProperty.get("skuValues");
int index = 0;
for (String skuValue : skuValues) {
if(skuValue.equals(value)){
return index;
}
index++;
}
}
}
return null;
}
private Long getProId(List<Map<String,Object>> skuProperties, String properName) {
for (Map<String,Object> skuProperty : skuProperties) {
Long spId = Long.valueOf(skuProperty.get("id").toString()) ;
String spName = (String) skuProperty.get("name");
if (properName.equals(spName)){
return spId;
}
}
return null;
}
controller:
/**
* 保存、修改
* @param params 传递的实体
* @return Ajaxresult转换结果
*/
@RequestMapping(value="/addSkus",method= RequestMethod.POST)
public AjaxResult addSkus(@RequestBody Map<String,Object> params){
try {
Integer tmp = (Integer) params.get("productId"); //Integer
Long productId = Long.parseLong(tmp.toString());
//[{id:1,name:xxx,skuValus[]},id:1,name:xxx,skuValus[]}]
List<Map<String,Object>> skuProperties = (List<Map<String,Object>>) params.get("skuProperties");
//skuDatas [{'身高':18,"price":18},{'身高':18,"price":18}]
List<Map<String,Object>> skuDatas = (List<Map<String,Object>>) params.get("skuDatas");
//sku{id:xx,price:xxx,skuValues:[{id,key,value},{}],indexs:1_2_3}
productService.addSkus(productId,skuProperties,skuDatas);
return AjaxResult.me();
} catch (Exception e) {
e.printStackTrace();
return AjaxResult.me().setSuccess(false).setMessage("保存sku属性失败!"+e.getMessage());
}
}
@RequestMapping(value = "/skus/{productId}",method = RequestMethod.GET)
public List<Map<String,Object>> querySkus(@PathVariable("productId") Long productId){
List<Sku> skus = productService.querySkus(productId);
List<Map<String,Object>> result = new ArrayList<>();
//把skuValues要进行转换
for (Sku sku : skus) {
result.add(sku2map(sku));
}
return result;
}
private Map<String,Object> sku2map(Sku sku) {
Map<String,Object> result = new LinkedHashMap<>();
// result.put("id",sku.getId() );
// result.put("productId",sku.getProductId() );
// result.put("indexs",sku.getIndexs() );
//[{"id":37,"key":"三维","value":"d"},{"id":36,"key":"身高","value":"c"},{"id":35,"key":"肤色","value":"a"}]
String skuValues = sku.getSkuValues();
List<Map> maps = JSONArray.parseArray(skuValues, Map.class);
//{"id":37,"key":"三维","value":"d"}
for (Map map : maps) {
String key = (String) map.get("key");
String value = (String) map.get("value");
result.put(key, value);
}
result.put("price",sku.getPrice() );
result.put("stock",sku.getStock() );
result.put("state",sku.getState() );
return result;
}
3、前端代码略