2a7b0a64b14b22ec45f8a0f6e4764bc3cd16919c..62efa4e6c0977bf3b216c59e545a102f0af77d65
2025-10-30 peng
调整排序
62efa4 对比 | 目录
2025-10-30 peng
调整排序
f36b7e 对比 | 目录
2025-10-29 peng
调整
0c9521 对比 | 目录
12个文件已修改
1个文件已添加
558 ■■■■ 已修改文件
framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java 261 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/member/entity/dto/UpdateTracesDTO.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/statistics/mapper/PlatformViewMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/statistics/serviceimpl/PlatformViewServiceImpl.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/store/entity/dto/BillSearchParams.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/resources/mapper/lmk/GoodsCustomizeTemplateMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/resources/mapper/lmk/VideoMapper.xml 137 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/resources/mapper/lmk/orderMapper.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
seller-api/src/main/java/cn/lili/controller/order/OrderStoreController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java
@@ -517,30 +517,253 @@
        boolean result;
        //检测管理员权限
        this.checkManagerAuthority();
        LambdaUpdateWrapper<Goods> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.set(Goods::getGoodsSort,req.getSort());
        updateWrapper.eq(Goods::getId, req.getGoodsId());
        //查询出比当前排序大的商品
        LambdaQueryWrapper<Goods> query = Wrappers.<Goods>lambdaQuery();
        query.gt(Goods::getGoodsSort,req.getSort());
        List<Goods> goods = goodsService.list(query);
        List<String> goodsIds = new ArrayList<>();
        if (goods != null && !goods.isEmpty()) {
         //适配没有排序的商品排序字段为null
            goods.forEach(item -> {
                if (item.getGoodsSort() != null) {
                    item.setGoodsSort(item.getGoodsSort() + 1);
                    goodsIds.add(item.getId());
                }
            });
            goodsService.updateBatchById(goods);
        // 获取当前商品的原始排序值
        Goods currentGoods = this.getById(req.getGoodsId());
        Integer oldSort = currentGoods != null ? currentGoods.getGoodsSort() : null;
        Integer newSort = req.getSort();
        // 收集需要更新ES的商品ID
        List<String> goodsIdsToUpdateEs = new ArrayList<>();
        goodsIdsToUpdateEs.add(req.getGoodsId());
        // 处理数据库中的重复排序值,确保唯一性
        List<String> duplicateResolvedGoodsIds = resolveDuplicateSorts();
        goodsIdsToUpdateEs.addAll(duplicateResolvedGoodsIds);
        // 重新获取当前商品的排序值(可能已被resolveDuplicateSorts修改)
        currentGoods = this.getById(req.getGoodsId());
        oldSort = currentGoods != null ? currentGoods.getGoodsSort() : null;
        // 根据操作类型执行不同的排序逻辑
        if (oldSort == null) {
            // 新增排序
            List<String> affectedGoodsIds = adjustForInsert(newSort);
            goodsIdsToUpdateEs.addAll(affectedGoodsIds);
            // 处理可能产生的重复排序值
            List<String> afterInsertResolvedGoodsIds = resolveDuplicateSorts();
            goodsIdsToUpdateEs.addAll(afterInsertResolvedGoodsIds);
        } else if (!oldSort.equals(newSort)) {
            // 修改排序
            if (newSort > oldSort) {
                // 排序值增大:将大于等于新排序值的商品+1,直到遇到断层
                List<String> affectedGoodsIds = adjustForIncrease(newSort);
                goodsIdsToUpdateEs.addAll(affectedGoodsIds);
                // 处理可能产生的重复排序值
                List<String> afterIncreaseResolvedGoodsIds = resolveDuplicateSorts();
                goodsIdsToUpdateEs.addAll(afterIncreaseResolvedGoodsIds);
            } else {
                // 排序值减小:将大于等于新排序值且小于原排序值的商品+1,直到遇到断层
                List<String> affectedGoodsIds = adjustForDecrease(oldSort, newSort);
                goodsIdsToUpdateEs.addAll(affectedGoodsIds);
                // 处理可能产生的重复排序值
                List<String> afterDecreaseResolvedGoodsIds = resolveDuplicateSorts();
                goodsIdsToUpdateEs.addAll(afterDecreaseResolvedGoodsIds);
            }
        }
        // 更新当前商品的排序值
        LambdaUpdateWrapper<Goods> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.set(Goods::getGoodsSort, newSort);
        updateWrapper.eq(Goods::getId, req.getGoodsId());
        result = this.update(updateWrapper);
        goodsIds.add(req.getGoodsId());
        this.updateEsGoods(goodsIds);
        // 更新ES索引
        this.updateEsGoods(goodsIdsToUpdateEs);
        return result;
    }
    /**
     * 处理数据库中的重复排序值,确保唯一性
     * @return 受影响的商品ID列表
     */
    @Transactional(rollbackFor = Exception.class)
    public List<String> resolveDuplicateSorts() {
        // 查询所有有排序值的商品
        LambdaQueryWrapper<Goods> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.isNotNull(Goods::getGoodsSort);
        queryWrapper.orderByAsc(Goods::getGoodsSort);
        List<Goods> allGoods = this.list(queryWrapper);
        // 按排序值分组
        Map<Integer, List<Goods>> sortMap = allGoods.stream()
                .collect(Collectors.groupingBy(Goods::getGoodsSort));
        // 处理重复的排序值,只保留第一个,其余重新分配
        List<Goods> toUpdate = new ArrayList<>();
        int nextSort = getMaxSortValue(allGoods) + 1; // 从当前最大值+1开始分配
        for (Map.Entry<Integer, List<Goods>> entry : sortMap.entrySet()) {
            List<Goods> goodsList = entry.getValue();
            if (goodsList.size() > 1) {
                // 有重复值,只保留第一个,其余重新分配
                for (int i = 1; i < goodsList.size(); i++) {
                    Goods goods = goodsList.get(i);
                    goods.setGoodsSort(nextSort++);
                    toUpdate.add(goods);
                }
            }
        }
        // 收集受影响的商品ID
        List<String> affectedGoodsIds = toUpdate.stream()
                .map(Goods::getId)
                .collect(Collectors.toList());
        // 批量更新
        if (!toUpdate.isEmpty()) {
            this.updateBatchById(toUpdate);
        }
        return affectedGoodsIds;
    }
    /**
     * 获取当前最大的排序值
     * @param goodsList 商品列表
     * @return 最大排序值
     */
    private int getMaxSortValue(List<Goods> goodsList) {
        return goodsList.stream()
                .mapToInt(Goods::getGoodsSort)
                .max()
                .orElse(0);
    }
    /**
     * 插入新排序值的处理逻辑
     * 将所有大于等于新排序值的商品排序值+1,直到遇到断层
     * @param newSort 新的排序值
     * @return 受影响的商品ID列表
     */
    @Transactional(rollbackFor = Exception.class)
    public List<String> adjustForInsert(Integer newSort) {
        if (newSort == null) return Collections.emptyList();
        // 查询所有大于等于新排序值的商品,按排序值升序排列
        LambdaQueryWrapper<Goods> query = Wrappers.<Goods>lambdaQuery();
        query.ge(Goods::getGoodsSort, newSort);
        query.isNotNull(Goods::getGoodsSort);
        query.orderByAsc(Goods::getGoodsSort);
        List<Goods> goodsList = this.list(query);
        // 检查连续性,遇到断层则停止
        List<Goods> toUpdate = new ArrayList<>();
        int expectedSort = newSort;
        for (Goods goods : goodsList) {
            if (goods.getGoodsSort().equals(expectedSort)) {
                goods.setGoodsSort(goods.getGoodsSort() + 1);
                toUpdate.add(goods);
                expectedSort++;
            } else {
                // 遇到断层,停止调整
                break;
            }
        }
        // 收集受影响的商品ID
        List<String> affectedGoodsIds = toUpdate.stream()
                .map(Goods::getId)
                .collect(Collectors.toList());
        // 批量更新
        if (!toUpdate.isEmpty()) {
            this.updateBatchById(toUpdate);
        }
        return affectedGoodsIds;
    }
    /**
     * 排序值增大的处理逻辑
     * 将所有大于等于新排序值的商品排序值+1,直到遇到断层
     * @param newSort 新排序值
     * @return 受影响的商品ID列表
     */
    @Transactional(rollbackFor = Exception.class)
    public List<String> adjustForIncrease(Integer newSort) {
        if (newSort == null) return Collections.emptyList();
        // 查询所有大于等于新排序值的商品,按排序值升序排列
        LambdaQueryWrapper<Goods> query = Wrappers.<Goods>lambdaQuery();
        query.ge(Goods::getGoodsSort, newSort);
        query.isNotNull(Goods::getGoodsSort);
        query.orderByAsc(Goods::getGoodsSort);
        List<Goods> goodsList = this.list(query);
        // 检查连续性,遇到断层则停止
        List<Goods> toUpdate = new ArrayList<>();
        int expectedSort = newSort;
        for (Goods goods : goodsList) {
            if (goods.getGoodsSort().equals(expectedSort)) {
                goods.setGoodsSort(goods.getGoodsSort() + 1);
                toUpdate.add(goods);
                expectedSort++;
            } else {
                // 遇到断层,停止调整
                break;
            }
        }
        // 收集受影响的商品ID
        List<String> affectedGoodsIds = toUpdate.stream()
                .map(Goods::getId)
                .collect(Collectors.toList());
        // 批量更新
        if (!toUpdate.isEmpty()) {
            this.updateBatchById(toUpdate);
        }
        return affectedGoodsIds;
    }
    /**
     * 排序值减小的处理逻辑
     * 将大于等于新排序值且小于原排序值的商品排序值+1,直到遇到断层
     * @param oldSort 原排序值
     * @param newSort 新排序值
     * @return 受影响的商品ID列表
     */
    @Transactional(rollbackFor = Exception.class)
    public List<String> adjustForDecrease(Integer oldSort, Integer newSort) {
        if (oldSort == null || newSort == null || oldSort.equals(newSort)) return Collections.emptyList();
        // 查询大于等于新排序值且小于原排序值的商品,按排序值升序排列
        LambdaQueryWrapper<Goods> query = Wrappers.<Goods>lambdaQuery();
        query.ge(Goods::getGoodsSort, newSort);
        query.lt(Goods::getGoodsSort, oldSort);
        query.isNotNull(Goods::getGoodsSort);
        query.orderByAsc(Goods::getGoodsSort);
        List<Goods> goodsList = this.list(query);
        // 检查连续性,遇到断层则停止
        List<Goods> toUpdate = new ArrayList<>();
        int expectedSort = newSort;
        for (Goods goods : goodsList) {
            if (goods.getGoodsSort().equals(expectedSort)) {
                goods.setGoodsSort(goods.getGoodsSort() + 1);
                toUpdate.add(goods);
                expectedSort++;
            } else {
                // 遇到断层,停止调整
                break;
            }
        }
        // 收集受影响的商品ID
        List<String> affectedGoodsIds = toUpdate.stream()
                .map(Goods::getId)
                .collect(Collectors.toList());
        // 批量更新
        if (!toUpdate.isEmpty()) {
            this.updateBatchById(toUpdate);
        }
        return affectedGoodsIds;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    @SystemLogPoint(description = "删除商品", customerLog = "'操作对象:['+#goodsIds+']'")
framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java
@@ -1098,7 +1098,10 @@
                v.setCommentNum(this.getCommentNum(v.getId(), v.getCommentNum()));
                v.setCollectNum(this.getCollectNum(v.getId(), v.getCollectNum()));
                v.setThumbsUpNum(this.getThumbsUpNum(v.getId(), v.getThumbsUpNum()));
                v.setAuthorAvatar(cosUtil.getPreviewUrl(v.getAuthorAvatar()));
                String authorAvatar = v.getAuthorAvatar();
                if (StringUtils.isNotBlank(authorAvatar)&&!authorAvatar.contains("http")) {
                    v.setAuthorAvatar(cosUtil.getPreviewUrl(authorAvatar));
                }
                if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) {
                    v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
                    v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey()));
