Эх сурвалжийг харах

律师中台 律所导出 下载模版

qxy 4 долоо хоног өмнө
parent
commit
6d57591fdd
16 өөрчлөгдсөн 536 нэмэгдсэн , 82 устгасан
  1. 3 7
      alien-entity/src/main/java/shop/alien/entity/store/LifeSys.java
  2. 8 1
      alien-entity/src/main/java/shop/alien/entity/store/dto/SystemRegisterDto.java
  3. 2 2
      alien-entity/src/main/java/shop/alien/entity/store/excelVo/LawFirmExcelVo.java
  4. 1 1
      alien-entity/src/main/java/shop/alien/entity/store/vo/LawyerUserVo.java
  5. 8 3
      alien-entity/src/main/java/shop/alien/mapper/LawyerUserMapper.java
  6. 10 20
      alien-entity/src/main/resources/mapper/LawyerUserMapper.xml
  7. 274 5
      alien-gateway/src/main/java/shop/alien/gateway/controller/SystemController.java
  8. 37 1
      alien-gateway/src/main/java/shop/alien/gateway/service/SystemService.java
  9. 78 2
      alien-gateway/src/main/java/shop/alien/gateway/service/impl/SystemServiceImpl.java
  10. 9 0
      alien-lawyer/src/main/java/shop/alien/lawyer/controller/LawFirmController.java
  11. 14 14
      alien-lawyer/src/main/java/shop/alien/lawyer/controller/LawyerUserController.java
  12. 9 1
      alien-lawyer/src/main/java/shop/alien/lawyer/service/LawFirmService.java
  13. 14 8
      alien-lawyer/src/main/java/shop/alien/lawyer/service/LawyerUserService.java
  14. 55 0
      alien-lawyer/src/main/java/shop/alien/lawyer/service/impl/LawFirmServiceImpl.java
  15. 11 14
      alien-lawyer/src/main/java/shop/alien/lawyer/service/impl/LawyerUserServiceImpl.java
  16. 3 3
      alien-store/src/main/java/shop/alien/store/service/impl/SystemServiceImpl.java

+ 3 - 7
alien-entity/src/main/java/shop/alien/entity/store/LifeSys.java

