Explorar o código

商城订单分页接口和详情接口实现

杨德宝 %!s(int64=2) %!d(string=hai) anos
pai
achega
2705ffccff
Modificáronse 15 ficheiros con 663 adicións e 53 borrados
  1. 88 0
      kxs-product/kxs-product-api/src/main/java/com/kxs/product/api/dto/admin/so/SysSoPageDTO.java
  2. 47 0
      kxs-product/kxs-product-api/src/main/java/com/kxs/product/api/vo/admin/so/SysSoOrderDetailVO.java
  3. 61 0
      kxs-product/kxs-product-api/src/main/java/com/kxs/product/api/vo/admin/so/SysSoPageVO.java
  4. 62 0
      kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/controller/admin/SysShopOrderController.java
  5. 11 0
      kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/mapper/KxsShopOrderMapper.java
  6. 19 0
      kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/service/KxsShopOrderService.java
  7. 89 0
      kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/service/impl/KxsShopOrderServiceImpl.java
  8. 48 26
      kxs-product/kxs-product-biz/src/main/resources/mapper/KxsShopOrderMapper.xml
  9. 22 0
      kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/dto/admin/user/UserSearchDTO.java
  10. 25 0
      kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/feign/RemoteKxsUserService.java
  11. 34 0
      kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/vo/admin/user/SysFeignUserDetailVO.java
  12. 24 0
      kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/vo/admin/user/SysTopUserVO.java
  13. 27 1
      kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/controller/admin/SysUserController.java
  14. 18 0
      kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/KxsUserService.java
  15. 88 26
      kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/impl/KxsUserServiceImpl.java

+ 88 - 0
kxs-product/kxs-product-api/src/main/java/com/kxs/product/api/dto/admin/so/SysSoPageDTO.java

@@ -0,0 +1,88 @@
+package com.kxs.product.api.dto.admin.so;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+
+/**
+ * 商城订单-列表-dto
+ *
+ * @author 系统
+ * @date 2024-06-26 17:09:21
+ */
+@Data
+public class SysSoPageDTO {
+
+    /**
+     * 订单号
+     */
+    @Schema(description = "订单号")
+    private String orderSn;
+
+
+    /**
+     * 支付渠道 0余额 1支付宝 2微信 3盟主储蓄金
+     */
+    @Schema(description = "支付渠道 0余额 1支付宝 2微信 3盟主储蓄金")
+    private Integer payType;
+
+
+    /**
+     * 状态 0未支付 1已支付 2已发货 3已完成 4已取消
+     */
+    @Schema(description = "状态 0未支付 1已支付 2已发货 3已完成 4已取消")
+    private Integer status;
+
+
+    /**
+     * 创客编号
+     */
+    @Schema(description = "创客编号")
+    private String userCode;
+
+
+    /**
+     * 创客名字
+     */
+    @Schema(description = "创客名字")
+    private String username;
+
+
+    /**
+     * 产品类型
+     */
+    @Schema(description = "产品类型")
+    private String goodsId;
+
+
+    /**
+     * 下单时间区间['','']
+     */
+    @Schema(description = "下单时间区间['','']")
+    private String[] orderTime;
+
+
+    /**
+     * 支付时间区间['','']
+     */
+    @Schema(description = "支付时间区间['','']")
+    private String[] payTime;
+
+
+    /**
+     * 发货时间区间['','']
+     */
+    @Schema(description = "发货时间区间['','']")
+    private String[] sendTime;
+
+    /**
+     * 用户id集合
+     */
+    private List<Integer> userIds;
+
+
+
+
+}

+ 47 - 0
kxs-product/kxs-product-api/src/main/java/com/kxs/product/api/vo/admin/so/SysSoOrderDetailVO.java

@@ -0,0 +1,47 @@
+package com.kxs.product.api.vo.admin.so;
+
+
+import com.kxs.product.api.model.KxsShopGoods;
+import com.kxs.product.api.model.KxsShopOrderInfo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 商城订单-详情vo
+ *
+ * @author 系统
+ * @date 2024-06-26 17:09:22
+ */
+@Data
+@Schema(description = "商城订单-详情返回实体")
+public class SysSoOrderDetailVO implements Serializable {
+
+	@Serial
+	private static final long serialVersionUID = 1L;
+
+
+    /**
+     * 订单详情
+     */
+    @Schema(description = "订单详情")
+    private KxsShopOrderInfo orderInfo;
+
+
+    /**
+     * 订单商品详情
+     */
+    @Schema(description = "订单商品详情")
+    private KxsShopGoods orderProductInfo;
+
+
+
+
+
+	
+
+}

