Bläddra i källkod

用户端律师开发

ldz 1 månad sedan
förälder
incheckning
07291622e2

+ 6 - 1
alien-entity/src/main/java/shop/alien/entity/store/LawyerConsultationOrder.java

@@ -49,7 +49,7 @@ public class LawyerConsultationOrder extends Model<LawyerConsultationOrder> {
 
     @ApiModelProperty(value = "订单金额,单位分")
     @TableField("order_amount")
-    private BigDecimal orderAmount;
+    private Integer orderAmount;
 
     @ApiModelProperty(value = "咨询费用,单位分")
     @TableField("consultation_fee")
@@ -127,5 +127,10 @@ public class LawyerConsultationOrder extends Model<LawyerConsultationOrder> {
     @TableField("order_str")
     private String orderStr;
 
+    @ApiModelProperty(value = "律所id")
+    @TableField("place_id")
+    private  Integer placeId;
+
+
 }
 

+ 1 - 1
alien-entity/src/main/java/shop/alien/entity/store/LawyerUser.java

@@ -273,7 +273,7 @@ public class LawyerUser extends Model<LawyerUser> {
     @TableField("order_receiving_status")
     private Integer orderReceivingStatus;
 
-    @ApiModelProperty(value = "领域ID, 0:不接单, 1:接单中")
+    @ApiModelProperty(value = "领域ID")
     @TableField("lawyer_expertise_area_id")
     private Integer lawyerExpertiseAreaId;
 

+ 5 - 1
alien-entity/src/main/java/shop/alien/entity/store/dto/LawyerConsultationOrderDto.java

@@ -42,7 +42,7 @@ public class LawyerConsultationOrderDto extends Model<LawyerConsultationOrderDto
     private String problemDescription;
 
     @ApiModelProperty(value = "订单金额,单位分")
-    private BigDecimal orderAmount;
+    private Integer orderAmount;
 
     @ApiModelProperty(value = "咨询费用,单位分")
     private Integer consultationFee;
@@ -105,6 +105,10 @@ public class LawyerConsultationOrderDto extends Model<LawyerConsultationOrderDto
     @TableField("order_str")
     private String orderStr;
 
+    @ApiModelProperty(value = "律所id")
+    @TableField("place_id")
+    private  Integer placeId;
+
 
 }
 

+ 15 - 5
alien-entity/src/main/java/shop/alien/mapper/LawyerConsultationOrderMapper.java

@@ -93,7 +93,9 @@ public interface LawyerConsultationOrderMapper extends BaseMapper<LawyerConsulta
             " `updated_time`," +
             " `updated_user_id`, " +
             "`alipay_no`," +
-            "`order_str`)"+
+            "`order_str`," +
+            "place_id" +
+            ")"+
             "VALUES" +
             " (" +
             " #{id}, " +
@@ -119,7 +121,9 @@ public interface LawyerConsultationOrderMapper extends BaseMapper<LawyerConsulta
             " #{updatedTime}," +
             " #{updatedUserId}," +
             " #{alipayNo}," +
-            " #{orderStr})")
+            " #{orderStr}," +
+            "#{placeId}" +
+            ")")
             int insertOrder(LawyerConsultationOrderDto order);
 
 
@@ -239,7 +243,8 @@ public interface LawyerConsultationOrderMapper extends BaseMapper<LawyerConsulta
 
 
     //查询咨询订单
-    @Select("SELECT " +
+    @Select("<script>" +
+            "SELECT " +
             "id, " +
             "order_number, " +
             "client_user_id, " +
@@ -266,9 +271,14 @@ public interface LawyerConsultationOrderMapper extends BaseMapper<LawyerConsulta
             "order_str " +
             "FROM " +
             "lawyer_consultation_order " +
-            "WHERE client_user_id = #{clientUserId} " +
+            "WHERE order_status = 2 " +
+            "<if test='clientUserId != null'>" +
+            "AND client_user_id = #{clientUserId} " +
+            "</if>" +
+            "<if test='lawyerUserId != null'>" +
             "AND lawyer_user_id = #{lawyerUserId} " +
-            "AND order_status = 2")
+            "</if>" +
+            "</script>")
     List<LawyerConsultationOrder> selectOrder(
             @Param("clientUserId") Integer clientUserId,
             @Param("lawyerUserId") Integer lawyerUserId);

+ 2 - 1
alien-entity/src/main/resources/mapper/LawyerConsultationOrderMapper.xml

@@ -28,6 +28,7 @@
         <result column="updated_user_id" property="updatedUserId" />
         <result column="alipay_no" property="alipayNo" />
         <result column="order_str" property="orderStr" />
+        <result column="place_id" property="placeId" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
@@ -35,7 +36,7 @@
         id, order_number, client_user_id, lawyer_user_id, problem_scenario_id, problem_description,
         order_amount, consultation_fee, start_time, end_time, order_status, payment_status,
         order_time,payment_time, validity_period, rating, comment, delete_flag, created_time,
-        created_user_id, updated_time, updated_user_id, alipay_no, order_str
+        created_user_id, updated_time, updated_user_id, alipay_no, order_str, place_id
     </sql>
 
     <!-- 訂單VO結果映射,包含律師信息 -->

