فهرست منبع

新增我的订单列表相关接口

zhangchen 1 ماه پیش
والد
کامیت
b95f4e09cc

+ 5 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/LawyerConsultationOrderVO.java

@@ -5,9 +5,11 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import shop.alien.entity.store.LawyerLegalProblemScenario;
 
 import java.io.Serializable;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 律師諮詢訂單視圖對象(包含律師信息)
@@ -135,5 +137,8 @@ public class LawyerConsultationOrderVO implements Serializable {
 
     @ApiModelProperty(value = "個人簡介(詳細)")
     private String personalIntroduction;
+
+    @ApiModelProperty(value = "领域列表")
+    private List<String> lawyerLegalProblemScenarioList;
 }
 

+ 16 - 0
alien-entity/src/main/java/shop/alien/mapper/LawyerConsultationOrderMapper.java

@@ -42,5 +42,21 @@ public interface LawyerConsultationOrderMapper extends BaseMapper<LawyerConsulta
             @Param("orderStatus") Integer orderStatus,
             @Param("lawyerUserIds") List<Integer> lawyerUserIds
     );
+
+    /**
+     * 根据用户ID查询订单列表
+     *
+     * @param page 分页
+     * @param userId 用户ID
+     * @param orderStatus 订单状态
+     * @param lawyerUserIds 律师ID列表
+     * @return 列表结果
+     */
+    IPage<LawyerConsultationOrderVO> getConsultationOrderListById(
+            IPage<LawyerConsultationOrderVO> page,
+            @Param("userId") String userId,
+            @Param("orderStatus") String orderStatus,
+            @Param("lawyerUserIds") List<Integer> lawyerUserIds
+    );
 }
 

+ 2 - 0
alien-entity/src/main/java/shop/alien/mapper/LawyerLegalProblemScenarioMapper.java

@@ -15,5 +15,7 @@ import shop.alien.entity.store.LawyerLegalProblemScenario;
 @Mapper
 public interface LawyerLegalProblemScenarioMapper extends BaseMapper<LawyerLegalProblemScenario> {
 
+
+
 }
 

+ 13 - 0
alien-entity/src/main/java/shop/alien/mapper/LawyerServiceAreaMapper.java

@@ -1,8 +1,17 @@
 package shop.alien.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import shop.alien.entity.store.LawyerServiceArea;
+import shop.alien.entity.store.vo.LifeAppealManageVo;
+import shop.alien.entity.store.vo.LifeCouponVo;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -15,5 +24,9 @@ import shop.alien.entity.store.LawyerServiceArea;
 @Mapper
 public interface LawyerServiceAreaMapper extends BaseMapper<LawyerServiceArea> {
 
+    @Select("select lsa.lawyer_user_id, llps.name from lawyer_service_area lsa \n" +
+            "left join lawyer_legal_problem_scenario llps on llps.id = lsa.problem_scenar_id \n" +
+            " ${ew.customSqlSegment}")
+    List<Map<String, Object>> getLawyerLegalProblemScenarioList(@Param(Constants.WRAPPER) QueryWrapper<LawyerServiceArea> queryWrapper);
 }
 

+ 58 - 0
alien-entity/src/main/resources/mapper/LawyerConsultationOrderMapper.xml

@@ -145,5 +145,63 @@
         ORDER BY o.created_time DESC
     </select>
 
+
+    <!-- 根据用户ID查询订单列表 -->
+    <select id="getConsultationOrderListById" resultMap="OrderVOWithLawyerResultMap">
+        SELECT
+        lco.id,
+        lco.order_number,
+        lco.client_user_id,
+        lco.lawyer_user_id,
+        lco.problem_scenario_id,
+        lco.problem_description,
+        ROUND(IFNULL(lco.order_amount, 0) / 100, 2) as order_amount,
+        lco.consultation_fee,
+        lco.start_time,
+        lco.end_time,
+        lco.order_status,
+        lco.payment_status,
+        lco.order_time,
+        lco.payment_time,
+        lco.validity_period,
+        lco.rating,
+        lco.comment,
+        lco.created_time,
+        lu.name AS lawyer_name,
+        lu.phone AS lawyer_phone,
+        lu.email AS lawyer_email,
+        lu.lawyer_certificate_no,
+        lu.law_firm,
+        lu.practice_years,
+        lu.specialty_fields,
+        lu.certification_status,
+        lu.service_score,
+        lu.service_count,
+        lu.consultation_fee AS lawyer_consultation_fee,
+        lu.province,
+        lu.city,
+        lu.district,
+        lu.address,
+        lu.head_img,
+        lu.nick_name,
+        lu.personal_introduction
+        FROM lawyer_consultation_order lco
+        LEFT JOIN lawyer_user lu ON lco.lawyer_user_id = lu.id AND lu.delete_flag = 0
+        WHERE lco.delete_flag = 0
+        <if test="userId != null and userId !=''">
+            AND lco.client_user_id = #{userId}
+        </if>
+        <if test="lawyerUserIds != null and lawyerUserIds.size() > 0">
+            AND lco.lawyer_user_id IN
+            <foreach collection="lawyerUserIds" item="id" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+        </if>
+        <if test="orderStatus != null and orderStatus !=''">
+            AND lco.order_status = #{orderStatus}
+        </if>
+        ORDER BY lco.created_time DESC
+    </select>
+
 </mapper>
 

