yzc 2 anni fa
parent
commit
7c5b57f33d

+ 17 - 0
code/src/test/java/ItemDataSource.java

@@ -0,0 +1,17 @@
+import fly.generator.GeneratorApplication;
+
+public class ItemDataSource {
+
+    public static void main(String[] args) {
+        GeneratorApplication.builder()
+                .url("jdbc:mysql://36.134.91.96:17330/bytesailing_item?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true")
+                .username("fjhx2012mysql")
+                .password("3PN-Mzn#vnP&q6d")
+                .port(9989)
+                .module("hx-item")
+                .parent("com.fjhx.item")
+                .superServiceClass("com.ruoyi.common.core.service.BaseService")
+                .build();
+    }
+
+}

+ 68 - 0
hx-item/src/main/java/com/fjhx/item/controller/product/ProductSpuController.java

@@ -0,0 +1,68 @@
+package com.fjhx.item.controller.product;
+
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.item.entity.product.vo.ProductSpuVo;
+import com.fjhx.item.entity.product.dto.ProductSpuSelectDto;
+import com.fjhx.item.entity.product.dto.ProductSpuDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.item.service.product.ProductSpuService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 产品spu 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@RestController
+@RequestMapping("/productSpu")
+public class ProductSpuController {
+
+    @Autowired
+    private ProductSpuService productSpuService;
+
+    /**
+     * 产品spu分页
+     */
+    @PostMapping("/page")
+    public Page<ProductSpuVo> page(@RequestBody ProductSpuSelectDto dto) {
+        return productSpuService.getPage(dto);
+    }
+
+    /**
+     * 产品spu明细
+     */
+    @PostMapping("/detail")
+    public ProductSpuVo detail(@RequestBody BaseSelectDto dto) {
+        return productSpuService.detail(dto.getId());
+    }
+
+    /**
+     * 产品spu新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody ProductSpuDto productSpuDto) {
+        productSpuService.add(productSpuDto);
+    }
+
+    /**
+     * 产品spu编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody ProductSpuDto productSpuDto) {
+        productSpuService.edit(productSpuDto);
+    }
+
+    /**
+     * 产品spu删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        productSpuService.delete(dto.getId());
+    }
+
+}

+ 23 - 0
hx-item/src/main/java/com/fjhx/item/entity/product/dto/ProductSpuDto.java

@@ -0,0 +1,23 @@
+package com.fjhx.item.entity.product.dto;
+
+import com.fjhx.item.entity.product.po.ProductInfo;
+import com.fjhx.item.entity.product.po.ProductSpu;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 产品spu新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+public class ProductSpuDto extends ProductSpu {
+
+    /**产品列表*/
+    List<ProductInfo> productInfos;
+
+}

+ 17 - 0
hx-item/src/main/java/com/fjhx/item/entity/product/dto/ProductSpuSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.item.entity.product.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 产品spu列表查询入参实体
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+public class ProductSpuSelectDto extends BaseSelectDto {
+
+}

+ 4 - 0
hx-item/src/main/java/com/fjhx/item/entity/product/po/ProductInfo.java

@@ -68,6 +68,10 @@ public class ProductInfo extends BasePo {
      */
     private String remark;
 
+    /**维多利亚json*/
     private String victoriatouristJson;
 
+    /**产品spuid*/
+    private Long productSpuId;
+
 }

+ 37 - 0
hx-item/src/main/java/com/fjhx/item/entity/product/po/ProductSpu.java

@@ -0,0 +1,37 @@
+package com.fjhx.item.entity.product.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 产品spu
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+@TableName("product_spu")
+public class ProductSpu extends BasePo {
+
+    /**
+     * spu编码
+     */
+    private String code;
+
+    /**
+     * spu名称
+     */
+    private String name;
+
+    /**
+     * 说明
+     */
+    private String remark;
+
+}

+ 28 - 0
hx-item/src/main/java/com/fjhx/item/entity/product/vo/ProductSpuVo.java

@@ -0,0 +1,28 @@
+package com.fjhx.item.entity.product.vo;
+
+import com.fjhx.item.entity.product.po.ProductInfo;
+import com.fjhx.item.entity.product.po.ProductSpu;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 产品spu列表查询返回值实体
+ *
+ * @author
+ * @since 2023-04-11
+ */
+@Getter
+@Setter
+public class ProductSpuVo extends ProductSpu {
+
+    /**
+     * 产品列表
+     */
+    private List<ProductInfo> productInfoList;
+
+    /**关联产品数*/
+    private Integer count;
+
+}