+ 61 - 0
kxs-product/kxs-product-api/src/main/java/com/kxs/product/api/vo/admin/so/SysSoPageVO.java

@@ -0,0 +1,61 @@
+package com.kxs.product.api.vo.admin.so;
+
+
+import com.kxs.product.api.model.KxsShopOrder;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 商城订单-列表vo
+ *
+ * @author 系统
+ * @date 2024-06-26 17:09:22
+ */
+@Data
+@Schema(description = "商城订单-列表返回实体")
+public class SysSoPageVO extends KxsShopOrder implements Serializable {
+
+	@Serial
+	private static final long serialVersionUID = 1L;
+
+
+
+    /**
+     * 创客名称
+     */
+    @Schema(description = "创客名称")
+    private Object username;
+
+
+    /**
+     * 创客编号
+     */
+    @Schema(description = "创客编号")
+    private Object userCode;
+
+
+    /**
+     * 顶级创客名称
+     */
+    @Schema(description = "顶级创客名称")
+    private Object topUsername;
+
+
+    /**
+     * 顶级创客编号
+     */
+    @Schema(description = "顶级创客编号")
+    private Object topUserCode;
+
+
+
+
+
+	
+
+}

+ 62 - 0
kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/controller/admin/SysShopOrderController.java

@@ -0,0 +1,62 @@
+package com.kxs.product.biz.controller.admin;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.kxs.common.core.util.R;
+import com.kxs.product.api.dto.admin.so.SysSoPageDTO;
+import com.kxs.product.api.vo.admin.so.SysSoPageVO;
+import com.kxs.product.biz.service.KxsShopOrderService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 商城订单(SysSo)控制层
+ *
+ * @author 系统
+ * @since 2024-06-26 17:09:22
+ */
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("sysShopOrder")
+public class SysShopOrderController {
+
+    /**
+     * 服务对象
+     */
+    private final KxsShopOrderService kxsShopOrderService;
+
+
+
+    /**
+     * 商城订单-列表
+     *
+     * @param page 分页对象
+     * @param param 查询实体
+     * @return 商城订单-列表
+     */
+    @GetMapping("/page")
+    public R page(Page<SysSoPageVO> page, SysSoPageDTO param) {
+        kxsShopOrderService.shopOrderPage(page, param);
+        return R.ok(page);
+    }
+
+
+    /**
+     * 商城订单-详情
+     *
+     * @param id 主键ID
+     * @return 商城订单-详情
+     */
+    @GetMapping("/{orderDetail}")
+    public R orderDetail(@PathVariable("orderDetail") Integer id) {
+        return R.ok(kxsShopOrderService.getOrderDetailById(id));
+    }
+
+
+
+
+
+}
+

+ 11 - 0
kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/mapper/KxsShopOrderMapper.java

@@ -1,7 +1,10 @@
 package com.kxs.product.biz.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.kxs.product.api.dto.admin.so.SysSoPageDTO;
 import com.kxs.product.api.model.KxsShopOrder;
+import com.kxs.product.api.vo.admin.so.SysSoPageVO;
 import com.kxs.product.api.vo.kxsapp.shop.ShopOrderGoodsUserVO;
 import com.kxs.product.api.vo.kxsapp.shop.ShopOrderListVO;
 import org.apache.ibatis.annotations.Mapper;
@@ -45,5 +48,13 @@ public interface KxsShopOrderMapper extends BaseMapper<KxsShopOrder> {
      * @return {@link List}<{@link KxsShopOrder}>
      */
     List<KxsShopOrder> verifyUserTicketCountAndShopAndAct(@Param("userId") Long userId, @Param("shopIds")List<Long> shopIds);
+
+    /**
+     * 订单分页查询
+     * @param page
+     * @param sysSoPageDTO
+     * @return
+     */
+    List<SysSoPageVO> shopOrderPage(Page page,  @Param("query") SysSoPageDTO sysSoPageDTO);
 }
 

+ 19 - 0
kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/service/KxsShopOrderService.java

@@ -4,9 +4,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.kxs.common.core.util.R;
+import com.kxs.product.api.dto.admin.so.SysSoPageDTO;
 import com.kxs.product.api.dto.kxsapp.shop.PayOrderDTO;
 import com.kxs.product.api.model.KxsShopOrder;
 import com.kxs.product.api.dto.kxsapp.shop.GoodsSubmitDTO;
