cup 2 lat temu
rodzic
commit
4e0fb52613

+ 118 - 0
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/GoodsMgrController.java

@@ -9,9 +9,12 @@ import com.github.xiaoymin.knife4j.annotations.DynamicParameters;
 import com.qs.mp.admin.domain.Goods;
 import com.qs.mp.admin.domain.GoodsSku;
 import com.qs.mp.admin.domain.GoodsTagRel;
+import com.qs.mp.admin.domain.excel.GoodsExcel;
+import com.qs.mp.admin.domain.excel.UserTicketOrderItemExcel;
 import com.qs.mp.admin.domain.param.GoodsParam;
 import com.qs.mp.admin.domain.param.GoodsQueryParam;
 import com.qs.mp.admin.domain.param.GoodsUpdateSortWeightParam;
+import com.qs.mp.admin.domain.vo.GoodsExportVO;
 import com.qs.mp.admin.domain.vo.GoodsVO;
 import com.qs.mp.admin.service.IGoodsService;
 import com.qs.mp.admin.service.IGoodsSkuService;
@@ -23,9 +26,12 @@ import com.qs.mp.common.enums.BusinessType;
 import com.qs.mp.common.enums.ErrorCodeEnum;
 import com.qs.mp.common.enums.GoodsStatusEnum;
 import com.qs.mp.common.utils.LogUtil;
+import com.qs.mp.utils.ExcelUtil;
 import com.qs.mp.web.controller.common.BaseApiController;
 import io.swagger.annotations.*;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.net.URLDecoder;
 import java.util.ArrayList;
 import java.util.HashSet;
@@ -35,6 +41,7 @@ import java.util.stream.Collectors;
 
 import ma.glasnost.orika.MapperFacade;
 import org.apache.commons.lang3.StringUtils;
+import org.aspectj.weaver.loadtime.Aj;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -416,4 +423,115 @@ public class GoodsMgrController extends BaseApiController {
         return AjaxResult.success("商品删除成功");
     }
 
+    @ApiOperation("商品导出")
+    @PostMapping("/export")
+    @PreAuthorize("@ss.hasPermi('business:goods:export')")
+    public AjaxResult export(@RequestBody GoodsQueryParam queryParam) {
+
+        // 商品标签
+        List<Long> goodsIds = new ArrayList<>();
+        if (null != queryParam.getTagId()) {
+            List<GoodsTagRel> goodsTagRelList = goodsTagRelService.list(
+                    new LambdaQueryWrapper<GoodsTagRel>().eq(GoodsTagRel::getTagId, queryParam.getTagId()));
+            goodsIds = goodsTagRelList.stream().map(GoodsTagRel::getGoodsId)
+                    .collect(Collectors.toList());
+            if (CollectionUtils.isEmpty(goodsIds)) {
+                return AjaxResult.error("没有符合条件的商品信息");
+            }
+        }
+        QueryWrapper<Goods> queryWrapper = new QueryWrapper<Goods>();
+        if (StringUtils.isNotBlank(queryParam.getTitle())) {
+            queryWrapper.eq("t1.title", queryParam.getTitle());
+        }
+
+        if (queryParam.getGoodsId() != null && queryParam.getGoodsId() != 0) {
+            queryWrapper.eq("t1.goods_id", queryParam.getGoodsId());
+        }
+
+        if (queryParam.getSupplierId() != null && queryParam.getSupplierId() != 0) {
+            queryWrapper.eq("t1.supplier_id", queryParam.getSupplierId());
+        }
+
+        // 成本
+        if (queryParam.getMinCost() != null) {
+            queryWrapper.ge("t1.cost", queryParam.getMinCost());
+        }
+        if (queryParam.getMaxCost() != null) {
+            queryWrapper.le("t1.cost", queryParam.getMaxCost());
+        }
+
+        // 价格
+        if (queryParam.getMinValue() != null) {
+            queryWrapper.ge("t1.value", queryParam.getMinValue());
+        }
+        if (queryParam.getMaxValue() != null) {
+            queryWrapper.le("t1.value", queryParam.getMaxValue());
+        }
+
+        // 盲豆兑换价格
+        if (queryParam.getMinExchange() != null) {
+            queryWrapper.ge("t1.exchange_price", queryParam.getMinExchange());
+        }
+
+        if (queryParam.getMaxExchange() != null) {
+            queryWrapper.le("t1.exchange_price", queryParam.getMaxExchange());
+        }
+
+        // 状态
+        if (queryParam.getStatus() != null) {
+            queryWrapper.eq("t1.status", queryParam.getStatus());
+        }
+
+        // 是否支持兑换
+        if (queryParam.getExchangeShow() != null) {
+            queryWrapper.eq("t1.exchange_show", queryParam.getExchangeShow());
+        }
+
+        // 商品分类
+        if (!CollectionUtils.isEmpty(queryParam.getCategoryIdList())) {
+            queryWrapper.in("t1.category_id", queryParam.getCategoryIdList());
+        }
+
+
+        // 标签过滤的商品ID
+        if (queryParam.getTagId() != null) {
+            queryWrapper.in("t1.goods_id", goodsIds);
+        }
+        queryWrapper.eq("t1.is_deleted", 0);
+
+        queryWrapper.orderByDesc("t1.goods_id");
+
+        List<GoodsExportVO> goodsExportVOList = goodsService.listGoodsExportVOByQueryWrapper(queryWrapper);
+        if (CollectionUtils.isEmpty(goodsExportVOList)) {
+            return AjaxResult.error("没有符合条件的商品信息");
+        }
+
+        List<GoodsExcel> goodsExcelList = new ArrayList<>();
+        for (GoodsExportVO goodsExportVO : goodsExportVOList) {
+            GoodsExcel goodsExcel = new GoodsExcel();
+            BeanUtils.copyProperties(goodsExportVO, goodsExcel);
+
+            if (goodsExportVO.getValue() != null) {
+                goodsExcel.setValue(BigDecimal.valueOf(goodsExportVO.getValue()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP));
+            }
+
+            if (goodsExportVO.getCost() != null) {
+                goodsExcel.setCost(BigDecimal.valueOf(goodsExportVO.getCost()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP));
+            }
+
+            goodsExcel.setExchangeShow(goodsExportVO.getExchangeShow() == 1 ? "是" : "否");
+
+            if (goodsExportVO.getStatus() != null) {
+                goodsExcel.setStatus(goodsExportVO.getStatus().getDesc());
+            }
+
+            goodsExcelList.add(goodsExcel);
+        }
+
+        ExcelUtil<GoodsExcel> util = new ExcelUtil<>(GoodsExcel.class);
+        return util.exportExcel(goodsExcelList, "商品导出", false);
+
+    }
+
+
 }