+ 26 - 0
hx-item/src/main/java/com/fjhx/item/mapper/product/ProductSpuMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.item.mapper.product;
+
+import com.fjhx.item.entity.product.po.ProductSpu;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.item.entity.product.vo.ProductSpuVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 产品spu Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+public interface ProductSpuMapper extends BaseMapper<ProductSpu> {
+
+    /**
+     * 产品spu分页
+     */
+    Page<ProductSpuVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<ProductSpu> wrapper);
+
+}

+ 46 - 0
hx-item/src/main/java/com/fjhx/item/service/product/ProductSpuService.java

@@ -0,0 +1,46 @@
+package com.fjhx.item.service.product;
+
+import com.fjhx.item.entity.product.po.ProductSpu;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.item.entity.product.vo.ProductSpuVo;
+import com.fjhx.item.entity.product.dto.ProductSpuSelectDto;
+import com.fjhx.item.entity.product.dto.ProductSpuDto;
+
+
+/**
+ * <p>
+ * 产品spu 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+public interface ProductSpuService extends BaseService<ProductSpu> {
+
+    /**
+     * 产品spu分页
+     */
+    Page<ProductSpuVo> getPage(ProductSpuSelectDto dto);
+
+    /**
+     * 产品spu明细
+     */
+    ProductSpuVo detail(Long id);
+
+    /**
+     * 产品spu新增
+     */
+    void add(ProductSpuDto productSpuDto);
+
+    /**
+     * 产品spu编辑
+     */
+    void edit(ProductSpuDto productSpuDto);
+
+    /**
+     * 产品spu删除
+     */
+    void delete(Long id);
+
+}

+ 91 - 0
hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductSpuServiceImpl.java

@@ -0,0 +1,91 @@
+package com.fjhx.item.service.product.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.PageUtil;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.item.entity.product.po.ProductInfo;
+import com.fjhx.item.entity.product.po.ProductSpu;
+import com.fjhx.item.entity.product.vo.ProductInfoVo;
+import com.fjhx.item.mapper.product.ProductSpuMapper;
+import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.item.service.product.ProductSpuService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.item.entity.product.vo.ProductSpuVo;
+import com.fjhx.item.entity.product.dto.ProductSpuSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.item.entity.product.dto.ProductSpuDto;
+import cn.hutool.core.bean.BeanUtil;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+
+/**
+ * <p>
+ * 产品spu 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-11
+ */
+@DS(SourceConstant.ITEM)
+@Service
+public class ProductSpuServiceImpl extends ServiceImpl<ProductSpuMapper, ProductSpu> implements ProductSpuService {
+
+    @Autowired
+    ProductInfoService productInfoService;
+
+    @Override
+    public Page<ProductSpuVo> getPage(ProductSpuSelectDto dto) {
+        IWrapper<ProductSpu> wrapper = getWrapper();
+        wrapper.orderByDesc("ps", ProductSpu::getId);
+        Page<ProductSpuVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+    @Override
+    public ProductSpuVo detail(Long id) {
+        ProductSpu ProductSpu = this.getById(id);
+        ProductSpuVo result = BeanUtil.toBean(ProductSpu, ProductSpuVo.class);
+        List<ProductInfo> list = productInfoService.list(q -> q.eq(ProductInfo::getProductSpuId, id));
+        result.setProductInfoList(list);
+        return result;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(ProductSpuDto productSpuDto) {
+        this.save(productSpuDto);
+        List<ProductInfo> productInfos = productSpuDto.getProductInfos();
+        for (ProductInfo productInfo: productInfos){
+            productInfo.setProductSpuId(productSpuDto.getId());
+        }
+        productInfoService.updateBatchById(productInfos);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(ProductSpuDto productSpuDto) {
+        this.updateById(productSpuDto);
+        List<ProductInfo> productInfos = productSpuDto.getProductInfos();
+        if(ObjectUtil.isNotEmpty(productInfos)){
+            List<Long> productIds = productInfos.stream().map(ProductInfo::getId).collect(Collectors.toList());
+            List<ProductInfo> productInfos1 = productInfoService.list(q->q.notIn(ProductInfo::getId,productIds));
+            for (ProductInfo productInfo :productInfos1){
+                productInfo.setProductSpuId(null);
+            }
+            productInfoService.updateBatchById(productInfos1);
+        }
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+}

+ 22 - 0
hx-item/src/main/resources/mapper/product/ProductSpuMapper.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.item.mapper.product.ProductSpuMapper">
+    <select id="getPage" resultType="com.fjhx.item.entity.product.vo.ProductSpuVo">
+        SELECT
+            ps.id,
+            ps.CODE,
+            ps.NAME,
+            ps.remark,
+            ps.create_user,
+            ps.create_time,
+            ps.update_user,
+            ps.update_time,
+            count( pi.id ) AS count
+        FROM
+            product_spu ps
+            left JOIN product_info pi ON pi.product_spu_id = ps.id
+        GROUP BY ps.id
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>