+import com.kxs.product.api.vo.admin.so.SysSoOrderDetailVO;
+import com.kxs.product.api.vo.admin.so.SysSoPageVO;
 import com.kxs.product.api.vo.kxsapp.shop.ShopOrderCountVO;
 import com.kxs.product.api.vo.kxsapp.shop.ShopOrderDetailVO;
 import com.kxs.product.api.vo.kxsapp.shop.ShopOrderGoodsUserVO;
@@ -93,5 +96,21 @@ public interface KxsShopOrderService extends IService<KxsShopOrder> {
      * @param outTradeNo 订单编号
      */
     void payBack(String outTradeNo);
+
+    /**
+     * 商城订单分页查询
+     * @param page
+     * @param sysSoPageDTO
+     * @return
+     */
+    List<SysSoPageVO> shopOrderPage(Page page, SysSoPageDTO sysSoPageDTO);
+
+
+    /**
+     * 通过订单id查询订单详情信息
+     * @param orderId
+     * @return
+     */
+    SysSoOrderDetailVO getOrderDetailById(Integer orderId);
 }
 

+ 89 - 0
kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/service/impl/KxsShopOrderServiceImpl.java

@@ -1,9 +1,11 @@
 package com.kxs.product.biz.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.IdUtil;
 import com.alipay.api.AlipayApiException;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -19,9 +21,12 @@ import com.kxs.common.pay.model.PayResponse;
 import com.kxs.common.pay.model.YuePayMessage;
 import com.kxs.common.security.util.SecurityUtils;
 import com.kxs.product.api.amqp.rabbit.RabbitShopTimeoutQueueMQ;
+import com.kxs.product.api.dto.admin.so.SysSoPageDTO;
 import com.kxs.product.api.dto.kxsapp.shop.GoodsSubmitDTO;
 import com.kxs.product.api.dto.kxsapp.shop.PayOrderDTO;
 import com.kxs.product.api.model.*;
+import com.kxs.product.api.vo.admin.so.SysSoOrderDetailVO;
+import com.kxs.product.api.vo.admin.so.SysSoPageVO;
 import com.kxs.product.api.vo.kxsapp.shop.*;
 import com.kxs.product.biz.constant.enums.KxsShopEnum;
 import com.kxs.product.biz.constant.enums.ProductErrorTypeEnum;
@@ -32,7 +37,9 @@ import com.kxs.product.biz.service.KxsTicketService;
 import com.kxs.store.api.feign.RemoteKxsStoreService;
 import com.kxs.store.api.model.KxsWarehouseLimit;
 import com.kxs.system.api.util.ParamResolver;
+import com.kxs.user.api.dto.admin.user.UserSearchDTO;
 import com.kxs.user.api.feign.RemoteKxsUserService;
+import com.kxs.user.api.vo.admin.user.SysFeignUserDetailVO;
 import io.seata.spring.annotation.GlobalTransactional;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -42,7 +49,9 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.stream.Collectors;
@@ -312,6 +321,86 @@ public class KxsShopOrderServiceImpl extends ServiceImpl<KxsShopOrderMapper, Kxs
 
     }
 