@@ -52,13 +52,9 @@ public class LifeSys {
     @TableField("updated_user_id")
     private Integer updatedUserId;
 
-    @ApiModelProperty(value = "禁用 0")
-    @TableField("disabled")
-    private Integer disabled;
-
-    @ApiModelProperty(value = "启用 1")
-    @TableField("enabled")
-    private Integer enabled;
+    @ApiModelProperty(value = "启用1 禁用 0")
+    @TableField("status")
+    private Integer status;
 
     @ApiModelProperty(value = "备注")
     @TableField("remark")

+ 8 - 1
alien-entity/src/main/java/shop/alien/entity/store/dto/SystemRegisterDto.java

@@ -1,5 +1,6 @@
 package shop.alien.entity.store.dto;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -22,11 +23,17 @@ public class SystemRegisterDto {
     private String userName;
 
     @ApiModelProperty(value = "密码", required = true)
-    private String password;
+    private String userPassword;
 
     @ApiModelProperty(value = "角色id")
     private String roleId;
 
+    @ApiModelProperty(value = "启用1 禁用 0")
+    private Integer status;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
 }
 
 

+ 2 - 2
alien-entity/src/main/java/shop/alien/entity/store/excelVo/LawFirmExcelVo.java

@@ -17,7 +17,7 @@ import shop.alien.entity.store.excelVo.util.ExcelHeader;
 @ApiModel(value = "LawFirmExcelVo对象", description = "律所表Excel导入导出对象")
 public class LawFirmExcelVo {
 
-    @ExcelHeader("序号")
+//    @ExcelHeader("序号")
     @ApiModelProperty(value = "序号")
     private Integer serialNumber;
 
@@ -109,7 +109,7 @@ public class LawFirmExcelVo {
     @ApiModelProperty(value = "合伙人数量")
     private Integer partnerCount;
 
-    @ExcelHeader("律所状态")
+//    @ExcelHeader("律所状态")
     @ApiModelProperty(value = "律所状态, 0:禁用, 1:启用")
     private String status;
 

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

@@ -314,7 +314,7 @@ public class LawyerUserVo implements Serializable {
     private String scenarioNames;
 
     @ApiModelProperty(value = "专业领域")
-    private String areaInfo;
+    private String expertiseAreaInfo;
 
 
 

+ 8 - 3
alien-entity/src/main/java/shop/alien/mapper/LawyerUserMapper.java

@@ -1,7 +1,6 @@
 package shop.alien.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
@@ -135,9 +134,15 @@ Integer updateLawyerUser(LawyerUser user);
            "</script>")
    LawyerUserVo selectInfo(@Param("lawyerId") Integer lawyerId);
 
-   List<LawyerUserVo> selectLawyerUserList(@Param("user") LawyerUserVo user);
+   List<LawyerUserVo> selectLawyerUserList(@Param("name") String name,
+                                          @Param("phone") String phone,
+                                          @Param("firmId") Integer firmId,
+                                          @Param("createdTimeStart") String createdTimeStart);
    
-   Long selectLawyerUserListCount(@Param("user") LawyerUserVo user);
+   Long selectLawyerUserListCount(@Param("name") String name,
+                                  @Param("phone") String phone,
+                                  @Param("firmId") Integer firmId,
+                                  @Param("createdTimeStart") String createdTimeStart);
 
 }
 

+ 10 - 20
alien-entity/src/main/resources/mapper/LawyerUserMapper.xml

@@ -95,7 +95,7 @@
         <result column="paymentNum" property="paymentNum" />
         <result column="scenarioNames" property="scenarioNames" />
         <result column="firstLevelScenario" property="firstLevelScenario" />
-        <result column="areaInfo" property="areaInfo" />
+        <result column="expertiseAreaInfo" property="expertiseAreaInfo" />
     </resultMap>
 
     <!-- 查询律师列表(分页) -->
@@ -117,7 +117,7 @@
         firm.payment_account AS paymentNum,
         GROUP_CONCAT(a.name SEPARATOR ',') AS scenarioNames,
         (SELECT GROUP_CONCAT(`name` SEPARATOR ',') FROM lawyer_legal_problem_scenario WHERE level = 1) AS firstLevelScenario,
-        b.expertise_area_info AS areaInfo
+        b.expertise_area_info AS expertiseAreaInfo
         FROM
         lawyer_user user
         LEFT JOIN law_firm firm ON firm.id = user.firm_id
@@ -125,14 +125,10 @@
         LEFT JOIN lawyer_legal_problem_scenario a ON a.id = area.problem_scenario_id
         LEFT JOIN lawyer_expertise_area b ON b.id = user.specialty_fields
         WHERE user.delete_flag = 0
-        <if test="user != null">
-            <if test="user.id != null">AND user.id = #{user.id}</if>
-            <if test="user.name != null and user.name != ''">AND user.name LIKE CONCAT('%', #{user.name}, '%')</if>
-            <if test="user.phone != null and user.phone != ''">AND user.phone LIKE CONCAT('%', #{user.phone}, '%')</if>
-            <if test="user.status != null">AND user.status = #{user.status}</if>
-            <if test="user.firmId != null">AND user.firm_id = #{user.firmId}</if>
-            <if test="user.firmName != null and user.firmName != ''">AND firm.firm_name LIKE CONCAT('%', #{user.firmName}, '%')</if>
-        </if>
+        <if test="name != null and name != ''">AND user.name LIKE CONCAT('%', #{name}, '%')</if>
+        <if test="phone != null and phone != ''">AND user.phone LIKE CONCAT('%', #{phone}, '%')</if>
+        <if test="firmId != null">AND user.firm_id = #{firmId}</if>
+        <if test="createdTimeStart != null and createdTimeStart != ''">AND user.created_time &gt;= #{createdTimeStart}</if>
         GROUP BY
         user.id, user.phone, user.`name`, user.firm_id, user.head_img,
         user.personal_introduction, user.order_receiving_status, user.practice_start_date,
@@ -148,16 +144,10 @@
         lawyer_user user
         LEFT JOIN law_firm firm ON firm.id = user.firm_id
         WHERE user.delete_flag = 0
-        <if test="user != null">
-            <if test="user.id != null">AND user.id = #{user.id}</if>
-            <if test="user.name != null and user.name != ''">AND user.name LIKE CONCAT('%', #{user.name}, '%')</if>
-            <if test="user.phone != null and user.phone != ''">AND user.phone LIKE CONCAT('%', #{user.phone}, '%')</if>
-            <if test="user.status != null">AND user.status = #{user.status}</if>
-            <if test="user.firmId != null">AND user.firm_id = #{user.firmId}</if>
-            <if test="user.firmName != null and user.firmName != ''">AND firm.firm_name LIKE CONCAT('%', #{user.firmName}, '%')</if>
-            <if test="user.createdTime_Start != null">AND user.created_time &gt;= #{user.createdTime_Start}</if>
-            <if test="user.createdTime_End != null">AND user.created_time &lt;= #{user.createdTime_End}</if>
-        </if>
+        <if test="name != null and name != ''">AND user.name LIKE CONCAT('%', #{name}, '%')</if>
+        <if test="phone != null and phone != ''">AND user.phone LIKE CONCAT('%', #{phone}, '%')</if>
+        <if test="firmId != null">AND user.firm_id = #{firmId}</if>
+        <if test="createdTimeStart != null and createdTimeStart != ''">AND user.created_time &gt;= #{createdTimeStart}</if>
     </select>
 
 </mapper>

+ 274 - 5
alien-gateway/src/main/java/shop/alien/gateway/controller/SystemController.java

@@ -14,6 +14,8 @@ import shop.alien.gateway.service.SystemService;
 import shop.alien.util.common.TokenInfo;
 import springfox.documentation.annotations.ApiIgnore;
 
+import java.util.List;
+
 /**
  * 商家会员记录 前端控制器
  *
@@ -21,7 +23,7 @@ import springfox.documentation.annotations.ApiIgnore;
  * @since 2025-02-20
  */
 @Slf4j
-@Api(tags = {"数据中台基础服务接口"})
+@Api(tags = {"数据中台基础服务接口"})
 @ApiSort(1)
 @CrossOrigin
 @RestController
@@ -46,7 +48,7 @@ public class SystemController {
     @ApiOperationSupport(order = 2)
     @ApiImplicitParams({
             @ApiImplicitParam(name = "userName", value = "用户名", dataType = "String", paramType = "query"),
-            @ApiImplicitParam(name = "password", value = "密码", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "userPassword", value = "密码", dataType = "String", paramType = "query"),
     })
     @PostMapping(value = "/logout")
     public R<SystemLoginVo> logout(@ApiIgnore @TokenInfo UserLoginInfo userLoginInfo) {
@@ -57,13 +59,280 @@ public class SystemController {
     @ApiOperationSupport(order = 3)
     @ApiImplicitParams({
             @ApiImplicitParam(name = "userName", value = "用户名", dataType = "String", paramType = "body", required = true),
-            @ApiImplicitParam(name = "password", value = "密码", dataType = "String", paramType = "body", required = true),
-            @ApiImplicitParam(name = "roleId", value = "角色id", dataType = "String", paramType = "body", required = false),
+            @ApiImplicitParam(name = "userPassword", value = "密码", dataType = "String", paramType = "body", required = true),
+            @ApiImplicitParam(name = "roleId", value = "角色id", dataType = "Integer", paramType = "body", required = true),
+            @ApiImplicitParam(name = "status", value = "启用 禁用", dataType = "Integer", paramType = "body", required = true),
+            @ApiImplicitParam(name = "remark", value = "备注", dataType = "String", paramType = "body", required = true),
     })
     @PostMapping(value = "/register")
     public R<LifeSys> register(@RequestBody SystemRegisterDto registerDto) {
         log.info("SystemController.register?userName={},roleId={}", registerDto.getUserName(), registerDto.getRoleId());
-        return systemService.register(registerDto.getUserName(), registerDto.getPassword(), registerDto.getRoleId());
+        return systemService.register(registerDto.getUserName(), registerDto.getUserPassword(), registerDto.getRoleId(), registerDto.getStatus(), registerDto.getRemark());
+    }
+
+    @ApiOperation("web中台编辑账号")
+    @ApiOperationSupport(order = 4)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "userName", value = "用户名", dataType = "String", paramType = "body", required = true),
+            @ApiImplicitParam(name = "userPassword", value = "密码", dataType = "String", paramType = "body", required = true)
+    })
+    @PostMapping(value = "/updateAccounInfo")
+    public int updateAccounInfo(@RequestBody LifeSys lifeSys) {
+        log.info("SystemController.register?lifeSys={}", lifeSys);
+        return systemService.updateAccounInfo(lifeSys);
+    }
+
+    @ApiOperation("根据ID查询系统用户")
+    @ApiOperationSupport(order = 5)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "用户ID", dataType = "Integer", paramType = "query", required = true)
+    })
+    @GetMapping(value = "/getById")
+    public R<LifeSys> getById(@RequestParam("id") Integer id) {
+        log.info("SystemController.getById?id={}", id);
+        return systemService.getById(id);
+    }
+
+    @ApiOperation("查询系统用户列表")
+    @ApiOperationSupport(order = 6)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "userName", value = "用户名", dataType = "String", paramType = "query", required = false),
+            @ApiImplicitParam(name = "status", value = "账号状态", dataType = "Integer", paramType = "query", required = false)
+    })
+    @GetMapping(value = "/list")
+    public R<List<LifeSys>> list(@RequestParam(value = "userName", required = false) String userName,
+                                  @RequestParam(value = "status", required = false) Integer status) {
+        log.info("SystemController.list?userName={},status={}", userName, status);
+        return systemService.list(userName, status);
+    }
+
+    @ApiOperation("删除系统用户")
+    @ApiOperationSupport(order = 7)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "用户ID", dataType = "Integer", paramType = "query", required = true)
+    })
+    @DeleteMapping(value = "/delete")
+    public R<String> deleteById(@RequestParam("id") Integer id) {
+        log.info("SystemController.deleteById?id={}", id);
+        return systemService.deleteById(id);
+    }
+
+    @ApiOperation("路由配置")
+    @ApiOperationSupport(order = 9)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "type", value = "路由类型", dataType = "Integer", paramType = "query", required = true)
+    })
+    @GetMapping(value = "/routingInfo")
+    public String routingInfo(@RequestParam(value = "type") Integer type) {
+        log.info("SystemController.list?type={}", type);
+        //type 是 1 为admin登录
+        if(type == 1){
+            String strInfo = "{\n" +
+                    "  \"code\": 200,\n" +
+                    "  \"data\": [\n" +
+                    "    {\n" +
+                    "      \"path\": \"/home/index\",\n" +
+                    "      \"name\": \"home\",\n" +
+                    "      \"component\": \"/home/index\",\n" +
+                    "      \"meta\": {\n" +
+                    "        \"icon\": \"List\",\n" +
+                    "        \"title\": \"首页\",\n" +
+                    "        \"isLink\": \"\",\n" +
+                    "        \"isHide\": false,\n" +
+                    "        \"isFull\": false,\n" +
+                    "        \"isAffix\": false,\n" +
+                    "        \"isKeepAlive\": false\n" +
+                    "      }\n" +
+                    "    },\n" +
+                    "    {\n" +
+                    "      \"path\": \"/lawyerManagement\",\n" +
+                    "      \"name\": \"lawyerManagement\",\n" +
+                    "      \"component\": \"/lawyerManagement/lawFirm/index\",\n" +
+                    "      \"meta\": {\n" +
+                    "        \"icon\": \"Opportunity\",\n" +
+                    "        \"title\": \"律师管理\",\n" +
+                    "        \"isLink\": \"\",\n" +
+                    "        \"isHide\": false,\n" +
+                    "        \"isFull\": false,\n" +
+                    "        \"isAffix\": false,\n" +
+                    "        \"isKeepAlive\": false\n" +
+                    "      },\n" +
+                    "      \"children\": [\n" +
+                    "        {\n" +
+                    "          \"path\": \"/lawyerManagement/lawFirm\",\n" +
+                    "          \"name\": \"lawFirm\",\n" +
+                    "          \"component\": \"/lawyerManagement/lawFirm/index\",\n" +
+                    "          \"meta\": {\n" +
+                    "            \"icon\": \"Briefcase\",\n" +
+                    "            \"title\": \"律所信息\",\n" +
+                    "            \"isLink\": \"\",\n" +
+                    "            \"isHide\": false,\n" +
+                    "            \"isFull\": false,\n" +
+                    "            \"isAffix\": false,\n" +
+                    "            \"isKeepAlive\": false\n" +
+                    "          }\n" +
+                    "        },\n" +
+                    "        {\n" +
+                    "          \"path\": \"/lawyerManagement/lawyer\",\n" +
+                    "          \"name\": \"lawyer\",\n" +
+                    "          \"component\": \"/lawyerManagement/lawyer/index\",\n" +
+                    "          \"meta\": {\n" +
+                    "            \"icon\": \"Briefcase\",\n" +
+                    "            \"title\": \"律师信息\",\n" +
+                    "            \"isLink\": \"\",\n" +
+                    "            \"isHide\": false,\n" +
+                    "            \"isFull\": false,\n" +
+                    "            \"isAffix\": false,\n" +
+                    "            \"isKeepAlive\": false\n" +
+                    "          }\n" +
+                    "        },\n" +
+                    "        {\n" +
+                    "          \"path\": \"/lawyerManagement/legalScene\",\n" +
+                    "          \"name\": \"legalScene\",\n" +
+                    "          \"component\": \"/lawyerManagement/legalScene/index\",\n" +
+                    "          \"meta\": {\n" +
+                    "            \"icon\": \"Briefcase\",\n" +
+                    "            \"title\": \"法律场景\",\n" +
+                    "            \"isLink\": \"\",\n" +
+                    "            \"isHide\": false,\n" +
+                    "            \"isFull\": false,\n" +
+                    "            \"isAffix\": false,\n" +
+                    "            \"isKeepAlive\": false\n" +
+                    "          }\n" +
+                    "        },\n" +
+                    "        {\n" +
+                    "          \"path\": \"/lawyerManagement/professionalField\",\n" +
+                    "          \"name\": \"professionalField\",\n" +
+                    "          \"component\": \"/lawyerManagement/professionalField/index\",\n" +
+                    "          \"meta\": {\n" +
+                    "            \"icon\": \"Briefcase\",\n" +
+                    "            \"title\": \"专业领域\",\n" +
+                    "            \"isLink\": \"\",\n" +
+                    "            \"isHide\": false,\n" +
+                    "            \"isFull\": false,\n" +
+                    "            \"isAffix\": false,\n" +
+                    "            \"isKeepAlive\": false\n" +
+                    "          }\n" +
+                    "        },\n" +
+                    "        {\n" +
+                    "          \"path\": \"/lawyerManagement/reconciliation\",\n" +
+                    "          \"name\": \"reconciliation\",\n" +
+                    "          \"component\": \"/lawyerManagement/reconciliation/index\",\n" +
+                    "          \"meta\": {\n" +
+                    "            \"icon\": \"Briefcase\",\n" +
+                    "            \"title\": \"对账总览\",\n" +
+                    "            \"isLink\": \"\",\n" +
+                    "            \"isHide\": false,\n" +
+                    "            \"isFull\": false,\n" +
+                    "            \"isAffix\": false,\n" +
+                    "            \"isKeepAlive\": false\n" +
+                    "          }\n" +
+                    "        }\n" +
+                    "      ]\n" +
+                    "    },\n" +
+                    "    {\n" +
+                    "      \"path\": \"/userManagement\",\n" +
+                    "      \"name\": \"userManagement\",\n" +
+                    "      \"component\": \"/userManagement/index\",\n" +
+                    "      \"meta\": {\n" +
+                    "        \"icon\": \"UserFilled\",\n" +
+                    "        \"title\": \"用户管理\",\n" +
+                    "        \"isLink\": \"\",\n" +
+                    "        \"isHide\": false,\n" +
+                    "        \"isFull\": false,\n" +
+                    "        \"isAffix\": false,\n" +
+                    "        \"isKeepAlive\": false\n" +
+                    "      }\n" +
+                    "    }\n" +
+                    "  ],\n" +
+                    "  \"msg\": \"成功\"\n" +
+                    "}";
+            return strInfo;
+        }else{
+            String strInfo = "{\n" +
+                    "  \"code\": 200,\n" +
+                    "  \"data\": [\n" +
+                    "    {\n" +
+                    "      \"path\": \"/home/index\",\n" +
+                    "      \"name\": \"home\",\n" +
+                    "      \"component\": \"/home/index\",\n" +
+                    "      \"meta\": {\n" +
+                    "        \"icon\": \"List\",\n" +
+                    "        \"title\": \"首页\",\n" +
+                    "        \"isLink\": \"\",\n" +
+                    "        \"isHide\": false,\n" +
+                    "        \"isFull\": false,\n" +
+                    "        \"isAffix\": false,\n" +
+                    "        \"isKeepAlive\": false\n" +
+                    "      }\n" +
+                    "    },\n" +
+                    "    {\n" +
+                    "      \"path\": \"/lawyerManagement\",\n" +
+                    "      \"name\": \"lawyerManagement\",\n" +
+                    "      \"component\": \"/lawyerManagement/lawFirm/index\",\n" +
+                    "      \"meta\": {\n" +
+                    "        \"icon\": \"Opportunity\",\n" +
+                    "        \"title\": \"律师管理\",\n" +
+                    "        \"isLink\": \"\",\n" +
+                    "        \"isHide\": false,\n" +
+                    "        \"isFull\": false,\n" +
+                    "        \"isAffix\": false,\n" +
+                    "        \"isKeepAlive\": false\n" +
+                    "      },\n" +
+                    "      \"children\": [\n" +
+                    "        {\n" +
+                    "          \"path\": \"/lawyerManagement/lawFirm\",\n" +
+                    "          \"name\": \"lawFirm\",\n" +
+                    "          \"component\": \"/lawyerManagement/lawFirm/index\",\n" +
+                    "          \"meta\": {\n" +
+                    "            \"icon\": \"Briefcase\",\n" +
+                    "            \"title\": \"律所信息\",\n" +
+                    "            \"isLink\": \"\",\n" +
+                    "            \"isHide\": false,\n" +
+                    "            \"isFull\": false,\n" +
+                    "            \"isAffix\": false,\n" +
+                    "            \"isKeepAlive\": false\n" +
+                    "          }\n" +
+                    "        },\n" +
+                    "        {\n" +
+                    "          \"path\": \"/lawyerManagement/lawyer\",\n" +
+                    "          \"name\": \"lawyer\",\n" +
+                    "          \"component\": \"/lawyerManagement/lawyer/index\",\n" +
+                    "          \"meta\": {\n" +
+                    "            \"icon\": \"Briefcase\",\n" +
+                    "            \"title\": \"律师信息\",\n" +
+                    "            \"isLink\": \"\",\n" +
+                    "            \"isHide\": false,\n" +
+                    "            \"isFull\": false,\n" +
+                    "            \"isAffix\": false,\n" +
+                    "            \"isKeepAlive\": false\n" +
+                    "          }\n" +
+                    "        },\n" +
+                    "       \n" +
+                    "        {\n" +
+                    "          \"path\": \"/lawyerManagement/reconciliation\",\n" +
+                    "          \"name\": \"reconciliation\",\n" +
+                    "          \"component\": \"/lawyerManagement/reconciliation/index\",\n" +
+                    "          \"meta\": {\n" +
+                    "            \"icon\": \"Briefcase\",\n" +
+                    "            \"title\": \"对账总览\",\n" +
+                    "            \"isLink\": \"\",\n" +
+                    "            \"isHide\": false,\n" +
+                    "            \"isFull\": false,\n" +
+                    "            \"isAffix\": false,\n" +
+                    "            \"isKeepAlive\": false\n" +
+                    "          }\n" +
+                    "        }\n" +
+                    "      ]\n" +
+                    "    },\n" +
+                    "    \n" +
+                    "    \n" +
+                    "  ],\n" +
+                    "  \"msg\": \"成功\"\n" +
+                    "}";
+            return strInfo;
+        }
+
     }
 
 }