framework/src/main/java/cn/lili/modules/member/entity/dto/UpdateTracesDTO.java
New file
@@ -0,0 +1,27 @@
package cn.lili.modules.member.entity.dto;
import lombok.Data;
@Data
public class UpdateTracesDTO {
    /**
     * 包裹编号
     */
    private String packageNo;
    /**
     * 订单编号
     */
    private String orderSn;
    /**
     * 快递公司id
     */
    private String logisticsId;
    /**
     * 快递单号
     */
    private String logisticsNo;
    /**
     * 快递编码
     */
    private String logisticsCode;
}
framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java
@@ -4,6 +4,7 @@
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.lmk.domain.vo.OrderCountVO;
import cn.lili.modules.member.entity.dto.MemberAddressDTO;
import cn.lili.modules.member.entity.dto.UpdateTracesDTO;
import cn.lili.modules.order.cart.entity.dto.TradeDTO;
import cn.lili.modules.order.order.entity.dos.Order;
import cn.lili.modules.order.order.entity.dto.*;
@@ -17,6 +18,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
@@ -216,6 +218,8 @@
     */
    Traces getTraces(String orderSn);
    void updateTraces(@RequestBody UpdateTracesDTO updateTracesDTO);
    /**
     * 获取地图版 物流踪迹
     *
framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java
@@ -35,6 +35,7 @@
import cn.lili.modules.lmk.mapper.LmkOrderSelectMapper;
import cn.lili.modules.lmk.service.CouponVirtualService;
import cn.lili.modules.member.entity.dto.MemberAddressDTO;
import cn.lili.modules.member.entity.dto.UpdateTracesDTO;
import cn.lili.modules.member.mapper.MemberMapper;
import cn.lili.modules.order.cart.entity.dto.TradeDTO;
import cn.lili.modules.order.cart.entity.enums.DeliveryMethodEnum;
@@ -859,6 +860,26 @@
    }
    @Override
    public void updateTraces(UpdateTracesDTO updateTracesDTO) {
        LambdaQueryWrapper<OrderPackage> eq = Wrappers.<OrderPackage>lambdaQuery()
                .eq(OrderPackage::getOrderSn, updateTracesDTO.getOrderSn())
                .eq(OrderPackage::getPackageNo, updateTracesDTO.getPackageNo());
        OrderPackage one = orderPackageService.getOne(eq);
        if (one == null) {
            throw new ServiceException("当前包裹不存在");
        }
        String logisticsId = updateTracesDTO.getLogisticsId();
        if (StringUtils.isNotBlank(logisticsId)) {
            Logistics logic = logisticsService.getById(logisticsId);
            one.setLogisticsNo(updateTracesDTO.getLogisticsNo());
            one.setLogisticsCode(logic.getCode());
            one.setLogisticsName(logic.getName());
            orderPackageService.updateById(one);
        }
    }
    @Override
    public Traces getMapTraces(String orderSn) {
        //获取订单信息
        Order order = this.getBySn(orderSn);
@@ -1154,7 +1175,31 @@
        checkBatchDeliver(orderBatchDeliverDTOList);
        //订单批量发货
        for (OrderBatchDeliverDTO orderBatchDeliverDTO : orderBatchDeliverDTOList) {
            this.delivery(orderBatchDeliverDTO.getOrderSn(), orderBatchDeliverDTO.getLogisticsNo(), orderBatchDeliverDTO.getLogisticsId());
            String logisticsNo = orderBatchDeliverDTO.getLogisticsNo();
            String[] split = logisticsNo.split(",");
            //如果物流单号包含多个,则进行拆单
            if (split.length > 1) {
                for (int i = 0; i < split.length; i++) {
                    PartDeliveryParamsDTO partDeliveryParamsDTO = new PartDeliveryParamsDTO();
                    partDeliveryParamsDTO.setOrderSn(orderBatchDeliverDTO.getOrderSn());
                    partDeliveryParamsDTO.setLogisticsNo(split[i]);
                    partDeliveryParamsDTO.setLogisticsId(orderBatchDeliverDTO.getLogisticsId());
                    ArrayList<PartDeliveryDTO> partDeliveryDTOList = new ArrayList<>();
                    partDeliveryParamsDTO.setPartDeliveryDTOList(partDeliveryDTOList);
                    if (i == split.length - 1){
                        List<OrderItem> orderItemList = orderItemService.getByOrderSn(orderBatchDeliverDTO.getOrderSn());
                        for (OrderItem orderItem : orderItemList) {
                            if (RefundStatusEnum.NO_REFUND.name().equals(orderItem.getIsRefund())) {
                                PartDeliveryDTO partDeliveryDTO = new PartDeliveryDTO();
                                partDeliveryDTO.setDeliveryNum(orderItem.getNum());
                                partDeliveryDTO.setOrderItemId(orderItem.getId());
                                partDeliveryDTOList.add(partDeliveryDTO);
                            }
                        }
                    }
                    this.partDelivery(partDeliveryParamsDTO);
                }
            }
        }
    }
@@ -1800,7 +1845,10 @@
            // 提取商品名(注意:键是resultMap中定义的property值"goodsName")
            if (Objects.nonNull(map.get("goodsName"))) {
                String goodsName = map.get("goodsName").toString();
                goodsData.add(goodsName);
                String buyerCount = map.get("buyerCount").toString();
                String repurchaseBuyerCount = map.get("repurchaseBuyerCount").toString();
                String format = String.format("%s:购买人数 %s 复购人数%s", goodsName, buyerCount, repurchaseBuyerCount);
                goodsData.add(format);
            }
            // 提取复购率(复购率通常是数字类型,这里用BigDecimal接收)
framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java
@@ -100,7 +100,7 @@
        if (Objects.nonNull(searchDTO.getCanFilter()) && searchDTO.getCanFilter()) {
            // 使用sn字段排序并在折叠时选择sn最小的记录
            searchQueryBuilder.withCollapseField("goodsId.keyword");
            searchQueryBuilder.withSort(SortBuilders.fieldSort("sn.keyword").order(SortOrder.ASC));
            searchQueryBuilder.withSort(SortBuilders.fieldSort("price").order(SortOrder.ASC));
        }
        NativeSearchQuery searchQuery = searchQueryBuilder.build();
        searchQuery.setTrackTotalHits(true);
framework/src/main/java/cn/lili/modules/statistics/mapper/PlatformViewMapper.java
@@ -22,4 +22,12 @@
     */
    @Select("SELECT sum(uv_num) FROM li_s_platform_view_data ${ew.customSqlSegment}")
    Integer count(@Param(Constants.WRAPPER) QueryWrapper queryWrapper);
    /**
     * UV流量统计
     *
     * @param queryWrapper 查询条件
     * @return UV流量统计数量
     */
    @Select("SELECT COUNT(DISTINCT(user_id)) FROM lmk_action_record ${ew.customSqlSegment}")
    Integer uvCount(@Param(Constants.WRAPPER) QueryWrapper queryWrapper);
}
framework/src/main/java/cn/lili/modules/statistics/serviceimpl/PlatformViewServiceImpl.java
@@ -220,6 +220,32 @@
        return result;
    }