+    @Override
+    public List<SysSoPageVO> shopOrderPage(Page page, SysSoPageDTO sysSoPageDTO) {
+
+        //如果有用户名称或用户编号的搜索条件,先去查用户,再根据用户id搜索订单
+        String userCode = sysSoPageDTO.getUserCode();
+        String username = sysSoPageDTO.getUsername();
+        List<Integer> searchUserIds = sysSoPageDTO.getUserIds();
+        if(StringUtils.isNotBlank(userCode) || StringUtils.isNotBlank(username)){
+            UserSearchDTO userSearchDTO = new UserSearchDTO();
+            userSearchDTO.setUsername(username);
+            userSearchDTO.setUserCode(userCode);
+            List<Integer> userIds = getUserIdsSearch(userSearchDTO);
+            if(CollectionUtil.isNotEmpty(userIds)){
+                if(searchUserIds == null){
+                    searchUserIds = new ArrayList<>();
+                }
+                searchUserIds.addAll(userIds);
+            }else{
+                return new ArrayList<>();
+            }
+        }
+        //设置用户userIds
+        sysSoPageDTO.setUserIds(searchUserIds);
+        List<SysSoPageVO> list = baseMapper.shopOrderPage(page, sysSoPageDTO);
+
+        //封装创客信息和顶级创客信息
+        packageTopUser(list);
+        if(page != null){
+            page.setRecords(list);
+        }
+        return list;
+    }
+
+    private void packageTopUser(List<SysSoPageVO> list){
+        if(CollectionUtil.isNotEmpty(list)){
+            List<Integer> userIds = list.stream().map(o -> o.getUserId().intValue()).collect(Collectors.toList());
+            R<Map<Integer, SysFeignUserDetailVO>> mapR = remoteKxsUserService.topUserList(userIds, SecurityConstants.FROM_IN);
+            if (mapR.getStatus() == 1) {
+                Map<Integer, SysFeignUserDetailVO> topUserMap = mapR.getData();
+                for(SysSoPageVO sysSoPageVO:list){
+                    Integer userId = sysSoPageVO.getUserId().intValue();
+                    if(topUserMap.containsKey(userId)){
+                        SysFeignUserDetailVO sysFeignUserDetailVO = topUserMap.get(userId);
+                        sysSoPageVO.setUserCode(sysFeignUserDetailVO.getUserCode());
+                        sysSoPageVO.setUsername(sysFeignUserDetailVO.getUsername());
+                        sysSoPageVO.setTopUserCode(sysFeignUserDetailVO.getTopUserCode());
+                        sysSoPageVO.setTopUsername(sysFeignUserDetailVO.getTopUsername());
+                    }
+                }
+            }
+        }
+
+    }
+
+    /**
+     * 通过条件获取用户id数据
+     * @return
+     */
+    private List<Integer> getUserIdsSearch(UserSearchDTO userSearchDTO){
+            R<List<Integer>> rList = remoteKxsUserService.searchUserList(userSearchDTO, SecurityConstants.FROM_IN);
+            if (rList.getStatus() != 1) {
+                throw new GlobalCustomerException("用户服务请求异常");
+            }else{
+                return rList.getData();
+            }
+    }
+
+    @Override
+    public SysSoOrderDetailVO getOrderDetailById(Integer orderId) {
+        List<KxsShopOrderInfo> kxsShopOrderInfos = orderInfoMapper.selectList(Wrappers.<KxsShopOrderInfo>lambdaQuery().eq(KxsShopOrderInfo::getOrderId, orderId));
+        SysSoOrderDetailVO sysSoOrderDetailVO = new SysSoOrderDetailVO();
+        if(CollectionUtil.isNotEmpty(kxsShopOrderInfos)){
+            KxsShopOrderInfo kxsShopOrderInfo = kxsShopOrderInfos.get(0);
+            sysSoOrderDetailVO.setOrderInfo(kxsShopOrderInfo);
+            KxsShopGoods kxsShopGoods = kxsShopGoodsMapper.selectById(kxsShopOrderInfo.getGoodsId());
+            sysSoOrderDetailVO.setOrderProductInfo(kxsShopGoods);
+        }
+        return sysSoOrderDetailVO;
+    }
+
     /**
      * 添加临时额度
      *

+ 48 - 26
kxs-product/kxs-product-biz/src/main/resources/mapper/KxsShopOrderMapper.xml

@@ -51,6 +51,8 @@
         </collection>
     </resultMap>
 
+    <resultMap id="WebKxsShopOrderMap" extends="KxsShopOrderMap" type="com.kxs.product.api.vo.admin.so.SysSoPageVO"></resultMap>
+
     <select id="getByPage" resultMap="KxsShopOrderPageMap">
         SELECT a.id, a.create_time, a.order_sn, a.status, a.return_status, a.total_price, a.pay_price, a.warehouse_id, a.order_type,
                t.number, t.goods_price, t.pic_url, t.goods_name, t.specifications
@@ -95,32 +97,52 @@
     </select>
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+    <select id="shopOrderPage" resultMap="WebKxsShopOrderMap">
+        SELECT
+            kso.*
+        FROM
+            kxs_shop_order kso
+        <where>
+            and kso.del_flag = 0
+            <if test="query.orderSn != null and query.orderSn != ''">
+                <bind name="orderSnLike" value="'%'+query.orderSn+'%'"/>
+                AND kso.order_sn LIKE #{orderSnLike}
+            </if>
+            <if test="query.payType != null">
+                and kso.pay_type = #{query.payType}
+            </if>
+            <if test="query.status != null">
+                and kso.status = #{query.status}
+            </if>
+            <if test="query.goodsId != null and query.goodsId != ''">
+                and kso.goods_id = #{query.goodsId}
+            </if>
+            <if test="query.userIds != null and query.userIds.size()>0">
+                and kso.user_id in
+                <foreach collection="query.userIds" item="item" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="query.orderTime != null and query.orderTime.length > 1">
+                and (
+                DATE_FORMAT(create_time,'%Y-%m-%d') >= DATE_FORMAT(#{query.orderTime.[0]},'%Y-%m-%d') and
+                DATE_FORMAT(#{query.orderTime.[1]},'%Y-%m-%d')  >= DATE_FORMAT(create_time,'%Y-%m-%d')
+                )
+            </if>
+            <if test="query.payTime != null and query.payTime.length > 1">
+                and (
+                DATE_FORMAT(pay_time,'%Y-%m-%d') >= DATE_FORMAT(#{query.payTime.[0]},'%Y-%m-%d') and
+                DATE_FORMAT(#{query.payTime.[1]},'%Y-%m-%d')  >= DATE_FORMAT(pay_time,'%Y-%m-%d')
+                )
+            </if>
+            <if test="query.sendTime != null and query.sendTime.length > 1">
+                and (
+                DATE_FORMAT(send_time,'%Y-%m-%d') >= DATE_FORMAT(#{query.sendTime.[0]},'%Y-%m-%d') and
+                DATE_FORMAT(#{query.sendTime.[1]},'%Y-%m-%d')  >= DATE_FORMAT(send_time,'%Y-%m-%d')
+                )
+            </if>
+        </where>
+    </select>
 
 
 

+ 22 - 0
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/dto/admin/user/UserSearchDTO.java

@@ -0,0 +1,22 @@
+package com.kxs.user.api.dto.admin.user;
+
+import lombok.Data;
+
+/**
+ * @author debao.yang
+ * @createTime 2024-06-27 11:10
+ */
+@Data
+public class UserSearchDTO {
+
+
+    /**
+     * 用户名称
+     */
+    private String username;
+
+    /**
+     * 用户编号
+     */
+    private String userCode;
+}

