From db54a23466bd197af8a0fd7a3abf568ffaade0db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=AE=87=E8=88=AA?= <653809315@qq.com> Date: Thu, 8 Aug 2024 17:53:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=A7=E5=93=81=E4=BF=A1=E6=81=AF=E5=AE=8C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/goods/GoodsController.java | 69 ++++++ .../com/wyh/admin/service/IGoodsService.java | 61 +++++ .../admin/service/impl/GoodsServiceImpl.java | 185 ++++++++++++++ .../src/main/resources/application-dev.yml | 6 +- .../com/wyh/common/entity/goods/Goods.java | 60 +++++ .../wyh/common/mapper/goods/GoodsMapper.java | 14 ++ .../goods/GoodsCateCreateValidate.java | 32 +++ .../goods/GoodsCateSearchValidate.java | 27 ++ .../goods/GoodsCateUpdateValidate.java | 41 +++ .../validator/goods/GoodsCreateValidate.java | 53 ++++ .../validator/goods/GoodsSearchValidate.java | 42 ++++ .../validator/goods/GoodsUpdateValidate.java | 62 +++++ .../common/vo/goods/GoodsCateDetailVo.java | 31 +++ .../common/vo/goods/GoodsCateListedVo.java | 37 +++ .../wyh/common/vo/goods/GoodsDetailVo.java | 47 ++++ .../wyh/common/vo/goods/GoodsListedVo.java | 55 ++++ .../wyh/front/controller/GoodsController.java | 31 +++ .../wyh/front/controller/NewsController.java | 11 +- .../com/wyh/front/service/GoodsService.java | 8 + .../front/service/impl/GoodsServiceImpl.java | 55 ++++ admin/src/api/goods.ts | 26 ++ admin/src/views/goods/cate/index.vue | 29 +-- admin/src/views/goods/edit.vue | 234 ++++++++++++++++++ admin/src/views/goods/index.vue | 170 +++++++++++++ 24 files changed, 1348 insertions(+), 38 deletions(-) create mode 100644 ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/controller/goods/GoodsController.java create mode 100644 ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/IGoodsService.java create mode 100644 ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/impl/GoodsServiceImpl.java create mode 100644 ZJ-java/ZJ-common/src/main/java/com/wyh/common/entity/goods/Goods.java create mode 100644 ZJ-java/ZJ-common/src/main/java/com/wyh/common/mapper/goods/GoodsMapper.java create mode 100644 ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/goods/GoodsCateCreateValidate.java create mode 100644 ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/goods/GoodsCateSearchValidate.java create mode 100644 ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/goods/GoodsCateUpdateValidate.java create mode 100644 ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/goods/GoodsCreateValidate.java create mode 100644 ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/goods/GoodsSearchValidate.java create mode 100644 ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/goods/GoodsUpdateValidate.java create mode 100644 ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/goods/GoodsCateDetailVo.java create mode 100644 ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/goods/GoodsCateListedVo.java create mode 100644 ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/goods/GoodsDetailVo.java create mode 100644 ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/goods/GoodsListedVo.java create mode 100644 ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/GoodsController.java create mode 100644 ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/GoodsService.java create mode 100644 ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/GoodsServiceImpl.java create mode 100644 admin/src/api/goods.ts create mode 100644 admin/src/views/goods/edit.vue create mode 100644 admin/src/views/goods/index.vue diff --git a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/controller/goods/GoodsController.java b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/controller/goods/GoodsController.java new file mode 100644 index 0000000..666334d --- /dev/null +++ b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/controller/goods/GoodsController.java @@ -0,0 +1,69 @@ +package com.wyh.admin.controller.goods; + +import com.wyh.admin.aop.Log; +import com.wyh.admin.service.IGoodsService; +import com.wyh.admin.validate.commons.IdValidate; +import com.wyh.admin.validate.commons.PageValidate; +import com.wyh.common.core.AjaxResult; +import com.wyh.common.core.PageResult; +import com.wyh.common.validator.annotation.IDMust; +import com.wyh.common.validator.goods.GoodsCreateValidate; +import com.wyh.common.validator.goods.GoodsSearchValidate; +import com.wyh.common.validator.goods.GoodsUpdateValidate; +import com.wyh.common.vo.goods.GoodsDetailVo; +import com.wyh.common.vo.goods.GoodsListedVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +@RestController +@RequestMapping("api/goods") +@Api(tags = "产品信息管理") +public class GoodsController { + + @Resource + IGoodsService iGoodsService; + + @GetMapping("/list") + @ApiOperation(value="产品信息列表") + public AjaxResult> list(@Validated PageValidate pageValidate, + @Validated GoodsSearchValidate searchValidate) { + PageResult list = iGoodsService.list(pageValidate, searchValidate); + return AjaxResult.success(list); + } + + @GetMapping("/detail") + @ApiOperation(value="产品信息详情") + public AjaxResult detail(@Validated @IDMust() @RequestParam("id") Integer id) { + GoodsDetailVo detail = iGoodsService.detail(id); + return AjaxResult.success(detail); + } + + @Log(title = "产品信息新增") + @PostMapping("/add") + @ApiOperation(value="产品信息新增") + public AjaxResult add(@Validated @RequestBody GoodsCreateValidate createValidate) { + iGoodsService.add(createValidate); + return AjaxResult.success(); + } + + @Log(title = "产品信息编辑") + @PostMapping("/edit") + @ApiOperation(value="产品信息编辑") + public AjaxResult edit(@Validated @RequestBody GoodsUpdateValidate updateValidate) { + iGoodsService.edit(updateValidate); + return AjaxResult.success(); + } + + @Log(title = "产品信息删除") + @PostMapping("/del") + @ApiOperation(value="产品信息删除") + public AjaxResult del(@Validated @RequestBody IdValidate idValidate) { + iGoodsService.del(idValidate.getId()); + return AjaxResult.success(); + } + +} diff --git a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/IGoodsService.java b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/IGoodsService.java new file mode 100644 index 0000000..deb47e3 --- /dev/null +++ b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/IGoodsService.java @@ -0,0 +1,61 @@ +package com.wyh.admin.service; + +import com.wyh.admin.validate.commons.PageValidate; +import com.wyh.common.core.PageResult; +import com.wyh.common.validator.goods.GoodsCreateValidate; +import com.wyh.common.validator.goods.GoodsSearchValidate; +import com.wyh.common.validator.goods.GoodsUpdateValidate; +import com.wyh.common.vo.goods.GoodsDetailVo; +import com.wyh.common.vo.goods.GoodsListedVo; + + +/** + * 产品信息服务接口类 + * @author LikeAdmin + */ +public interface IGoodsService { + + /** + * 产品信息列表 + * + * @author LikeAdmin + * @param pageValidate 分页参数 + * @param searchValidate 搜索参数 + * @return PageResult + */ + PageResult list(PageValidate pageValidate, GoodsSearchValidate searchValidate); + + /** + * 产品信息详情 + * + * @author LikeAdmin + * @param id 主键ID + * @return GoodsDetailVo + */ + GoodsDetailVo detail(Integer id); + + /** + * 产品信息新增 + * + * @author LikeAdmin + * @param createValidate 参数 + */ + void add(GoodsCreateValidate createValidate); + + /** + * 产品信息编辑 + * + * @author LikeAdmin + * @param updateValidate 参数 + */ + void edit(GoodsUpdateValidate updateValidate); + + /** + * 产品信息删除 + * + * @author LikeAdmin + * @param id 主键ID + */ + void del(Integer id); + +} diff --git a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/impl/GoodsServiceImpl.java b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/impl/GoodsServiceImpl.java new file mode 100644 index 0000000..dc88fcd --- /dev/null +++ b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/impl/GoodsServiceImpl.java @@ -0,0 +1,185 @@ +package com.wyh.admin.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.yulichang.query.MPJQueryWrapper; +import com.wyh.admin.service.IGoodsService; +import com.wyh.admin.validate.commons.PageValidate; +import com.wyh.common.config.GlobalConfig; +import com.wyh.common.core.PageResult; +import com.wyh.common.entity.goods.Goods; +import com.wyh.common.entity.goods.GoodsCate; +import com.wyh.common.mapper.goods.GoodsCateMapper; +import com.wyh.common.mapper.goods.GoodsMapper; +import com.wyh.common.util.TimeUtils; +import com.wyh.common.validator.goods.GoodsCreateValidate; +import com.wyh.common.validator.goods.GoodsSearchValidate; +import com.wyh.common.validator.goods.GoodsUpdateValidate; +import com.wyh.common.vo.goods.GoodsDetailVo; +import com.wyh.common.vo.goods.GoodsListedVo; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; + +import javax.annotation.Resource; +import java.util.Arrays; + +/** + * 产品信息实现类 + * @author wyh + */ +@Service +public class GoodsServiceImpl implements IGoodsService { + + @Resource + GoodsMapper goodsMapper; + + @Resource + GoodsCateMapper goodsCateMapper; + + /** + * 产品信息列表 + * + * @author LikeAdmin + * @param pageValidate 分页参数 + * @param searchValidate 搜索参数 + * @return PageResult + */ + @Override + public PageResult list(PageValidate pageValidate, GoodsSearchValidate searchValidate) { + Integer page = pageValidate.getPageNo(); + Integer limit = pageValidate.getPageSize(); + + MPJQueryWrapper mpjQueryWrapper = new MPJQueryWrapper<>(); + mpjQueryWrapper.selectAll(Goods.class); + mpjQueryWrapper.innerJoin("?_goods_cate gc ON gc.id=t.cate_id".replace("?_", GlobalConfig.tablePrefix)); + mpjQueryWrapper.eq("t.is_delete", 0); + mpjQueryWrapper.orderByDesc(Arrays.asList("t.sort", "t.id")); + + goodsMapper.setSearch(mpjQueryWrapper, searchValidate, new String[]{ + "like:goodsName@goods_name:str", + "=:cateId@cate_id:int", + }); + + IPage iPage = goodsMapper.selectJoinPage( + new Page<>(page, limit), + GoodsListedVo.class, + mpjQueryWrapper); + + for(GoodsListedVo item : iPage.getRecords()) { + item.setCreateTime(TimeUtils.timestampToDate(item.getCreateTime())); + item.setUpdateTime(TimeUtils.timestampToDate(item.getUpdateTime())); + if (item.getCateId() != null) { + GoodsCate goodsCate = goodsCateMapper.selectOne(Wrappers.lambdaQuery().eq(GoodsCate::getId, item.getCateId()).eq(GoodsCate::getIsDelete, 0)); + + GoodsCate goodsCate1 = goodsCateMapper.selectOne(Wrappers.lambdaQuery().eq(GoodsCate::getId, (goodsCate.getPid())).eq(GoodsCate::getIsDelete, 0)); + + + item.setCateName(goodsCate1.getName() + "-" + goodsCate.getName()); + } + } + + return PageResult.iPageHandle(iPage); + } + + /** + * 产品信息详情 + * + * @author LikeAdmin + * @param id 主键参数 + * @return Goods + */ + @Override + public GoodsDetailVo detail(Integer id) { + Goods model = goodsMapper.selectOne( + new QueryWrapper() + .eq("id", id) + .eq("is_delete", 0) + .last("limit 1")); + + Assert.notNull(model, "数据不存在"); + + GoodsDetailVo vo = new GoodsDetailVo(); + BeanUtils.copyProperties(model, vo); + return vo; + } + + /** + * 产品信息新增 + * + * @author LikeAdmin + * @param createValidate 参数 + */ + @Override + public void add(GoodsCreateValidate createValidate) { + Goods model = new Goods(); + model.setCreateTime(System.currentTimeMillis() / 1000); + model.setUpdateTime(System.currentTimeMillis() / 1000); + model.setGoodsName(createValidate.getGoodsName()); + model.setPrice(createValidate.getPrice()); + model.setGoodsImg(createValidate.getGoodsImg()); + model.setGoodsListImg(createValidate.getGoodsListImg()); + model.setSort(createValidate.getSort()); + model.setType(createValidate.getType()); + model.setIsDownload(createValidate.getIsDownload()); + model.setSummary(createValidate.getSummary()); + model.setCateId(createValidate.getCateId()); + goodsMapper.insert(model); + } + + /** + * 产品信息编辑 + * + * @author LikeAdmin + * @param updateValidate 参数 + */ + @Override + public void edit(GoodsUpdateValidate updateValidate) { + Goods model = goodsMapper.selectOne( + new QueryWrapper() + .eq("id", updateValidate.getId()) + .eq("is_delete", 0) + .last("limit 1")); + + Assert.notNull(model, "数据不存在!"); + + model.setId(updateValidate.getId()); + model.setUpdateTime(System.currentTimeMillis() / 1000); + model.setGoodsName(updateValidate.getGoodsName()); + model.setPrice(updateValidate.getPrice()); + model.setGoodsImg(updateValidate.getGoodsImg()); + model.setGoodsListImg(updateValidate.getGoodsListImg()); + model.setSort(updateValidate.getSort()); + model.setType(updateValidate.getType()); + model.setIsDownload(updateValidate.getIsDownload()); + model.setSummary(updateValidate.getSummary()); + model.setCateId(updateValidate.getCateId()); + goodsMapper.updateById(model); + } + + /** + * 产品信息删除 + * + * @author LikeAdmin + * @param id 主键ID + */ + @Override + public void del(Integer id) { + Goods model = goodsMapper.selectOne( + new QueryWrapper() + .eq("id", id) + .eq("is_delete", 0) + .last("limit 1")); + + Assert.notNull(model, "数据不存在!"); + + model.setIsDelete(1); + model.setDeleteTime(System.currentTimeMillis() / 1000); + goodsMapper.updateById(model); + } + + + +} diff --git a/ZJ-java/ZJ-admin/src/main/resources/application-dev.yml b/ZJ-java/ZJ-admin/src/main/resources/application-dev.yml index caca23f..acb8f96 100644 --- a/ZJ-java/ZJ-admin/src/main/resources/application-dev.yml +++ b/ZJ-java/ZJ-admin/src/main/resources/application-dev.yml @@ -19,6 +19,6 @@ spring: database: 14 # 数据库索引 # Mybatis-plus配置 【是否开启SQL日志输出】 -#mybatis-plus: -# configuration: -# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl \ No newline at end of file +mybatis-plus: + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl \ No newline at end of file diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/entity/goods/Goods.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/entity/goods/Goods.java new file mode 100644 index 0000000..48ba34a --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/entity/goods/Goods.java @@ -0,0 +1,60 @@ +package com.wyh.common.entity.goods; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +@ApiModel("产品信息实体") +public class Goods implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value="id", type= IdType.AUTO) + @ApiModelProperty(value = "主键") + private Integer id; + + @ApiModelProperty(value = "是否删除: 0=否, 1=是") + private Integer isDelete; + + @ApiModelProperty(value = "创建时间") + private Long createTime; + + @ApiModelProperty(value = "更新时间") + private Long updateTime; + + @ApiModelProperty(value = "删除时间") + private Long deleteTime; + + @ApiModelProperty(value = "产品名称") + private String goodsName; + + @ApiModelProperty(value = "价格") + private BigDecimal price; + + @ApiModelProperty(value = "产品主图") + private String goodsImg; + + @ApiModelProperty(value = "产品列表图") + private String goodsListImg; + + @ApiModelProperty(value = "排序") + private Integer sort; + + @ApiModelProperty(value = "是否上架0:否,1:是") + private Integer type; + + @ApiModelProperty(value = "是否下载") + private Integer isDownload; + + @ApiModelProperty(value = "实验室说明") + private String summary; + + @ApiModelProperty(value = "产品分类") + private Integer cateId; +} \ No newline at end of file diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/mapper/goods/GoodsMapper.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/mapper/goods/GoodsMapper.java new file mode 100644 index 0000000..e5b246e --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/mapper/goods/GoodsMapper.java @@ -0,0 +1,14 @@ +package com.wyh.common.mapper.goods; + + +import com.wyh.common.core.basics.IBaseMapper; +import com.wyh.common.entity.goods.Goods; +import org.apache.ibatis.annotations.Mapper; + +/** + * 产品信息Mapper + * @author LikeAdmin + */ +@Mapper +public interface GoodsMapper extends IBaseMapper { +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/goods/GoodsCateCreateValidate.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/goods/GoodsCateCreateValidate.java new file mode 100644 index 0000000..888070a --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/goods/GoodsCateCreateValidate.java @@ -0,0 +1,32 @@ +package com.wyh.common.validator.goods; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +@Data +@ApiModel("产品分类创建参数") +public class GoodsCateCreateValidate implements Serializable { + + private static final long serialVersionUID = 1L; + + @NotNull(message = "name参数缺失") + @ApiModelProperty(value = "产品分类名称") + private String name; + + @NotNull(message = "pid参数缺失") + @ApiModelProperty(value = "上级菜单") + private Integer pid; + + @NotNull(message = "sort参数缺失") + @ApiModelProperty(value = "排序编号") + private Integer sort; + + @NotNull(message = "isShow参数缺失") + @ApiModelProperty(value = "是否显示: 0=否, 1=是") + private Integer isShow; + +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/goods/GoodsCateSearchValidate.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/goods/GoodsCateSearchValidate.java new file mode 100644 index 0000000..721f92d --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/goods/GoodsCateSearchValidate.java @@ -0,0 +1,27 @@ +package com.wyh.common.validator.goods; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +@ApiModel("产品分类搜素参数") +public class GoodsCateSearchValidate implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "产品分类名称") + private String name; + + @ApiModelProperty(value = "上级菜单") + private String pid; + + @ApiModelProperty(value = "排序编号") + private String sort; + + @ApiModelProperty(value = "是否显示: 0=否, 1=是") + private String isShow; + +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/goods/GoodsCateUpdateValidate.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/goods/GoodsCateUpdateValidate.java new file mode 100644 index 0000000..e6685e8 --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/goods/GoodsCateUpdateValidate.java @@ -0,0 +1,41 @@ +package com.wyh.common.validator.goods; + +import com.wyh.common.validator.annotation.IDMust; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 产品分类参数 + * @author LikeAdmin + */ +@Data +@ApiModel("产品分类更新参数") +public class GoodsCateUpdateValidate implements Serializable { + + private static final long serialVersionUID = 1L; + + @IDMust(message = "id参数必传且需大于0") + @ApiModelProperty(value = "主键") + private Integer id; + + @NotNull(message = "name参数缺失") + @ApiModelProperty(value = "产品分类名称") + private String name; + + @NotNull(message = "pid参数缺失") + @ApiModelProperty(value = "上级菜单") + private Integer pid; + + @NotNull(message = "sort参数缺失") + @ApiModelProperty(value = "排序编号") + private Integer sort; + + @NotNull(message = "isShow参数缺失") + @ApiModelProperty(value = "是否显示: 0=否, 1=是") + private Integer isShow; + +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/goods/GoodsCreateValidate.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/goods/GoodsCreateValidate.java new file mode 100644 index 0000000..a88e815 --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/goods/GoodsCreateValidate.java @@ -0,0 +1,53 @@ +package com.wyh.common.validator.goods; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +@ApiModel("产品信息创建参数") +public class GoodsCreateValidate implements Serializable { + + private static final long serialVersionUID = 1L; + + @NotNull(message = "goodsName参数缺失") + @ApiModelProperty(value = "产品名称") + private String goodsName; + + @NotNull(message = "price参数缺失") + @ApiModelProperty(value = "价格") + private BigDecimal price; + + @NotNull(message = "goodsImg参数缺失") + @ApiModelProperty(value = "产品主图") + private String goodsImg; + + @NotNull(message = "goodsListImg参数缺失") + @ApiModelProperty(value = "产品列表图") + private String goodsListImg; + + @NotNull(message = "sort参数缺失") + @ApiModelProperty(value = "排序") + private Integer sort; + + @NotNull(message = "type参数缺失") + @ApiModelProperty(value = "是否上架0:否,1:是") + private Integer type; + + @NotNull(message = "isDownload参数缺失") + @ApiModelProperty(value = "是否下载") + private Integer isDownload; + + @NotNull(message = "summary参数缺失") + @ApiModelProperty(value = "实验室说明") + private String summary; + + @NotNull(message = "cateId参数缺失") + @ApiModelProperty(value = "产品分类") + private Integer cateId; + +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/goods/GoodsSearchValidate.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/goods/GoodsSearchValidate.java new file mode 100644 index 0000000..640a160 --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/goods/GoodsSearchValidate.java @@ -0,0 +1,42 @@ +package com.wyh.common.validator.goods; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +@ApiModel("产品信息搜素参数") +public class GoodsSearchValidate implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "产品名称") + private String goodsName; + + @ApiModelProperty(value = "价格") + private BigDecimal price; + + @ApiModelProperty(value = "产品主图") + private String goodsImg; + + @ApiModelProperty(value = "产品列表图") + private String goodsListImg; + + @ApiModelProperty(value = "排序") + private Integer sort; + + @ApiModelProperty(value = "是否上架0:否,1:是") + private Integer type; + + @ApiModelProperty(value = "是否下载") + private Integer isDownload; + + @ApiModelProperty(value = "实验室说明") + private String summary; + + @ApiModelProperty(value = "产品分类") + private Integer cateId; + +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/goods/GoodsUpdateValidate.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/goods/GoodsUpdateValidate.java new file mode 100644 index 0000000..8ea230f --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/goods/GoodsUpdateValidate.java @@ -0,0 +1,62 @@ +package com.wyh.common.validator.goods; + +import com.wyh.common.validator.annotation.IDMust; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 产品信息参数 + * @author LikeAdmin + */ +@Data +@ApiModel("产品信息更新参数") +public class GoodsUpdateValidate implements Serializable { + + private static final long serialVersionUID = 1L; + + @IDMust(message = "id参数必传且需大于0") + @ApiModelProperty(value = "主键") + private Integer id; + + @NotNull(message = "goodsName参数缺失") + @ApiModelProperty(value = "产品名称") + private String goodsName; + + @NotNull(message = "price参数缺失") + @ApiModelProperty(value = "价格") + private BigDecimal price; + + @NotNull(message = "goodsImg参数缺失") + @ApiModelProperty(value = "产品主图") + private String goodsImg; + + @NotNull(message = "goodsListImg参数缺失") + @ApiModelProperty(value = "产品列表图") + private String goodsListImg; + + @NotNull(message = "sort参数缺失") + @ApiModelProperty(value = "排序") + private Integer sort; + + @NotNull(message = "type参数缺失") + @ApiModelProperty(value = "是否上架0:否,1:是") + private Integer type; + + @NotNull(message = "isDownload参数缺失") + @ApiModelProperty(value = "是否下载") + private Integer isDownload; + + @NotNull(message = "summary参数缺失") + @ApiModelProperty(value = "实验室说明") + private String summary; + + @NotNull(message = "cateId参数缺失") + @ApiModelProperty(value = "产品分类") + private Integer cateId; + +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/goods/GoodsCateDetailVo.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/goods/GoodsCateDetailVo.java new file mode 100644 index 0000000..cd5b2f4 --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/goods/GoodsCateDetailVo.java @@ -0,0 +1,31 @@ +package com.wyh.common.vo.goods; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +@ApiModel("产品分类详情Vo") +public class GoodsCateDetailVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键") + private Integer id; + + @ApiModelProperty(value = "产品分类名称") + private String name; + + @ApiModelProperty(value = "上级菜单") + private Integer pid; + + @ApiModelProperty(value = "排序编号") + private Integer sort; + + @ApiModelProperty(value = "是否显示: 0=否, 1=是") + private Integer isShow; + + +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/goods/GoodsCateListedVo.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/goods/GoodsCateListedVo.java new file mode 100644 index 0000000..979c314 --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/goods/GoodsCateListedVo.java @@ -0,0 +1,37 @@ +package com.wyh.common.vo.goods; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +@ApiModel("产品分类列表Vo") +public class GoodsCateListedVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键") + private Integer id; + + @ApiModelProperty(value = "产品分类名称") + private String name; + + @ApiModelProperty(value = "上级菜单") + private Integer pid; + + @ApiModelProperty(value = "创建时间") + private String createTime; + + @ApiModelProperty(value = "更新时间") + private String updateTime; + + @ApiModelProperty(value = "排序编号") + private Integer sort; + + @ApiModelProperty(value = "是否显示: 0=否, 1=是") + private Integer isShow; + + +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/goods/GoodsDetailVo.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/goods/GoodsDetailVo.java new file mode 100644 index 0000000..3d89048 --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/goods/GoodsDetailVo.java @@ -0,0 +1,47 @@ +package com.wyh.common.vo.goods; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +@ApiModel("产品信息详情Vo") +public class GoodsDetailVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键") + private Integer id; + + @ApiModelProperty(value = "产品名称") + private String goodsName; + + @ApiModelProperty(value = "价格") + private BigDecimal price; + + @ApiModelProperty(value = "产品主图") + private String goodsImg; + + @ApiModelProperty(value = "产品列表图") + private String goodsListImg; + + @ApiModelProperty(value = "排序") + private Integer sort; + + @ApiModelProperty(value = "是否上架0:否,1:是") + private Integer type; + + @ApiModelProperty(value = "是否下载") + private Integer isDownload; + + @ApiModelProperty(value = "实验室说明") + private String summary; + + @ApiModelProperty(value = "产品分类") + private Integer cateId; + + +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/goods/GoodsListedVo.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/goods/GoodsListedVo.java new file mode 100644 index 0000000..56da04b --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/goods/GoodsListedVo.java @@ -0,0 +1,55 @@ +package com.wyh.common.vo.goods; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +@ApiModel("产品信息列表Vo") +public class GoodsListedVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键") + private Integer id; + + @ApiModelProperty(value = "创建时间") + private String createTime; + + @ApiModelProperty(value = "更新时间") + private String updateTime; + + @ApiModelProperty(value = "产品名称") + private String goodsName; + + @ApiModelProperty(value = "价格") + private BigDecimal price; + + @ApiModelProperty(value = "产品主图") + private String goodsImg; + + @ApiModelProperty(value = "产品列表图") + private String goodsListImg; + + @ApiModelProperty(value = "排序") + private Integer sort; + + @ApiModelProperty(value = "是否上架0:否,1:是") + private Integer type; + + @ApiModelProperty(value = "是否下载") + private Integer isDownload; + + @ApiModelProperty(value = "实验室说明") + private String summary; + + @ApiModelProperty(value = "产品分类") + private Integer cateId; + + @ApiModelProperty(value = "产品分类名称") + private String cateName; + +} diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/GoodsController.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/GoodsController.java new file mode 100644 index 0000000..c458055 --- /dev/null +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/GoodsController.java @@ -0,0 +1,31 @@ +package com.wyh.front.controller; + +import com.alibaba.fastjson2.JSONArray; +import com.wyh.common.aop.NotLogin; +import com.wyh.common.core.AjaxResult; +import com.wyh.common.validator.goods.GoodsCateSearchValidate; +import com.wyh.front.service.GoodsService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +@RestController +@RequestMapping("front/goods") +@Api(tags = "产品信息") +public class GoodsController { + + @Resource + private GoodsService goodsService; + + @NotLogin + @RequestMapping("/cate/tree") + @ApiOperation(value = "产品分类树", httpMethod = "GET" ) + public AjaxResult cateTree(@Validated GoodsCateSearchValidate searchValidate) { + JSONArray list = goodsService.cateTree(searchValidate); + return AjaxResult.success(list); + } +} diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/NewsController.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/NewsController.java index fed2099..8303937 100644 --- a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/NewsController.java +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/NewsController.java @@ -2,25 +2,22 @@ package com.wyh.front.controller; import com.wyh.common.aop.NotLogin; -import com.wyh.common.aop.NotPower; import com.wyh.common.core.AjaxResult; import com.wyh.common.core.PageResult; import com.wyh.common.validator.annotation.IDMust; -import com.wyh.common.validator.news.NewsCreateValidate; import com.wyh.common.validator.news.NewsSearchValidate; -import com.wyh.common.validator.news.NewsUpdateValidate; import com.wyh.common.vo.news.NewsCateListedVo; import com.wyh.common.vo.news.NewsDetailVo; import com.wyh.common.vo.news.NewsListedVo; import com.wyh.front.service.INewsService; -import com.wyh.front.validate.common.IdValidate; import com.wyh.front.validate.common.PageValidate; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import lombok.extern.java.Log; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.List; diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/GoodsService.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/GoodsService.java new file mode 100644 index 0000000..daf3683 --- /dev/null +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/GoodsService.java @@ -0,0 +1,8 @@ +package com.wyh.front.service; + +import com.alibaba.fastjson2.JSONArray; +import com.wyh.common.validator.goods.GoodsCateSearchValidate; + +public interface GoodsService { + JSONArray cateTree( GoodsCateSearchValidate searchValidate); +} diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/GoodsServiceImpl.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/GoodsServiceImpl.java new file mode 100644 index 0000000..c7f5a32 --- /dev/null +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/GoodsServiceImpl.java @@ -0,0 +1,55 @@ +package com.wyh.front.service.impl; + +import com.alibaba.fastjson2.JSONArray; +import com.github.yulichang.query.MPJQueryWrapper; +import com.wyh.common.entity.goods.GoodsCate; +import com.wyh.common.mapper.goods.GoodsCateMapper; +import com.wyh.common.mapper.goods.GoodsMapper; +import com.wyh.common.util.ListUtils; +import com.wyh.common.util.TimeUtils; +import com.wyh.common.validator.goods.GoodsCateSearchValidate; +import com.wyh.common.vo.goods.GoodsCateListedVo; +import com.wyh.front.service.GoodsService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.List; + +@Service +public class GoodsServiceImpl implements GoodsService { + + @Resource + private GoodsMapper goodsMapper; + + @Resource + private GoodsCateMapper goodsCateMapper; + + + @Override + public JSONArray cateTree(GoodsCateSearchValidate searchValidate) { + MPJQueryWrapper mpjQueryWrapper = new MPJQueryWrapper<>(); + mpjQueryWrapper.selectAll(GoodsCate.class); + mpjQueryWrapper.eq("is_delete", 0); + mpjQueryWrapper.orderByDesc(Arrays.asList("sort", "id")); + + goodsCateMapper.setSearch(mpjQueryWrapper, searchValidate, new String[]{ + "like:name:str", + "=:pid:str", + "=:sort:str", + "=:isShow@is_show:int", + }); + + List array = goodsCateMapper.selectJoinList( + GoodsCateListedVo.class, + mpjQueryWrapper); + + for(GoodsCateListedVo item : array) { + item.setCreateTime(TimeUtils.timestampToDate(item.getCreateTime())); + item.setUpdateTime(TimeUtils.timestampToDate(item.getUpdateTime())); + } + + JSONArray jsonArray = JSONArray.parseArray(JSONArray.toJSONString(array)); + return ListUtils.listToTree(jsonArray, "id", "pid", "children"); + } +} diff --git a/admin/src/api/goods.ts b/admin/src/api/goods.ts new file mode 100644 index 0000000..baa33f7 --- /dev/null +++ b/admin/src/api/goods.ts @@ -0,0 +1,26 @@ +import request from '@/utils/request' + +// 产品信息列表 +export function goodsLists(params?: Record) { + return request.get({ url: '/goods/list', params }) +} + +// 产品信息详情 +export function goodsDetail(params: Record) { + return request.get({ url: '/goods/detail', params }) +} + +// 产品信息新增 +export function goodsAdd(params: Record) { + return request.post({ url: '/goods/add', params }) +} + +// 产品信息编辑 +export function goodsEdit(params: Record) { + return request.post({ url: '/goods/edit', params }) +} + +// 产品信息删除 +export function goodsDelete(params: Record) { + return request.post({ url: '/goods/del', params }) +} diff --git a/admin/src/views/goods/cate/index.vue b/admin/src/views/goods/cate/index.vue index 2a99859..78a481b 100644 --- a/admin/src/views/goods/cate/index.vue +++ b/admin/src/views/goods/cate/index.vue @@ -1,31 +1,6 @@