Browse Source

sku明细

24282 1 year ago
parent
commit
34d7bb600f

+ 71 - 0
sd-business/src/main/java/com/sd/business/controller/sku/SkuSpecLinkController.java

@@ -0,0 +1,71 @@
+package com.sd.business.controller.sku;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.sd.business.entity.sku.dto.SkuSpecLinkDto;
+import com.sd.business.entity.sku.dto.SkuSpecLinkSelectDto;
+import com.sd.business.entity.sku.vo.SkuSpecLinkVo;
+import com.sd.business.service.sku.SkuSpecLinkService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * <p>
+ * sku规格关联 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2023-07-07
+ */
+@RestController
+@RequestMapping("/skuSpecLink")
+public class SkuSpecLinkController {
+
+    @Autowired
+    private SkuSpecLinkService skuSpecLinkService;
+
+    /**
+     * sku规格关联分页
+     */
+    @PostMapping("/page")
+    public Page<SkuSpecLinkVo> page(@RequestBody SkuSpecLinkSelectDto dto) {
+        return skuSpecLinkService.getPage(dto);
+    }
+
+    /**
+     * sku规格关联明细
+     */
+    @PostMapping("/detail")
+    public SkuSpecLinkVo detail(@RequestBody BaseSelectDto dto) {
+        return skuSpecLinkService.detail(dto.getId());
+    }
+
+    /**
+     * sku规格关联新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody SkuSpecLinkDto skuSpecLinkDto) {
+        skuSpecLinkService.add(skuSpecLinkDto);
+    }
+
+    /**
+     * sku规格关联编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody SkuSpecLinkDto skuSpecLinkDto) {
+        skuSpecLinkService.edit(skuSpecLinkDto);
+    }
+
+    /**
+     * sku规格关联删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        skuSpecLinkService.delete(dto.getId());
+    }
+
+}

+ 16 - 1
sd-business/src/main/java/com/sd/business/entity/sku/dto/SkuSelectDto.java

@@ -7,11 +7,26 @@ import lombok.Setter;
 /**
  * sku列表查询入参实体
  *
- * @author 
+ * @author
  * @since 2023-07-03
  */
 @Getter
 @Setter
 public class SkuSelectDto extends BaseSelectDto {
 
+    /**
+     * 编码
+     */
+    private String code;
+
+    /**
+     * 名称
+     */
+    private String name;
+
+    /**
+     * 类型 0非集团SKU 1集团SKU
+     */
+    private Integer type;
+
 }

+ 17 - 0
sd-business/src/main/java/com/sd/business/entity/sku/dto/SkuSpecLinkDto.java

@@ -0,0 +1,17 @@
+package com.sd.business.entity.sku.dto;
+
+import com.sd.business.entity.sku.po.SkuSpecLink;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * sku规格关联新增编辑入参实体
+ *
+ * @author
+ * @since 2023-07-07
+ */
+@Getter
+@Setter
+public class SkuSpecLinkDto extends SkuSpecLink {
+
+}

+ 17 - 0
sd-business/src/main/java/com/sd/business/entity/sku/dto/SkuSpecLinkSelectDto.java

@@ -0,0 +1,17 @@
+package com.sd.business.entity.sku.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * sku规格关联列表查询入参实体
+ *
+ * @author
+ * @since 2023-07-07
+ */
+@Getter
+@Setter
+public class SkuSpecLinkSelectDto extends BaseSelectDto {
+
+}

+ 51 - 0
sd-business/src/main/java/com/sd/business/entity/sku/po/SkuSpecLink.java

@@ -0,0 +1,51 @@
+package com.sd.business.entity.sku.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * sku规格关联
+ * </p>
+ *
+ * @author
+ * @since 2023-07-07
+ */
+@Getter
+@Setter
+@TableName("sku_spec_link")
+public class SkuSpecLink extends BasePo {
+
+    /**
+     * sku id
+     */
+    private Long skuId;
+
+    /**
+     * sku规格id
+     */
+    private Long skuSpecId;
+
+    /**
+     * bom规格id
+     */
+    private Long bomSpecId;
+
+    /**
+     * 事业部id
+     */
+    private Long departmentId;
+
+    /**
+     * 关联类型 1包材 2快递包装
+     */
+    private Integer type;
+
+    /**
+     * 数量
+     */
+    private Integer quantity;
+
+}

+ 22 - 0
sd-business/src/main/java/com/sd/business/entity/sku/vo/SkuSpecLinkVo.java

@@ -0,0 +1,22 @@
+package com.sd.business.entity.sku.vo;
+
+import com.sd.business.entity.sku.po.SkuSpecLink;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * sku规格关联列表查询返回值实体
+ *
+ * @author
+ * @since 2023-07-07
+ */
+@Getter
+@Setter
+public class SkuSpecLinkVo extends SkuSpecLink {
+
+    /**
+     * 名称
+     */
+    private String name;
+
+}

+ 17 - 0
sd-business/src/main/java/com/sd/business/entity/sku/vo/SkuSpecVo.java

@@ -4,6 +4,8 @@ import com.sd.business.entity.sku.po.SkuSpec;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.List;
+
 /**
  * sku规格列表查询返回值实体
  *
@@ -14,4 +16,19 @@ import lombok.Setter;
 @Setter
 public class SkuSpecVo extends SkuSpec {
 
+    /**
+     * bom规格名称
+     */
+    private String bomSpecName;
+
+    /**
+     * 包材
+     */
+    private List<SkuSpecLinkVo> packagingMaterialList;
+
+    /**
+     * 快递包装
+     */
+    private List<SkuSpecLinkVo> expressPackingList;
+
 }