+ 25 - 0
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/feign/RemoteKxsUserService.java

@@ -3,8 +3,12 @@ package com.kxs.user.api.feign;
 
 import com.kxs.common.core.constant.SecurityConstants;
 import com.kxs.common.core.util.R;
+import com.kxs.user.api.dto.admin.user.UserSearchDTO;
 import com.kxs.user.api.dto.kxsapp.IntegralStatDTO;
 import com.kxs.user.api.model.*;
+import com.kxs.user.api.vo.admin.user.SysFeignUserDetailVO;
+import com.kxs.user.api.vo.admin.user.SysTopUserVO;
+import com.kxs.user.api.vo.admin.user.SysUserPageVO;
 import com.kxs.user.api.vo.kxsapp.user.RealUserInfoVO;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestHeader;
@@ -14,6 +18,7 @@ import org.springframework.web.service.annotation.GetExchange;
 import org.springframework.web.service.annotation.PostExchange;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author Lxq
@@ -190,4 +195,24 @@ public interface RemoteKxsUserService {
 	@GetExchange("/shareholder/prizePoolSynchronization")
 	void prizePoolSynchronization(@RequestParam(value = "para", required = false) String para, @RequestHeader(SecurityConstants.FROM) String from);
 
+
+	/**
+	 * 查询用户id集合(最多100条)
+	 * @param userSearchDTO
+	 * @param from
+	 * @return
+	 */
+	@PostExchange("/sysUser/search/list")
+	R<List<Integer>> searchUserList(@RequestBody UserSearchDTO userSearchDTO, @RequestHeader(SecurityConstants.FROM) String from);
+
+
+	/**
+	 * 通过用户id集合查询
+	 * @param userIds
+	 * @param from
+	 * @return
+	 */
+	@PostExchange("/sysUser/topUser/list")
+	R<Map<Integer, SysFeignUserDetailVO>> topUserList(@RequestBody List<Integer> userIds, @RequestHeader(SecurityConstants.FROM) String from);
+
 }

+ 34 - 0
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/vo/admin/user/SysFeignUserDetailVO.java

@@ -0,0 +1,34 @@
+package com.kxs.user.api.vo.admin.user;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * 远程调用返回的用户信息
+ * @author debao.yang
+ * @createTime 2024-06-27 15:48
+ */
+@Data
+public class SysFeignUserDetailVO {
+
+
+    /**
+     * 用户名
+     */
+    private String username;
+    /**
+     * 邀请码
+     */
+    private String userCode;
+
+    /**
+     * 顶级创客姓名
+     */
+    private Object topUsername;
+
+
+    /**
+     * 顶级创客编号
+     */
+    private Object topUserCode;
+}

