Commit 40db8101 authored by shiyu's avatar shiyu

上传商品sku

parent 84f93740
...@@ -129,7 +129,7 @@ public class ShiroConfig { ...@@ -129,7 +129,7 @@ public class ShiroConfig {
filterChainDefinitionMap.put("/admin/sysFinance/**", "anon"); filterChainDefinitionMap.put("/admin/sysFinance/**", "anon");
filterChainDefinitionMap.put("/admin/groupPurchase/**", "anon"); filterChainDefinitionMap.put("/admin/groupPurchase/**", "anon");
filterChainDefinitionMap.put("/admin/invitationCode/**", "anon"); filterChainDefinitionMap.put("/admin/invitationCode/**", "anon");
filterChainDefinitionMap.put("/admin/itemSku/**", "anon");
filterChainDefinitionMap.put("/admin/invitationCode/**", "anon"); filterChainDefinitionMap.put("/admin/invitationCode/**", "anon");
filterChainDefinitionMap.put("/admin/**", "anon"); filterChainDefinitionMap.put("/admin/**", "anon");
......
package com.wwdz.ch.admin.controller;
import com.alibaba.fastjson.JSON;
import com.wwdz.ch.admin.service.SysItemSkuService;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.dto.request.distribution.ItemSkuRequestDto;
import com.xxdxxs.service.FormHandler;
import com.xxdxxs.validation.Validator;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/admin/itemSku")
public class SysItemSkuController {
private static final Logger logger = LoggerFactory.getLogger(SysItemSkuController.class);
@Autowired
SysItemSkuService sysItemSkuService;
@ApiOperation(value = "上传商品sku")
@PostMapping("/create")
public Result create(@RequestBody ItemSkuRequestDto dto) {
logger.info("上传商品sku, 请求参数:{}", JSON.toJSONString(dto));
Validator validator = new Validator(FormHandler.ofEntity(dto));
validator.set("itemId", "商品id").must().number()
.set("name", "名称").must().string()
.end();
if (!validator.isValid()) {
return Result.failed(validator.getErrorInfo());
}
return sysItemSkuService.create(dto);
}
}
package com.wwdz.ch.admin.impl;
import com.wwdz.ch.admin.service.SysItemSkuService;
import com.wwdz.ch.core.consts.CommConsts;
import com.wwdz.ch.core.consts.MediaTypeEnum;
import com.wwdz.ch.core.storage.QiniuStorage;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.core.util.MediaUtil;
import com.wwdz.ch.core.util.PriceUtil;
import com.wwdz.ch.core.util.UUID;
import com.wwdz.ch.db.dao.distribution.ItemSkuDao;
import com.wwdz.ch.db.domain.distribution.ItemSku;
import com.wwdz.ch.db.dto.request.distribution.ItemSkuRequestDto;
import com.xxdxxs.utils.CommonUtils;
import com.xxdxxs.utils.EntityMapper;
import com.xxdxxs.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Arrays;
import java.util.Date;
@Service
public class SysItemSkuServiceImpl implements SysItemSkuService {
private static final Logger logger = LoggerFactory.getLogger(SysItemSkuServiceImpl.class);
@Autowired
ItemSkuDao itemSkuDao;
@Autowired
QiniuStorage qiniuStorage;
@Override
public Result create(ItemSkuRequestDto dto) {
try {
ItemSku itemSku = new ItemSku();
EntityMapper.copyAttribute(dto, itemSku);
itemSku.setSkuCode(UUID.fastUUID().toString(true));
itemSku.setPrice(PriceUtil.convertPriceFromStr(StringUtils.isEmpty(dto.getPrice())?"0":dto.getPrice()));
itemSku.setImages(dto.getImages());
if (StringUtils.hasLength(dto.getVideos())) {
itemSku.setVideos(getVideosImage(dto.getVideos()));
}
Date now = new Date();
itemSku.setCreateTime(now);
itemSku.setUpdateTime(now);
itemSku.setIsDeleted(false);
itemSkuDao.insert(itemSku);
return Result.success();
} catch (Exception e) {
logger.error("上传商品sku error : {}", e);
}
return Result.failed();
}
private String getVideosImage(String videos) {
String video = "";
String[] images = videos.split(";");
StringBuffer stringBuffer = new StringBuffer();
Arrays.stream(images).forEach(image -> {
if (stringBuffer.length() != 0) {
stringBuffer.append(";");
}
try {
String cutImage = MediaUtil.getImageByCutVedio(image);
logger.info(">>>>>> 截取视频第一帧图片url = {} <<<<<<<", cutImage);
URL url = new URL(cutImage);
InputStream inputStream = url.openStream();
BufferedImage bufferedImage = ImageIO.read(inputStream);
String keyName = CommConsts.UPLOAD_PRE_DIRECTORY + CommonUtils.getUUID() + "_" + bufferedImage.getWidth() + "x" + bufferedImage.getHeight() + "." + MediaTypeEnum.IMAGE_JPG.getExt();
InputStream imageStream = bufferedImageToInputStream(bufferedImage, MediaTypeEnum.IMAGE_JPG.getExt());
qiniuStorage.store(imageStream, 1, MediaTypeEnum.IMAGE_JPG.getMime(), keyName);
String urlOfSize = qiniuStorage.generateUrl(keyName);
stringBuffer.append(image).append(",").append(urlOfSize);
} catch (Exception e) {
stringBuffer.append(image);
logger.error("视频图片上传失败", e);
}
});
video = stringBuffer.toString();
return video;
}
/**
* 将BufferedImage转换为InputStream
*
* @param image 数据源
* @param type 图片格式
* @return
*/
private static InputStream bufferedImageToInputStream(BufferedImage image, String type) {
try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
ImageIO.write(image, type, os);
return new ByteArrayInputStream(os.toByteArray());
} catch (IOException e) {
logger.error("bufferedImageToInputStream 出错,原因: {}", e);
}
return null;
}
}
package com.wwdz.ch.admin.service;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.dto.request.distribution.ItemSkuRequestDto;
public interface SysItemSkuService {
/**
* 上传商品sku
* @param dto
* @return
*/
Result create(ItemSkuRequestDto dto);
}
...@@ -231,6 +231,9 @@ public class MediaUtil { ...@@ -231,6 +231,9 @@ public class MediaUtil {
return sb.toString(); return sb.toString();
} }
public static void main(String[] args) { public static void main(String[] args) {
String vedioUrl = "https://cdn.wanwudezhi.com/quanku/video/12d8a09d5ff14ec1af6604c3814c614a.mp4"; String vedioUrl = "https://cdn.wanwudezhi.com/quanku/video/12d8a09d5ff14ec1af6604c3814c614a.mp4";
String url = getImageByCutVedio(vedioUrl); String url = getImageByCutVedio(vedioUrl);
...@@ -238,4 +241,7 @@ public class MediaUtil { ...@@ -238,4 +241,7 @@ public class MediaUtil {
ImageInfo imageInfo = getImageSize(url); ImageInfo imageInfo = getImageSize(url);
System.out.println(imageInfo.formartString()); System.out.println(imageInfo.formartString());
} }
} }
...@@ -52,4 +52,15 @@ public class StringUtil { ...@@ -52,4 +52,15 @@ public class StringUtil {
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
} }
/**
* 创建sku编码
* 商品id
* @return
*/
public static String createSkuCode(long itemId) {
/* String categoryIdStr = String.format("%03d", );
String skuCode = itemId + categoryIdStr + numStr;*/
return null;
}
} }
package com.wwdz.ch.db.dao.distribution;
import com.wwdz.ch.db.domain.distribution.ItemSku;
import java.util.List;
public interface ItemSkuDao {
boolean insert(ItemSku itemSku);
List<ItemSku> findByItemId(long itemId);
boolean update(ItemSku itemSku);
}
package com.wwdz.ch.db.dto.request.distribution;
import com.wwdz.ch.db.dto.request.BaseRequestDto;
import com.xxdxxs.entity.Entity;
import lombok.Data;
import java.util.Date;
@Data
public class ItemSkuRequestDto extends BaseRequestDto implements Entity {
private Long id;
/**
* sku编码
*/
private String skuCode;
/**
* 名称
*/
private String name;
/**
* 商品id
*/
private Long itemId;
/**
* 默认图
*/
private String defaultImage;
/**
* 价格,单位元
*/
private String price;
/**
* 删除标识
*/
private Boolean isDeleted;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 图片
*/
private String images;
/**
* 视频
*/
private String videos;
/**
* 描述
*/
private String description;
}
package com.wwdz.ch.db.impl.distribution;
import com.wwdz.ch.db.dao.distribution.ItemSkuDao;
import com.wwdz.ch.db.domain.distribution.ItemSku;
import com.wwdz.ch.db.domain.distribution.ItemSkuExample;
import com.wwdz.ch.db.mapper.distribution.ItemSkuMapper;
import com.xxdxxs.db.component.JdbcHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public class ItemSkuDaoImpl implements ItemSkuDao {
@Autowired
ItemSkuMapper itemSkuMapper;
@Override
public boolean insert(ItemSku itemSku) {
return itemSkuMapper.insert(itemSku) > 0;
}
@Override
public List<ItemSku> findByItemId(long itemId) {
ItemSkuExample example = new ItemSkuExample();
ItemSkuExample.Criteria criteria = example.createCriteria();
criteria.andItemIdEqualTo(itemId);
example.setOrderByClause("create_time desc");
return itemSkuMapper.selectByExample(example);
}
@Override
public boolean update(ItemSku itemSku) {
ItemSkuExample example = new ItemSkuExample();
ItemSkuExample.Criteria criteria = example.createCriteria();
JdbcHelper.ifPresent(itemSku.getItemId(), criteria :: andItemIdEqualTo);
JdbcHelper.ifPresent(itemSku.getSkuCode(), criteria :: andSkuCodeEqualTo);
return itemSkuMapper.updateByExampleSelective(itemSku, example) > 0;
}
}
package com.wwdz.ch.db.mapper.distribution;
import com.wwdz.ch.db.domain.distribution.ItemSku;
import com.wwdz.ch.db.domain.distribution.ItemSkuExample;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface ItemSkuMapper {
long countByExample(ItemSkuExample example);
int deleteByExample(ItemSkuExample example);
int deleteByPrimaryKey(Long id);
int insert(ItemSku record);
int insertSelective(ItemSku record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table item_sku
*
* @mbg.generated
* @project https://github.com/itfsw/mybatis-generator-plugin
*/
ItemSku selectOneByExample(ItemSkuExample example);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table item_sku
*
* @mbg.generated
* @project https://github.com/itfsw/mybatis-generator-plugin
*/
ItemSku selectOneByExampleSelective(@Param("example") ItemSkuExample example, @Param("selective") ItemSku.Column ... selective);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table item_sku
*
* @mbg.generated
* @project https://github.com/itfsw/mybatis-generator-plugin
*/
ItemSku selectOneByExampleWithBLOBs(ItemSkuExample example);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table item_sku
*
* @mbg.generated
* @project https://github.com/itfsw/mybatis-generator-plugin
*/
List<ItemSku> selectByExampleSelective(@Param("example") ItemSkuExample example, @Param("selective") ItemSku.Column ... selective);
List<ItemSku> selectByExampleWithBLOBs(ItemSkuExample example);
List<ItemSku> selectByExample(ItemSkuExample example);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table item_sku
*
* @mbg.generated
* @project https://github.com/itfsw/mybatis-generator-plugin
*/
ItemSku selectByPrimaryKeySelective(@Param("id") Long id, @Param("selective") ItemSku.Column ... selective);
ItemSku selectByPrimaryKey(Long id);
int updateByExampleSelective(@Param("record") ItemSku record, @Param("example") ItemSkuExample example);
int updateByExampleWithBLOBs(@Param("record") ItemSku record, @Param("example") ItemSkuExample example);
int updateByExample(@Param("record") ItemSku record, @Param("example") ItemSkuExample example);
int updateByPrimaryKeySelective(ItemSku record);
int updateByPrimaryKeyWithBLOBs(ItemSku record);
int updateByPrimaryKey(ItemSku record);
}
\ No newline at end of file
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