yshop1.8发布,新增素材管理等,详细查看readme或登录网站后台查看

This commit is contained in:
hupeng
2020-01-10 22:58:22 +08:00
parent 5c88f8281f
commit 6c663012a4
33 changed files with 851 additions and 52 deletions

View File

@ -134,37 +134,23 @@ yshop基于当前流行技术组合的前后端分离商城系统 SpringBoot2
- 1.3.1版本手机端新增商户管理、后台新增统计
- 1.3.2新增后台微信相关及其支付配置,新增自动回复配置
- 1.3.3新增 后台微信图文发送功能,小程序配置,增加小程序授权等,修复一些bug等
- yshop1.4版本发布,更新如下:
- 1.1、新增积分签到
- 1.2、新增会员等级、任务等功能,新增会员价格等
- 1.3、修复Redisson linux系统启动报错问题
- 1.4、修复商户简单权限功能
- 1.5、修复加入购物车覆盖问题
- 1.6、修复拼团出现undefined
- 1.7、会员后台新增余额调整
- 1.8、修复新增配置数据有时候不成功问题等
- yshop1.4版本发布
- 1.4.1个人中心新增账单流水
- yshop1.4.2 发布更新如下:
- 1.商品新增多图评价
- 2.订单新增快递查询
- 1.4.3版本,后台图标更新,后台模块重新拆分,物流快递单独管理,导出最新sql
- 1.4.4版本新增模板消息通知、H5端商家管理发货修改及其列表时间显示修复
- yshop1.5版本发布:
- 1、新增秒杀功能
- 2、手机端新增H5支付
- 3、修复其他bug
- yshop1.6发布:
- 1、新增砍价功能
- 2、新增加锁功能
- 3、修复其他bug
- yshop1.6.1发布新增移动端浏览记录下单增加简单ReentrantLock锁
- yshop1.6.2发布修复用户昵称带有表情导致入库失败问题修复下单订单金额为0不能支付的问题
- yshop1.6.4发布:后台新增修改订单价格与备注优化订单详情显示明细,修复积分记录标题不显示的问题
- yshop1.7 发布更新如下:
- 1.后台升級eladmin2.4(前端,后台权限,代码生成器等重构,新增服务器监控等)
- 2.修复商品分类一些问题
- 3.修复redis缓存问题
- 4.修复菜单控制台报error问题
- yshop1.7 发布
- yshop1.8发布:
- 1、新增小程序支付与登录,后台新增小程序跳转页面,
- 2、后台新增图片素材管理
- 3、本地上传与七牛云上传合并修改一个yml即可两者随意切换
- 4、升级swagger-bootstrap,swaager统一配置迁移到common(防止注解冲突)
- 5、后台优化操作显示
#### 反馈交流

View File

@ -7,7 +7,7 @@
<groupId>co.yixiang</groupId>
<artifactId>yshop</artifactId>
<packaging>pom</packaging>
<version>1.7</version>
<version>1.8</version>
<modules>
<module>yshop-common</module>

20
sql/yshop1.8新表结构 Normal file
View File