+ 13 - 1
alien-lawyer/src/main/java/shop/alien/lawyer/controller/LawyerUserController.java

@@ -188,7 +188,7 @@ public class LawyerUserController {
 
 
     @ApiOperation("根据AI返回场景获取推荐律师列表")
-    @ApiOperationSupport(order = 11)
+    @ApiOperationSupport(order = 12)
     @ApiImplicitParams({
             @ApiImplicitParam(name = "page", value = "页码(默认1)", dataType = "int", paramType = "query"),
             @ApiImplicitParam(name = "pageSize", value = "每页数量(默认5)", dataType = "int", paramType = "query"),
@@ -204,5 +204,17 @@ public class LawyerUserController {
         return lawyerUserService.getAiRecommendList(page, size, categoryId);
     }
 
+
+    @ApiOperation("注销律师用户")
+    @ApiOperationSupport(order = 13)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "律师ID", dataType = "Integer", paramType = "query", required = true)
+    })
+    @PostMapping("/logOutLawyerUser")
+    public R<Map<String, Object>> logOutLawyerUser(@RequestParam(value = "id") Integer id) {
+        log.info("LawyerUserController.logOutLawyerUser?id={}", id);
+        return lawyerUserService.logOutLawyerUser(id);
+    }
+
 }
 

+ 16 - 0
alien-lawyer/src/main/java/shop/alien/lawyer/service/LawyerUserService.java

@@ -2,6 +2,7 @@ package shop.alien.lawyer.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.springframework.web.bind.annotation.RequestParam;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.LawyerUser;
 
@@ -106,5 +107,20 @@ public interface LawyerUserService extends IService<LawyerUser> {
      * @return R<IPage<LawyerUser>>
      */
     R<IPage<LawyerUser>> getAiRecommendList(int page, int size, Integer categoryId);
+
+    /**
+     * 注销律师用户
+     * <p>
+     * 注销前会进行以下校验:
+     * 1. 参数校验:律师ID不能为空
+     * 2. 律师存在性校验:律师必须存在
+     * 3. 注销状态校验:已注销的律师不允许重复注销
+     * 4. 设置注销相关字段:注销标记、注销时间、状态等
+     * </p>
+     *
+     * @param id 律师ID
+     * @return R<Map<String, Object>> 注销结果,包含律师ID、姓名、手机号、注销标记、注销时间等信息
+     */
+    R<Map<String, Object>> logOutLawyerUser(Integer id);
 }
 

+ 99 - 4
alien-lawyer/src/main/java/shop/alien/lawyer/service/impl/LawyerUserServiceImpl.java

@@ -9,16 +9,15 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 import shop.alien.entity.result.R;
-import shop.alien.entity.store.LawyerLegalProblemScenario;
-import shop.alien.entity.store.LawyerServiceArea;
-import shop.alien.entity.store.LawyerUser;
-import shop.alien.entity.store.LawyerUserSearchHistory;
+import shop.alien.entity.store.*;
 import shop.alien.lawyer.service.LawyerLegalProblemScenarioService;
 import shop.alien.lawyer.service.LawyerServiceAreaService;
 import shop.alien.lawyer.service.LawyerUserSearchHistoryService;
 import shop.alien.lawyer.service.LawyerUserService;
+import shop.alien.mapper.LawyerConsultationOrderMapper;
 import shop.alien.mapper.LawyerUserMapper;
 
 import java.util.*;
@@ -40,6 +39,7 @@ public class LawyerUserServiceImpl extends ServiceImpl<LawyerUserMapper, LawyerU
     private final LawyerServiceAreaService lawyerServiceAreaService;
     private final LawyerUserSearchHistoryService userSearchHistoryService;
     private final LawyerLegalProblemScenarioService lawyerLegalProblemScenarioService;
+    private final LawyerConsultationOrderMapper lawyerConsultationOrderMapper;
 
     @Override
     public R<IPage<LawyerUser>> getLawyerUserList(int pageNum, int pageSize, String name, String phone, Integer status) {
@@ -394,5 +394,100 @@ public class LawyerUserServiceImpl extends ServiceImpl<LawyerUserMapper, LawyerU
 
         return R.data(pageResult);
     }