+ 24 - 0
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/vo/admin/user/SysTopUserVO.java

@@ -0,0 +1,24 @@
+package com.kxs.user.api.vo.admin.user;
+
+import com.kxs.user.api.model.KxsUser;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * 顶级创客信息
+ * @author debao.yang
+ * @createTime 2024-06-27 14:33
+ */
+@Data
+public class SysTopUserVO{
+    /**
+     * 顶级创客姓名
+     */
+    private Object topUsername;
+
+
+    /**
+     * 顶级创客编号
+     */
+    private Object topUserCode;
+}

+ 27 - 1
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/controller/admin/SysUserController.java

@@ -3,15 +3,19 @@ package com.kxs.user.biz.controller.admin;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.kxs.common.core.constant.SecurityConstants;
 import com.kxs.common.core.constant.enums.UserStatusEnum;
 import com.kxs.common.core.util.R;
+import com.kxs.common.security.annotation.Inner;
 import com.kxs.user.api.dto.admin.user.RestPwdDTO;
 import com.kxs.user.api.dto.admin.user.SysUserLogoutListDTO;
 import com.kxs.user.api.dto.admin.user.SysUserPageDTO;
 import com.kxs.user.api.dto.admin.user.SysUserUnRealUserPageDTO;
 import com.kxs.user.api.dto.admin.user.SysUserUserAccountListDTO;
 import com.kxs.user.api.dto.admin.user.SysUserWhereListDTO;
+import com.kxs.user.api.dto.admin.user.UserSearchDTO;
 import com.kxs.user.api.model.KxsUser;
+import com.kxs.user.api.vo.admin.user.SysTopUserVO;
 import com.kxs.user.api.vo.admin.user.SysUserPageVO;
 import com.kxs.user.api.vo.admin.user.SysUserUserAccountListVO;
 import com.kxs.user.biz.constant.enums.UserRealStatusEnum;
@@ -23,13 +27,16 @@ import org.springdoc.core.annotations.ParameterObject;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 创客信息管理(SysUser)控制层
@@ -209,8 +216,27 @@ public class SysUserController {
 //        return R.ok(kxsUserService.page(page, new QueryWrapper<>(param)));
 //    }
 
+    /**
+     * 通过搜索条件查询用户数据
+     * @param userSearchDTO
+     * @return
+     */
+    @Inner
+    @PostMapping("/search/list")
+    public R searchUserList(@RequestBody UserSearchDTO userSearchDTO) {
+        return R.ok(kxsUserService.searchUserList(userSearchDTO));
+    }
 
-
+    /**
+     * 通过用户id查询用户数据
+     * @param userIds
+     * @return Map<Integer,SysFeignUserDetailVO>
+     */
+    @Inner
+    @PostMapping("/topUser/list")
+    public R topUserList(@RequestBody List<Integer> userIds){
+        return R.ok(kxsUserService.topUserList(userIds));
+    }
 
 
 }

+ 18 - 0
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/KxsUserService.java

@@ -10,6 +10,7 @@ import com.kxs.user.api.dto.admin.user.SysUserLogoutListDTO;
 import com.kxs.user.api.dto.admin.user.SysUserPageDTO;
 import com.kxs.user.api.dto.admin.user.SysUserUserAccountListDTO;
 import com.kxs.user.api.dto.admin.user.SysUserWhereListDTO;
+import com.kxs.user.api.dto.admin.user.UserSearchDTO;
 import com.kxs.user.api.dto.kxsapp.ConcealParentDTO;
 import com.kxs.user.api.dto.kxsapp.app.ForgetPwdDTO;
 import com.kxs.user.api.dto.kxsapp.app.MchRegisterDTO;
@@ -23,6 +24,8 @@ import com.kxs.user.api.dto.kxsapp.user.UserUpdateAreaDTO;
 import com.kxs.user.api.dto.kxsapp.user.UserUpdateLoginPhoneDTO;
 import com.kxs.user.api.dto.kxsapp.user.UserUpdatePwdDTO;
 import com.kxs.user.api.model.KxsUser;
+import com.kxs.user.api.vo.admin.user.SysFeignUserDetailVO;
+import com.kxs.user.api.vo.admin.user.SysTopUserVO;
 import com.kxs.user.api.vo.admin.user.SysUserPageVO;
 import com.kxs.user.api.vo.admin.user.SysUserUserAccountListVO;
 import com.kxs.user.api.vo.kxsapp.user.RealUserInfoVO;
