Ver código fonte

多支付方式展示

ltt 2 anos atrás
pai
commit
54ce04e5ab

+ 78 - 0
sckw-modules/sckw-product/src/main/java/com/sckw/product/controller/operation/GoodsManagerController.java

@@ -1,9 +1,87 @@
 package com.sckw.product.controller.operation;
 
+import com.sckw.core.exception.BusinessException;
+import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.web.response.HttpResult;
+import com.sckw.excel.utils.ExcelUtil;
+import com.sckw.product.model.GoodsListExport;
+import com.sckw.product.model.vo.req.ExportStatisticGoodsListParam;
+import com.sckw.product.model.vo.req.SelectGoodsListParam;
+import com.sckw.product.model.vo.req.SelectOperationGoodsListParam;
+import com.sckw.product.model.vo.req.StatisticGoodsListParam;
+import com.sckw.product.service.KwpGoodsService;
+import com.sckw.product.service.operation.GoodsManagerService;
+import com.sckw.product.service.KwpGoodsService;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.RequiredArgsConstructor;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
 /**
  * @desc: TODO
  * @author: yzc
  * @date: 2023-09-14 9:13
  */
+
+@RestController
+@RequestMapping(value = "/goodsManager")
+@RequiredArgsConstructor
 public class GoodsManagerController {
+
+    private final GoodsManagerService goodsManagerService;
+    private final KwpGoodsService kwpGoodsService;
+
+    /**
+     * @desc: 运营端分页查询商品
+     * @author: lt
+     * @date: 2023-09-14 09:43
+     * @Param param:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @PostMapping(value = "/select", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult select(@RequestBody SelectOperationGoodsListParam params) {
+        return HttpResult.ok(goodsManagerService.select(params));
+    }
+
+    /**
+     * @desc: 运营端商品详情
+     * @author: lt
+     * @date: 2023-09-14 09:43
+     * @Param param:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @GetMapping("/detail")
+    public HttpResult detail(@RequestParam Long id) {
+        return HttpResult.ok(goodsManagerService.getDetail(id));
+    }
+
+    /**
+     * @desc: 运营端商品数量统计
+     * @author: lt
+     * @date: 2023-09-14 09:43
+     * @Param param:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @PostMapping(value = "/statistic", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult statistic(@RequestBody SelectOperationGoodsListParam params) {
+        return HttpResult.ok(goodsManagerService.statistic(params));
+    }
+
+    /**
+     * @desc: 导出
+     * @author: lt
+     * @date: 2023-09-14 15:00
+     * @Param params:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @PostMapping(value = "/export", produces = MediaType.APPLICATION_JSON_VALUE)
+    public void export(@RequestBody ExportStatisticGoodsListParam params, HttpServletResponse response) {
+        List<GoodsListExport> list = goodsManagerService.export(params);
+        if (CollectionUtils.isEmpty(list)) {
+            throw new BusinessException("导出数据为空!");
+        }
+        ExcelUtil.downData(response, GoodsListExport.class, list);
+    }
 }

+ 31 - 0
sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/req/SelectOperationGoodsListParam.java

@@ -0,0 +1,31 @@
+package com.sckw.product.model.vo.req;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+/**
+ * @desc: 分页查询运营端商品列表请求参数
+ * @author: lt
+ * @date: 2023-09-14 14:01
+ */
+@Getter
+@Setter
+@ToString
+public class SelectOperationGoodsListParam extends StatisticGoodsListParam {
+
+    /**
+     * 当前页码
+     */
+    private int page = 1;
+    /**
+     * 每页数量
+     */
+    private int pageSize = 10;
+
+    /**
+     * 状态
+     */
+    private Integer status;
+
+}

+ 24 - 0
sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/res/OperationGoodsDetail.java

@@ -0,0 +1,24 @@
+package com.sckw.product.model.vo.res;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @desc: 商品详情响应
+ * @author: yzc
+ * @date: 2023-07-05 11:49
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class OperationGoodsDetail extends GoodsDetail{
+
+}

+ 346 - 0
sckw-modules/sckw-product/src/main/java/com/sckw/product/service/operation/GoodsManagerService.java

@@ -0,0 +1,346 @@
+package com.sckw.product.service.operation;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.sckw.core.common.enums.enums.DictEnum;
+import com.sckw.core.common.enums.enums.DictTypeEnum;
+import com.sckw.core.exception.BusinessException;
+import com.sckw.core.model.constant.Global;
+import com.sckw.core.model.page.PageResult;
+import com.sckw.core.model.vo.TableBottom;
+import com.sckw.core.model.vo.TableStatisticRes;
+import com.sckw.core.model.vo.TableTop;
+import com.sckw.core.utils.*;
+import com.sckw.excel.utils.DateUtil;
+import com.sckw.payment.api.dubbo.PayCenterDubboService;
+import com.sckw.product.dao.KwpGoodsMapper;
+import com.sckw.product.enums.GoodsStatusEnum;
+import com.sckw.product.model.*;
+import com.sckw.product.model.vo.req.*;
+import com.sckw.product.model.vo.res.*;
+import com.sckw.product.service.*;
+import com.sckw.system.api.RemoteSystemService;
+import com.sckw.system.api.RemoteUserService;
+import com.sckw.system.api.model.dto.res.EntCacheResDto;
+import com.sckw.system.api.model.dto.res.KwsUserResDto;
+import com.sckw.system.api.model.dto.res.SysDictResDto;
+import com.sckw.system.api.model.dto.res.UserCacheResDto;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.stream.function.StreamBridge;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+
+/**
+ * @desc: 商品service
+ * @author: yzc
+ * @date: 2023-06-25 14:47
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class GoodsManagerService {
+
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    private RemoteSystemService remoteSystemService;
+
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    private RemoteUserService remoteUserService;
+
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    private PayCenterDubboService payCenterDubboService;
+
+    private final KwpGoodsMapper kwpGoodsMapper;
+    private final KwpGoodsAddressService kwpGoodsAddressService;
+    private final KwpGoodsAttributeService kwpGoodsAttributeService;
+    private final KwpGoodsImageService kwpGoodsImageService;
+    private final KwpGoodsPriceRangeService kwpGoodsPriceRangeService;
+    private final StreamBridge streamBridge;
+
+    @Value("${goods.url.list}")
+    private String goodsListUrl;
+
+
+    public PageResult select(SelectOperationGoodsListParam params) {
+        LambdaQueryWrapper<KwpGoods> wrapper = buildWrapper(BeanUtils.copyProperties(params, ExportStatisticGoodsListParam.class));
+        Page<KwpGoods> page = new Page<>(params.getPage(), params.getPageSize());
+        IPage<KwpGoods> goodsIpage = kwpGoodsMapper.selectPage(page, wrapper);
+        List<KwpGoods> list = goodsIpage.getRecords();
+        if (CollectionUtils.isEmpty(list)) {
+            return PageResult.build(params.getPage(), params.getPageSize(), goodsIpage.getTotal(), Collections.emptyList());
+        }
+        List<GoodsList> result = buildGoodLists(list);
+        return PageResult.build(params.getPage(), params.getPageSize(), goodsIpage.getTotal(), result);
+    }
+
+
+    /**
+     * @desc: 构建查询条件
+     * @author: lt
+     * @date: 2023-09-14 10:14
+     * @Param list:
+     * @return: java.util.List<com.sckw.product.model.vo.res.GoodsList>
+     */
+    private LambdaQueryWrapper<KwpGoods> buildWrapper(ExportStatisticGoodsListParam params) {
+        LambdaQueryWrapper<KwpGoods> wrapper = new LambdaQueryWrapper<>();
+        if (StringUtils.isNotBlank(params.getIds())) {
+            List<Long> ids = StringUtils.splitStrToList(params.getIds(), ",", Long.class);
+            wrapper.in(KwpGoods::getId, ids);
+        } else {
+            if (Objects.nonNull(params.getEndCreateTime())) {
+                wrapper.ge(KwpGoods::getCreateTime, params.getStartCreateTime());
+            }
+            if (Objects.nonNull(params.getEndCreateTime())) {
+                wrapper.le(KwpGoods::getCreateTime, params.getEndCreateTime());
+            }
+            wrapper.eq(Objects.nonNull(params.getSupplyEntId()), KwpGoods::getSupplyEntId, params.getSupplyEntId())
+                    .eq(Objects.nonNull(params.getPrepaidLimit()), KwpGoods::getPrepaidLimit, params.getPrepaidLimit())
+                    .eq(Objects.nonNull(params.getStatus()), KwpGoods::getStatus, params.getStatus());
+            if (StringUtils.isNotBlank(params.getGoodsType()) && StringUtils.isNotBlank(params.getGoodsTypeValue())) {
+                List<SysDictResDto> goodsTypeList = remoteSystemService.queryDictBottom(params.getGoodsType(), params.getGoodsTypeValue());
+                if (CollectionUtils.isNotEmpty(goodsTypeList)) {
+                    List<String> goodsTypes = goodsTypeList.stream().map(SysDictResDto::getValue).toList();
+                    wrapper.in(KwpGoods::getGoodsType, goodsTypes);
+                }
+            }
+            String keywords = params.getKeywords();
+            if (StringUtils.isNotBlank(keywords)) {
+                //模糊匹配商品名称、仓储地址、客户经理
+                List<KwsUserResDto> managers = remoteUserService.getUserByName(keywords);
+                if (CollectionUtils.isEmpty(managers)) {
+                    wrapper.and(e -> e.like(KwpGoods::getName, keywords).or().like(KwpGoods::getAddressName, keywords));
+                } else {
+                    List<Long> managerIds = managers.stream().map(KwsUserResDto::getId).toList();
+                    wrapper.and(e -> e.like(KwpGoods::getName, keywords).or().like(KwpGoods::getAddressName, keywords)
+                            .or().in(KwpGoods::getManager, managerIds));
+                }
+            }
+        }
+        wrapper.eq(KwpGoods::getDelFlag, Global.NO).orderByDesc(KwpGoods::getCreateTime);
+        return wrapper;
+    }
+
+    /**
+     * @desc: 构建商品列表
+     * @author: lt
+     * @date: 2023-09-14 10:14
+     * @Param list:
+     * @return: java.util.List<com.sckw.product.model.vo.res.GoodsList>
+     */
+    private List<GoodsList> buildGoodLists(List<KwpGoods> list) {
+        List<GoodsList> result = new ArrayList<>(list.size());
+        List<Long> goodsIds = new ArrayList<>(list.size());
+        List<Long> supplyEntIds = new ArrayList<>(list.size());
+        List<Long> userIds = new ArrayList<>();
+        list.forEach(e -> {
+            goodsIds.add(e.getId());
+            if (Objects.nonNull(e.getSupplyEntId())) {
+                supplyEntIds.add(e.getSupplyEntId());
+            }
+            if (Objects.nonNull(e.getManager())) {
+                userIds.add(e.getManager());
+            }
+            if (Objects.nonNull(e.getCreateBy())) {
+                userIds.add(e.getCreateBy());
+            }
+        });
+        //地址信息
+        Map<Long, String> addressMap = kwpGoodsAddressService.getByGoodsIds(goodsIds).stream()
+                .collect(Collectors.toMap(KwpGoodsAddress::getGoodsId, KwpGoodsAddress::getName, (k1, k2) -> k1));
+        //价格梯度信息
+        Map<Long, List<KwpGoodsPriceRange>> priceRangeMap = kwpGoodsPriceRangeService.getByGoodsIds(goodsIds).stream()
+                .collect(Collectors.groupingBy(KwpGoodsPriceRange::getGoodsId));
+        //用户信息
+        Map<Long, UserCacheResDto> userMap = remoteSystemService.queryUserCacheMapByIds(userIds);
+        //供应企业信息
+        List<EntCacheResDto> entList = new ArrayList<>();
+        if (CollectionUtils.isNotEmpty(supplyEntIds)) {
+            entList = remoteSystemService.queryEntCacheByIds(supplyEntIds);
+        }
+        Map<Long, String> entMap = entList.stream().collect(Collectors.toMap(EntCacheResDto::getId, EntCacheResDto::getFirmName, (k1, k2) -> k1));
+        list.forEach(e -> {
+            Long id = e.getId();
+            GoodsList goodsList = BeanUtils.copyProperties(e, GoodsList.class);
+            UserCacheResDto manager = userMap.get(e.getManager());
+            UserCacheResDto createUser = userMap.get(e.getCreateBy());
+            goodsList.setStatusLabel(DictEnum.getLabel(DictTypeEnum.GOODS_STATUS.getType(), String.valueOf(goodsList.getStatus())))
+                    .setGoodsTypeLabel(DictEnum.getLabel(DictTypeEnum.PRODUCT_NAME_TYPE.getType(), goodsList.getGoodsType()))
+                    .setUnitLabel(DictEnum.getLabel(DictTypeEnum.UNIT_TYPE.getType(), goodsList.getUnit()))
+                    .setTaxRateLabel(DictEnum.getLabel(DictTypeEnum.TAX_RATE.getType(), goodsList.getTaxRate()))
+                    .setPrepaidLimitLabel(Objects.equals(e.getPrepaidLimit(), 1) ? "是" : "否")
+                    .setAddress(addressMap.get(id)).setSupplyEnt(entMap.get(e.getSupplyEntId()))
+                    .setManageName(Objects.nonNull(manager) ? manager.getName() : null)
+                    .setPhone(Objects.nonNull(manager) ? manager.getPhone() : null)
+                    .setCreateByName(Objects.nonNull(createUser) ? createUser.getName() : null);
+            List<KwpGoodsPriceRange> priceRanges = priceRangeMap.get(id);
+            if (CollectionUtils.isNotEmpty(priceRanges)) {
+                goodsList.setHighestPrice(priceRanges.get(priceRanges.size() - 1).getPrice()).setLowestPrice(priceRanges.get(0).getPrice());
+            }
+            result.add(goodsList);
+        });
+        return result;
+    }
+
+
+
+    /**
+     * @desc: 获取商品详情
+     * @author: lt
+     * @date: 2023-09-14 14:28
+     * @Param id:
+     * @return: com.sckw.product.model.vo.res.GoodsDetail
+     */
+    public OperationGoodsDetail getDetail(Long id) {
+        OperationGoodsDetail detail = detail(id);
+        LambdaQueryWrapper<KwpGoods> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwpGoods::getGoodsType, detail.getGoodsType()).eq(KwpGoods::getStatus, GoodsStatusEnum.PUT_ON_SHELVES.getCode())
+                .eq(KwpGoods::getDelFlag, Global.NO).ne(KwpGoods::getId, id).last("LIMIT 4");
+        List<KwpGoods> list = kwpGoodsMapper.selectList(wrapper);
+        if (CollectionUtils.isEmpty(list)) {
+            return detail;
+        }
+        List<Long> goodsIds = list.stream().map(KwpGoods::getId).toList();
+        Map<Long, List<KwpGoodsPriceRange>> map = kwpGoodsPriceRangeService.getByGoodsIds(goodsIds).stream()
+                .collect(Collectors.groupingBy(KwpGoodsPriceRange::getGoodsId));
+        List<RecommendGoods> recommendGoodsList = new ArrayList<>();
+        list.forEach(e -> {
+            RecommendGoods recommendGoods = BeanUtils.copyProperties(e, RecommendGoods.class);
+            List<KwpGoodsPriceRange> prices = map.get(recommendGoods.getId());
+            recommendGoods.setUnitLabel(DictEnum.getLabel(DictTypeEnum.UNIT_TYPE.getType(), recommendGoods.getUnit()))
+                    .setPrice(CollectionUtils.isNotEmpty(prices) ? prices.get(0).getPrice() : null);
+            recommendGoodsList.add(recommendGoods);
+        });
+        detail.setRecommendGoodsList(recommendGoodsList);
+        return detail;
+    }
+
+    /**
+     * @desc: 获取商品详情
+     * @author: lt
+     * @date: 2023-09-14 14:20
+     * @Param id:
+     * @return: com.sckw.product.model.vo.res.GoodsDetail
+     */
+    public OperationGoodsDetail detail(Long id) {
+        KwpGoods goods = kwpGoodsMapper.selectById(id);
+        if (Objects.isNull(goods)) {
+            throw new BusinessException("当前商品不存在!");
+        }
+        OperationGoodsDetail detail = BeanUtils.copyProperties(goods, OperationGoodsDetail.class);
+        Map<Long, EntCacheResDto> entMap = remoteSystemService.queryEntCacheMapByIds(Arrays.asList(detail.getEntId(), detail.getSupplyEntId()));
+        EntCacheResDto ent = entMap.get(detail.getEntId());
+        if (Objects.nonNull(ent)) {
+            detail.setEnt(ent.getFirmName()).setEntHead(ent.getHead())
+                    .setEntBusiness(ent.getBusiness()).setEntAddress(ent.getCityName());
+        }
+        EntCacheResDto supplyEnt = entMap.get(detail.getSupplyEntId());
+        if (Objects.nonNull(supplyEnt)) {
+            detail.setSupplyEnt(supplyEnt.getFirmName());
+        }
+        UserCacheResDto managerInfo = remoteSystemService.queryUserCacheById(detail.getManager());
+        if (Objects.nonNull(managerInfo)) {
+            detail.setManagerName(managerInfo.getName()).setManagerPhone(managerInfo.getPhone());
+        }
+        detail.setGoodsTypeLabel(DictEnum.getLabel(DictTypeEnum.PRODUCT_NAME_TYPE.getType(), detail.getGoodsType()))
+                .setUnitLabel(DictEnum.getLabel(DictTypeEnum.UNIT_TYPE.getType(), detail.getUnit()))
+                .setTaxRateLabel(DictEnum.getLabel(DictTypeEnum.TAX_RATE.getType(), detail.getTaxRate()))
+                .setStatusLabel(DictEnum.getLabel(DictTypeEnum.GOODS_STATUS.getType(), String.valueOf(detail.getStatus())))
+                .setPrepaidLimitLabel(Objects.equals(detail.getPrepaidLimit(), 1) ? "是" : "否");
+        //商品图片信息
+        List<KwpGoodsImage> goodsImages = kwpGoodsImageService.getByGoodsId(id);
+        List<GoodsImagesDetail> images = BeanUtils.copyToList(goodsImages, GoodsImagesDetail.class);
+        //商品价格段信息
+        List<KwpGoodsPriceRange> priceRanges = kwpGoodsPriceRangeService.getByGoodsId(id);
+        List<GoodsPriceRangesDetail> ranges = BeanUtils.copyToList(priceRanges, GoodsPriceRangesDetail.class);
+        ranges.stream().filter(r -> r.getEndAmount().compareTo(new BigDecimal("-1.00")) == 0)
+                .forEach(r -> {
+                    r.setEndAmountLabel("不限");
+                });
+        //商品属性信息
+        List<KwpGoodsAttribute> attributesList = kwpGoodsAttributeService.getByGoodsId(id);
+        List<GoodsAttributesDetail> attributes = BeanUtils.copyToList(attributesList, GoodsAttributesDetail.class);
+        //商品地址信息
+        KwpGoodsAddress goodsAddress = kwpGoodsAddressService.getByGoodsId(id);
+        AddressInfoDetail addressInfo = BeanUtils.copyProperties(goodsAddress, AddressInfoDetail.class);
+        if (Objects.nonNull(addressInfo)) {
+            addressInfo.setTypeName(DictEnum.getLabel(DictTypeEnum.ADDRESS_TYPE.getType(), addressInfo.getType()));
+        }
+        detail.setImages(images).setPriceRanges(ranges).setAttributes(attributes).setAddressInfo(addressInfo);
+
+        return detail;
+    }
+
+    /**
+     * @desc: 统计查询
+     * @author: lt
+     * @date: 2023-09-14 14:44
+     * @Param params:
+     * @return: com.sckw.core.model.vo.TableStatisticRes
+     */
+    public TableStatisticRes statistic(SelectOperationGoodsListParam params) {
+        TableStatisticRes res = new TableStatisticRes();
+        LambdaQueryWrapper<KwpGoods> wrapper = buildWrapper(BeanUtils.copyProperties(params, ExportStatisticGoodsListParam.class));
+        List<KwpGoods> goodsList = kwpGoodsMapper.selectList(wrapper);
+        Map<Integer, List<KwpGoods>> map = goodsList.stream().collect(Collectors.groupingBy(KwpGoods::getStatus));
+        List<TableTop> tableTops = new ArrayList<>();
+        TableTop all = new TableTop();
+        all.setName("全部").setTotal(CollectionUtils.isEmpty(goodsList) ? 0 : goodsList.size());
+        tableTops.add(all);
+        GoodsStatusEnum.getSortList().forEach(e -> {
+            List<KwpGoods> list = map.get(e.getCode());
+            int total = CollectionUtils.isEmpty(list) ? 0 : list.size();
+            TableTop tableTop = new TableTop();
+            tableTop.setName(e.getMsg()).setValue(e.getCode()).setTotal(total);
+            tableTops.add(tableTop);
+        });
+        TableBottom tableBottom = new TableBottom();
+        tableBottom.setTotal(CollectionUtils.isEmpty(goodsList) ? 0 : goodsList.size());
+        res.setTableTops(tableTops).setTableBottom(tableBottom);
+        return res;
+    }
+
+    /**
+     * @desc: 导出
+     * @author: yzc
+     * @date: 2023-07-06 9:07
+     * @Param params:
+     * @return: void
+     */
+    public List<GoodsListExport> export(ExportStatisticGoodsListParam params) {
+        LambdaQueryWrapper<KwpGoods> wrapper = buildWrapper(params);
+        List<KwpGoods> list = kwpGoodsMapper.selectList(wrapper);
+        List<GoodsList> goodsLists = buildGoodLists(list);
+        if (CollectionUtils.isEmpty(goodsLists)) {
+            return Collections.emptyList();
+        }
+        List<GoodsListExport> result = new ArrayList<>();
+        AtomicInteger i = new AtomicInteger(1);
+        goodsLists.forEach(e -> {
+            GoodsListExport export = BeanUtils.copyProperties(e, GoodsListExport.class);
+            export.setSerialNumber(String.valueOf(i.getAndIncrement()))
+                    .setAmount(Objects.isNull(e.getAmount()) ? null : String.valueOf(e.getAmount()))
+                    .setHighestPrice(Objects.isNull(e.getHighestPrice()) ? null : String.valueOf(e.getHighestPrice()))
+                    .setLowestPrice(Objects.isNull(e.getLowestPrice()) ? null : String.valueOf(e.getLowestPrice()))
+                    .setAddedTime(Objects.isNull(e.getAddedTime()) ? null : DateUtil.getDateTime(e.getAddedTime()))
+                    .setShelfTime(Objects.isNull(e.getShelfTime()) ? null : DateUtil.getDateTime(e.getShelfTime()))
+                    .setCreateTime(Objects.isNull(e.getCreateTime()) ? null : DateUtil.getDateTime(e.getCreateTime()));
+            result.add(export);
+        });
+        return result;
+    }
+
+
+
+
+
+
+
+
+}