+ 9 - 1
sd-business/src/main/java/com/sd/business/entity/sku/vo/SkuVo.java

@@ -1,17 +1,25 @@
 package com.sd.business.entity.sku.vo;
 
 import com.sd.business.entity.sku.po.Sku;
+import com.sd.business.entity.sku.po.SkuSpec;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.List;
+
 /**
  * sku列表查询返回值实体
  *
- * @author 
+ * @author
  * @since 2023-07-03
  */
 @Getter
 @Setter
 public class SkuVo extends Sku {
 
+    /**
+     * sku规格列表
+     */
+    private List<? extends SkuSpec> skuSpecList;
+
 }

+ 26 - 0
sd-business/src/main/java/com/sd/business/mapper/sku/SkuSpecLinkMapper.java

@@ -0,0 +1,26 @@
+package com.sd.business.mapper.sku;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.sd.business.entity.sku.po.SkuSpecLink;
+import com.sd.business.entity.sku.vo.SkuSpecLinkVo;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * sku规格关联 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2023-07-07
+ */
+public interface SkuSpecLinkMapper extends BaseMapper<SkuSpecLink> {
+
+    /**
+     * sku规格关联分页
+     */
+    Page<SkuSpecLinkVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<SkuSpecLink> wrapper);
+
+}

+ 2 - 2
sd-business/src/main/java/com/sd/business/service/bom/impl/BomClassifyServiceImpl.java

@@ -38,8 +38,8 @@ public class BomClassifyServiceImpl extends ServiceImpl<BomClassifyMapper, BomCl
 
     @Override
     public BomClassifyVo detail(Long id) {
-        BomClassify BomClassify = this.getById(id);
-        BomClassifyVo result = BeanUtil.toBean(BomClassify, BomClassifyVo.class);
+        BomClassify bomClassify = this.getById(id);
+        BomClassifyVo result = BeanUtil.toBean(bomClassify, BomClassifyVo.class);
         return result;
     }
 

+ 2 - 2
sd-business/src/main/java/com/sd/business/service/bom/impl/BomServiceImpl.java