+ 4 - 0
mp-common/src/main/java/com/qs/mp/common/enums/GoodsStatusEnum.java

@@ -39,6 +39,10 @@ public enum GoodsStatusEnum implements IEnum<String> {
     return value;
   }
 
+  public String getDesc() {
+    return desc;
+  }
+
   /**
    * 重写toString,单个转化成json
    * @return

+ 65 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/excel/GoodsExcel.java

@@ -0,0 +1,65 @@
+package com.qs.mp.admin.domain.excel;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.qs.mp.common.annotation.Excel;
+import com.qs.mp.common.enums.GoodsStatusEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 商品导出类
+ * @author Cup
+ * @date 2022/6/26
+ */
+@ApiModel("商品导出类")
+@Data
+public class GoodsExcel {
+
+    @Excel(name = "商品ID")
+    private Long goodsId;
+
+    @Excel(name = "商品名称")
+    private String title;
+
+    @Excel(name = "一级分类")
+    private String parentCategoryName;
+
+    @Excel(name = "二级分类")
+    private String categoryName;
+
+    @Excel(name = "价格")
+    private BigDecimal value;
+
+    @Excel(name = "成本")
+    private BigDecimal cost;
+
+    @Excel(name = "是否支持兑换")
+    private String exchangeShow;
+
+    @Excel(name = "盲豆兑换数量")
+    private Integer exchangePrice;
+
+    @Excel(name = "销量")
+    private Integer exchangedQty;
+
+    @Excel(name = "库存")
+    private Integer quantity;
+
+    @Excel(name = "状态")
+    private String status;
+
+    @Excel(name = "商品编码")
+    private String goodsCode;
+
+    @Excel(name = "供应商")
+    private String supplierName;
+
+    @Excel(name = "商品采购链接")
+    private String shoppingLink;
+
+
+}

+ 67 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/vo/GoodsExportVO.java