@ -0,0 +1,20 @@
CREATE TABLE `yx_material` (
`id` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT 'PK',
`del_flag` char(2) COLLATE utf8mb4_bin NOT NULL DEFAULT '0' COMMENT '逻辑删除标记0显示1隐藏',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_id` varchar(100) CHARACTER SET utf8 DEFAULT NULL COMMENT '创建者ID',
`type` char(2) COLLATE utf8mb4_bin NOT NULL COMMENT '类型1、图片2、视频',
`group_id` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '分组ID',
`name` varchar(200) COLLATE utf8mb4_bin NOT NULL COMMENT '素材名',
`url` varchar(500) COLLATE utf8mb4_bin DEFAULT '' COMMENT '素材链接',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='素材库';
CREATE TABLE `yx_material_group` (
`id` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT 'PK',
`del_flag` char(2) COLLATE utf8mb4_bin NOT NULL DEFAULT '0' COMMENT '逻辑删除标记0显示1隐藏',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_id` varchar(32) CHARACTER SET utf8 DEFAULT NULL COMMENT '创建者ID',
`name` varchar(200) COLLATE utf8mb4_bin NOT NULL COMMENT '分组名',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='素材分组';

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>yshop</artifactId>
<groupId>co.yixiang</groupId>
<version>1.7</version>
<version>1.8</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@ -21,12 +21,12 @@
<dependency>
<groupId>co.yixiang</groupId>
<artifactId>yshop-tools</artifactId>
<version>1.7</version>
<version>1.8</version>
</dependency>
<dependency>
<groupId>co.yixiang</groupId>
<artifactId>yshop-mp</artifactId>
<version>1.7</version>
<version>1.8</version>
</dependency>
<!--jwt-->

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>yshop</artifactId>
<groupId>co.yixiang</groupId>
<version>1.7</version>
<version>1.8</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@ -195,15 +195,15 @@ public class FileUtil extends cn.hutool.core.io.FileUtil {
String video = "avi mpg mpe mpeg asf wmv mov qt rm mp4 flv m4v webm ogv ogg";
String image = "bmp dib pcp dif wmf gif jpg tif eps psd cdr iff tga pcd mpt png jpeg";
if(image.contains(type)){
return "图片";
return "pic";
} else if(documents.contains(type)){
return "文档";
return "txt";
} else if(music.contains(type)){
return "音乐";
return "music";
} else if(video.contains(type)){
return "视频";
return "vedio";
} else {
return "其他";
return "other";
}
}

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>yshop</artifactId>
<groupId>co.yixiang</groupId>
<version>1.7</version>
<version>1.8</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@ -20,7 +20,7 @@
<dependency>
<groupId>co.yixiang</groupId>
<artifactId>yshop-common</artifactId>
<version>1.7</version>
<version>1.8</version>
</dependency>
<!--模板引擎-->

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>yshop</artifactId>
<groupId>co.yixiang</groupId>
<version>1.7</version>
<version>1.8</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@ -16,7 +16,7 @@
<dependency>
<groupId>co.yixiang</groupId>
<artifactId>yshop-common</artifactId>
<version>1.7</version>
<version>1.8</version>
</dependency>
</dependencies>
</project>

View File

@ -13,7 +13,7 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>yshop-monitor</artifactId>
<version>1.7</version>
<version>1.8</version>
<name>客户端监控模块</name>

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>yshop</artifactId>
<groupId>co.yixiang</groupId>
<version>1.7</version>
<version>1.8</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@ -31,7 +31,7 @@
<dependency>
<groupId>co.yixiang</groupId>
<artifactId>yshop-common</artifactId>
<version>1.7</version>
<version>1.8</version>
</dependency>
</dependencies>

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>yshop</artifactId>
<groupId>co.yixiang</groupId>
<version>1.7</version>
<version>1.8</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@ -20,12 +20,12 @@
<dependency>
<groupId>co.yixiang</groupId>
<artifactId>yshop-logging</artifactId>
<version>1.7</version>
<version>1.8</version>
</dependency>
<dependency>
<groupId>co.yixiang</groupId>
<artifactId>yshop-mp</artifactId>
<version>1.7</version>
<version>1.8</version>
</dependency>
</dependencies>

View File

@ -0,0 +1,62 @@
package co.yixiang.modules.shop.domain;
import lombok.Data;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import org.hibernate.annotations.CreationTimestamp;
import javax.persistence.*;
import javax.validation.constraints.*;
import java.sql.Timestamp;
import java.io.Serializable;
/**
* @author hupeng
* @date 2020-01-09
*/
@Entity
@Data
@Table(name="yx_material")
public class YxMaterial implements Serializable {
/** PK */
@Id
@Column(name = "id")
private String id;
/** 逻辑删除标记0显示1隐藏 */
@Column(name = "del_flag",nullable = false,insertable = false)
private String delFlag;
/** 创建时间 */
@Column(name = "create_time",nullable = false)
@CreationTimestamp
private Timestamp createTime;
/** 创建者ID */
@Column(name = "create_id")
private String createId;
/** 类型1、图片2、视频 */
@Column(name = "type",nullable = false)
private String type;
/** 分组ID */
@Column(name = "group_id")
private String groupId;
/** 素材名 */
@Column(name = "name",nullable = false)
@NotBlank
private String name;
/** 素材链接 */
@Column(name = "url")
private String url;
public void copy(YxMaterial source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
}

View File

@ -0,0 +1,50 @@
package co.yixiang.modules.shop.domain;
import lombok.Data;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import org.hibernate.annotations.CreationTimestamp;
import javax.persistence.*;
import javax.validation.constraints.*;
import java.sql.Timestamp;
import java.io.Serializable;
/**
* @author hupeng
* @date 2020-01-09
*/
@Entity
@Data
@Table(name="yx_material_group")
public class YxMaterialGroup implements Serializable {
/** PK */
@Id
@Column(name = "id")
private String id;
/** 逻辑删除标记0显示1隐藏 */
@Column(name = "del_flag",nullable = false,insertable = false)
private String delFlag;
/** 创建时间 */
@Column(name = "create_time",nullable = false)
@CreationTimestamp
private Timestamp createTime;
/** 创建者ID */
@Column(name = "create_id")
private String createId;
/** 分组名 */
@Column(name = "name",nullable = false)
@NotBlank
private String name;
public void copy(YxMaterialGroup source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
}

View File

@ -51,6 +51,7 @@ public class YxSystemUserLevel implements Serializable {
// 是否显示 1=显示,0=隐藏
@Column(name = "is_show",nullable = false)
@NotNull(message = "请选择显示状态")
private Integer isShow;
// 会员等级

View File

@ -0,0 +1,12 @@
package co.yixiang.modules.shop.repository;
import co.yixiang.modules.shop.domain.YxMaterialGroup;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
/**
* @author hupeng
* @date 2020-01-09
*/
public interface YxMaterialGroupRepository extends JpaRepository<YxMaterialGroup, String>, JpaSpecificationExecutor<YxMaterialGroup> {
}

View File

@ -0,0 +1,12 @@
package co.yixiang.modules.shop.repository;
import co.yixiang.modules.shop.domain.YxMaterial;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
/**
* @author hupeng
* @date 2020-01-09
*/
public interface YxMaterialRepository extends JpaRepository<YxMaterial, String>, JpaSpecificationExecutor<YxMaterial> {
}

View File

@ -0,0 +1,70 @@
package co.yixiang.modules.shop.rest;
import co.yixiang.aop.log.Log;
import co.yixiang.modules.shop.domain.YxMaterial;
import co.yixiang.modules.shop.service.YxMaterialService;
import co.yixiang.modules.shop.service.dto.YxMaterialQueryCriteria;
import co.yixiang.utils.SecurityUtils;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
/**
* @author hupeng
* @date 2020-01-09
*/
@Api(tags = "素材管理管理")
@RestController
@RequestMapping("/api/material")
public class YxMaterialController {
private final YxMaterialService yxMaterialService;
public YxMaterialController(YxMaterialService yxMaterialService) {
this.yxMaterialService = yxMaterialService;
}
@GetMapping(value = "/page")
@Log("查询素材管理")
@ApiOperation("查询素材管理")
public ResponseEntity<Object> getYxMaterials(YxMaterialQueryCriteria criteria, Pageable pageable){
return new ResponseEntity<>(yxMaterialService.queryAll(criteria,pageable),HttpStatus.OK);
}
@PostMapping
@Log("新增素材管理")
@ApiOperation("新增素材管理")
public ResponseEntity<Object> create(@Validated @RequestBody YxMaterial resources){
resources.setCreateId(SecurityUtils.getUsername());
return new ResponseEntity<>(yxMaterialService.create(resources),HttpStatus.CREATED);
}
@PutMapping
@Log("修改素材管理")
@ApiOperation("修改素材管理")
public ResponseEntity<Object> update(@Validated @RequestBody YxMaterial resources){
yxMaterialService.update(resources);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@Log("删除素材管理")
@ApiOperation("删除素材管理")
@DeleteMapping(value = "/{id}")
public ResponseEntity<Object> deleteAll(@PathVariable String id) {
yxMaterialService.deleteById(id);
return new ResponseEntity<>(HttpStatus.OK);
}
}

View File

@ -0,0 +1,63 @@
package co.yixiang.modules.shop.rest;
import co.yixiang.aop.log.Log;
import co.yixiang.modules.shop.domain.YxMaterialGroup;
import co.yixiang.modules.shop.service.YxMaterialGroupService;
import co.yixiang.modules.shop.service.dto.YxMaterialGroupQueryCriteria;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.*;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
/**
* @author hupeng
* @date 2020-01-09
*/
@Api(tags = "素材分组管理")
@RestController
@RequestMapping("/api/materialgroup")
public class YxMaterialGroupController {
private final YxMaterialGroupService yxMaterialGroupService;
public YxMaterialGroupController(YxMaterialGroupService yxMaterialGroupService) {
this.yxMaterialGroupService = yxMaterialGroupService;
}
@GetMapping(value = "/page")
@Log("查询素材分组")
@ApiOperation("查询素材分组")
public ResponseEntity<Object> getYxMaterialGroups(YxMaterialGroupQueryCriteria criteria, Pageable pageable){
return new ResponseEntity<>(yxMaterialGroupService.queryAll(criteria,pageable),HttpStatus.OK);
}
@PostMapping
@Log("新增素材分组")
@ApiOperation("新增素材分组")
public ResponseEntity<Object> create(@Validated @RequestBody YxMaterialGroup resources){
return new ResponseEntity<>(yxMaterialGroupService.create(resources),HttpStatus.CREATED);
}
@PutMapping
@Log("修改素材分组")
@ApiOperation("修改素材分组")
public ResponseEntity<Object> update(@Validated @RequestBody YxMaterialGroup resources){
yxMaterialGroupService.update(resources);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@Log("删除素材分组")
@ApiOperation("删除素材分组")
@DeleteMapping(value = "/{id}")
public ResponseEntity<Object> deleteAll(@PathVariable String id) {
yxMaterialGroupService.deleteById(id);
return new ResponseEntity<>(HttpStatus.OK);
}
}

View File

@ -0,0 +1,62 @@
package co.yixiang.modules.shop.service;
import co.yixiang.modules.shop.domain.YxMaterialGroup;
import co.yixiang.modules.shop.service.dto.YxMaterialGroupDto;
import co.yixiang.modules.shop.service.dto.YxMaterialGroupQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.util.Map;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
/**
* @author hupeng
* @date 2020-01-09
*/
public interface YxMaterialGroupService {
/**
* 查询数据分页
* @param criteria 条件
* @param pageable 分页参数
* @return Map<String,Object>
*/
Map<String,Object> queryAll(YxMaterialGroupQueryCriteria criteria, Pageable pageable);
/**
* 查询所有数据不分页
* @param criteria 条件参数
* @return List<YxMaterialGroupDto>
*/
List<YxMaterialGroupDto> queryAll(YxMaterialGroupQueryCriteria criteria);
/**
* 根据ID查询
* @param id ID
* @return YxMaterialGroupDto
*/
YxMaterialGroupDto findById(String id);
/**
* 创建
* @param resources /
* @return YxMaterialGroupDto
*/
YxMaterialGroupDto create(YxMaterialGroup resources);
/**
* 编辑
* @param resources /
*/
void update(YxMaterialGroup resources);
/**
* 多选删除
* @param ids /
*/
void deleteAll(String[] ids);
void deleteById(String id);
}

View File

@ -0,0 +1,63 @@
package co.yixiang.modules.shop.service;
import co.yixiang.modules.shop.domain.YxMaterial;
import co.yixiang.modules.shop.service.dto.YxMaterialDto;
import co.yixiang.modules.shop.service.dto.YxMaterialQueryCriteria;
import org.springframework.data.domain.Pageable;
import java.util.Map;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
/**
* @author hupeng
* @date 2020-01-09
*/
public interface YxMaterialService {
/**
* 查询数据分页
* @param criteria 条件
* @param pageable 分页参数
* @return Map<String,Object>
*/
Map<String,Object> queryAll(YxMaterialQueryCriteria criteria, Pageable pageable);
/**
* 查询所有数据不分页
* @param criteria 条件参数
* @return List<YxMaterialDto>
*/
List<YxMaterialDto> queryAll(YxMaterialQueryCriteria criteria);
/**
* 根据ID查询
* @param id ID
* @return YxMaterialDto
*/
YxMaterialDto findById(String id);
/**
* 创建
* @param resources /
* @return YxMaterialDto
*/
YxMaterialDto create(YxMaterial resources);
/**
* 编辑
* @param resources /
*/
void update(YxMaterial resources);
/**
* 多选删除
* @param ids /
*/
void deleteAll(String[] ids);
void deleteById(String id);
}

View File

@ -0,0 +1,38 @@
package co.yixiang.modules.shop.service.dto;
import lombok.Data;
import java.sql.Timestamp;
import java.io.Serializable;
/**
* @author hupeng
* @date 2020-01-09
*/
@Data
public class YxMaterialDto implements Serializable {
/** PK */
private String id;
/** 逻辑删除标记0显示1隐藏 */
private String delFlag;
/** 创建时间 */
private Timestamp createTime;
/** 创建者ID */
private String createId;
/** 类型1、图片2、视频 */
private String type;
/** 分组ID */
private String groupId;
/** 素材名 */
private String name;
/** 素材链接 */
private String url;
}

View File

@ -0,0 +1,28 @@
package co.yixiang.modules.shop.service.dto;
import lombok.Data;
import java.sql.Timestamp;
import java.io.Serializable;
/**
* @author hupeng
* @date 2020-01-09
*/
@Data
public class YxMaterialGroupDto implements Serializable {
/** PK */
private String id;
/** 逻辑删除标记0显示1隐藏 */
private String delFlag;
/** 创建时间 */
private Timestamp createTime;
/** 创建者ID */
private String createId;
/** 分组名 */
private String name;
}

View File

@ -0,0 +1,13 @@
package co.yixiang.modules.shop.service.dto;
import lombok.Data;
import java.util.List;
/**
* @author hupeng
* @date 2020-01-09
*/
@Data
public class YxMaterialGroupQueryCriteria{
}

View File

@ -0,0 +1,16 @@
package co.yixiang.modules.shop.service.dto;
import co.yixiang.annotation.Query;
import lombok.Data;
import java.util.List;
/**
* @author hupeng
* @date 2020-01-09
*/
@Data
public class YxMaterialQueryCriteria{
@Query
private String groupId;
}

View File

@ -0,0 +1,99 @@
package co.yixiang.modules.shop.service.impl;
import co.yixiang.modules.shop.domain.YxMaterialGroup;
import co.yixiang.modules.shop.repository.YxMaterialGroupRepository;
import co.yixiang.modules.shop.service.YxMaterialGroupService;
import co.yixiang.modules.shop.service.dto.YxMaterialGroupDto;
import co.yixiang.modules.shop.service.dto.YxMaterialGroupQueryCriteria;
import co.yixiang.modules.shop.service.mapper.YxMaterialGroupMapper;
import co.yixiang.utils.FileUtil;
import co.yixiang.utils.PageUtil;
import co.yixiang.utils.QueryHelp;
import co.yixiang.utils.ValidationUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import cn.hutool.core.util.IdUtil;
// 默认不使用缓存
//import org.springframework.cache.annotation.CacheConfig;
//import org.springframework.cache.annotation.CacheEvict;
//import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.LinkedHashMap;
/**
* @author hupeng
* @date 2020-01-09
*/
@Service
//@CacheConfig(cacheNames = "yxMaterialGroup")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class YxMaterialGroupServiceImpl implements YxMaterialGroupService {
private final YxMaterialGroupRepository yxMaterialGroupRepository;
private final YxMaterialGroupMapper yxMaterialGroupMapper;
public YxMaterialGroupServiceImpl(YxMaterialGroupRepository yxMaterialGroupRepository, YxMaterialGroupMapper yxMaterialGroupMapper) {
this.yxMaterialGroupRepository = yxMaterialGroupRepository;
this.yxMaterialGroupMapper = yxMaterialGroupMapper;
}
@Override
//@Cacheable
public Map<String,Object> queryAll(YxMaterialGroupQueryCriteria criteria, Pageable pageable){
Page<YxMaterialGroup> page = yxMaterialGroupRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(yxMaterialGroupMapper::toDto));
}
@Override
//@Cacheable
public List<YxMaterialGroupDto> queryAll(YxMaterialGroupQueryCriteria criteria){
return yxMaterialGroupMapper.toDto(yxMaterialGroupRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
}
@Override
//@Cacheable(key = "#p0")
public YxMaterialGroupDto findById(String id) {
YxMaterialGroup yxMaterialGroup = yxMaterialGroupRepository.findById(id).orElseGet(YxMaterialGroup::new);
ValidationUtil.isNull(yxMaterialGroup.getId(),"YxMaterialGroup","id",id);
return yxMaterialGroupMapper.toDto(yxMaterialGroup);
}
@Override
//@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class)
public YxMaterialGroupDto create(YxMaterialGroup resources) {
resources.setId(IdUtil.simpleUUID());
return yxMaterialGroupMapper.toDto(yxMaterialGroupRepository.save(resources));
}
@Override
//@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class)
public void update(YxMaterialGroup resources) {
YxMaterialGroup yxMaterialGroup = yxMaterialGroupRepository.findById(resources.getId()).orElseGet(YxMaterialGroup::new);
ValidationUtil.isNull( yxMaterialGroup.getId(),"YxMaterialGroup","id",resources.getId());
yxMaterialGroup.copy(resources);
yxMaterialGroupRepository.save(yxMaterialGroup);
}
@Override
//@CacheEvict(allEntries = true)
public void deleteAll(String[] ids) {
for (String id : ids) {
yxMaterialGroupRepository.deleteById(id);
}
}
@Override
public void deleteById(String id) {
yxMaterialGroupRepository.deleteById(id);
}
}

View File

@ -0,0 +1,99 @@
package co.yixiang.modules.shop.service.impl;
import co.yixiang.modules.shop.domain.YxMaterial;
import co.yixiang.modules.shop.repository.YxMaterialRepository;
import co.yixiang.modules.shop.service.YxMaterialService;
import co.yixiang.modules.shop.service.dto.YxMaterialDto;
import co.yixiang.modules.shop.service.dto.YxMaterialQueryCriteria;
import co.yixiang.modules.shop.service.mapper.YxMaterialMapper;
import co.yixiang.utils.FileUtil;
import co.yixiang.utils.PageUtil;
import co.yixiang.utils.QueryHelp;
import co.yixiang.utils.ValidationUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import cn.hutool.core.util.IdUtil;
// 默认不使用缓存
//import org.springframework.cache.annotation.CacheConfig;
//import org.springframework.cache.annotation.CacheEvict;
//import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.LinkedHashMap;
/**
* @author hupeng
* @date 2020-01-09
*/
@Service
//@CacheConfig(cacheNames = "yxMaterial")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class YxMaterialServiceImpl implements YxMaterialService {
private final YxMaterialRepository yxMaterialRepository;
private final YxMaterialMapper yxMaterialMapper;
public YxMaterialServiceImpl(YxMaterialRepository yxMaterialRepository, YxMaterialMapper yxMaterialMapper) {
this.yxMaterialRepository = yxMaterialRepository;
this.yxMaterialMapper = yxMaterialMapper;
}
@Override
//@Cacheable
public Map<String,Object> queryAll(YxMaterialQueryCriteria criteria, Pageable pageable){
Page<YxMaterial> page = yxMaterialRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
return PageUtil.toPage(page.map(yxMaterialMapper::toDto));
}
@Override
//@Cacheable
public List<YxMaterialDto> queryAll(YxMaterialQueryCriteria criteria){
return yxMaterialMapper.toDto(yxMaterialRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
}
@Override
//@Cacheable(key = "#p0")
public YxMaterialDto findById(String id) {
YxMaterial yxMaterial = yxMaterialRepository.findById(id).orElseGet(YxMaterial::new);
ValidationUtil.isNull(yxMaterial.getId(),"YxMaterial","id",id);
return yxMaterialMapper.toDto(yxMaterial);
}
@Override
//@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class)
public YxMaterialDto create(YxMaterial resources) {
resources.setId(IdUtil.simpleUUID());
return yxMaterialMapper.toDto(yxMaterialRepository.save(resources));
}
@Override
//@CacheEvict(allEntries = true)
@Transactional(rollbackFor = Exception.class)
public void update(YxMaterial resources) {
YxMaterial yxMaterial = yxMaterialRepository.findById(resources.getId()).orElseGet(YxMaterial::new);
ValidationUtil.isNull( yxMaterial.getId(),"YxMaterial","id",resources.getId());
yxMaterial.copy(resources);
yxMaterialRepository.save(yxMaterial);
}
@Override
//@CacheEvict(allEntries = true)
public void deleteAll(String[] ids) {
for (String id : ids) {
yxMaterialRepository.deleteById(id);
}
}
@Override
public void deleteById(String id) {
yxMaterialRepository.deleteById(id);
}
}

View File

@ -0,0 +1,17 @@
package co.yixiang.modules.shop.service.mapper;
import co.yixiang.base.BaseMapper;
import co.yixiang.modules.shop.domain.YxMaterialGroup;
import co.yixiang.modules.shop.service.dto.YxMaterialGroupDto;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
/**
* @author hupeng
* @date 2020-01-09
*/
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface YxMaterialGroupMapper extends BaseMapper<YxMaterialGroupDto, YxMaterialGroup> {
}

View File

@ -0,0 +1,17 @@
package co.yixiang.modules.shop.service.mapper;
import co.yixiang.base.BaseMapper;
import co.yixiang.modules.shop.domain.YxMaterial;
import co.yixiang.modules.shop.service.dto.YxMaterialDto;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
/**
* @author hupeng
* @date 2020-01-09
*/
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface YxMaterialMapper extends BaseMapper<YxMaterialDto, YxMaterial> {
}

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>yshop</artifactId>
<groupId>co.yixiang</groupId>
<version>1.7</version>
<version>1.8</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@ -21,7 +21,7 @@
<dependency>
<groupId>co.yixiang</groupId>
<artifactId>yshop-generator</artifactId>
<version>1.7</version>
<version>1.8</version>
<exclusions>
<exclusion>
<groupId>co.yixiang</groupId>
@ -34,19 +34,19 @@
<dependency>
<groupId>co.yixiang</groupId>
<artifactId>yshop-tools</artifactId>
<version>1.7</version>
<version>1.8</version>
</dependency>
<dependency>
<groupId>co.yixiang</groupId>
<artifactId>yshop-shop</artifactId>
<version>1.7</version>
<version>1.8</version>
</dependency>
<dependency>
<groupId>co.yixiang</groupId>
<artifactId>yshop-mp</artifactId>
<version>1.7</version>
<version>1.8</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>

View File

@ -85,4 +85,4 @@ file:
# 文件大小 /M
maxSize: 100
avatarMaxSize: 5
localUrl: http://localhost:8000
localUrl:

View File

@ -90,4 +90,4 @@ file:
# 文件大小 /M
maxSize: 100
avatarMaxSize: 5
localUrl: https://yshopapi.dayouqiantu.cn
localUrl:

View File

@ -5,7 +5,7 @@
<parent>
<artifactId>yshop</artifactId>
<groupId>co.yixiang</groupId>
<version>1.7</version>
<version>1.8</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@ -23,7 +23,7 @@
<dependency>
<groupId>co.yixiang</groupId>
<artifactId>yshop-logging</artifactId>
<version>1.7</version>
<version>1.8</version>
</dependency>
<!--邮件依赖-->

View File

@ -0,0 +1,71 @@
package co.yixiang.rest;
import cn.hutool.core.util.StrUtil;
import co.yixiang.annotation.AnonymousAccess;
import co.yixiang.aop.log.Log;
import co.yixiang.domain.LocalStorage;
import co.yixiang.domain.QiniuContent;
import co.yixiang.service.LocalStorageService;
import co.yixiang.service.QiNiuService;
import co.yixiang.service.dto.LocalStorageDTO;
import co.yixiang.service.dto.LocalStorageQueryCriteria;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* @author hupeng
* @date 2020-01-09
*/
@Api(tags = "上传统一管理")
@RestController
@RequestMapping("/api/upload")
public class UploadController {
@Value("${file.localUrl}")
private String localUrl;
private final LocalStorageService localStorageService;
private final QiNiuService qiNiuService;
public UploadController(LocalStorageService localStorageService,QiNiuService qiNiuService) {
this.localStorageService = localStorageService;
this.qiNiuService = qiNiuService;
}
@ApiOperation("上传文件")
@PostMapping
@AnonymousAccess
public ResponseEntity<Object> create(@RequestParam(defaultValue = "") String name, @RequestParam("file") MultipartFile file){
String url = "";
if(StrUtil.isNotEmpty(localUrl)){ //存在走本地
LocalStorageDTO localStorageDTO = localStorageService.create(name, file);
url = localUrl+"/file/"+localStorageDTO.getType()+"/"+localStorageDTO.getRealName();
}else{//走七牛云
QiniuContent qiniuContent = qiNiuService.upload(file,qiNiuService.find());
url = qiniuContent.getUrl();
}
Map<String,Object> map = new HashMap<>(2);
map.put("errno",0);
map.put("link",url);
return new ResponseEntity(map,HttpStatus.CREATED);
}
}