+ 20 - 0
alien-store/src/main/java/shop/alien/store/controller/LawyerConsultationOrderController.java

@@ -208,5 +208,25 @@ public class LawyerConsultationOrderController {
         return consultationOrderService.payStatus(id, paymentStatus, orderStatus);
     }
 
+    @ApiOperation("查询根据用户id查询订单")
+    @ApiOperationSupport(order = 11)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "page", value = "页数(默认1)", dataType = "int", paramType = "query"),
+            @ApiImplicitParam(name = "size", value = "页容(默认10)", dataType = "int", paramType = "query"),
+            @ApiImplicitParam(name = "userId", value = "客户端用户ID", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "orderStatus", value = "订单状态, 0:待支付, 1:已支付, 2:进行中, 3:已完成, 4:已取消", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "lawyerName", value = "律师姓名(支持模糊查询,关联查询)", dataType = "String", paramType = "query")
+    })
+    @GetMapping("/getConsultationOrderListById")
+    public R<IPage<LawyerConsultationOrderVO>> getConsultationOrderListById(@RequestParam(defaultValue = "1") int page,
+                                                                        @RequestParam(defaultValue = "10") int size,
+                                                                        @RequestParam(required = false) String userId,
+                                                                        @RequestParam(required = false) String orderStatus,
+                                                                        @RequestParam(required = false) String lawyerName) {
+        log.info("LawyerConsultationOrderController.getConsultationOrderListById?pageNum={},pageSize={},userId={},orderStatus={},lawyerName={}",
+                page, size, userId, orderStatus, lawyerName);
+        return consultationOrderService.getConsultationOrderListById(page, size, userId, orderStatus, lawyerName);
+    }
+
 }
 

+ 12 - 0
alien-store/src/main/java/shop/alien/store/service/LawyerConsultationOrderService.java

@@ -72,5 +72,17 @@ public interface LawyerConsultationOrderService extends IService<LawyerConsultat
     R<LawyerConsultationOrder> consultNow(Integer clientUserId,Integer lawyerUserId,Integer problemScenarioId ,String problemDescription , BigDecimal orderAmount);
 
     R<LawyerConsultationOrder> payStatus(Integer id,Integer paymentStatus,Integer orderStatus);
+
+
+    /**
+     * 根据用户Id查询订单列表(包含律师信息)
+     *
+     * @param pageNum      页码
+     * @param pageSize     页容
+     * @param userId  订单编号
+     * @param orderStatus 订单状态
+     * @return IPage<LawyerConsultationOrderVO>
+     */
+    R<IPage<LawyerConsultationOrderVO>> getConsultationOrderListById(int pageNum, int pageSize, String userId, String orderStatus, String lawyerName);
 }
 

+ 67 - 0
alien-store/src/main/java/shop/alien/store/service/impl/LawyerConsultationOrderServiceImpl.java

@@ -1,6 +1,8 @@
 package shop.alien.store.service.impl;
 
+import com.alibaba.nacos.common.utils.CollectionUtils;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -14,9 +16,12 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.util.StringUtils;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.LawyerConsultationOrder;
+import shop.alien.entity.store.LawyerServiceArea;
 import shop.alien.entity.store.LawyerUser;
 import shop.alien.entity.store.vo.LawyerConsultationOrderVO;
+import shop.alien.entity.store.vo.LifeCouponVo;
 import shop.alien.mapper.LawyerConsultationOrderMapper;
+import shop.alien.mapper.LawyerServiceAreaMapper;
 import shop.alien.store.service.LawyerConsultationOrderService;
 import shop.alien.store.service.LawyerUserService;
 