@@ -94,8 +94,8 @@ public class BomServiceImpl extends ServiceImpl<BomMapper, Bom> implements BomSe
 
     @Override
     public BomVo detail(Long id) {
-        Bom Bom = this.getById(id);
-        BomVo result = BeanUtil.toBean(Bom, BomVo.class);
+        Bom bom = this.getById(id);
+        BomVo result = BeanUtil.toBean(bom, BomVo.class);
 
         List<BomSpec> list = bomSpecService.list(q -> q.eq(BomSpec::getBomId, id));
         result.setBomSpecList(list);

+ 2 - 2
sd-business/src/main/java/com/sd/business/service/bom/impl/BomSpecServiceImpl.java

@@ -34,8 +34,8 @@ public class BomSpecServiceImpl extends ServiceImpl<BomSpecMapper, BomSpec> impl
 
     @Override
     public BomSpecVo detail(Long id) {
-        BomSpec BomSpec = this.getById(id);
-        BomSpecVo result = BeanUtil.toBean(BomSpec, BomSpecVo.class);
+        BomSpec bomSpec = this.getById(id);
+        BomSpecVo result = BeanUtil.toBean(bomSpec, BomSpecVo.class);
         return result;
     }
 

+ 46 - 0
sd-business/src/main/java/com/sd/business/service/sku/SkuSpecLinkService.java

@@ -0,0 +1,46 @@
+package com.sd.business.service.sku;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.service.BaseService;
+import com.sd.business.entity.sku.dto.SkuSpecLinkDto;
+import com.sd.business.entity.sku.dto.SkuSpecLinkSelectDto;
+import com.sd.business.entity.sku.po.SkuSpecLink;
+import com.sd.business.entity.sku.vo.SkuSpecLinkVo;
+
+
+/**
+ * <p>
+ * sku规格关联 服务类
+ * </p>
+ *
+ * @author
+ * @since 2023-07-07
+ */
+public interface SkuSpecLinkService extends BaseService<SkuSpecLink> {
+
+    /**
+     * sku规格关联分页
+     */
+    Page<SkuSpecLinkVo> getPage(SkuSpecLinkSelectDto dto);
+
+    /**
+     * sku规格关联明细
+     */
+    SkuSpecLinkVo detail(Long id);
+
+    /**
+     * sku规格关联新增
+     */
+    void add(SkuSpecLinkDto skuSpecLinkDto);
+
+    /**
+     * sku规格关联编辑
+     */
+    void edit(SkuSpecLinkDto skuSpecLinkDto);
+
+    /**
+     * sku规格关联删除
+     */
+    void delete(Long id);
+
+}

+ 119 - 10
sd-business/src/main/java/com/sd/business/service/sku/impl/SkuServiceImpl.java

@@ -1,16 +1,35 @@
 package com.sd.business.service.sku.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.domain.BaseIdPo;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.sd.business.entity.bom.po.BomSpec;
+import com.sd.business.entity.sku.dto.SkuDto;
+import com.sd.business.entity.sku.dto.SkuSelectDto;
 import com.sd.business.entity.sku.po.Sku;
+import com.sd.business.entity.sku.po.SkuSpec;
+import com.sd.business.entity.sku.po.SkuSpecLink;
+import com.sd.business.entity.sku.vo.SkuSpecLinkVo;
+import com.sd.business.entity.sku.vo.SkuSpecVo;
+import com.sd.business.entity.sku.vo.SkuVo;
 import com.sd.business.mapper.sku.SkuMapper;
+import com.sd.business.service.bom.BomSpecService;
 import com.sd.business.service.sku.SkuService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sd.business.service.sku.SkuSpecLinkService;
+import com.sd.business.service.sku.SkuSpecService;
+import com.sd.framework.util.Assert;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.sd.business.entity.sku.vo.SkuVo;
-import com.sd.business.entity.sku.dto.SkuSelectDto;
-import com.ruoyi.common.utils.wrapper.IWrapper;
-import com.sd.business.entity.sku.dto.SkuDto;
-import cn.hutool.core.bean.BeanUtil;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 
 /**
@@ -18,24 +37,99 @@ import cn.hutool.core.bean.BeanUtil;
  * sku 服务实现类
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-07-03
  */
 @Service
 public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements SkuService {
 
+    @Autowired
+    private SkuSpecService skuSpecService;
+
+    @Autowired
+    private SkuSpecLinkService skuSpecLinkService;
+
+    @Autowired
+    private BomSpecService bomSpecService;
+
     @Override
     public Page<SkuVo> getPage(SkuSelectDto dto) {
         IWrapper<Sku> wrapper = getWrapper();
         wrapper.orderByDesc("s", Sku::getId);
+        wrapper.like("s", Sku::getCode, dto.getCode());
+        wrapper.like("s", Sku::getName, dto.getName());
+        wrapper.like("s", Sku::getType, dto.getType());
         Page<SkuVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        List<SkuVo> records = page.getRecords();
+        if (records.size() == 0) {
+            return page;
+        }
+
+        List<Long> skuIdList = records.stream().map(BaseIdPo::getId).collect(Collectors.toList());
+        Map<Long, List<SkuSpec>> skuSpecMap = skuSpecService.mapKGroup(SkuSpec::getSkuId,
+                q -> q.in(SkuSpec::getSkuId, skuIdList));
+        records.forEach(item -> item.setSkuSpecList(skuSpecMap.getOrDefault(item.getId(), Collections.emptyList())));
         return page;
     }
 
     @Override
     public SkuVo detail(Long id) {
-        Sku Sku = this.getById(id);
-        SkuVo result = BeanUtil.toBean(Sku, SkuVo.class);
+        // sku
+        Sku sku = this.getById(id);
+        Assert.notNull(sku, "未通过skuId找到sku");
+        SkuVo result = BeanUtil.toBean(sku, SkuVo.class);
+
+        // sku规格
+        List<SkuSpec> list = skuSpecService.list(q -> q.in(SkuSpec::getSkuId, id));
+        List<SkuSpecVo> skuSpecList = BeanUtil.copyToList(list, SkuSpecVo.class);
+        result.setSkuSpecList(skuSpecList);
+
+        // sku规格关联
+        List<SkuSpecLink> skuSpecLinkList = skuSpecLinkService.list(
+                q -> q.eq(SkuSpecLink::getDepartmentId, SecurityUtils.getDeptId()).eq(SkuSpecLink::getSkuId, id));
+
+        // sku规格关联map
+        Map<Long, Map<Integer, List<SkuSpecLink>>> map = skuSpecLinkList.stream().collect(
+                Collectors.groupingBy(SkuSpecLink::getSkuSpecId, Collectors.groupingBy(SkuSpecLink::getType)));
+
+        // bom规格id列表
+        List<Long> bomSpecIdList = new ArrayList<>();
+        bomSpecIdList.addAll(list.stream().map(SkuSpec::getBomSpecId).filter(ObjectUtil::isNotNull).collect(Collectors.toList()));
+        bomSpecIdList.addAll(skuSpecLinkList.stream().map(SkuSpecLink::getBomSpecId).collect(Collectors.toList()));
+        if (bomSpecIdList.size() == 0) {
+            return result;
+        }
+
+        Map<Long, BomSpec> bomSpecMap = bomSpecService.mapKEntity(BaseIdPo::getId, q -> q.in(BaseIdPo::getId, bomSpecIdList));
+        for (SkuSpecVo item : skuSpecList) {
+
+            // 赋值主材bom名称
+            Long bomSpecId = item.getBomSpecId();
+            if (bomSpecId != null) {
+                BomSpec bomSpec = bomSpecMap.get(bomSpecId);
+                if (bomSpec != null) {
+                    item.setBomSpecName(bomSpec.getName());
+                }
+            }
+
+            // 包材,快递包装
+            Map<Integer, List<SkuSpecLink>> typeSkuSpecLinkMap = map.get(item.getId());
+            if (typeSkuSpecLinkMap == null) {
+                item.setPackagingMaterialList(Collections.emptyList());
+                item.setExpressPackingList(Collections.emptyList());
+                continue;
+            }
+
+            // 赋值包材
+            List<SkuSpecLinkVo> packagingMaterialList = createSkuSpecLinkVoList(typeSkuSpecLinkMap.get(1), bomSpecMap);
+            item.setPackagingMaterialList(packagingMaterialList);
+
+            // 赋值快递包装
+            List<SkuSpecLinkVo> expressPackingList = createSkuSpecLinkVoList(typeSkuSpecLinkMap.get(2), bomSpecMap);
+            item.setExpressPackingList(expressPackingList);
+
+        }
+
         return result;
     }
 
@@ -54,4 +148,19 @@ public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements SkuSe
         this.removeById(id);
     }
 
+    private List<SkuSpecLinkVo> createSkuSpecLinkVoList(List<SkuSpecLink> skuSpecLinkList, Map<Long, BomSpec> bomSpecMap) {
+        if (ObjectUtil.isEmpty(skuSpecLinkList)) {
+            return Collections.emptyList();
+        }
+
+        return skuSpecLinkList.stream().map(item -> {
+            SkuSpecLinkVo skuSpecLinkVo = BeanUtil.toBean(item, SkuSpecLinkVo.class);
+            BomSpec bomSpec = bomSpecMap.get(item.getBomSpecId());
+            if (bomSpec != null) {
+                skuSpecLinkVo.setName(bomSpec.getName());
+            }
+            return skuSpecLinkVo;
+        }).collect(Collectors.toList());
+    }
+
 }

