浏览代码

商城修改

刘俊驰 1 年之前
父节点
当前提交
3547547e6a

+ 8 - 0
mec-mall/mall-common/pom.xml

@@ -74,6 +74,14 @@
             </exclusions>
         </dependency>
 
+
+        <!--        快递100-->
+        <dependency>
+            <groupId>com.github.kuaidi100-api</groupId>
+            <artifactId>sdk</artifactId>
+            <version>1.0.10</version>
+        </dependency>
+
         <dependency>
             <groupId>com.ym</groupId>
             <artifactId>mec-auth-api</artifactId>

+ 150 - 0
mec-mall/mall-common/src/main/java/com/yonge/cooleshow/mall/common/courier/domain/CourierInfo.java

@@ -0,0 +1,150 @@
+package com.yonge.cooleshow.mall.common.courier.domain;
+
+import com.yonge.cooleshow.mall.common.courier.enums.CompanyEnum;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Description 快递运输信息
+ *
+ * @author liujunchi
+ * @date 2022-10-26
+ */
+public class CourierInfo {
+
+    // 快递公司
+    private CompanyEnum company;
+
+    // 快递单号
+    private String courierNo;
+
+    // 物流信息
+    private List<Logistics> logisticsList;
+
+    public  static class Logistics {
+        // 时间
+        private Date time;
+
+        //内容
+        private String context;
+
+
+        //行政区域的编码
+        private String areaCode;
+
+        //行政区域的名称
+        private String areaName;
+
+        //物流状态名称或者高级状态名称
+        private String status;
+
+        //快件当前地点
+        private String location;
+
+        //行政区域经纬度
+        private String areaCenter;
+
+        //行政区域拼音
+        private String areaPinYin;
+
+        //高级物流状态值
+        private String statusCode;
+
+        public Date getTime() {
+            return time;
+        }
+
+        public void setTime(Date time) {
+            this.time = time;
+        }
+
+        public String getContext() {
+            return context;
+        }
+
+        public void setContext(String context) {
+            this.context = context;
+        }
+
+        public String getAreaCode() {
+            return areaCode;
+        }
+
+        public void setAreaCode(String areaCode) {
+            this.areaCode = areaCode;
+        }
+
+        public String getAreaName() {
+            return areaName;
+        }
+
+        public void setAreaName(String areaName) {
+            this.areaName = areaName;
+        }
+
+        public String getStatus() {
+            return status;
+        }
+
+        public void setStatus(String status) {
+            this.status = status;
+        }
+
+        public String getLocation() {
+            return location;
+        }
+
+        public void setLocation(String location) {
+            this.location = location;
+        }
+
+        public String getAreaCenter() {
+            return areaCenter;
+        }
+
+        public void setAreaCenter(String areaCenter) {
+            this.areaCenter = areaCenter;
+        }
+
+        public String getAreaPinYin() {
+            return areaPinYin;
+        }
+
+        public void setAreaPinYin(String areaPinYin) {
+            this.areaPinYin = areaPinYin;
+        }
+
+        public String getStatusCode() {
+            return statusCode;
+        }
+
+        public void setStatusCode(String statusCode) {
+            this.statusCode = statusCode;
+        }
+    }
+
+    public CompanyEnum getCompany() {
+        return company;
+    }
+
+    public void setCompany(CompanyEnum company) {
+        this.company = company;
+    }
+
+    public String getCourierNo() {
+        return courierNo;
+    }
+
+    public void setCourierNo(String courierNo) {
+        this.courierNo = courierNo;
+    }
+
+    public List<Logistics> getLogisticsList() {
+        return logisticsList;
+    }
+
+    public void setLogisticsList(List<Logistics> logisticsList) {
+        this.logisticsList = logisticsList;
+    }
+}

+ 61 - 0
mec-mall/mall-common/src/main/java/com/yonge/cooleshow/mall/common/courier/enums/CompanyEnum.java