+
+    /**
+     * 注销律师用户
+     * <p>
+     * 注销前会进行以下校验:
+     * 1. 参数校验:律师ID不能为空
+     * 2. 律师存在性校验:律师必须存在
+     * 3. 注销状态校验:已注销的律师不允许重复注销
+     * 4. 设置注销相关字段:注销标记、注销时间、状态等
+     * </p>
+     *
+     * @param id 律师ID
+     * @return 注销结果,包含注销信息
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R<Map<String, Object>> logOutLawyerUser(Integer id) {
+        log.info("开始注销律师用户,律师ID={}", id);
+
+        Map<String, Object> resultMap = new HashMap<>();
+
+        // 参数校验
+        if (id == null) {
+            log.warn("注销律师用户失败:律师ID为空");
+            return R.fail("律师ID不能为空");
+        }
+
+        // 查询律师信息
+        LawyerUser lawyerUser = this.getById(id);
+        if (lawyerUser == null) {
+            log.warn("注销律师用户失败:律师不存在,律师ID={}", id);
+            return R.fail("律师不存在");
+        }
+
+        // 检查是否已经注销
+        if (lawyerUser.getLogoutFlag() != null && lawyerUser.getLogoutFlag() == 1) {
+            log.warn("注销律师用户失败:律师已注销,律师ID={}, 律师姓名={}", id, lawyerUser.getName());
+            return R.fail("该律师账号已注销,无需重复注销");
+        }
+
+        // 检查是否已删除
+        if (lawyerUser.getDeleteFlag() != null && lawyerUser.getDeleteFlag() == 1) {
+            log.warn("注销律师用户失败:律师已删除,律师ID={}, 律师姓名={}", id, lawyerUser.getName());
+            return R.fail("该律师账号已删除");
+        }
+
+        List<LawyerConsultationOrder> list=lawyerConsultationOrderMapper.selectOrder(null, id);
+
+
+        if (!CollectionUtils.isEmpty( list)){
+            // 提示前端有未完成订单 1:有未完成订单  0:无未完成订单
+            resultMap.put("unfinishedOrder", 1);
+        }
+
+        if (lawyerUser.getOrderReceivingStatus() != null && lawyerUser.getOrderReceivingStatus() == 1){
+            // 提示前端接单状态为接单中 1:接单中  0:未接单
+            resultMap.put("orderReceivingStatus", 1);
+        }
+
+        if (CollectionUtils.isEmpty( list) || lawyerUser.getStatus() == 0){
+            // 设置注销相关字段
+            lawyerUser.setLogoutFlag(1); // 注销标记:1-已注销
+            lawyerUser.setLogoutTime(new Date()); // 注销时间
+            lawyerUser.setStatus(0); // 状态设置为禁用
+            lawyerUser.setOrderReceivingStatus(0); // 接单状态设置为不接单
+            lawyerUser.setIsOnline(0); // 在线状态设置为离线
+            lawyerUser.setIsRecommended(0); // 推荐状态设置为不推荐
+            lawyerUser.setLastOnlineTime(new Date());
+
+            // 如果传入了注销原因,可以在这里设置
+//         lawyerUser.setLogoutReason(logoutReason);
+//         lawyerUser.setLogoutCode(logoutCode);
+
+            // 执行更新操作
+            boolean result = this.updateById(lawyerUser);
+            if (!result) {
+                log.error("注销律师用户失败:更新数据库失败,律师ID={}", id);
+                return R.fail("注销失败,请稍后重试");
+            }
+
+            log.info("注销律师用户成功,律师ID={}, 律师姓名={}, 注销时间={}",
+                    id, lawyerUser.getName(), lawyerUser.getLogoutTime());
+
+            // 构建返回结果
+            resultMap.put("id", lawyerUser.getId());
+            resultMap.put("name", lawyerUser.getName());
+            resultMap.put("phone", lawyerUser.getPhone());
+            resultMap.put("logoutFlag", lawyerUser.getLogoutFlag());
+            resultMap.put("logoutTime", lawyerUser.getLogoutTime());
+            resultMap.put("status", lawyerUser.getStatus());
+            resultMap.put("message", "律师账号注销成功");
+        }
+
+        return R.data(resultMap);
+    }
 }
 

+ 6 - 4
alien-store/src/main/java/shop/alien/store/service/impl/LawyerConsultationOrderServiceImpl.java

@@ -413,6 +413,7 @@ public class LawyerConsultationOrderServiceImpl extends ServiceImpl<LawyerConsul
         order.setDeleteFlag(0);
         order.setAlipayNo(lawyerConsultationOrder.getAlipayNo());
         order.setOrderStr(lawyerConsultationOrder.getOrderStr());
+        order.setPlaceId(lawyerConsultationOrder.getPlaceId());
         //订单编号想要LAW+年月日(8位数字)+随机5位数字这种格式的
         String orderNumber = "LAW" + new SimpleDateFormat("yyyyMMdd").format(new Date()) + String.format("%05d", RandomUtils.nextInt(100000));
         order.setOrderNumber(orderNumber);
@@ -421,10 +422,11 @@ public class LawyerConsultationOrderServiceImpl extends ServiceImpl<LawyerConsul
         if(lawyerUser != null){
             Integer commissionRate = lawyerUser.getCommissionRate();
             int rate = commissionRate!=null&&commissionRate>0?commissionRate:3;
-            BigDecimal orderAmount =  lawyerConsultationOrder.getOrderAmount();
-            BigDecimal result2 = orderAmount.multiply(new BigDecimal(rate/100))
-                    .setScale(0, RoundingMode.HALF_UP);
-            order.setConsultationFee(result2.intValue());
+            Integer orderAmount =  lawyerConsultationOrder.getOrderAmount();
+//            BigDecimal result2 = orderAmount.multiply(new BigDecimal(rate/100))
+//                    .setScale(0, RoundingMode.HALF_UP);
+            Integer result2=orderAmount*rate/100;
+            order.setConsultationFee(result2);
         }
         int num = consultationOrderMapper.insertOrder(order);