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

@ -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> {
}