@@ -0,0 +1,67 @@
+package com.qs.mp.admin.domain.vo;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.qs.mp.common.enums.GoodsStatusEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 商品导出出参类
+ * @author Cup
+ * @date 2022/6/26
+ */
+@ApiModel("商品导出出参类")
+@Data
+public class GoodsExportVO {
+
+    @ApiModelProperty("商品ID")
+    private Long goodsId;
+
+    @ApiModelProperty("商品名称")
+    private String title;
+
+    @ApiModelProperty("一级分类")
+    private String parentCategoryName;
+
+    @ApiModelProperty("二级分类")
+    private String categoryName;
+
+    @ApiModelProperty("价格")
+    private Integer value;
+
+    @ApiModelProperty("成本")
+    private Integer cost;
+
+    @ApiModelProperty("兑换大厅是否展示,0不展示,1展示")
+    private Integer exchangeShow;
+
+    @ApiModelProperty("盲豆兑换价格")
+    private Integer exchangePrice;
+
+    @ApiModelProperty("已经兑换的数量")
+    private Integer exchangedQty;
+
+    @ApiModelProperty("库存")
+    private Integer quantity;
+
+    @ApiModelProperty("上架状态;上架/下架")
+    @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
+    private GoodsStatusEnum status;
+
+    @ApiModelProperty("商品编码")
+    private String goodsCode;
+
+    @ApiModelProperty("供应商")
+    private String supplierName;
+
+    @ApiModelProperty("商品采购链接")
+    private String shoppingLink;
+
+
+
+
+}

+ 12 - 0
mp-service/src/main/java/com/qs/mp/admin/mapper/GoodsMapper.java

@@ -1,7 +1,13 @@
 package com.qs.mp.admin.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.qs.mp.admin.domain.Goods;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qs.mp.admin.domain.vo.GoodsExportVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * @auther quanshu
@@ -10,4 +16,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface GoodsMapper extends BaseMapper<Goods> {
 
+    /**
+     * 根据条件查询导出商品的数据
+     * @param queryWrapper
+     * @return
+     */
+    List<GoodsExportVO> listGoodsExportVOByQueryWrapper(@Param(Constants.WRAPPER) QueryWrapper<Goods> queryWrapper);
 }

+ 9 - 0
mp-service/src/main/java/com/qs/mp/admin/service/IGoodsService.java

@@ -1,10 +1,12 @@
 package com.qs.mp.admin.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qs.mp.admin.domain.Goods;
 import com.qs.mp.admin.domain.GoodsSku;
 import java.util.List;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qs.mp.admin.domain.vo.GoodsExportVO;
 
 /**
  * <p>
@@ -30,4 +32,11 @@ public interface IGoodsService extends IService<Goods> {
      * @param skuList
      */
     void updateGoods(Goods goods, List<GoodsSku> skuList, List<Long> tagIds);
+
+    /**
+     * 根据条件查询导出商品的数据
+     * @param queryWrapper
+     * @return
+     */
+    List<GoodsExportVO> listGoodsExportVOByQueryWrapper(QueryWrapper<Goods> queryWrapper);
 }

+ 7 - 0
mp-service/src/main/java/com/qs/mp/admin/service/impl/GoodsServiceImpl.java

@@ -1,8 +1,10 @@
 package com.qs.mp.admin.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qs.mp.admin.domain.Goods;
 import com.qs.mp.admin.domain.GoodsSku;
 import com.qs.mp.admin.domain.GoodsTagRel;
+import com.qs.mp.admin.domain.vo.GoodsExportVO;
 import com.qs.mp.admin.mapper.GoodsMapper;
 import com.qs.mp.admin.service.IGoodsService;
 import com.qs.mp.admin.service.IGoodsSkuService;
@@ -117,4 +119,9 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
 			}
 		}
 	}
+
+	@Override
+	public List<GoodsExportVO> listGoodsExportVOByQueryWrapper(QueryWrapper<Goods> queryWrapper) {
+		return getBaseMapper().listGoodsExportVOByQueryWrapper(queryWrapper);
+	}
 }

+ 24 - 0
mp-service/src/main/resources/mapper/admin/GoodsMapper.xml

@@ -30,4 +30,28 @@
         goods_id, title, category_id, pic_url, description, origin_price, exchange_price, value, cost, quantity, exchanged_qty, status, exchange_show, multi_sku, sku_prop, sort_weight, is_deleted, created_time, updated_time
     </sql>
 
+
+    <select id="listGoodsExportVOByQueryWrapper" resultType="com.qs.mp.admin.domain.vo.GoodsExportVO">
+        select t1.goods_id,
+               t1.title,
+               if(t3.name is not null, t2.name , null) as categoryName,
+               if(t3.name is not null, t3.name, t2.name) as parentCategoryName,
+               t1.value,
+               t1.cost,
+               t1.exchange_show,
+               t1.exchange_price,
+               t1.exchanged_qty,
+               t1.quantity,
+               t1.status,
+               t1.goods_code,
+               t4.name as supplierName,
+               t1.shopping_link
+        from mp_goods t1
+                 left join mp_goods_category t2 on t1.category_id = t2.category_id
+                 left join mp_goods_category t3 on t2.parent_id = t3.category_id
+                 left join mp_supplier t4 on t1.supplier_id = t4.id
+        ${ew.customSqlSegment}
+
+    </select>
+
 </mapper>