diff --git a/README.md b/README.md index 292aa607..77ef48c8 100644 --- a/README.md +++ b/README.md @@ -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、后台优化操作显示 #### 反馈交流 diff --git a/pom.xml b/pom.xml index ef6ba298..da4f7fec 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ co.yixiang yshop pom - 1.7 + 1.8 yshop-common diff --git a/sql/yshop1.8新表结构 b/sql/yshop1.8新表结构 new file mode 100644 index 00000000..22420735 --- /dev/null +++ b/sql/yshop1.8新表结构 @@ -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='素材分组'; \ No newline at end of file diff --git a/yshop-api/pom.xml b/yshop-api/pom.xml index ee0c6704..80dc5869 100644 --- a/yshop-api/pom.xml +++ b/yshop-api/pom.xml @@ -5,7 +5,7 @@ yshop co.yixiang - 1.7 + 1.8 4.0.0 @@ -21,12 +21,12 @@ co.yixiang yshop-tools - 1.7 + 1.8 co.yixiang yshop-mp - 1.7 + 1.8 diff --git a/yshop-common/pom.xml b/yshop-common/pom.xml index 68b843a5..d52cb880 100644 --- a/yshop-common/pom.xml +++ b/yshop-common/pom.xml @@ -5,7 +5,7 @@ yshop co.yixiang - 1.7 + 1.8 4.0.0 diff --git a/yshop-common/src/main/java/co/yixiang/utils/FileUtil.java b/yshop-common/src/main/java/co/yixiang/utils/FileUtil.java index 498fbd1e..fdd3da23 100644 --- a/yshop-common/src/main/java/co/yixiang/utils/FileUtil.java +++ b/yshop-common/src/main/java/co/yixiang/utils/FileUtil.java @@ -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"; } } diff --git a/yshop-generator/pom.xml b/yshop-generator/pom.xml index bbe1134e..d47d691c 100644 --- a/yshop-generator/pom.xml +++ b/yshop-generator/pom.xml @@ -5,7 +5,7 @@ yshop co.yixiang - 1.7 + 1.8 4.0.0 @@ -20,7 +20,7 @@ co.yixiang yshop-common - 1.7 + 1.8 diff --git a/yshop-logging/pom.xml b/yshop-logging/pom.xml index 2d105a22..f8778cce 100644 --- a/yshop-logging/pom.xml +++ b/yshop-logging/pom.xml @@ -5,7 +5,7 @@ yshop co.yixiang - 1.7 + 1.8 4.0.0 @@ -16,7 +16,7 @@ co.yixiang yshop-common - 1.7 + 1.8 \ No newline at end of file diff --git a/yshop-monitor/pom.xml b/yshop-monitor/pom.xml index befb6f18..02c88eb7 100644 --- a/yshop-monitor/pom.xml +++ b/yshop-monitor/pom.xml @@ -13,7 +13,7 @@ 4.0.0 yshop-monitor - 1.7 + 1.8 客户端监控模块 diff --git a/yshop-mp/pom.xml b/yshop-mp/pom.xml index c48e1b10..588f53fa 100644 --- a/yshop-mp/pom.xml +++ b/yshop-mp/pom.xml @@ -5,7 +5,7 @@ yshop co.yixiang - 1.7 + 1.8 4.0.0 @@ -31,7 +31,7 @@ co.yixiang yshop-common - 1.7 + 1.8 diff --git a/yshop-shop/pom.xml b/yshop-shop/pom.xml index 3bd9aaa5..9fe7c4c5 100644 --- a/yshop-shop/pom.xml +++ b/yshop-shop/pom.xml @@ -5,7 +5,7 @@ yshop co.yixiang - 1.7 + 1.8 4.0.0 @@ -20,12 +20,12 @@ co.yixiang yshop-logging - 1.7 + 1.8 co.yixiang yshop-mp - 1.7 + 1.8 diff --git a/yshop-shop/src/main/java/co/yixiang/modules/shop/domain/YxMaterial.java b/yshop-shop/src/main/java/co/yixiang/modules/shop/domain/YxMaterial.java new file mode 100644 index 00000000..7cbc3516 --- /dev/null +++ b/yshop-shop/src/main/java/co/yixiang/modules/shop/domain/YxMaterial.java @@ -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)); + } +} \ No newline at end of file diff --git a/yshop-shop/src/main/java/co/yixiang/modules/shop/domain/YxMaterialGroup.java b/yshop-shop/src/main/java/co/yixiang/modules/shop/domain/YxMaterialGroup.java new file mode 100644 index 00000000..31f68fb2 --- /dev/null +++ b/yshop-shop/src/main/java/co/yixiang/modules/shop/domain/YxMaterialGroup.java @@ -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)); + } +} \ No newline at end of file diff --git a/yshop-shop/src/main/java/co/yixiang/modules/shop/domain/YxSystemUserLevel.java b/yshop-shop/src/main/java/co/yixiang/modules/shop/domain/YxSystemUserLevel.java index 878b4945..1301102b 100644 --- a/yshop-shop/src/main/java/co/yixiang/modules/shop/domain/YxSystemUserLevel.java +++ b/yshop-shop/src/main/java/co/yixiang/modules/shop/domain/YxSystemUserLevel.java @@ -51,6 +51,7 @@ public class YxSystemUserLevel implements Serializable { // 是否显示 1=显示,0=隐藏 @Column(name = "is_show",nullable = false) + @NotNull(message = "请选择显示状态") private Integer isShow; // 会员等级 diff --git a/yshop-shop/src/main/java/co/yixiang/modules/shop/repository/YxMaterialGroupRepository.java b/yshop-shop/src/main/java/co/yixiang/modules/shop/repository/YxMaterialGroupRepository.java new file mode 100644 index 00000000..63bfae82 --- /dev/null +++ b/yshop-shop/src/main/java/co/yixiang/modules/shop/repository/YxMaterialGroupRepository.java @@ -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, JpaSpecificationExecutor { +} \ No newline at end of file diff --git a/yshop-shop/src/main/java/co/yixiang/modules/shop/repository/YxMaterialRepository.java b/yshop-shop/src/main/java/co/yixiang/modules/shop/repository/YxMaterialRepository.java new file mode 100644 index 00000000..aa661856 --- /dev/null +++ b/yshop-shop/src/main/java/co/yixiang/modules/shop/repository/YxMaterialRepository.java @@ -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, JpaSpecificationExecutor { +} \ No newline at end of file diff --git a/yshop-shop/src/main/java/co/yixiang/modules/shop/rest/YxMaterialController.java b/yshop-shop/src/main/java/co/yixiang/modules/shop/rest/YxMaterialController.java new file mode 100644 index 00000000..227d6594 --- /dev/null +++ b/yshop-shop/src/main/java/co/yixiang/modules/shop/rest/YxMaterialController.java @@ -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 getYxMaterials(YxMaterialQueryCriteria criteria, Pageable pageable){ + return new ResponseEntity<>(yxMaterialService.queryAll(criteria,pageable),HttpStatus.OK); + } + + @PostMapping + @Log("新增素材管理") + @ApiOperation("新增素材管理") + public ResponseEntity create(@Validated @RequestBody YxMaterial resources){ + resources.setCreateId(SecurityUtils.getUsername()); + return new ResponseEntity<>(yxMaterialService.create(resources),HttpStatus.CREATED); + } + + @PutMapping + @Log("修改素材管理") + @ApiOperation("修改素材管理") + public ResponseEntity update(@Validated @RequestBody YxMaterial resources){ + yxMaterialService.update(resources); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除素材管理") + @ApiOperation("删除素材管理") + @DeleteMapping(value = "/{id}") + public ResponseEntity deleteAll(@PathVariable String id) { + yxMaterialService.deleteById(id); + return new ResponseEntity<>(HttpStatus.OK); + } + + +} \ No newline at end of file diff --git a/yshop-shop/src/main/java/co/yixiang/modules/shop/rest/YxMaterialGroupController.java b/yshop-shop/src/main/java/co/yixiang/modules/shop/rest/YxMaterialGroupController.java new file mode 100644 index 00000000..6dd27ef0 --- /dev/null +++ b/yshop-shop/src/main/java/co/yixiang/modules/shop/rest/YxMaterialGroupController.java @@ -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 getYxMaterialGroups(YxMaterialGroupQueryCriteria criteria, Pageable pageable){ + return new ResponseEntity<>(yxMaterialGroupService.queryAll(criteria,pageable),HttpStatus.OK); + } + + @PostMapping + @Log("新增素材分组") + @ApiOperation("新增素材分组") + public ResponseEntity create(@Validated @RequestBody YxMaterialGroup resources){ + return new ResponseEntity<>(yxMaterialGroupService.create(resources),HttpStatus.CREATED); + } + + @PutMapping + @Log("修改素材分组") + @ApiOperation("修改素材分组") + public ResponseEntity update(@Validated @RequestBody YxMaterialGroup resources){ + yxMaterialGroupService.update(resources); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除素材分组") + @ApiOperation("删除素材分组") + @DeleteMapping(value = "/{id}") + public ResponseEntity deleteAll(@PathVariable String id) { + yxMaterialGroupService.deleteById(id); + return new ResponseEntity<>(HttpStatus.OK); + } +} \ No newline at end of file diff --git a/yshop-shop/src/main/java/co/yixiang/modules/shop/service/YxMaterialGroupService.java b/yshop-shop/src/main/java/co/yixiang/modules/shop/service/YxMaterialGroupService.java new file mode 100644 index 00000000..355e73a7 --- /dev/null +++ b/yshop-shop/src/main/java/co/yixiang/modules/shop/service/YxMaterialGroupService.java @@ -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 + */ + Map queryAll(YxMaterialGroupQueryCriteria criteria, Pageable pageable); + + /** + * 查询所有数据不分页 + * @param criteria 条件参数 + * @return List + */ + List 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); + + +} \ No newline at end of file diff --git a/yshop-shop/src/main/java/co/yixiang/modules/shop/service/YxMaterialService.java b/yshop-shop/src/main/java/co/yixiang/modules/shop/service/YxMaterialService.java new file mode 100644 index 00000000..15ffbb9f --- /dev/null +++ b/yshop-shop/src/main/java/co/yixiang/modules/shop/service/YxMaterialService.java @@ -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 + */ + Map queryAll(YxMaterialQueryCriteria criteria, Pageable pageable); + + /** + * 查询所有数据不分页 + * @param criteria 条件参数 + * @return List + */ + List 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); + + + +} \ No newline at end of file diff --git a/yshop-shop/src/main/java/co/yixiang/modules/shop/service/dto/YxMaterialDto.java b/yshop-shop/src/main/java/co/yixiang/modules/shop/service/dto/YxMaterialDto.java new file mode 100644 index 00000000..63bcf1d5 --- /dev/null +++ b/yshop-shop/src/main/java/co/yixiang/modules/shop/service/dto/YxMaterialDto.java @@ -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; +} \ No newline at end of file diff --git a/yshop-shop/src/main/java/co/yixiang/modules/shop/service/dto/YxMaterialGroupDto.java b/yshop-shop/src/main/java/co/yixiang/modules/shop/service/dto/YxMaterialGroupDto.java new file mode 100644 index 00000000..288262af --- /dev/null +++ b/yshop-shop/src/main/java/co/yixiang/modules/shop/service/dto/YxMaterialGroupDto.java @@ -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; +} \ No newline at end of file diff --git a/yshop-shop/src/main/java/co/yixiang/modules/shop/service/dto/YxMaterialGroupQueryCriteria.java b/yshop-shop/src/main/java/co/yixiang/modules/shop/service/dto/YxMaterialGroupQueryCriteria.java new file mode 100644 index 00000000..ba461adb --- /dev/null +++ b/yshop-shop/src/main/java/co/yixiang/modules/shop/service/dto/YxMaterialGroupQueryCriteria.java @@ -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{ +} \ No newline at end of file diff --git a/yshop-shop/src/main/java/co/yixiang/modules/shop/service/dto/YxMaterialQueryCriteria.java b/yshop-shop/src/main/java/co/yixiang/modules/shop/service/dto/YxMaterialQueryCriteria.java new file mode 100644 index 00000000..d9cebc59 --- /dev/null +++ b/yshop-shop/src/main/java/co/yixiang/modules/shop/service/dto/YxMaterialQueryCriteria.java @@ -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; +} \ No newline at end of file diff --git a/yshop-shop/src/main/java/co/yixiang/modules/shop/service/impl/YxMaterialGroupServiceImpl.java b/yshop-shop/src/main/java/co/yixiang/modules/shop/service/impl/YxMaterialGroupServiceImpl.java new file mode 100644 index 00000000..eace1839 --- /dev/null +++ b/yshop-shop/src/main/java/co/yixiang/modules/shop/service/impl/YxMaterialGroupServiceImpl.java @@ -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 queryAll(YxMaterialGroupQueryCriteria criteria, Pageable pageable){ + Page page = yxMaterialGroupRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); + return PageUtil.toPage(page.map(yxMaterialGroupMapper::toDto)); + } + + @Override + //@Cacheable + public List 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); + } +} \ No newline at end of file diff --git a/yshop-shop/src/main/java/co/yixiang/modules/shop/service/impl/YxMaterialServiceImpl.java b/yshop-shop/src/main/java/co/yixiang/modules/shop/service/impl/YxMaterialServiceImpl.java new file mode 100644 index 00000000..779035ad --- /dev/null +++ b/yshop-shop/src/main/java/co/yixiang/modules/shop/service/impl/YxMaterialServiceImpl.java @@ -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 queryAll(YxMaterialQueryCriteria criteria, Pageable pageable){ + Page page = yxMaterialRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); + return PageUtil.toPage(page.map(yxMaterialMapper::toDto)); + } + + @Override + //@Cacheable + public List 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); + } +} \ No newline at end of file diff --git a/yshop-shop/src/main/java/co/yixiang/modules/shop/service/mapper/YxMaterialGroupMapper.java b/yshop-shop/src/main/java/co/yixiang/modules/shop/service/mapper/YxMaterialGroupMapper.java new file mode 100644 index 00000000..7c193c62 --- /dev/null +++ b/yshop-shop/src/main/java/co/yixiang/modules/shop/service/mapper/YxMaterialGroupMapper.java @@ -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 { + +} \ No newline at end of file diff --git a/yshop-shop/src/main/java/co/yixiang/modules/shop/service/mapper/YxMaterialMapper.java b/yshop-shop/src/main/java/co/yixiang/modules/shop/service/mapper/YxMaterialMapper.java new file mode 100644 index 00000000..f91d1e88 --- /dev/null +++ b/yshop-shop/src/main/java/co/yixiang/modules/shop/service/mapper/YxMaterialMapper.java @@ -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 { + +} \ No newline at end of file diff --git a/yshop-system/pom.xml b/yshop-system/pom.xml index d032e917..8d4f90f3 100644 --- a/yshop-system/pom.xml +++ b/yshop-system/pom.xml @@ -5,7 +5,7 @@ yshop co.yixiang - 1.7 + 1.8 4.0.0 @@ -21,7 +21,7 @@ co.yixiang yshop-generator - 1.7 + 1.8 co.yixiang @@ -34,19 +34,19 @@ co.yixiang yshop-tools - 1.7 + 1.8 co.yixiang yshop-shop - 1.7 + 1.8 co.yixiang yshop-mp - 1.7 + 1.8 org.springframework.boot diff --git a/yshop-system/src/main/resources/config/application-dev.yml b/yshop-system/src/main/resources/config/application-dev.yml index af17854e..b1dce641 100644 --- a/yshop-system/src/main/resources/config/application-dev.yml +++ b/yshop-system/src/main/resources/config/application-dev.yml @@ -85,4 +85,4 @@ file: # 文件大小 /M maxSize: 100 avatarMaxSize: 5 - localUrl: http://localhost:8000 \ No newline at end of file + localUrl: \ No newline at end of file diff --git a/yshop-system/src/main/resources/config/application-prod.yml b/yshop-system/src/main/resources/config/application-prod.yml index 6054d2e6..535fa49d 100644 --- a/yshop-system/src/main/resources/config/application-prod.yml +++ b/yshop-system/src/main/resources/config/application-prod.yml @@ -6,7 +6,7 @@ spring: driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy url: jdbc:log4jdbc:mysql://localhost:3306/yshop?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false username: yshop - password: + password: # 初始化配置 initial-size: 3 @@ -90,4 +90,4 @@ file: # 文件大小 /M maxSize: 100 avatarMaxSize: 5 - localUrl: https://yshopapi.dayouqiantu.cn \ No newline at end of file + localUrl: \ No newline at end of file diff --git a/yshop-tools/pom.xml b/yshop-tools/pom.xml index 2d5845b6..a16415fd 100644 --- a/yshop-tools/pom.xml +++ b/yshop-tools/pom.xml @@ -5,7 +5,7 @@ yshop co.yixiang - 1.7 + 1.8 4.0.0 @@ -23,7 +23,7 @@ co.yixiang yshop-logging - 1.7 + 1.8 diff --git a/yshop-tools/src/main/java/co/yixiang/rest/UploadController.java b/yshop-tools/src/main/java/co/yixiang/rest/UploadController.java new file mode 100644 index 00000000..807101f0 --- /dev/null +++ b/yshop-tools/src/main/java/co/yixiang/rest/UploadController.java @@ -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 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 map = new HashMap<>(2); + map.put("errno",0); + map.put("link",url); + return new ResponseEntity(map,HttpStatus.CREATED); + } + + + +} \ No newline at end of file