//    @Override
//    public Integer countUv(StatisticsQueryParam queryParam) {
//        Date[] dates = StatisticsDateUtil.getDateArray(queryParam);
//        //获取当前时间
//        Calendar calendar = Calendar.getInstance();
//
//        calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
//        calendar.set(Calendar.MILLISECOND, 0);
//        //如果是今天的统计,则从redis 中拿,否则从数据库中拿
//        if (dates[0].equals(calendar.getTime())) {
//            if (StringUtils.isNotEmpty(queryParam.getStoreId())) {
//                return cache.counter(CachePrefix.UV.getPrefix() + StatisticsSuffix.suffix(queryParam.getStoreId())).intValue();
//            }
//            return cache.counter(CachePrefix.UV.getPrefix() + StatisticsSuffix.suffix()).intValue();
//        } else {
//            QueryWrapper queryWrapper = new QueryWrapper();
//            queryWrapper.between("date", dates[0], dates[1]);
//            //根据店铺查询判定,如果有,则店铺查询,如果没有,则根据商家查询
//            if (StringUtils.isNotEmpty(queryParam.getStoreId())) {
//                queryWrapper.eq("store_id", queryParam.getStoreId());
//            } else {
//                queryWrapper.eq("store_id", -1);
//            }
//            return this.baseMapper.count(queryWrapper);
//        }
//    }
    @Override
    public Integer countUv(StatisticsQueryParam queryParam) {
        Date[] dates = StatisticsDateUtil.getDateArray(queryParam);
@@ -228,23 +254,11 @@
        calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        //如果是今天的统计,则从redis 中拿,否则从数据库中拿
        if (dates[0].equals(calendar.getTime())) {
            if (StringUtils.isNotEmpty(queryParam.getStoreId())) {
                return cache.counter(CachePrefix.UV.getPrefix() + StatisticsSuffix.suffix(queryParam.getStoreId())).intValue();
            }
            return cache.counter(CachePrefix.UV.getPrefix() + StatisticsSuffix.suffix()).intValue();
        } else {
            QueryWrapper queryWrapper = new QueryWrapper();
            queryWrapper.between("date", dates[0], dates[1]);
            //根据店铺查询判定,如果有,则店铺查询,如果没有,则根据商家查询
            if (StringUtils.isNotEmpty(queryParam.getStoreId())) {
                queryWrapper.eq("store_id", queryParam.getStoreId());
            } else {
                queryWrapper.eq("store_id", -1);
            }
            return this.baseMapper.count(queryWrapper);
        }
            queryWrapper.between("start_time", dates[0], dates[1]);
            queryWrapper.eq("page_status", "JOIN");
            return this.baseMapper.uvCount(queryWrapper);
    }
    /**
framework/src/main/java/cn/lili/modules/store/entity/dto/BillSearchParams.java
@@ -75,11 +75,11 @@
        //创建时间
        if (CharSequenceUtil.isNotEmpty(startDate) && CharSequenceUtil.isNotEmpty(endDate)) {
            wrapper.between("bill_time", startDate, endDate);
            wrapper.between("create_time", startDate, endDate);
        } else if (CharSequenceUtil.isNotEmpty(startDate)) {
            wrapper.ge("bill_time", startDate);
            wrapper.ge("create_time", startDate);
        } else if (CharSequenceUtil.isNotEmpty(endDate)) {
            wrapper.le("bill_time", endDate);
            wrapper.le("create_time", endDate);
        }
        //账单号
        wrapper.eq(CharSequenceUtil.isNotEmpty(sn), "sn", sn);
framework/src/main/resources/mapper/lmk/GoodsCustomizeTemplateMapper.xml
@@ -36,6 +36,7 @@
        <if test="query.status != null and query.status !=''">
            AND LGCT.status = #{query.status}
        </if>
        order by LGCT.create_time DESC
    </select>
    <resultMap id="getCustomizeTemplateMap" type="cn.lili.modules.lmk.domain.vo.CustomizeTemplateVO">
        <id property="id" column="id"/>
framework/src/main/resources/mapper/lmk/VideoMapper.xml
@@ -814,38 +814,117 @@
    <select id="getAuthorLikeVideoPage" resultMap="WxResultMap">
        SELECT
            LV.author_id,
            LV.cover_url,
            LV.video_fit,
            LV.video_duration,
            LV.video_file_key,
            LV.title,
            LV.goods_view_num,
            LV.goods_order_num,
            LV.recommend,
            LV.status,
            LV.play_num,
            LV.comment_num,
            LV.collect_num,
            LV.thumbs_up_num,
            LV.weight,
            LV.audit_pass_time,
            LV.update_time,
            LV.video_content_type,
            LV.video_type,
            LV.video_imgs,
            LV.id,
            LM.nick_name as authorName,
            LM.face as authorAvatar
            *
        FROM
            lmk_thumbs_up_record LMC
                INNER JOIN lmk_video LV ON LMC.ref_id = LV.id AND LV.delete_flag = 0 AND LV.status = '1'
                LEFT JOIN li_member LM ON LV.author_id = LM.id
        WHERE
            LMC.delete_flag = 0 AND LMC.user_id = #{query.authorId} AND LMC.thumbs_up_type = 'video' AND LV.video_type = #{query.videoType}
            (
                SELECT
                    LV.author_id,
                    LV.cover_url,
                    LV.video_fit,
                    LV.video_duration,
                    LV.video_file_key,
                    LV.title,
                    LV.goods_view_num,
                    LV.goods_order_num,
                    LV.recommend,
                    LV.STATUS,
                    LV.play_num,
                    LV.comment_num,
                    LV.collect_num,
                    LV.thumbs_up_num,
                    LV.weight,
                    LV.audit_pass_time,
                    LV.update_time,
                    LV.video_content_type,
                    LV.video_type,
                    LV.video_imgs,
                    LV.id,
                    LM.nick_name AS authorName,
                    LM.face AS authorAvatar,
                    LV.create_time
                FROM
                    lmk_thumbs_up_record LMC
                        INNER JOIN lmk_video LV ON LMC.ref_id = LV.id
                        AND LV.delete_flag = 0
                        AND LV.STATUS = '1'
                        LEFT JOIN li_member LM ON LV.author_id = LM.id
                WHERE
                    LMC.delete_flag = 0
                  AND LM.id IS NOT NULL
                  AND LMC.user_id = #{query.authorId} AND LMC.thumbs_up_type = 'video' AND LV.video_type = #{query.videoType}
                UNION ALL
                SELECT
                    LV.author_id,
                    LV.cover_url,
                    LV.video_fit,
                    LV.video_duration,
                    LV.video_file_key,
                    LV.title,
                    LV.goods_view_num,
                    LV.goods_order_num,
                    LV.recommend,
                    LV.STATUS,
                    LV.play_num,
                    LV.comment_num,
                    LV.collect_num,
                    LV.thumbs_up_num,
                    LV.weight,
                    LV.audit_pass_time,
                    LV.update_time,
                    LV.video_content_type,
                    LV.video_type,
                    LV.video_imgs,
                    LV.id,
                    LM.nick_name AS authorName,
                    LM.avatar AS authorAvatar,
                    LV.create_time
                FROM
                    lmk_thumbs_up_record LMC
                        INNER JOIN lmk_video LV ON LMC.ref_id = LV.id
                        AND LV.delete_flag = 0
                        AND LV.STATUS = '1'
                        LEFT JOIN li_admin_user LM ON LV.author_id = LM.id
                WHERE
                    LMC.delete_flag = 0
                  AND LM.id IS NOT NULL
                  AND LMC.user_id = #{query.authorId} AND LMC.thumbs_up_type = 'video' AND LV.video_type = #{query.videoType}) t
        ORDER BY
            LMC.create_time DESC
            t.create_time DESC
    </select>
<!--    <select id="getAuthorLikeVideoPage" resultMap="WxResultMap">-->
<!--        SELECT-->
<!--            LV.author_id,-->
<!--            LV.cover_url,-->
<!--            LV.video_fit,-->
<!--            LV.video_duration,-->
<!--            LV.video_file_key,-->
<!--            LV.title,-->
<!--            LV.goods_view_num,-->
<!--            LV.goods_order_num,-->
<!--            LV.recommend,-->
<!--            LV.status,-->
<!--            LV.play_num,-->
<!--            LV.comment_num,-->
<!--            LV.collect_num,-->
<!--            LV.thumbs_up_num,-->
<!--            LV.weight,-->
<!--            LV.audit_pass_time,-->
<!--            LV.update_time,-->
<!--            LV.video_content_type,-->
<!--            LV.video_type,-->
<!--            LV.video_imgs,-->
<!--            LV.id,-->
<!--            LM.nick_name as authorName,-->
<!--            LM.face as authorAvatar-->
<!--        FROM-->
<!--            lmk_thumbs_up_record LMC-->
<!--                INNER JOIN lmk_video LV ON LMC.ref_id = LV.id AND LV.delete_flag = 0 AND LV.status = '1'-->
<!--                LEFT JOIN li_member LM ON LV.author_id = LM.id-->
<!--        WHERE-->
<!--            LMC.delete_flag = 0 AND LMC.user_id = #{query.authorId} AND LMC.thumbs_up_type = 'video' AND LV.video_type = #{query.videoType}-->
<!--        ORDER BY-->
<!--            LMC.create_time DESC-->
<!--    </select>-->
    <!-- 微信视频编辑详情 -->
framework/src/main/resources/mapper/lmk/orderMapper.xml
@@ -15,6 +15,8 @@
    <resultMap id="productRepurchase" type="java.util.Map">
        <result column="goods_name" property="goodsName"/>
        <result column="repurchase_rate_percent" property="repurchaseRate"/>
        <result column="buyer_count" property="buyerCount"/>
        <result column="repurchase_buyer_count" property="repurchaseBuyerCount"/>
    </resultMap>
    <resultMap id="viewDataCount" type="java.util.Map">
seller-api/src/main/java/cn/lili/controller/order/OrderStoreController.java
@@ -15,6 +15,7 @@
import cn.lili.modules.lmk.service.GoodsCustomizeTemplateService;
import cn.lili.modules.lmk.service.UserCheckTemplateService;
import cn.lili.modules.member.entity.dto.MemberAddressDTO;
import cn.lili.modules.member.entity.dto.UpdateTracesDTO;
import cn.lili.modules.member.service.StoreLogisticsService;
import cn.lili.modules.order.cart.entity.vo.BindingTemplateParam;
import cn.lili.modules.order.order.entity.dto.OrderSearchParams;
@@ -265,6 +266,12 @@
        return ResultUtil.data(orderPackageService.getOrderPackageVOList(orderSn));
    }
    @PostMapping(value = "/updateTraces")
    public ResultMessage<Object> updateTraces(@RequestBody UpdateTracesDTO updateTracesDTO) {
        orderService.updateTraces(updateTracesDTO);
        return ResultUtil.success(ResultCode.SUCCESS);
    }
    @ApiOperation(value = "查询物流踪迹")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "orderSn", value = "订单编号", required = true, dataType = "String", paramType = "path")