@@ -31,6 +34,7 @@ import com.kxs.user.api.vo.kxsapp.user.UserInfoVO;
 import com.kxs.user.api.vo.kxsapp.userLevel.LevelDetailVO;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 用户表(KxsSecurityUser)表服务接口
@@ -337,5 +341,19 @@ public interface KxsUserService extends IService<KxsUser> {
 
     List<SysUserUserAccountListVO> userAccountPage(Page page, SysUserUserAccountListDTO param);
 
+
+    /**
+     * 查询用户的id集合数据(最多100条)
+     * @return
+     */
+    List<Integer> searchUserList(UserSearchDTO userSearchDTO);
+
+    /**
+     * 通过id集合查询用户数据
+     * @param userIds
+     * @return
+     */
+    Map<Integer, SysFeignUserDetailVO> topUserList(List<Integer> userIds);
+
 }
 

+ 88 - 26
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/impl/KxsUserServiceImpl.java

@@ -9,6 +9,8 @@ import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.SecureUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -36,6 +38,7 @@ import com.kxs.user.api.dto.admin.user.SysUserLogoutListDTO;
 import com.kxs.user.api.dto.admin.user.SysUserPageDTO;
 import com.kxs.user.api.dto.admin.user.SysUserUserAccountListDTO;
 import com.kxs.user.api.dto.admin.user.SysUserWhereListDTO;
+import com.kxs.user.api.dto.admin.user.UserSearchDTO;
 import com.kxs.user.api.dto.kxsapp.ConcealParentDTO;
 import com.kxs.user.api.dto.kxsapp.app.ForgetPwdDTO;
 import com.kxs.user.api.dto.kxsapp.app.MchRegisterDTO;
@@ -55,6 +58,8 @@ import com.kxs.user.api.model.KxsUserAmount;
 import com.kxs.user.api.model.KxsUserBank;
 import com.kxs.user.api.model.KxsUserPresetLog;
 import com.kxs.user.api.model.KxsUserReal;
+import com.kxs.user.api.vo.admin.user.SysFeignUserDetailVO;
+import com.kxs.user.api.vo.admin.user.SysTopUserVO;
 import com.kxs.user.api.vo.admin.user.SysUserPageVO;
 import com.kxs.user.api.vo.admin.user.SysUserUserAccountListVO;
 import com.kxs.user.api.vo.kxsapp.user.RealUserInfoVO;