@@ -39,6 +44,7 @@ public class LawyerConsultationOrderServiceImpl extends ServiceImpl<LawyerConsul
 
     private final LawyerConsultationOrderMapper consultationOrderMapper;
     private final LawyerUserService lawyerUserService;
+    private final LawyerServiceAreaMapper lawyerServiceAreaMapper;
 
     @Override
     public R<IPage<LawyerConsultationOrderVO>> getConsultationOrderList(int pageNum, int pageSize, String orderNumber,
@@ -254,5 +260,66 @@ public class LawyerConsultationOrderServiceImpl extends ServiceImpl<LawyerConsul
                 return R.fail("失败");
     }
 
+    @Override
+    public R<IPage<LawyerConsultationOrderVO>> getConsultationOrderListById(int pageNum, int pageSize, String userId, String orderStatus ,String lawyerName) {
+
+        Page<LawyerConsultationOrderVO> page = new Page<>(pageNum, pageSize);
+        // 如果按律師姓名搜索,先查詢匹配的律師ID列表
+        List<Integer> lawyerUserIds = null;
+        if (StringUtils.hasText(lawyerName)) {
+            LambdaQueryWrapper<LawyerUser> lawyerQueryWrapper = new LambdaQueryWrapper<>();
+            lawyerQueryWrapper.eq(LawyerUser::getDeleteFlag, 0);
+            lawyerQueryWrapper.like(LawyerUser::getName, lawyerName);
+            List<LawyerUser> lawyerUsers = lawyerUserService.list(lawyerQueryWrapper);
+            if (lawyerUsers != null && !lawyerUsers.isEmpty()) {
+                lawyerUserIds = lawyerUsers.stream()
+                        .map(LawyerUser::getId)
+                        .collect(Collectors.toList());
+            } else {
+                // 如果沒有找到匹配的律師,返回空結果
+                Page<LawyerConsultationOrderVO> emptyPage = new Page<>(pageNum, pageSize);
+                emptyPage.setRecords(Collections.emptyList());
+                emptyPage.setTotal(0);
+                return R.data(emptyPage);
+            }
+        }
+
+        // 查询订单列表
+        IPage<LawyerConsultationOrderVO> voPage = consultationOrderMapper.getConsultationOrderListById(
+                page, userId, orderStatus, lawyerUserIds);
+        List<LawyerConsultationOrderVO> lawyerConsultationOrderVOS = voPage.getRecords();
+        if(CollectionUtils.isNotEmpty(lawyerConsultationOrderVOS)){
+            List<Integer> lawyerIdList = lawyerConsultationOrderVOS.stream()
+                    .map(LawyerConsultationOrderVO::getLawyerUserId)
+                    .collect(Collectors.toList());
+            if(CollectionUtils.isNotEmpty(lawyerIdList)){
+                QueryWrapper<LawyerServiceArea> wrapper = new QueryWrapper<>();
+                wrapper.in("lsa.lawyer_user_id", lawyerIdList);
+                wrapper.in("lsa.delete_flag", 0);
+                wrapper.in("lsa.status", 1);
+
+                List<Map<String, Object>> lawyerLegalProblemScenarioData =  lawyerServiceAreaMapper.getLawyerLegalProblemScenarioList(wrapper);
+                Map<String, List<String>> lawyerLegalProblemScenarioLawyer = new HashMap<>();
+                for (Map<String, Object> row : lawyerLegalProblemScenarioData) {
+                    String lawyerUserId = String.valueOf(row.get("lawyer_user_id"));
+                    String ScenarioName = (String) row.get("name");
+                    if (lawyerUserId != null) {
+                        lawyerLegalProblemScenarioLawyer.computeIfAbsent(lawyerUserId, k -> new ArrayList<>())
+                                .add(ScenarioName != null ? ScenarioName : "");
+                    }
+                }
+
+                if(!lawyerLegalProblemScenarioLawyer.isEmpty()){
+                    voPage.getRecords().forEach(entity -> {
+                        String lawyerUserId = String.valueOf(entity.getLawyerUserId());
+                        if(lawyerLegalProblemScenarioLawyer.containsKey(lawyerUserId)){
+                            entity.setLawyerLegalProblemScenarioList(lawyerLegalProblemScenarioLawyer.get(lawyerUserId));
+                        }
+                    });
+                }
+            }
+        }
+        return R.data(voPage);
+    }
 }