+ 57 - 0
sd-business/src/main/java/com/sd/business/service/sku/impl/SkuSpecLinkServiceImpl.java

@@ -0,0 +1,57 @@
+package com.sd.business.service.sku.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.sd.business.entity.sku.dto.SkuSpecLinkDto;
+import com.sd.business.entity.sku.dto.SkuSpecLinkSelectDto;
+import com.sd.business.entity.sku.po.SkuSpecLink;
+import com.sd.business.entity.sku.vo.SkuSpecLinkVo;
+import com.sd.business.mapper.sku.SkuSpecLinkMapper;
+import com.sd.business.service.sku.SkuSpecLinkService;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * <p>
+ * sku规格关联 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-07-07
+ */
+@Service
+public class SkuSpecLinkServiceImpl extends ServiceImpl<SkuSpecLinkMapper, SkuSpecLink> implements SkuSpecLinkService {
+
+    @Override
+    public Page<SkuSpecLinkVo> getPage(SkuSpecLinkSelectDto dto) {
+        IWrapper<SkuSpecLink> wrapper = getWrapper();
+        wrapper.orderByDesc("ssl", SkuSpecLink::getId);
+        Page<SkuSpecLinkVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+    @Override
+    public SkuSpecLinkVo detail(Long id) {
+        SkuSpecLink SkuSpecLink = this.getById(id);
+        SkuSpecLinkVo result = BeanUtil.toBean(SkuSpecLink, SkuSpecLinkVo.class);
+        return result;
+    }
+
+    @Override
+    public void add(SkuSpecLinkDto skuSpecLinkDto) {
+        this.save(skuSpecLinkDto);
+    }
+
+    @Override
+    public void edit(SkuSpecLinkDto skuSpecLinkDto) {
+        this.updateById(skuSpecLinkDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+}

+ 20 - 0
sd-business/src/main/resources/mapper/sku/SkuSpecLinkMapper.xml

@@ -0,0 +1,20 @@
+<?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.sd.business.mapper.sku.SkuSpecLinkMapper">
+    <select id="getPage" resultType="com.sd.business.entity.sku.vo.SkuSpecLinkVo">
+        select ssl.id,
+               ssl.sku_id,
+               ssl.sku_spec_id,
+               ssl.bom_spec_id,
+               ssl.department_id,
+               ssl.type,
+               ssl.quantity,
+               ssl.create_user,
+               ssl.create_time,
+               ssl.update_user,
+               ssl.update_time
+        from sku_spec_link ssl
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>