+ 37 - 1
alien-gateway/src/main/java/shop/alien/gateway/service/SystemService.java

@@ -5,6 +5,8 @@ import shop.alien.entity.store.LifeSys;
 import shop.alien.entity.store.UserLoginInfo;
 import shop.alien.entity.store.vo.SystemLoginVo;
 
+import java.util.List;
+
 /**
  * 数据中台基本服务接口
  *
@@ -23,8 +25,42 @@ public interface SystemService {
      * @param userName 用户名
      * @param password 密码
      * @param roleId   角色id
+     * @param status 启用1 禁用0
+     * @param remark   角色id
+     * @return R<LifeSys>
+     */
+    R<LifeSys> register(String userName, String password, String roleId, Integer status, String remark);
+
+    /**
+     * 编辑账户
+     *
+     * @param lifeSys
+     */
+    int updateAccounInfo(LifeSys lifeSys);
+
+    /**
+     * 根据ID查询系统用户
+     *
+     * @param id 用户ID
      * @return R<LifeSys>
      */
-    R<LifeSys> register(String userName, String password, String roleId);
+    R<LifeSys> getById(Integer id);
+
+    /**
+     * 查询系统用户列表
+     *
+     * @param userName 用户名(可选,模糊查询)
+     * @param status 账号状态(可选,启用1 禁用0)
+     * @return R<List<LifeSys>>
+     */
+    R<List<LifeSys>> list(String userName, Integer status);
+
+    /**
+     * 删除系统用户(逻辑删除)
+     *
+     * @param id 用户ID
+     * @return R<String>
+     */
+    R<String> deleteById(Integer id);
 
 }