@@ -0,0 +1,61 @@
+package com.yonge.cooleshow.mall.common.courier.enums;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-10-26
+ */
+public enum CompanyEnum {
+
+    SHUNFENG("shunfeng","顺丰快递"),
+    ZHONGTONG("zhongtong","中通快递"),
+    YUANTONG("yuantong","圆通快递"),
+    HUITONGKUAIDI("huitongkuaidi","汇通"),
+    SHENTONG("shentong","申通"),
+    YUNDA("yunda","韵达快递"),
+    EMS("ems","ems"),
+    JD("jd","京东"),
+    ZHAIJISONG("zhaijisong","宅急送"),
+    DEBANGKUAIDI("debangkuaidi","德邦快递"),
+    ;
+
+
+    // 快递100对应编号
+    private String code;
+
+    // 公司描述
+    private String desc;
+
+    CompanyEnum(String code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public static CompanyEnum codeOf(String s) {
+        for (CompanyEnum value : CompanyEnum.values()) {
+            if (value.getCode().equals(s)) {
+                return value;
+            }
+        }
+        return null;
+    }
+
+
+    public static CompanyEnum descOf(String s) {
+        for (CompanyEnum value : CompanyEnum.values()) {
+            if (value.getDesc().equals(s)) {
+                return value;
+            }
+        }
+        return null;
+    }
+}

+ 7 - 0
mec-mall/mall-common/src/main/java/com/yonge/cooleshow/mall/common/courier/package-info.java

@@ -0,0 +1,7 @@
+/**
+ * Description 快递
+ *
+ * @author: feng-ji
+ * @date: 2022-10-26
+ */
+package com.yonge.cooleshow.mall.common.courier;

+ 40 - 0
mec-mall/mall-common/src/main/java/com/yonge/cooleshow/mall/common/courier/service/CourierService.java

@@ -0,0 +1,40 @@
+package com.yonge.cooleshow.mall.common.courier.service;
+
+import com.yonge.cooleshow.mall.common.courier.domain.CourierInfo;
+import com.yonge.cooleshow.mall.common.courier.enums.CompanyEnum;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-10-26
+ */
+public interface CourierService {
+
+
+    /**
+     * 查询快递信息
+     *
+     * @param company 快递公司
+     * @param courierNo 快递编号
+     */
+    CourierInfo queryTrack(CompanyEnum company,String courierNo);
+
+
+    /**
+     * 回调返回数据转 快递信息
+     *
+     * @param body
+     * @return
+     */
+    CourierInfo getCourierInfos(String body);
+
+    /**
+     * 快递信息订阅
+     *
+     * @param company 快递公司编号
+     * @param courierNo 快递单号
+     * @param url 回调地址
+     */
+    boolean subscribe(CompanyEnum company,String courierNo,String url) throws Exception;
+}

+ 144 - 0
mec-mall/mall-common/src/main/java/com/yonge/cooleshow/mall/common/courier/service/impl/Courier100ServiceImpl.java

@@ -0,0 +1,144 @@
+package com.yonge.cooleshow.mall.common.courier.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.Gson;
+import com.kuaidi100.sdk.api.QueryTrack;
+import com.kuaidi100.sdk.api.Subscribe;
+import com.kuaidi100.sdk.contant.ApiInfoConstant;
+import com.kuaidi100.sdk.contant.CompanyConstant;
+import com.kuaidi100.sdk.core.IBaseClient;
+import com.kuaidi100.sdk.pojo.HttpResult;
+import com.kuaidi100.sdk.request.*;
+import com.kuaidi100.sdk.utils.SignUtils;
+import com.yonge.cooleshow.mall.common.courier.domain.CourierInfo;
+import com.yonge.cooleshow.mall.common.courier.enums.CompanyEnum;
+import com.yonge.cooleshow.mall.common.courier.service.CourierService;
+import com.yonge.cooleshow.mall.common.exception.ApiException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-10-26
+ */
+@Service("Courier100Service")
+public class Courier100ServiceImpl implements CourierService {
+
+    private static final Logger LOG = LoggerFactory.getLogger(Courier100ServiceImpl.class);
+
+    @Value("${courier.courier100.key:jvpXSAFN9687}")
+    private String key;
+
+    @Value("${courier.courier100.customer:B6E26D57F060E7D9C87032AF7F000046}")
+    private String customer;
+
+
+    @Override
+    public CourierInfo queryTrack(CompanyEnum company, String courierNo) {
+        QueryTrackReq queryTrackReq = new QueryTrackReq();
+        QueryTrackParam queryTrackParam = new QueryTrackParam();
+
+        queryTrackParam.setCom(getCompanyConstant(company));
+        queryTrackParam.setNum(courierNo);
+        queryTrackParam.setResultv2("4");
+        String param = new Gson().toJson(queryTrackParam);
+
+        queryTrackReq.setParam(param);
+        queryTrackReq.setCustomer(customer);
+        queryTrackReq.setSign(SignUtils.querySign(param , key, customer));
+
+        IBaseClient baseClient = new QueryTrack();
+        try {
+            LOG.debug("查询快递参数: {}",queryTrackParam);
+            HttpResult execute = baseClient.execute(queryTrackReq);
+            LOG.info("查询快递信息参数: {}",execute);
+            if (execute.getStatus() != 200) {
+                throw new ApiException(execute.getError());
+            }
+            String body = execute.getBody();
+            return getCourierInfos(body);
+        } catch (Exception e) {
+            LOG.error("查询快递信息异常: ",e);
+            throw new ApiException(e.getMessage());
+        }
+    }
+
+    @Override
+    public CourierInfo getCourierInfos(String body) {
+        JSONObject jsonObject = JSON.parseObject(body);
+        if (!"200".equals(jsonObject.getString("status"))) {
+            throw new ApiException(jsonObject.getString("message"));
+        }
+        CourierInfo courierInfo = new CourierInfo();
+        List<CourierInfo.Logistics> data = JSON.parseArray(jsonObject.getString("data"), CourierInfo.Logistics.class);
+
+        courierInfo.setLogisticsList(data);
+        courierInfo.setCourierNo(jsonObject.getString("nu"));
+        courierInfo.setCompany(CompanyEnum.codeOf(jsonObject.getString("com")));
+        return courierInfo;
+    }
+
+    @Override
+    public boolean subscribe(CompanyEnum company, String courierNo, String url) {
+        SubscribeParameters subscribeParameters = new SubscribeParameters();
+        subscribeParameters.setCallbackurl(url);
+        subscribeParameters.setResultv2("4");
+
+        SubscribeParam subscribeParam = new SubscribeParam();
+        subscribeParam.setParameters(subscribeParameters);
+
+        subscribeParam.setCompany(getCompanyConstant(company));
+        subscribeParam.setNumber(courierNo);
+        subscribeParam.setKey(key);
+
+        SubscribeReq subscribeReq = new SubscribeReq();
+        subscribeReq.setSchema(ApiInfoConstant.SUBSCRIBE_SCHEMA);
+        subscribeReq.setParam(new Gson().toJson(subscribeParam));
+
+        IBaseClient subscribe = new Subscribe();
+        try {
+            LOG.debug("快递信息订阅参数: {}",subscribeReq);
+            HttpResult execute = subscribe.execute(subscribeReq);
+            LOG.info("快递信息订阅返回参数: {}",execute);
+            if (execute.getStatus() != 200) {
+                throw new ApiException(execute.getError());
+            }
+            JSONObject jsonObject = JSON.parseObject(execute.getBody());
+            if (!"200".equals(jsonObject.getString("returnCode"))) {
+                throw new ApiException(jsonObject.getString("message"));
+            }
+            return true;
+        } catch (Exception e) {
+            LOG.error("快递信息订阅异常: ",e);
+            throw new ApiException(e.getMessage());
+        }
+    }
+
+    private String getCompanyConstant(CompanyEnum companyEnum) {
+        switch (companyEnum) {
+            case JD: return CompanyConstant.JD;
+            case EMS: return CompanyConstant.EMS;
+            case YUNDA: return CompanyConstant.YD;
+            case SHENTONG: return CompanyConstant.ST;
+            case SHUNFENG: return CompanyConstant.SF;
+            case YUANTONG: return CompanyConstant.YT;
+            case ZHONGTONG: return CompanyConstant.ZT;
+            case ZHAIJISONG: return CompanyConstant.ZJS;
+            case DEBANGKUAIDI: return CompanyConstant.DB;
+            case HUITONGKUAIDI: return CompanyConstant.HT;
+            default: return null;
+        }
+    }
+
+    public static void main(String[] args) {
+        Courier100ServiceImpl courier100Service = new Courier100ServiceImpl();
+        courier100Service.queryTrack(CompanyEnum.DEBANGKUAIDI,"75606690482924");
+    }
+}

+ 92 - 20
mec-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/open/OpenShareController.java

@@ -1,7 +1,17 @@
 package com.yonge.cooleshow.portal.controller.open;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.api.R;
+import com.baomidou.mybatisplus.extension.enums.ApiErrorCode;
 import com.ym.mec.common.controller.BaseController;
+import com.yonge.cooleshow.mall.common.api.CommonPage;
 import com.yonge.cooleshow.mall.common.api.CommonResult;
+import com.yonge.cooleshow.mbg.model.PmsProduct;
+import com.yonge.cooleshow.portal.domain.OmsOrderDetail;
+import com.yonge.cooleshow.portal.domain.PmsPortalProductDetail;
+import com.yonge.cooleshow.portal.dto.ProductSearch;
+import com.yonge.cooleshow.portal.dto.ProductSearchConditionVo;
 import com.yonge.cooleshow.portal.dto.StockOperateModel;
 import com.yonge.cooleshow.portal.service.OmsPortalOrderService;
 import com.yonge.cooleshow.portal.service.PmsPortalProductService;
@@ -10,9 +20,12 @@ import io.swagger.annotations.ApiOperation;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 @RestController
 @RequestMapping("/open")
@@ -26,26 +39,6 @@ public class OpenShareController extends BaseController {
     @Autowired
     private OmsPortalOrderService portalOrderService;
 
-
-    // @ApiOperation(value = "老师商品分享分润")
-    // @PostMapping(value="/productProfit")
-    // @ResponseBody
-    // public CommonResult<ShareProductVo> shareProductProfit(@RequestBody ShareProfitParam param) {
-    //     SysUser sysUser = sysUserFeignService.queryUserById(param.getUserId());
-    //     if (sysUser == null  || sysUser.getId() == null) {
-    //         return CommonResult.failed("用户信息获取失败");
-    //     }
-    //     HttpResponseResult<String> client = sysUserFeignService.client();
-    //     if (client.getStatus()) {
-    //         if (!StringUtil.isEmpty(client.getData()) && "teacher".equals(client.getData())) {
-    //             return CommonResult.success(portalProductService.shareProductProfit(sysUser, param.getBizId()));
-    //         }
-    //     } else {
-    //         return CommonResult.success(portalProductService.shareProductProfit(sysUser, param.getBizId()));
-    //     }
-    //     return CommonResult.failed("分享功能暂未开放");
-    // }
-
     @ApiOperation(value = "同步库存")
     @PostMapping(value="/updateStock/{stockType}")
     @ResponseBody
@@ -55,5 +48,84 @@ public class OpenShareController extends BaseController {
         return CommonResult.success("");
     }
 
+    @ApiOperation(value = "综合搜索、筛选、排序")
+    @RequestMapping(value = "/product/search", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult<CommonPage<PmsProduct>> search(@RequestBody ProductSearch search) {
+        List<PmsProduct> productList = portalProductService.search(search.getKeyword(),search.getBrandId(),search.getProductCategoryId(),
+            search.getProductAttributeCategoryId(), search.getPageNum(), search.getPageSize(), search.getSort());
+        return CommonResult.success(CommonPage.restPage(productList));
+    }
+
+    @ApiOperation("获取商品列表下拉条件")
+    @RequestMapping(value = "/search/condition", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<ProductSearchConditionVo> searchCondition() {
+        ProductSearchConditionVo list = portalProductService.searchCondition();
+        return CommonResult.success(list);
+    }
+
+    @ApiOperation("获取前台商品详情")
+    @RequestMapping(value = "/product/detail/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<PmsPortalProductDetail> detail(@PathVariable Long id) {
+        PmsPortalProductDetail productDetail = portalProductService.detail(id);
+        return CommonResult.success(productDetail);
+    }
+
+    @PostMapping(value = "/product/queryNameMap", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
+    public CommonResult<Map<Long,String>> queryNameMap(@RequestBody List<Long> goodsIds) {
+        return CommonResult.success(portalProductService.queryNameMap(goodsIds));
+
+    }
+
+
+    /**
+     * 商品库存查询
+     * @param goodsSkuId 商品存储Id
+     * @return String
+     */
+    @GetMapping(value = "/product/stocks/{id}", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
+    public R<Integer> productStocks(@PathVariable(name = "id") Long goodsSkuId) {
+        log.info("商品库存查询 skuId:{}",goodsSkuId);
+        return R.ok(portalProductService.getStockBySkuId(goodsSkuId));
 
+    }
+
+
+    /**
+     * 查询商品订单状态
+     * @param orderNo 订单编号
+     * @return String
+     */
+    @GetMapping(value = "/product/orderStatus/{id}", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
+    public R<Boolean> productOrderStatus(@PathVariable(name = "id") String orderNo){
+        log.info("查询商品订单状态:{}",orderNo);
+        OmsOrderDetail detail = portalOrderService.detail(orderNo);
+
+        return R.restResult(detail.getStatus().equals(1), ApiErrorCode.SUCCESS);
+    }
+
+
+
+
+    @ApiOperation(value = "快递信息回调")
+    @PostMapping(value="/courierCallback", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
+    @ResponseBody
+    public Object courierCallback( String param) {
+        log.info("快递信息回调:{}",param);
+
+        JSONObject jsonObject = JSON.parseObject(param);
+        String data = jsonObject.getString("lastResult");
+        CourierInfo courierInfos = courierService.getCourierInfos(data);
+
+        // 保存快递信息
+        orderCourierService.updateCourierInfo(courierInfos);
+        Map<String,Object> result = new HashMap<>();
+        result.put("result",true);
+        result.put("returnCode","200");
+        result.put("message","成功");
+
+        return result;
+    }
 }

+ 17 - 0
mec-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/PmsPortalProductService.java

@@ -10,6 +10,7 @@ import com.yonge.cooleshow.portal.dto.ShareProductVo;
 import com.yonge.cooleshow.portal.dto.StockOperateModel;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 前台商品管理Service
@@ -57,4 +58,20 @@ public interface PmsPortalProductService {
      * @param stockType
      */
     void reduceStock(List<StockOperateModel> model, String stockType);
+
+    /**
+     * 获取商品sku库存
+     *
+     * @param goodsSkuId 商品skuId
+     */
+    Integer getStockBySkuId(Long goodsSkuId);
+
+
+    /**
+     * 商品编号名称
+     *
+     * @param goodsIds
+     * @return
+     */
+    Map<Long,String> queryNameMap(List<Long> goodsIds);
 }

+ 42 - 6
mec-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/PmsPortalProductServiceImpl.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.portal.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
+import com.beust.jcommander.internal.Lists;
 import com.github.pagehelper.PageHelper;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.yonge.cooleshow.mall.common.exception.Asserts;
@@ -117,12 +118,7 @@ public class PmsPortalProductServiceImpl implements PmsPortalProductService {
         // 从进货清单中 获取剩余库存数量
         List<Long> productIds = skuStocks.stream().map(PmsSkuStock::getProductId).distinct().collect(Collectors.toList());
 
-        // 计算库存数据
-        List<PmsSkuStockDto.PmsSkuStockStock> skuStockStocks = skuStockMapper.getSkuStockByProductIds(productIds);
-
-        // Convert to map
-        Map<Long, Map<Long, List<PmsSkuStockDto.PmsSkuStockStock>>> map = skuStockStocks.stream()
-            .collect(Collectors.groupingBy(PmsSkuStockDto.PmsSkuStockStock::getProductId, Collectors.groupingBy(PmsSkuStockDto.PmsSkuStockStock::getId)));
+        Map<Long, Map<Long, List<PmsSkuStockDto.PmsSkuStockStock>>> map = getProductStock(productIds);
 
         // Merge
         for (PmsSkuStock skuStock : skuStocks) {
@@ -145,6 +141,16 @@ public class PmsPortalProductServiceImpl implements PmsPortalProductService {
         return skuStocks;
     }
 
+    private Map<Long, Map<Long, List<PmsSkuStockDto.PmsSkuStockStock>>> getProductStock(List<Long> productIds) {
+        // 计算库存数据
+        List<PmsSkuStockDto.PmsSkuStockStock> skuStockStocks = skuStockMapper.getSkuStockByProductIds(productIds);
+
+        // Convert to map
+        Map<Long, Map<Long, List<PmsSkuStockDto.PmsSkuStockStock>>> map = skuStockStocks.stream()
+            .collect(Collectors.groupingBy(PmsSkuStockDto.PmsSkuStockStock::getProductId, Collectors.groupingBy(PmsSkuStockDto.PmsSkuStockStock::getId)));
+        return map;
+    }
+
     @Override
     public List<PmsProduct> updateProductStock(List<PmsProduct> pmsProducts) {
         if (CollectionUtils.isEmpty(pmsProducts)) {
@@ -345,6 +351,26 @@ public class PmsPortalProductServiceImpl implements PmsPortalProductService {
 
     }
 
+    @Override
+    public Integer getStockBySkuId(Long goodsSkuId) {
+        PmsSkuStock pmsSkuStock = skuStockMapper.selectByPrimaryKey(goodsSkuId);
+        if (pmsSkuStock == null) {
+            return 0;
+        }
+
+        Map<Long, Map<Long, List<PmsSkuStockDto.PmsSkuStockStock>>> productStock = getProductStock(Lists.newArrayList(pmsSkuStock.getProductId()));
+
+        Map<Long, List<PmsSkuStockDto.PmsSkuStockStock>> skuStockStock = productStock.get(pmsSkuStock.getProductId());
+        if (skuStockStock == null) {
+            return 0;
+        }
+        List<PmsSkuStockDto.PmsSkuStockStock> pmsSkuStockStocks = skuStockStock.get(pmsSkuStock.getId());
+        if (CollectionUtils.isEmpty(pmsSkuStockStocks)) {
+            return 0;
+        }
+        return pmsSkuStockStocks.stream().mapToInt(item -> item.getInternalStock() + item.getTaxStock()).sum();
+    }
+
 
     private  List<PmsProductAttributeCategory>  getHomeProductAttributeCategory() {
         PmsProductAttributeCategoryExample example = new PmsProductAttributeCategoryExample();
@@ -409,4 +435,14 @@ public class PmsPortalProductServiceImpl implements PmsPortalProductService {
         node.setChildren(children);
         return node;
     }
+
+
+    @Override
+    public Map<Long, String> queryNameMap(List<Long> goodsIds) {
+        PmsProductExample example = new PmsProductExample();
+        PmsProductExample.Criteria criteria = example.createCriteria();
+        criteria.andIdIn(goodsIds);
+        List<PmsProduct> goodsList = productMapper.selectByExample(example);
+        return goodsList.stream().collect(Collectors.toMap(PmsProduct::getId, PmsProduct::getName));
+    }
 }