@@ -317,37 +322,59 @@ public class KxsUserServiceImpl extends ServiceImpl<KxsUserMapper, KxsUser> impl
      */
     private void packageTopUser(List<SysUserPageVO> list){
         if(CollectionUtil.isNotEmpty(list)){
-            //顶级创客的userId集合
-            List<Integer> userIds = new ArrayList<>();
-            //当前用户和顶级创客对应关系map
-            Map<Integer,Integer> map = new HashMap<>();
+            List<KxsUser> kxsUserList = new ArrayList<>();
+            kxsUserList.addAll(list);
+            Map<Integer, SysTopUserVO> topUserMap = getTopUserMap(kxsUserList);
             for(SysUserPageVO sysUserPageVO:list){
-                String pidPath = sysUserPageVO.getPidPath();
-                String topUserId = TopUserIdUtil.getTopUserId(pidPath);
-                if(StringUtils.isNotBlank(topUserId)){
-                    map.put(sysUserPageVO.getId(),Integer.valueOf(topUserId));
-                    userIds.add(Integer.valueOf(topUserId));
-                }
-            }
-            if(CollectionUtil.isNotEmpty(userIds)){
-                //查询顶级创客
-                List<KxsUser> kxsUsers = listByIds(userIds);
-                Map<Integer, KxsUser> topUserMap = kxsUsers.stream().collect(Collectors.toMap(o -> o.getId(), o -> o, (o1, o2) -> o2));
-                //设置顶级创客信息
-                for(SysUserPageVO sysUserPageVO:list){
-                    Integer userId = sysUserPageVO.getId();
-                    if(map.containsKey(userId)){
-                        Integer topUserId = map.get(userId);
-                        if(topUserMap.containsKey(topUserId)){
-                            KxsUser kxsUser = topUserMap.get(topUserId);
-                            sysUserPageVO.setTopUserCode(kxsUser.getUserCode());
-                            sysUserPageVO.setTopUsername(kxsUser.getUsername());
-                        }
-                    }
+                Integer userId = sysUserPageVO.getId();
+                if(topUserMap.containsKey(userId)){
+                    SysTopUserVO sysTopUserVO = topUserMap.get(userId);
+                    sysUserPageVO.setTopUsername(sysTopUserVO.getTopUsername());
+                    sysUserPageVO.setTopUserCode(sysTopUserVO.getTopUserCode());
                 }
             }
+        }
+    }
 
+    /**
+     * 获取用户和顶级创客的关系map
+     * @param list
+     * @return
+     */
+    private Map<Integer,SysTopUserVO> getTopUserMap(List<KxsUser> list){
+        //用户和顶级创客的对应关系
+        Map<Integer,SysTopUserVO> topUserMap = new HashMap<>();
+        if(CollectionUtil.isEmpty(list)){
+            return topUserMap;
+        }
+        //顶级创客的userId集合
+        List<Integer> userIds = new ArrayList<>();
+        //当前用户和顶级创客对应关系map
+        Map<Integer,Integer> map = new HashMap<>();
+        for(KxsUser kxsUser:list){
+            String pidPath = kxsUser.getPidPath();
+            String topUserId = TopUserIdUtil.getTopUserId(pidPath);
+            if(StringUtils.isNotBlank(topUserId)){
+                map.put(kxsUser.getId(),Integer.valueOf(topUserId));
+                userIds.add(Integer.valueOf(topUserId));
+            }
         }
+        if(CollectionUtil.isNotEmpty(userIds)){
+            //查询顶级创客
+            List<KxsUser> kxsUsers = listByIds(userIds);
+            Map<Integer, KxsUser> userMap = kxsUsers.stream().collect(Collectors.toMap(o -> o.getId(), o -> o, (o1, o2) -> o2));
+            for(Integer userId:map.keySet()){
+                Integer topUserId = map.get(userId);
+                if(map.containsKey(userId) && userMap.containsKey(topUserId)){
+                    KxsUser kxsUser = userMap.get(topUserId);
+                    SysTopUserVO sysTopUserVO = new SysTopUserVO();
+                    sysTopUserVO.setTopUserCode(kxsUser.getUserCode());
+                    sysTopUserVO.setTopUsername(kxsUser.getUsername());
+                    topUserMap.put(userId,sysTopUserVO);
+                }
+            }
+       }
+       return topUserMap;
     }
 
     @Override
@@ -429,6 +456,41 @@ public class KxsUserServiceImpl extends ServiceImpl<KxsUserMapper, KxsUser> impl
         return list;
     }
 
+    @Override
+    public List<Integer> searchUserList(UserSearchDTO userSearchDTO) {
+        LambdaQueryWrapper<KxsUser> query = new LambdaQueryWrapper();
+        query.like(StringUtils.isNotBlank(userSearchDTO.getUsername()),KxsUser::getUsername,userSearchDTO.getUsername());
+        query.like(StringUtils.isNotBlank(userSearchDTO.getUserCode()),KxsUser::getUserCode,userSearchDTO.getUserCode());
+        query.last("limit 100");
+        List<Integer> ids = new ArrayList<>();
+        List<KxsUser> userList = this.list(query);
+        if(CollectionUtil.isNotEmpty(userList)){
+            ids = userList.stream().map(o -> o.getId()).collect(Collectors.toList());
+        }
+        return ids;
+    }
+
+    @Override
+    public Map<Integer, SysFeignUserDetailVO> topUserList(List<Integer> userIds) {
+        List<KxsUser> kxsUsers = listByIds(userIds);
+        Map<Integer, SysTopUserVO> topUserMap = getTopUserMap(kxsUsers);
+        Map<Integer,SysFeignUserDetailVO> map = new HashMap<>();
+        if(CollectionUtil.isNotEmpty(kxsUsers)){
+            for(KxsUser kxsUser:kxsUsers){
+                SysFeignUserDetailVO sysFeignUserDetailVO = new SysFeignUserDetailVO();
+                sysFeignUserDetailVO.setUsername(kxsUser.getUsername());
+                sysFeignUserDetailVO.setUserCode(kxsUser.getUserCode());
+                if(topUserMap.containsKey(kxsUser.getId())){
+                    SysTopUserVO sysTopUserVO = topUserMap.get(kxsUser.getId());
+                    sysFeignUserDetailVO.setTopUserCode(sysTopUserVO.getTopUserCode());
+                    sysFeignUserDetailVO.setTopUsername(sysTopUserVO.getTopUsername());
+                }
+                map.put(kxsUser.getId(),sysFeignUserDetailVO);
+            }
+        }
+        return map;
+    }
+
     @Override
     public Boolean sendCode(String mobile) {