+ 78 - 2
alien-gateway/src/main/java/shop/alien/gateway/service/impl/SystemServiceImpl.java

@@ -17,7 +17,9 @@ import shop.alien.util.common.JwtUtil;
 
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
+import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -68,7 +70,7 @@ public class SystemServiceImpl implements SystemService {
                 new LambdaQueryWrapper<LifeSys>()
                         .eq(LifeSys::getUserName, username)
         );
-        if (lifeSys != null && lifeSys.getUserPassword().equals(encryptToMD5(password))) {
+        if (lifeSys != null && lifeSys.getUserPassword().equals(password)) {
             Map<String, String> tokenMap = new HashMap<>();
             tokenMap.put("phone", "123456");
             tokenMap.put("userName", lifeSys.getUserName());
@@ -95,7 +97,7 @@ public class SystemServiceImpl implements SystemService {
     }
 
     @Override
-    public R<LifeSys> register(String userName, String password, String roleId) {
+    public R<LifeSys> register(String userName, String password, String roleId, Integer status, String remark) {
         // 校验必填字段
         if (!StringUtils.hasText(userName)) {
             return R.fail("用户名不能为空");
@@ -109,15 +111,32 @@ public class SystemServiceImpl implements SystemService {
         queryWrapper.eq(LifeSys::getUserName, userName);
         LifeSys existingUser = lifeSysMapper.selectOne(queryWrapper);
         if (existingUser != null) {
+            // 如果是 admin 用户,给出特殊提示
+            if ("admin".equalsIgnoreCase(userName)) {
+                return R.fail("admin 用户已存在,不允许重复添加");
+            }
             return R.fail("该用户名已存在,请更换其他用户名");
         }
 
+        // 额外校验:如果尝试注册 admin 用户,检查数据库中是否已存在 admin(防止大小写变体)
+        if ("admin".equalsIgnoreCase(userName)) {
+            LambdaQueryWrapper<LifeSys> adminQueryWrapper = new LambdaQueryWrapper<>();
+            adminQueryWrapper.eq(LifeSys::getUserName, "admin");
+            LifeSys adminUser = lifeSysMapper.selectOne(adminQueryWrapper);
+            if (adminUser != null) {
+                return R.fail("admin 用户已存在,不允许重复添加");
+            }
+        }
+
         // 创建新用户
         LifeSys lifeSys = new LifeSys();
         lifeSys.setUserName(userName);
         lifeSys.setUserPassword(password);
         lifeSys.setRoleId(roleId);
+        lifeSys.setStatus(status);
         lifeSys.setDeleteFlag(0);
+        lifeSys.setRemark(remark);
+        lifeSys.setCreatedTime(new Date());
 
         // 密码使用MD5加密后存储
 //        lifeSys.setUserPassword(encryptToMD5(password));
@@ -133,6 +152,63 @@ public class SystemServiceImpl implements SystemService {
         return R.fail("注册失败,请稍后重试");
     }
 
+    @Override
+    public int updateAccounInfo(LifeSys lifeSys) {
+        return lifeSysMapper.updateById(lifeSys);
+    }
+
+    @Override
+    public R<LifeSys> getById(Integer id) {
+        if (id == null) {
+            return R.fail("用户ID不能为空");
+        }
+        LifeSys lifeSys = lifeSysMapper.selectById(id);
+        if (lifeSys == null) {
+            return R.fail("用户不存在");
+        }
+        return R.data(lifeSys);
+    }
+
+    @Override
+    public R<List<LifeSys>> list(String userName, Integer status) {
+        LambdaQueryWrapper<LifeSys> queryWrapper = new LambdaQueryWrapper<>();
+        if (StringUtils.hasText(userName)) {
+            queryWrapper.like(LifeSys::getUserName, userName);
+        }
+        if (status != null) {
+            queryWrapper.eq(LifeSys::getStatus, status);
+        }
+        queryWrapper.orderByDesc(LifeSys::getCreatedTime);
+        List<LifeSys> list = lifeSysMapper.selectList(queryWrapper);
+        
+        // 如果用户名是 "admin",则不返回 roleId
+        for (LifeSys lifeSys : list) {
+            if ("admin".equalsIgnoreCase(lifeSys.getUserName())) {
+                lifeSys.setRoleId(null);
+            }
+        }
+        
+        return R.data(list);
+    }
+
+    @Override
+    public R<String> deleteById(Integer id) {
+        if (id == null) {
+            return R.fail("用户ID不能为空");
+        }
+        // 先查询用户是否存在
+        LifeSys lifeSys = lifeSysMapper.selectById(id);
+        if (lifeSys == null) {
+            return R.fail("用户不存在");
+        }
+        // 使用 MyBatis-Plus 的逻辑删除,会自动将 deleteFlag 设置为 1
+        int result = lifeSysMapper.deleteById(id);
+        if (result > 0) {
+            return R.success("删除成功");
+        }
+        return R.fail("删除失败");
+    }
+
     public static String encryptToMD5(String input) {
         try {
             // 获取 MD5 算法的 MessageDigest 实例

+ 9 - 0
alien-lawyer/src/main/java/shop/alien/lawyer/controller/LawFirmController.java

@@ -12,6 +12,7 @@ import shop.alien.lawyer.service.LawFirmService;
 import shop.alien.util.myBaticsPlus.QueryBuilder;
 
 import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 import java.util.List;
 
 /**
@@ -155,6 +156,14 @@ public class LawFirmController {
         log.info("LawFirmController.getLawFirmDetail?id={}", id);
         return lawFirmService.getLawFirmDetail(id);
     }
+
+    @ApiOperation("下载律所Excel导入模板")
+    @ApiOperationSupport(order = 10)
+    @GetMapping("/downloadTemplate")
+    public void downloadTemplate(HttpServletResponse response) throws IOException {
+        log.info("LawFirmController.downloadTemplate");
+        lawFirmService.downloadTemplate(response);
+    }
 }
 
 

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

@@ -233,23 +233,23 @@ public class LawyerUserController {
     @ApiOperation("中台律师列表")
     @ApiOperationSupport(order = 17)
     @ApiImplicitParams({
+            @ApiImplicitParam(name = "name", value = "姓名(支持模糊查询)", dataType = "String", paramType = "query", required = false),
+            @ApiImplicitParam(name = "phone", value = "手机号(支持模糊查询)", dataType = "String", paramType = "query", required = false),
+            @ApiImplicitParam(name = "firmId", value = "律所ID", dataType = "Integer", paramType = "query", required = false),
+            @ApiImplicitParam(name = "createdTimeStart", value = "创建时间开始", dataType = "String", paramType = "query", required = false),
             @ApiImplicitParam(name = "page", value = "页码(默认1)", dataType = "int", paramType = "query"),
-            @ApiImplicitParam(name = "pageSize", value = "每页数量(默认10)", dataType = "int", paramType = "query"),
-            @ApiImplicitParam(name = "id", value = "律师ID", dataType = "Integer", paramType = "query"),
-            @ApiImplicitParam(name = "name", value = "姓名(支持模糊查询)", dataType = "String", paramType = "query"),
-            @ApiImplicitParam(name = "phone", value = "手机号(支持模糊查询)", dataType = "String", paramType = "query"),
-            @ApiImplicitParam(name = "status", value = "用户状态, 0:禁用, 1:启用", dataType = "Integer", paramType = "query"),
-            @ApiImplicitParam(name = "firmId", value = "律所ID", dataType = "Integer", paramType = "query"),
-            @ApiImplicitParam(name = "firmName", value = "律所名称(支持模糊查询)", dataType = "String", paramType = "query"),
-            @ApiImplicitParam(name = "createdTime_Start", value = "创建时间开始(范围查询)", dataType = "String", paramType = "query"),
-            @ApiImplicitParam(name = "createdTime_End", value = "创建时间结束(范围查询)", dataType = "String", paramType = "query")
+            @ApiImplicitParam(name = "pageSize", value = "每页数量(默认10)", dataType = "int", paramType = "query")
     })
     @GetMapping("/getLawyerList")
-    public R<IPage<LawyerUserVo>> getLawyerList(@ModelAttribute LawyerUserVo lawyerUserVo,
-                                                 @RequestParam int page,
-                                                 @RequestParam int pageSize) {
-        log.info("LawyerUserController.getLawyerList?lawyerUserVo={},page={},pageSize={}", lawyerUserVo, page, pageSize);
-        return lawyerUserService.getLawyerList(page, pageSize, lawyerUserVo);
+    public R<IPage<LawyerUserVo>> getLawyerList(@RequestParam(required = false) String name,
+                                                @RequestParam(required = false) String phone,
+                                                @RequestParam(required = false) Integer firmId,
+                                                @RequestParam(required = false) String createdTimeStart,
+                                                @RequestParam int page,
+                                                @RequestParam int size) {
+        log.info("LawyerUserController.getLawyerList?name={},phone={},firmId={},createdTimeStart={},page={},size={}",
+                name, phone, firmId, createdTimeStart, page, size);
+        return lawyerUserService.getLawyerList(name, phone, firmId, createdTimeStart, page, size);
     }
 
 

+ 9 - 1
alien-lawyer/src/main/java/shop/alien/lawyer/service/LawFirmService.java

@@ -7,7 +7,7 @@ import shop.alien.entity.result.R;
 import shop.alien.entity.store.LawFirm;
 
 import javax.servlet.http.HttpServletResponse;
-import java.util.List;
+import java.io.IOException;
 
 /**
  * 律所表 服务类
@@ -83,6 +83,14 @@ public interface LawFirmService extends IService<LawFirm> {
      * @return R<LawFirm>
      */
     R<LawFirm> getLawFirmDetail(Integer id);
+
+    /**
+     * 下载律所Excel导入模板
+     *
+     * @param response HTTP响应
+     * @throws IOException IO异常
+     */
+    void downloadTemplate(HttpServletResponse response) throws IOException;
 }
 
 

+ 14 - 8
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;
 import shop.alien.entity.store.vo.LawyerUserVo;
@@ -57,7 +58,7 @@ public interface LawyerUserService extends IService<LawyerUser> {
      * 获取律师详情
      *
      * @param lawyerId 律师ID
-     * @return R<Map<String, Object>>
+     * @return R<Map < String, Object>>
      */
     R<Map<String, Object>> getLawyerDetail(Integer lawyerId);
 
@@ -65,7 +66,7 @@ public interface LawyerUserService extends IService<LawyerUser> {
      * 获取律师在线状态
      *
      * @param lawyerIds 律师ID数组(逗号分隔)
-     * @return R<Map<Integer, Boolean>>
+     * @return R<Map < Integer, Boolean>>
      */
     R<Map<Integer, Boolean>> getLawyerOnlineStatus(String lawyerIds);
 
@@ -75,7 +76,7 @@ public interface LawyerUserService extends IService<LawyerUser> {
      * @param page       页码
      * @param pageSize   每页数量
      * @param categoryId 分类ID(可选)
-     * @return R<IPage<LawyerUser>>
+     * @return R<IPage < LawyerUser>>
      */
     R<IPage<LawyerUser>> getRecommendedLawyerList(int page, int pageSize, Integer categoryId);
 
@@ -84,7 +85,7 @@ public interface LawyerUserService extends IService<LawyerUser> {
      *
      * @param sessionId 会话ID
      * @param messageId 消息ID(可选)
-     * @return R<IPage<LawyerUser>>
+     * @return R<IPage < LawyerUser>>
      */
     R<IPage<LawyerUser>> getRecommendedLawyersBySession(String sessionId, Integer messageId);
 
@@ -95,7 +96,7 @@ public interface LawyerUserService extends IService<LawyerUser> {
      * @param page         页码
      * @param pageSize     每页数量
      * @param clientUserId 客户端用户ID(可选,用于保存搜索历史)
-     * @return R<IPage<LawyerUser>>
+     * @return R<IPage < LawyerUser>>
      */
     R<IPage<LawyerUser>> searchLawyerByName(String nickName, int page, int pageSize, Integer clientUserId);
 
@@ -105,7 +106,7 @@ public interface LawyerUserService extends IService<LawyerUser> {
      * @param page       页码
      * @param size       每页数量
      * @param categoryId 分类ID(可选)
-     * @return R<IPage<LawyerUser>>
+     * @return R<IPage < LawyerUser>>
      */
     R<IPage<LawyerUser>> getAiRecommendList(int page, int size, Integer categoryId);
 
@@ -120,7 +121,7 @@ public interface LawyerUserService extends IService<LawyerUser> {
      * </p>
      *
      * @param id 律师ID
-     * @return R<Map<String, Object>> 注销结果,包含律师ID、姓名、手机号、注销标记、注销时间等信息
+     * @return R<Map < String, Object>> 注销结果,包含律师ID、姓名、手机号、注销标记、注销时间等信息
      */
     R<Map<String, Object>> logOutLawyerUser(Integer id);
 
@@ -153,6 +154,11 @@ public interface LawyerUserService extends IService<LawyerUser> {
      *
      * @return R<LawyerUser> 律师信息
      */
-    R<IPage<LawyerUserVo>> getLawyerList(int page, int pageSize, LawyerUserVo lawyerUserVo);
+    R<IPage<LawyerUserVo>> getLawyerList(String name,
+                                         String phone,
+                                         Integer firmId,
+                                         String createdTimeStart,
+                                         int page,
+                                         int pageSize);
 }
 

+ 55 - 0
alien-lawyer/src/main/java/shop/alien/lawyer/service/impl/LawFirmServiceImpl.java

@@ -883,6 +883,61 @@ public class LawFirmServiceImpl extends ServiceImpl<LawFirmMapper, LawFirm> impl
 
         return R.data(lawFirm, "查询成功");
     }
+
+    @Override
+    public void downloadTemplate(HttpServletResponse response) throws IOException {
+        log.info("LawFirmServiceImpl.downloadTemplate");
+        
+        XSSFWorkbook workbook = new XSSFWorkbook();
+        try {
+            Sheet sheet = workbook.createSheet("律所导入模板");
+
+            // 获取带有 @ExcelHeader 注解的字段
+            Field[] fields = LawFirmExcelVo.class.getDeclaredFields();
+            List<Field> excelFields = Arrays.stream(fields)
+                    .filter(f -> f.isAnnotationPresent(ExcelHeader.class))
+                    .collect(Collectors.toList());
+
+            // 创建表头样式
+            Font headerFont = workbook.createFont();
+            headerFont.setBold(true);
+            CellStyle headerCellStyle = workbook.createCellStyle();
+            headerCellStyle.setFont(headerFont);
+            headerCellStyle.setAlignment(HorizontalAlignment.CENTER);
+            headerCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+
+            // 创建表头
+            Row headerRow = sheet.createRow(0);
+            for (int i = 0; i < excelFields.size(); i++) {
+                Field field = excelFields.get(i);
+                ExcelHeader excelHeader = field.getAnnotation(ExcelHeader.class);
+                Cell cell = headerRow.createCell(i);
+                cell.setCellValue(excelHeader.value());
+                cell.setCellStyle(headerCellStyle);
+            }
+
+            // 设置列宽
+            for (int i = 0; i < excelFields.size(); i++) {
+                sheet.setColumnWidth(i, 20 * 256);
+            }
+
+            // 设置响应头(必须在获取输出流之前设置)
+            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+            response.setCharacterEncoding("utf-8");
+            String fileName = URLEncoder.encode("律所导入模板", "UTF-8").replaceAll("\\+", "%20");
+            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
+
+            // 输出到响应流
+            OutputStream outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+            outputStream.flush();
+        } finally {
+            // 确保 workbook 被正确关闭
+            if (workbook != null) {
+                workbook.close();
+            }
+        }
+    }
 }
 
 

+ 11 - 14
alien-lawyer/src/main/java/shop/alien/lawyer/service/impl/LawyerUserServiceImpl.java

@@ -602,25 +602,22 @@ public class LawyerUserServiceImpl extends ServiceImpl<LawyerUserMapper, LawyerU
     }
 
     @Override
-    public R<IPage<LawyerUserVo>> getLawyerList(int page, int pageSize, LawyerUserVo lawyerUserVo) {
-        log.info("LawyerUserServiceImpl.getLawyerList?page={},pageSize={},lawyerUserVo={}",
-                page, pageSize, lawyerUserVo);
+    public R<IPage<LawyerUserVo>> getLawyerList(String name,
+                                                String phone,
+                                                Integer firmId,
+                                                String createdTimeStart,
+                                                int page,
+                                                int size) {
+        log.info("LawyerUserServiceImpl.getLawyerList?name={},phone={},firmId={},createdTimeStart={},page={},pageSize={}",
+                name, phone, firmId, createdTimeStart, page, size);
 
-//        int pageNum = page > 0 ? page : 1;
-//        int pageSizeNum = pageSize > 0 ? pageSize : 10;
-
-        // 确保 lawyerUserVo 不为 null
-        if (lawyerUserVo == null) {
-            lawyerUserVo = new LawyerUserVo();
-        }
-
-        
         // 查询分页数据(在SQL层面使用LIMIT进行分页)
-        List<LawyerUserVo> list = lawyerUserMapper.selectLawyerUserList(lawyerUserVo);
+        List<LawyerUserVo> list = lawyerUserMapper.selectLawyerUserList(name, phone, firmId, createdTimeStart);
         if (list == null) {
             list = new ArrayList<>();
         }
-        return R.data(ListToPage.setPage(list, page, pageSize));
+
+        return R.data(ListToPage.setPage(list, page, size));
     }
 }
 

+ 3 - 3
alien-store/src/main/java/shop/alien/store/service/impl/SystemServiceImpl.java

@@ -117,9 +117,9 @@ public class SystemServiceImpl implements SystemService {
         lifeSys.setUserName(userName);
         // 密码使用MD5加密后存储
         lifeSys.setUserPassword(encryptToMD5(password));
-        if (StringUtils.hasText(roleId)) {
-            lifeSys.setRoleId(roleId);
-        }
+//        if (StringUtils.hasText(roleId)) {
+//            lifeSys.setRoleId(roleId);
+//        }
         lifeSys.setDeleteFlag(0); // 未删除
 
         // 保存用户