lws 3 tahun lalu
induk
melakukan
f5037cd9b7
60 mengubah file dengan 1867 tambahan dan 285 penghapusan
  1. 2 0
      src/main/java/com/metro/MetroApplication.java
  2. 9 0
      src/main/java/com/metro/baseRe/BaseResponse.java
  3. 41 15
      src/main/java/com/metro/controller/AccountController.java
  4. 2 5
      src/main/java/com/metro/controller/AreaController.java
  5. 45 0
      src/main/java/com/metro/controller/BaseController.java
  6. 8 1
      src/main/java/com/metro/controller/MetroController.java
  7. 0 24
      src/main/java/com/metro/controller/PoliceController.java
  8. 58 0
      src/main/java/com/metro/controller/QuestionController.java
  9. 66 0
      src/main/java/com/metro/controller/Time.java
  10. 6 7
      src/main/java/com/metro/entity/po/Account.java
  11. 53 0
      src/main/java/com/metro/entity/po/Excel.java
  12. 0 77
      src/main/java/com/metro/entity/po/PassreCords.java
  13. 103 0
      src/main/java/com/metro/entity/po/Police.java
  14. 179 0
      src/main/java/com/metro/entity/po/Question.java
  15. 23 0
      src/main/java/com/metro/entity/ro/Question/DeleteQuestionReq.java
  16. 23 0
      src/main/java/com/metro/entity/ro/Question/DeleteQuestionResq.java
  17. 56 0
      src/main/java/com/metro/entity/ro/Question/InsertQuestionReq.java
  18. 20 0
      src/main/java/com/metro/entity/ro/Question/InsertQuestionResq.java
  19. 33 0
      src/main/java/com/metro/entity/ro/Question/SelectQuestionPageReq.java
  20. 50 0
      src/main/java/com/metro/entity/ro/Question/SelectQuestionPageResp.java
  21. 2 1
      src/main/java/com/metro/entity/ro/account/DeleteAccountReq.java
  22. 1 0
      src/main/java/com/metro/entity/ro/account/DeleteAccountResp.java
  23. 2 1
      src/main/java/com/metro/entity/ro/account/DetailAccountReq.java
  24. 9 3
      src/main/java/com/metro/entity/ro/account/DetailAccountResp.java
  25. 1 15
      src/main/java/com/metro/entity/ro/account/InsertAccountReq.java
  26. 27 0
      src/main/java/com/metro/entity/ro/account/LoginAccountReq.java
  27. 36 0
      src/main/java/com/metro/entity/ro/account/LoginAccountResp.java
  28. 8 0
      src/main/java/com/metro/entity/ro/account/SelectAccountPageReq.java
  29. 3 2
      src/main/java/com/metro/entity/ro/account/SelectAccountPageResp.java
  30. 2 15
      src/main/java/com/metro/entity/ro/account/UpdateAccountReq.java
  31. 5 3
      src/main/java/com/metro/entity/ro/area/SelectAreaReq.java
  32. 4 0
      src/main/java/com/metro/entity/ro/area/SelectAreaResp.java
  33. 5 60
      src/main/java/com/metro/entity/ro/passrecords/SelectPassreCordsPageListResp.java
  34. 1 0
      src/main/java/com/metro/mapper/AccountsMapper.java
  35. 5 4
      src/main/java/com/metro/mapper/PassreCordsMapper.java
  36. 16 0
      src/main/java/com/metro/mapper/QuestionMapper.java
  37. 12 0
      src/main/java/com/metro/mapper/UserMapper.java
  38. 50 0
      src/main/java/com/metro/restful/CommonException.java
  39. 40 0
      src/main/java/com/metro/restful/RestCode.java
  40. 64 0
      src/main/java/com/metro/restful/RestDTO.java
  41. 47 0
      src/main/java/com/metro/restful/RestResponse.java
  42. 64 0
      src/main/java/com/metro/restful/RestResult.java
  43. 44 0
      src/main/java/com/metro/restful/ServiceException.java
  44. 114 0
      src/main/java/com/metro/security/AdminInterceptor.java
  45. 17 0
      src/main/java/com/metro/security/Authority.java
  46. 94 0
      src/main/java/com/metro/security/JWTUtils.java
  47. 18 0
      src/main/java/com/metro/security/SessionUtils.java
  48. 21 2
      src/main/java/com/metro/service/AccountService.java
  49. 1 0
      src/main/java/com/metro/service/MetroService.java
  50. 0 12
      src/main/java/com/metro/service/PoliceService.java
  51. 36 0
      src/main/java/com/metro/service/QuestionService.java
  52. 28 0
      src/main/java/com/metro/service/TestService.java
  53. 83 15
      src/main/java/com/metro/service/impl/AccountServiceImpl.java
  54. 10 0
      src/main/java/com/metro/service/impl/MetroServiceImpl.java
  55. 6 6
      src/main/java/com/metro/service/impl/PassreCordsServiceImpl.java
  56. 0 16
      src/main/java/com/metro/service/impl/PoliceServiceImpl.java
  57. 76 0
      src/main/java/com/metro/service/impl/QuestionServiceImpl.java
  58. 1 0
      src/main/java/com/metro/utils/CGlibMapper.java
  59. 0 1
      src/main/java/com/metro/utils/ExcelUtil.java
  60. 137 0
      src/main/java/com/metro/utils/IPUtils.java

+ 2 - 0
src/main/java/com/metro/MetroApplication.java

@@ -5,11 +5,13 @@ import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.context.ConfigurableApplicationContext;
 import org.springframework.context.annotation.ComponentScan;
+import org.springframework.scheduling.annotation.EnableScheduling;
 
 
 @MapperScan(basePackages = {"com.metro.mapper"})
 @ComponentScan(basePackages = {"com.metro.**"})
 @SpringBootApplication
+@EnableScheduling
 public class MetroApplication {
 
     public static void main(String[] args) {

+ 9 - 0
src/main/java/com/metro/baseRe/BaseResponse.java

@@ -54,4 +54,13 @@ public class BaseResponse<T> {
         return new BaseResponse<>(code, msg, t);
     }
 
+    public static <T> BaseResponse<T> success(T data){
+        BaseResponse<T> result=new BaseResponse<T>();
+        result.setData(data);
+        result.setCode(200);
+        result.setMsg("成功");
+        return result;
+    }
+
+
 }

+ 41 - 15
src/main/java/com/metro/controller/AccountController.java

@@ -1,26 +1,24 @@
 package com.metro.controller;
 
-
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.metro.baseRe.BaseResponse;
+import com.metro.entity.po.Excel;
 import com.metro.entity.ro.account.*;
+import com.metro.restful.RestResponse;
+import com.metro.restful.RestResult;
+import com.metro.security.Authority;
 import com.metro.service.AccountService;
-import com.metro.utils.ExcelUtil;
 import com.metro.utils.FileUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
+import lombok.SneakyThrows;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.util.ResourceUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
-
-import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.*;
-import java.net.URLEncoder;
-import java.text.SimpleDateFormat;
 import java.util.List;
 
 /**
@@ -34,11 +32,33 @@ import java.util.List;
 @RestController
 @RequestMapping("/account")
 @Api(tags = "账号管理")
-public class AccountController {
+public class AccountController extends BaseController {
 
     @Autowired
     private AccountService service;
 
+    /**
+     * 登录
+     * @param req 账号密码
+     * @return 是否成功
+     */
+    @ApiOperation("后台管理登录")
+    @PostMapping("/login")
+    @Authority(required = false)
+    public BaseResponse<LoginAccountResp> doLogin(@Valid @RequestBody LoginAccountReq req) {
+        return BaseResponse.ok(service.login(req));
+    }
+
+    /**
+     * 获取用户信息
+     * @return 是否成功
+     */
+    @ApiOperation("获取用户信息")
+    @GetMapping("/getUserInfo")
+    public RestResult<LoginAccountResp> getUserInfo() {
+        return RestResponse.ok(service.getUserInfo(getUserId()));
+    }
+
     /**
      * 账号列表查询
      *
@@ -46,19 +66,21 @@ public class AccountController {
      * @return page列表
      */
     @PostMapping("/page")
+    @Authority
     @ApiOperation("账号列表查询")
     public BaseResponse<IPage<SelectAccountPageResp>> page(@Valid @RequestBody(required = false) SelectAccountPageReq req) {
         return BaseResponse.ok(service.page(req));
     }
 
     /**
-     * 注册账号
+     * 添加账号
      *
      * @param req 账号信息
      * @return 影响行数
      */
     @PostMapping("/add")
-    @ApiOperation("注册账号")
+    @Authority
+    @ApiOperation("添加账号")
     public BaseResponse<InsertAccountResp> add(@Valid @RequestBody InsertAccountReq req) {
         return BaseResponse.ok(service.add(req));
     }
@@ -81,7 +103,8 @@ public class AccountController {
      * @param req 主键
      * @return 影响行数
      */
-    @GetMapping("/delete")
+    @PostMapping("/delete")
+    @Authority
     @ApiOperation("删除账号")
     public BaseResponse<DeleteAccountResp> delete(@Valid @RequestBody DeleteAccountReq req) {
         return BaseResponse.ok(service.delete(req));
@@ -93,9 +116,10 @@ public class AccountController {
      * @param req 主键
      * @return 账号详情
      */
-    @GetMapping("/detail")
+    @PostMapping("/detail")
+    @Authority
     @ApiOperation("帐号详情")
-    public BaseResponse<DetailAccountResp> detail(@Valid @RequestBody DeleteAccountReq req) {
+    public BaseResponse<DetailAccountResp> detail(@Valid @RequestBody DetailAccountReq req) {
         return BaseResponse.ok(service.detail(req));
     }
 
@@ -105,7 +129,8 @@ public class AccountController {
      * @param req 主键
      * @return 影响行数
      */
-    @GetMapping("/update")
+    @PostMapping("/update")
+    @Authority
     @ApiOperation("修改账号")
     public BaseResponse<UpdateAccountResp> update(@Valid @RequestBody UpdateAccountReq req) {
         return BaseResponse.ok(service.update(req));
@@ -118,6 +143,7 @@ public class AccountController {
      * @return 返回信息
      */
     @ApiOperation("上传附件")
+    @Authority
     @PostMapping(value = "/uploadPhoto")
     public BaseResponse<String> uploadPhoto(@RequestParam("file") @ApiParam(value = "二进制文件流,文件类型后端未做限制,前端只允许上传照片") MultipartFile file) {
         return service.uploadPhoto(file);
@@ -129,6 +155,7 @@ public class AccountController {
      * @param fileUrl fileUrl
      */
     @ApiOperation("预览照片")
+    @Authority
     @GetMapping("/showPhoto")
     public BaseResponse<Integer> showPhoto(HttpServletResponse response, @RequestParam("fileUrl") @ApiParam("文件路径") String fileUrl) {
         service.showPhoto(response, fileUrl);
@@ -159,7 +186,6 @@ public class AccountController {
         service.importSheet(filePath);
         return BaseResponse.ok();
     }
-
 }
 
 

+ 2 - 5
src/main/java/com/metro/controller/AreaController.java

@@ -7,10 +7,7 @@ import com.metro.service.AreaService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 import java.util.List;
@@ -37,7 +34,7 @@ public class AreaController {
      * @return 返回结果list
      */
     @ApiOperation("查询地区联动")
-    @GetMapping("/selectArea")
+    @PostMapping("/selectArea")
     public BaseResponse<List<SelectAreaResp>> selectArea(@Valid @RequestBody SelectAreaReq req) {
         return service.selectArea(req);
     }

+ 45 - 0
src/main/java/com/metro/controller/BaseController.java

@@ -0,0 +1,45 @@
+package com.metro.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.auth0.jwt.JWT;
+import com.auth0.jwt.interfaces.DecodedJWT;
+import com.metro.entity.po.Account;
+import com.metro.restful.CommonException;
+import com.metro.restful.RestCode;
+import com.metro.security.JWTUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @ClassName: BaseController
+ * @Description: TODO
+ * @Author: ZS
+ * @CreateName: lws
+ * @Date 2022/3/15 0:16
+ * ...
+ */
+public class BaseController {
+
+    public Long getUserId() {
+        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        if (requestAttributes == null) {
+            throw new CommonException(RestCode.UNAUTHORIZED);
+        }
+        HttpServletRequest request = requestAttributes.getRequest();
+        return getUserId(request);
+    }
+
+    public Long getUserId(HttpServletRequest request) {
+        String token = request.getHeader("Authorization");
+        token = JWTUtils.getUserId(token);
+        if (StringUtils.isEmpty(token)) {
+            throw new CommonException(RestCode.UNAUTHORIZED);
+        }
+        return Long.valueOf(token);
+    }
+
+}

+ 8 - 1
src/main/java/com/metro/controller/MetroController.java

@@ -30,12 +30,19 @@ public class MetroController {
 
     /**
      * 地铁查询
+     *
      * @param req 查询条件
      * @return 返回结果
      */
     @PostMapping("/select")
     @ApiOperation("地铁查询一二级三级")
-    public BaseResponse<List<SelectMetroResp>> selectMetro(@RequestBody @Valid SelectMetroReq req){
+    public BaseResponse<List<SelectMetroResp>> selectMetro(@RequestBody @Valid SelectMetroReq req) {
         return BaseResponse.ok(service.list(req));
     }
+
+    @PostMapping("/selectAll")
+    @ApiOperation("地铁列表")
+    public BaseResponse<List<SelectMetroResp>> selectMetroAll() {
+        return BaseResponse.ok(service.selectMetroAll());
+    }
 }

+ 0 - 24
src/main/java/com/metro/controller/PoliceController.java

@@ -1,24 +0,0 @@
-package com.metro.controller;
-
-import com.metro.service.PoliceService;
-import io.swagger.annotations.Api;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @ClassName: PoliceController
- * @Description: TODO
- * @Author: ZS
- * @CreateName: lws
- * @Date 2022/3/9 11:06
- * ...
- */
-@RestController
-@RequestMapping("/police")
-@Api(tags = "派出所管理")
-public class PoliceController {
-
-    @Autowired
-    private PoliceService service;
-}

+ 58 - 0
src/main/java/com/metro/controller/QuestionController.java

@@ -0,0 +1,58 @@
+package com.metro.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.metro.baseRe.BaseResponse;
+import com.metro.entity.ro.Question.*;
+import com.metro.service.QuestionService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+
+/**
+ * @ClassName: PoliceController
+ * @Description: TODO
+ * @Author: ZS
+ * @CreateName: lws
+ * @Date 2022/3/9 11:06
+ * ...
+ */
+@RestController
+@RequestMapping("/question")
+@Api(tags = "盘查记录")
+public class QuestionController {
+
+    @Autowired
+    private QuestionService service;
+
+    /**
+     * 派出所管理列表查询
+     *
+     * @param req 查询条件
+     * @return page列表*/
+    @PostMapping("/page")
+    @ApiOperation("盘查记录列表")
+    public BaseResponse<IPage<SelectQuestionPageResp>> page(@Valid @RequestBody SelectQuestionPageReq req) {
+        return BaseResponse.ok(service.page(req));
+    }
+
+    @PostMapping("/delete")
+    @ApiOperation("删除盘查记录")
+    public BaseResponse<DeleteQuestionResq> delete(@Valid @RequestBody DeleteQuestionReq req) {
+        return BaseResponse.ok(service.delete(req));
+    }
+
+    @PostMapping("/selectById")
+    @ApiOperation("查看详情")
+    public BaseResponse<SelectQuestionPageResp> selectById(@Valid @RequestBody SelectQuestionPageReq req) {
+        return BaseResponse.ok(service.selectById(req));
+    }
+
+
+
+}

+ 66 - 0
src/main/java/com/metro/controller/Time.java

@@ -0,0 +1,66 @@
+package com.metro.controller;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpStatus;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.utils.URIBuilder;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.scheduling.annotation.Scheduled;
+import springfox.documentation.spring.web.json.Json;
+
+/**
+ * @ClassName: Time
+ * @Description: TODO
+ * @Author: ZS
+ * @CreateName: lws
+ * @Date 2022/3/16 11:33
+ * ...
+ */
+
+public class Time {
+   /* @Scheduled(cron = "0 0 5 * * ?")
+    public void  test() {
+
+
+    }
+
+    public static String doPostData() throws Exception {
+        String url1 = "http:// 115.236.38.205:8903/id/hvn";
+
+
+
+        HttpPost post = new HttpPost(url1);
+        String result = "";
+        HttpResponse res = null;
+        try {
+            StringEntity s = new StringEntity(json.toString(), "UTF-8");
+            s.setContentType("application/json");
+            post.setHeader("Accept", "application/json");
+            post.setHeader("Content-type", "application/json; charset=utf-8");
+            post.setEntity(s);
+            res = client.execute(post);
+            if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
+                result = EntityUtils.toString(res.getEntity());
+                return HttpStatus.SC_OK + "";
+            }
+        } catch (Exception e) {
+            if(res == null) {
+                return "HttpResponse 为 null!";
+            }
+            throw new RuntimeException(e);
+        }
+        if(res == null || res.getStatusLine() == null) {
+            return "无响应";
+        }
+        return res.getStatusLine().getStatusCode() + "";
+    }
+*/
+}

+ 6 - 7
src/main/java/com/metro/entity/po/Account.java

@@ -1,9 +1,6 @@
 package com.metro.entity.po;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
 import lombok.Builder;
 import lombok.Data;
 import lombok.experimental.Accessors;
@@ -53,12 +50,12 @@ public class Account {
     private String phone;
 
     /**
-     * 用户类型 1:用户 2:派出所
+     * 用户类型 1:管理员 2:派出所 3
      */
     private Integer type;
 
     /**
-     * 省市区
+     * 地区id
      */
     private Integer areaId;
 
@@ -73,13 +70,14 @@ public class Account {
     private String policeId;
 
     /**
-     * 警号Id
+     * 部门Id
      */
     private String companyId;
 
     /**
      * 创建时间
      */
+    @TableField(value = "create_time", fill = FieldFill.INSERT)
     private LocalDateTime createTime;
     public void setCreateTime(LocalDateTime createTime) {
         this.createTime = LocalDateTime.now();
@@ -93,6 +91,7 @@ public class Account {
     /*
     * 修改时间
     * */
+    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
     private LocalDateTime updateTime;
 
     /*

+ 53 - 0
src/main/java/com/metro/entity/po/Excel.java

@@ -0,0 +1,53 @@
+package com.metro.entity.po;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+/**
+ * @ClassName: Excel
+ * @Description: TODO
+ * @Author: ZS
+ * @CreateName: lws
+ * @Date 2022/3/15 21:49
+ * ...
+ */
+@Data
+public class Excel {
+    /**
+     * id
+     */
+    @TableId(value = "id",type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 账号名称
+     */
+    @ExcelProperty("account")
+    private String account;
+
+    /**
+     * 管理员姓名
+     */
+    @ExcelProperty("userName")
+    private String userName;
+
+    /**
+     * 账号密码
+     */
+    @ExcelProperty("password")
+    private String password;
+
+    /**
+     * 管理员手机号
+     */
+    @ExcelProperty("phone")
+    private String phone;
+
+    /**
+     * 详细地址
+     */
+    @ExcelProperty("address")
+    private String address;
+}

+ 0 - 77
src/main/java/com/metro/entity/po/PassreCords.java

@@ -1,77 +0,0 @@
-package com.metro.entity.po;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-
-import java.util.Date;
-
-/**
- * @ClassName: PassreCords
- * @Description: 公司表
- * @Author: ZS
- * @CreateName: lws
- * @Date 2022/3/8 11:36
- * ...
- */
-@TableName("j_passrecords")
-@Data
-public class PassreCords {
-
-    private int id;
-
-    private String carId;
-
-    private String carType;
-
-    private String xm;
-
-    private String engXm;
-
-    private String xb;
-
-    private String phone;
-
-    private String mz;
-
-    private String csrq;
-
-    private Date passTime;
-
-    private String passAddr;
-
-    private String pass;
-
-    private String kind;
-
-    private String waringMsg;
-
-    private int idPhoto;
-
-    private int scenePhoto;
-
-    private String cardAddr;
-
-    private String branchName;
-
-    private String staffName;
-
-    private String staffCardId;
-
-    private String msgId;
-
-    private String companyId;
-
-    private String barCode;
-
-    private String issue;
-
-    private String validRange;
-
-    private String displayMsg;
-
-    private String companId;
-
-    private String branchId;
-
-
-}

+ 103 - 0
src/main/java/com/metro/entity/po/Police.java

@@ -0,0 +1,103 @@
+package com.metro.entity.po;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.models.auth.In;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.time.LocalDateTime;
+
+/**
+ * @ClassName: Persons
+ * @Description: TODO
+ * @Author: ZS
+ * @CreateName: lws
+ * @Date 2022/3/13 14:20
+ * ...
+ */
+@Data
+@TableName("j_persons")
+@Accessors(chain = true)
+public class Police {
+    /**
+     * id
+     */
+    @TableId(value = "id",type = IdType.AUTO)
+    private Integer id;
+    /*
+    * 公安id
+    * */
+    private String companyId;
+
+    /*
+     * 派出所id
+     * */
+    private String branchId;
+
+    /*
+     * 身份证
+     * */
+    private String cardId;
+
+    /*
+     * 地区id
+     * */
+    private Integer areaId;
+
+    /*
+     * 姓名
+     * */
+    private String xm;
+
+    /*
+     * 性别
+     * */
+    private String xb;
+
+    /*
+     * 照片
+     * */
+    private String photo;
+
+    /*
+     * 手机号
+     * */
+    private String phone;
+    /*
+     * 部门id?
+     * */
+    private Integer isAdmin;
+
+    /*
+     * 备注
+     * */
+    private String bz;
+
+    /*
+     * 注册时间
+     * */
+    private LocalDateTime regTime;
+    public void regTime(LocalDateTime regTime) {
+        this.regTime = LocalDateTime.now();
+    }
+
+    /*
+     * 修改时间
+     * */
+    private LocalDateTime updateTimestamp;
+    private Integer flag;
+
+    /*
+     * 密码
+     * */
+    private String passwd;
+
+
+    /*
+     * 是否删除 true 删除    false 不删除
+     * */
+    private Boolean isDelete;
+
+}

+ 179 - 0
src/main/java/com/metro/entity/po/Question.java

@@ -0,0 +1,179 @@
+package com.metro.entity.po;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * @ClassName: PassreCords
+ * @Description: 盘查记录
+ * @Author: ZS
+ * @CreateName: lws
+ * @Date 2022/3/8 11:36
+ * ...
+ */
+@TableName("j_passrecords")
+@Data
+@Accessors(chain = true)
+public class Question {
+    /**
+     * id
+     */
+    @TableId(value = "id",type = IdType.AUTO)
+    private int id;
+    /**
+     * 身份证号
+     */
+    private String cardId;
+
+    /**
+     * 身份证类型
+     */
+    private String cardType;
+
+    /**
+     * 姓名
+     */
+    private String xm;
+
+    /**
+     *
+     */
+    private String engXm;
+
+    /**
+     * 性别
+     */
+    private String xb;
+
+    /**
+     * 手机号
+     */
+    private String phone;
+
+    /**
+     * mz
+     */
+    private String mz;
+
+    /**
+     * 出生日期
+     */
+    private String csrq;
+
+    /**
+     * 盘查时间
+     */
+    private Date passTime;
+
+    /**
+     *
+     */
+    private String passAddr;
+
+    /**
+     * 警示级别  0前科 1警示人员 2正常
+     */
+    private String pass;
+
+    /**
+     * 警示级别  前科 警示人员 正常
+     */
+    private String kind;
+
+    /**
+     * 警示备录
+     */
+    private String warningMsg;
+
+ /*   *//**
+     * 身份证照片
+     *//*
+    private int idPhoto;
+*/
+ /*   *//**
+     * 现场照片
+     *//*
+    private int scenePhoto;
+*/
+    /**
+     * 身份证地区
+     */
+    private String cardAddr;
+
+    /**
+     * 总部名称
+     */
+    private String companyName;
+
+    /**
+     * 部门名称
+     */
+    private String branchName;
+
+    /**
+     * 警员名称
+     */
+    private String staffName;
+
+    /**
+     * 警号
+     */
+    private String staffCardId;
+
+    /**
+     *
+     */
+    private String msgId;
+
+    /**
+     *总部id
+     */
+    private String companyId;
+
+    /**
+     *分局id
+     */
+    private String branchId;
+
+    /**
+     *条形码
+     */
+    private String barCode;
+
+    /**
+     *问题
+     */
+    private String issue;
+
+    /*
+    * 范围值
+    * */
+    private String validRange;
+
+
+    /*
+    * 核验是否通过
+    * */
+    private String displayMsg;
+
+    /*
+     * 详细地址
+     * */
+    private String address;
+
+    /*
+     * 是否删除 true 删除    false 不删除
+     * */
+    private Boolean isDelete;
+
+    /*
+    * 修改时间
+    * */
+    private LocalDateTime updateTimestamp;
+}

+ 23 - 0
src/main/java/com/metro/entity/ro/Question/DeleteQuestionReq.java

@@ -0,0 +1,23 @@
+package com.metro.entity.ro.Question;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import java.io.Serializable;
+
+/**
+ * @ClassName: DeletePoliceReq
+ * @Description: TODO
+ * @Author: ZS
+ * @CreateName: lws
+ * @Date 2022/3/14 16:17
+ * ...
+ */
+@Data
+public class DeleteQuestionReq implements Serializable {
+
+    @ApiModelProperty("主键")
+    @NotEmpty(message = "主键为必填项!")
+    private Integer id;
+}

+ 23 - 0
src/main/java/com/metro/entity/ro/Question/DeleteQuestionResq.java

@@ -0,0 +1,23 @@
+package com.metro.entity.ro.Question;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * @ClassName: DeletePoliceResq
+ * @Description: TODO
+ * @Author: ZS
+ * @CreateName: lws
+ * @Date 2022/3/14 16:17
+ * ...
+ */
+@Data
+@Accessors(chain = true)
+public class DeleteQuestionResq implements Serializable {
+
+    @ApiModelProperty("影响行数")
+    private Integer count;
+}

+ 56 - 0
src/main/java/com/metro/entity/ro/Question/InsertQuestionReq.java

@@ -0,0 +1,56 @@
+package com.metro.entity.ro.Question;
+
+import com.metro.enums.vaildated.IsPhone;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+
+/**
+ * @ClassName: InsertPoliceReq
+ * @Description: TODO
+ * @Author: ZS
+ * @CreateName: lws
+ * @Date 2022/3/14 15:24
+ * ...
+ */
+@Data
+public class InsertQuestionReq implements Serializable {
+
+    @ApiModelProperty(value = "账号名称")
+    @NotEmpty(message = "账号名称不能为空")
+    @Size(max = 12,min = 6,message = "账号长度不能小于6、大于12")
+    private String account;
+
+    @ApiModelProperty(value = "管理员姓名")
+    @NotEmpty(message = "管理员姓名不能为空")
+    @Size(min = 2,max = 12,message = "管理员姓名不能大于12,小于2")
+    private String userName;
+
+    @ApiModelProperty(value = "管理员手机号")
+    @NotEmpty(message = "管理员手机号不能为空")
+    @IsPhone(message = "手机号格式不正确!")
+    @Size(min = 11,max = 11,message = "手机号格式不正确!")
+    private String phone;
+
+    @ApiModelProperty(value = "密码")
+    @NotEmpty(message = "密码不能为空")
+    @Size(max = 12,min = 6,message = "密码长度不能小于6、大于12")
+    private String password;
+
+    @ApiModelProperty(value = "地区Id")
+    @NotNull(message = "请选择地址!")
+    private Integer areaId;
+
+    @ApiModelProperty(value = "详细地址")
+    @NotEmpty(message = "详细地址不能为空!")
+    @Size(max = 1000 ,min = 1, message = "详细地址不能大于1000个字符,小于1")
+    private String address;
+
+    @ApiModelProperty("警号Id")
+    @NotEmpty(message = "警号Id必填")
+    private String policeId;
+}

+ 20 - 0
src/main/java/com/metro/entity/ro/Question/InsertQuestionResq.java

@@ -0,0 +1,20 @@
+package com.metro.entity.ro.Question;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * @ClassName: InsertPoliceResq
+ * @Description: TODO
+ * @Author: ZS
+ * @CreateName: lws
+ * @Date 2022/3/14 15:25
+ * ...
+ */
+@Data
+@Accessors(chain = true)
+public class InsertQuestionResq {
+    @ApiModelProperty("影响行数")
+    private Integer count;
+}

+ 33 - 0
src/main/java/com/metro/entity/ro/Question/SelectQuestionPageReq.java

@@ -0,0 +1,33 @@
+package com.metro.entity.ro.Question;
+
+import com.metro.baseRe.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * @ClassName: SelectPersonsPageListReq
+ * @Description: TODO
+ * @Author: ZS
+ * @CreateName: lws
+ * @Date 2022/3/13 14:47
+ * ...
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@ApiModel
+public class SelectQuestionPageReq extends BaseEntity implements Serializable {
+
+    @ApiModelProperty("id")
+    private Integer id;
+
+    @ApiModelProperty("姓名")
+    private String xm;
+
+    @ApiModelProperty("手机号")
+    private String phone;
+
+}

+ 50 - 0
src/main/java/com/metro/entity/ro/Question/SelectQuestionPageResp.java

@@ -0,0 +1,50 @@
+package com.metro.entity.ro.Question;
+
+import com.metro.baseRe.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * @ClassName: SelectPassreCordsPageListResp
+ * @Description: TODO
+ * @Author: ZS
+ * @CreateName: lws
+ * @Date 2022/3/13 14:48
+ * ...
+ */
+@Data
+@ApiModel
+@Accessors(chain = true)
+public class SelectQuestionPageResp implements Serializable {
+
+    @ApiModelProperty("id")
+    private Integer id;
+
+    @ApiModelProperty("派出所名称")
+    private String brachName;
+
+    @ApiModelProperty("姓名")
+    private String xm;
+
+    @ApiModelProperty("照片")
+    private String photo;
+
+    @ApiModelProperty(value ="手机号")
+    private String phone;
+
+    @ApiModelProperty(value = "住址")
+    private Integer address;
+
+    @ApiModelProperty(value = "验证方式")
+    private String areaDesc;
+
+    @ApiModelProperty(value = "是否通行")
+    private String displayMsg;
+
+
+
+}

+ 2 - 1
src/main/java/com/metro/entity/ro/account/DeleteAccountReq.java

@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 
 /**
@@ -14,6 +15,6 @@ import java.io.Serializable;
 public class DeleteAccountReq implements Serializable {
 
     @ApiModelProperty("主键")
-    @NotEmpty(message = "主键为必填项!")
+    @NotNull(message = "主键为必填项!")
     private Integer id;
 }

+ 1 - 0
src/main/java/com/metro/entity/ro/account/DeleteAccountResp.java

@@ -5,6 +5,7 @@ import lombok.Data;
 import lombok.experimental.Accessors;
 
 import java.io.Serializable;
+import java.time.LocalDateTime;
 
 /**
  * @author :lws

+ 2 - 1
src/main/java/com/metro/entity/ro/account/DetailAccountReq.java

@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 
 /**
@@ -14,6 +15,6 @@ import java.io.Serializable;
 public class DetailAccountReq implements Serializable {
 
     @ApiModelProperty("主键")
-    @NotEmpty(message = "主键为必填项!")
+    @NotNull(message = "主键为必填项!")
     private Integer id;
 }

+ 9 - 3
src/main/java/com/metro/entity/ro/account/DetailAccountResp.java

@@ -33,13 +33,19 @@ public class DetailAccountResp implements Serializable {
     private String phone;
 
     @ApiModelProperty(value = "地区Id")
-    private Integer areaId;
+    private String areaId;
 
     @ApiModelProperty(value = "地区中文")
     private String areaDesc;
 
-    @ApiModelProperty(value = "地区省市区id,用于回显字段地区")
-    private String areaSqe;
+    @ApiModelProperty(value = "省区id")
+    private String proviceId;
+
+    @ApiModelProperty(value = "市区id,")
+    private String cityId;
+
+    @ApiModelProperty(value = "用户类行 1admin 2分局管理员 3,")
+    private Integer type;
 
     @ApiModelProperty(value = "详细地址")
     private String address;

+ 1 - 15
src/main/java/com/metro/entity/ro/account/InsertAccountReq.java

@@ -22,41 +22,27 @@ import java.time.LocalDateTime;
 public class InsertAccountReq implements Serializable {
 
     @ApiModelProperty(value = "账号名称")
-    @NotEmpty(message = "账号名称不能为空")
-    @Size(max = 12,min = 6,message = "账号长度不能小于6、大于12")
     private String account;
 
     @ApiModelProperty(value = "管理员姓名")
-    @NotEmpty(message = "管理员姓名不能为空")
-    @Size(min = 2,max = 12,message = "管理员姓名不能大于12,小于2")
     private String userName;
 
     @ApiModelProperty(value = "管理员手机号")
-    @NotEmpty(message = "管理员手机号不能为空")
-    @IsPhone(message = "手机号格式不正确!")
-    @Size(min = 11,max = 11,message = "手机号格式不正确!")
     private String phone;
 
     @ApiModelProperty(value = "密码")
-    @NotEmpty(message = "密码不能为空")
-    @Size(max = 12,min = 6,message = "密码长度不能小于6、大于12")
     private String password;
 
-    @ApiModelProperty(value = "地区Id")
-    @NotNull(message = "请选择地址!")
+    @ApiModelProperty(value = "区Id")
     private Integer areaId;
 
     @ApiModelProperty(value = "详细地址")
-    @NotEmpty(message = "详细地址不能为空!")
-    @Size(max = 1000 ,min = 1, message = "详细地址不能大于1000个字符,小于1")
     private String address;
 
     @ApiModelProperty("文件路径")
-    @NotEmpty(message = "请上传文件")
     private String fileUrl;
 
     @ApiModelProperty("警号Id")
-    @NotEmpty(message = "警号Id必填")
     private String policeId;
 
 }

+ 27 - 0
src/main/java/com/metro/entity/ro/account/LoginAccountReq.java

@@ -0,0 +1,27 @@
+package com.metro.entity.ro.account;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+
+/**
+ * @ClassName: RegisterAccountReq
+ * @Description: TODO
+ * @Author: ZS
+ * @CreateName: lws
+ * @Date 2022/3/14 21:11
+ * ...
+ */
+@Data
+public class LoginAccountReq implements Serializable {
+
+    @ApiModelProperty(value = "账号名称")
+    @NotEmpty(message = "账号不能为空!")
+    private String account;
+    @ApiModelProperty(value = "密码")
+    @NotEmpty(message = "密码不能为空!")
+    private String password;
+}

+ 36 - 0
src/main/java/com/metro/entity/ro/account/LoginAccountResp.java

@@ -0,0 +1,36 @@
+package com.metro.entity.ro.account;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * @ClassName: RegisterAccountResp
+ * @Description: TODO
+ * @Author: ZS
+ * @CreateName: lws
+ * @Date 2022/3/14 21:11
+ * ...
+ */
+@ApiModel("注册")
+@Data
+@Accessors(chain = true)
+public class LoginAccountResp {
+
+    @ApiModelProperty(value = "id")
+    private Integer id;
+
+    @ApiModelProperty(value = "账号名称")
+    private String account;
+
+    @ApiModelProperty(value = "管理员姓名")
+    private String userName;
+
+    @ApiModelProperty(value = "密码",hidden = true)
+    private String passWord;
+
+    @ApiModelProperty(value = "token")
+    private String token;
+
+}

+ 8 - 0
src/main/java/com/metro/entity/ro/account/SelectAccountPageReq.java

@@ -33,4 +33,12 @@ public class SelectAccountPageReq extends BaseEntity implements Serializable {
      */
     @ApiModelProperty(value = "管理员手机号")
     private String phone;
+
+    /**
+     * 管理员等级
+     */
+    @ApiModelProperty(value = "管理员等级")
+    private Integer type;
+
+
 }

+ 3 - 2
src/main/java/com/metro/entity/ro/account/SelectAccountPageResp.java

@@ -45,8 +45,6 @@ public class SelectAccountPageResp implements Serializable {
     @ApiModelProperty(value = "地区中文")
     private String areaDesc;
 
-    @ApiModelProperty(value = "地区省市区id,用于回显字段地区")
-    private String areaSqe;
 
     @ApiModelProperty(value = "详细地址")
     private String address;
@@ -57,6 +55,9 @@ public class SelectAccountPageResp implements Serializable {
     @ApiModelProperty(value = "创建人")
     private LocalDateTime createId;
 
+    @ApiModelProperty(value = "用户类型 1:admin  2:公安分局管理员  3:派出所管理员  4:民警")
+    private Integer type;
+
     @ApiModelProperty(value = "修改时间")
     private LocalDateTime updateTime;
 

+ 2 - 15
src/main/java/com/metro/entity/ro/account/UpdateAccountReq.java

@@ -21,45 +21,32 @@ import java.io.Serializable;
 public class UpdateAccountReq implements Serializable {
 
     @ApiModelProperty("主键")
-    @NotNull(message = "主键不能为空")
     private Integer id;
 
     @ApiModelProperty(value = "账号名称")
-    @NotEmpty(message = "账号名称不能为空")
-    @Size(max = 12,min = 6,message = "账号长度不能小于6、大于12")
     private String account;
 
     @ApiModelProperty(value = "管理员姓名")
-    @NotEmpty(message = "管理员姓名不能为空")
-    @Size(min = 2,max = 12,message = "管理员姓名不能大于12,小于2")
     private String userName;
 
     @ApiModelProperty(value = "管理员手机号")
-    @NotEmpty(message = "管理员手机号不能为空")
-    @IsPhone(message = "手机号格式不正确!")
-    @Size(min = 11,max = 11,message = "手机号格式不正确!")
     private String phone;
 
     @ApiModelProperty(value = "密码")
-    @NotEmpty(message = "密码不能为空")
-    @Size(max = 12,min = 6,message = "密码长度不能小于6、大于12")
     private String password;
 
     @ApiModelProperty(value = "地区Id")
-    @NotNull(message = "请选择地址!")
     private Integer areaId;
 
     @ApiModelProperty(value = "详细地址")
-    @NotEmpty(message = "详细地址不能为空!")
-    @Size(max = 1000 ,min = 1, message = "详细地址不能大于1000个字符,小于1")
     private String address;
 
     @ApiModelProperty("文件路径")
-    @NotEmpty(message = "请上传文件")
     private String fileUrl;
 
     @ApiModelProperty("警号Id")
-    @NotEmpty(message = "警号Id必填")
     private String policeId;
 
+    @ApiModelProperty("修改人")
+    private Integer updateId;
 }

+ 5 - 3
src/main/java/com/metro/entity/ro/area/SelectAreaReq.java

@@ -1,8 +1,8 @@
 package com.metro.entity.ro.area;
-
-import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 import java.io.Serializable;
 
@@ -14,10 +14,12 @@ import java.io.Serializable;
  * @Date 2022/3/10 23:35
  * ...
  */
+
 @Data
+@ApiModel
 public class SelectAreaReq implements Serializable {
 
     @ApiModelProperty("pid 默认查询省")
-    private Integer pid = 0;
+    private Integer pid = 1;
 
 }

+ 4 - 0
src/main/java/com/metro/entity/ro/area/SelectAreaResp.java

@@ -1,7 +1,9 @@
 package com.metro.entity.ro.area;
 
+import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import lombok.experimental.Accessors;
 
 import java.io.Serializable;
 
@@ -14,6 +16,8 @@ import java.io.Serializable;
  * ...
  */
 @Data
+@ApiModel
+@Accessors(chain = true)
 public class SelectAreaResp implements Serializable {
 
     @ApiModelProperty("id")

+ 5 - 60
src/main/java/com/metro/entity/ro/passrecords/SelectPassreCordsPageListResp.java

@@ -20,6 +20,9 @@ public class SelectPassreCordsPageListResp implements Serializable {
     @ApiModelProperty("主键")
     private Integer id;
 
+    @ApiModelProperty("")
+    private String scenePhoto;
+
     @ApiModelProperty("")
     private String carId;
 
@@ -29,76 +32,18 @@ public class SelectPassreCordsPageListResp implements Serializable {
     @ApiModelProperty("")
     private String xm;
 
-    @ApiModelProperty("")
-    private String engXm;
-
-    @ApiModelProperty("")
-    private String xb;
-
     @ApiModelProperty("")
     private String phone;
 
     @ApiModelProperty("")
-    private String mz;
-
-    @ApiModelProperty("")
-    private String csrq;
-
-    @ApiModelProperty("")
-    private Date passTime;
+    private String address;
 
     @ApiModelProperty("")
     private String passAddr;
 
-    @ApiModelProperty("")
-    private String pass;
-
-    @ApiModelProperty("")
-    private String kind;
-
-    @ApiModelProperty("")
-    private String waringMsg;
-
-    @ApiModelProperty("")
-    private int idPhoto;
-
-    @ApiModelProperty("")
-    private int scenePhoto;
-
-    @ApiModelProperty("")
-    private String cardAddr;
-
-    @ApiModelProperty("")
-    private String branchName;
-
-    @ApiModelProperty("")
-    private String staffName;
-
-    @ApiModelProperty("")
-    private String staffCardId;
-
-    @ApiModelProperty("")
-    private String msgId;
-
-    @ApiModelProperty("")
-    private String companyId;
-
-    @ApiModelProperty("")
-    private String barCode;
-
-    @ApiModelProperty("")
-    private String issue;
-
-    @ApiModelProperty("")
-    private String validRange;
-
     @ApiModelProperty("")
     private String displayMsg;
 
     @ApiModelProperty("")
-    private String companId;
-
-    @ApiModelProperty("")
-    private String branchId;
-
+    private String kind;
 }

+ 1 - 0
src/main/java/com/metro/mapper/AccountsMapper.java

@@ -12,4 +12,5 @@ import com.metro.entity.po.Account;
  * ...
  */
 public interface AccountsMapper extends BaseMapper<Account> {
+
 }

+ 5 - 4
src/main/java/com/metro/mapper/PassreCordsMapper.java

@@ -1,15 +1,16 @@
 package com.metro.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.metro.entity.po.PassreCords;
+import com.metro.entity.po.Metro;
+import com.metro.entity.po.Question;
 
 /**
  * @ClassName: PassreCordsMapper
- * @Description: 公司mapper
+ * @Description: TODO
  * @Author: ZS
  * @CreateName: lws
- * @Date 2022/3/8 12:16
+ * @Date 2022/3/15 16:41
  * ...
  */
-public interface PassreCordsMapper extends BaseMapper<PassreCords> {
+public interface PassreCordsMapper  extends BaseMapper<Question> {
 }

+ 16 - 0
src/main/java/com/metro/mapper/QuestionMapper.java

@@ -0,0 +1,16 @@
+package com.metro.mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.metro.entity.po.Question;
+
+import java.util.Arrays;
+
+/**
+ * @ClassName: PoliceMapper
+ * @Description: TODO
+ * @Author: ZS
+ * @CreateName: lws
+ * @Date 2022/3/14 11:18
+ * ...
+ */
+public interface QuestionMapper extends BaseMapper<Question> {
+}

+ 12 - 0
src/main/java/com/metro/mapper/UserMapper.java

@@ -0,0 +1,12 @@
+package com.metro.mapper;
+
+/**
+ * @ClassName: UserMapper
+ * @Description: TODO
+ * @Author: ZS
+ * @CreateName: lws
+ * @Date 2022/3/16 11:11
+ * ...
+ */
+public interface UserMapper {
+}

+ 50 - 0
src/main/java/com/metro/restful/CommonException.java

@@ -0,0 +1,50 @@
+package com.metro.restful;
+
+import java.io.Serializable;
+
+
+/**
+ * @description: 通用异常抛出 列如 工具类中的异常抛出  <br>
+ * @since: 1.0 <br>
+ * @date: 2020/10/21 11:21 <br>
+ * @author: PWB <br>
+ */
+public class CommonException extends RuntimeException implements Serializable {
+
+    private static final long serialVersionUID = 1213855733833039552L;
+
+    private Integer code;
+
+    public CommonException() {
+        super(RestCode.FAIL.getMsg());
+        this.code = RestCode.FAIL.getCode();
+    }
+
+    public CommonException(String message) {
+        super(message);
+        this.code = RestCode.FAIL.getCode();
+    }
+
+    public CommonException(Integer code, String message) {
+        super(message);
+        this.code = code;
+    }
+
+    public CommonException(RestCode resCode) {
+        super(resCode.getMsg());
+        this.code = resCode.getCode();
+    }
+
+    public CommonException(String message, Throwable cause) {
+        super(message, cause);
+        this.code = RestCode.FAIL.getCode();
+    }
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public void setCode(Integer code) {
+        this.code = code;
+    }
+}

+ 40 - 0
src/main/java/com/metro/restful/RestCode.java

@@ -0,0 +1,40 @@
+package com.metro.restful;
+
+
+public enum RestCode {
+
+    SUCCESS(200, "成功"),
+    FAIL(400, "失败"),
+    UNAUTHORIZED(401, "未授权"),
+    FORBIDDEN(403, "禁止访问该资源"),
+    NOT_FOUND(404, "未发现该资源"),
+    REQUEST_TIMEOUT(408, "请求超时"),
+    INTERNAL_SERVER_ERROR(500, "服务器内部错误"),
+    SERVICE_UNAVAILABLE(503, "服务无法获得"),
+    GATEWAY_TIMEOUT(504, "网关超时"),
+    REMOTE_INVOCATION_FAIL(900, "远程服务调用失败");
+
+    public int code;
+    private String msg;
+
+    RestCode(int code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public int getCode() {
+        return code;
+    }
+
+    public void setCode(int code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+}

+ 64 - 0
src/main/java/com/metro/restful/RestDTO.java

@@ -0,0 +1,64 @@
+package com.metro.restful;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.SneakyThrows;
+
+/**
+ * @description: RestDTO <br>
+ * @date: 2021/3/24 16:57 <br>
+ * @author: PWB <br>
+ */
+@ApiModel("分页查询参数 model ")
+public class RestDTO<T> {
+
+    @ApiModelProperty("第几页 默认1 ")
+    public Integer pageNum = 1;
+
+    @ApiModelProperty("每页大小 默认 20")
+    private Integer pageSize = 20;
+
+    @ApiModelProperty("其它查询参数 ")
+    private T data;
+
+    public Integer getPageNum() {
+        return pageNum;
+    }
+
+    public void setPageNum(Integer pageNum) {
+        if (pageNum == null || pageNum < 1) {
+            this.pageNum = 1;
+            return;
+        }
+        this.pageNum = pageNum;
+    }
+
+    public Integer getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(Integer pageSize) {
+        if (pageSize == null || pageSize < 1) {
+            this.pageSize = 20;
+            return;
+        }
+        this.pageSize = pageSize;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
+
+
+    @SneakyThrows
+    @Override
+    public String toString() {
+        ObjectMapper om = new ObjectMapper();
+        return om.writeValueAsString(this);
+    }
+}

+ 47 - 0
src/main/java/com/metro/restful/RestResponse.java

@@ -0,0 +1,47 @@
+package com.metro.restful;
+
+
+public class RestResponse {
+
+    public static RestResult<String> ok() {
+        return new RestResult<String>().setCode(RestCode.SUCCESS).setMsg(RestCode.SUCCESS.getMsg());
+    }
+
+    public static <T> RestResult<T> ok(T data) {
+        return new RestResult<T>().setCode(RestCode.SUCCESS).setMsg(RestCode.SUCCESS.getMsg()).setData(data);
+    }
+
+    public static <T> RestResult<T> error(String message) {
+        return new RestResult<T>().setCode(RestCode.FAIL).setMsg(message);
+    }
+
+    public static <T> RestResult<T> error() {
+        return new RestResult<T>().setCode(RestCode.FAIL).setMsg(RestCode.FAIL.getMsg());
+    }
+
+    public static <T> RestResult<T> error(RestCode restCode, T data) {
+        return new RestResult<T>().setCode(restCode.getCode()).setMsg(restCode.getMsg()).setData(data);
+    }
+
+    public static <T> RestResult<T> error(RestCode restCode) {
+        return new RestResult<T>().setCode(restCode.getCode()).setMsg(restCode.getMsg());
+    }
+
+    public static <T> RestResult<T> build(int code, String msg) {
+        return new RestResult<T>().setCode(code).setMsg(msg);
+    }
+
+    public static <T> RestResult<T> build(int code, String msg, T data) {
+        return new RestResult<T>().setCode(code).setMsg(msg).setData(data);
+    }
+
+    public static <T> T verifyRestResult(RestResult<T> restResult) {
+        if (restResult == null) {
+            throw new ServiceException(RestCode.SERVICE_UNAVAILABLE);
+        }
+        if (restResult.getCode() != RestCode.SUCCESS.getCode()) {
+            throw new ServiceException(restResult.getCode(), restResult.getMsg());
+        }
+        return restResult.getData();
+    }
+}

+ 64 - 0
src/main/java/com/metro/restful/RestResult.java

@@ -0,0 +1,64 @@
+package com.metro.restful;
+
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.SneakyThrows;
+
+import java.io.Serializable;
+
+
+@ApiModel("返回类")
+public class RestResult<T> implements Serializable {
+
+    private static final long serialVersionUID = 3758864789222317092L;
+
+    @ApiModelProperty("状态码")
+    public int code;
+
+    @ApiModelProperty("返回消息")
+    private String msg;
+
+    @ApiModelProperty("对象")
+    private T data;
+
+    public RestResult<T> setCode(RestCode restCode) {
+        this.code = restCode.code;
+        return this;
+    }
+
+    public int getCode() {
+        return code;
+    }
+
+    public RestResult<T> setCode(int code) {
+        this.code = code;
+        return this;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public RestResult<T> setMsg(String msg) {
+        this.msg = msg;
+        return this;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+    public RestResult<T> setData(T data) {
+        this.data = data;
+        return this;
+    }
+
+    @SneakyThrows
+    @Override
+    public String toString() {
+        ObjectMapper om = new ObjectMapper();
+        return om.writeValueAsString(this);
+    }
+}

+ 44 - 0
src/main/java/com/metro/restful/ServiceException.java

@@ -0,0 +1,44 @@
+package com.metro.restful;
+
+import java.io.Serializable;
+
+
+public class ServiceException extends RuntimeException implements Serializable {
+
+    private static final long serialVersionUID = 1213855733833039552L;
+
+    private Integer code;
+
+    public ServiceException() {
+        super(RestCode.FAIL.getMsg());
+        this.code = RestCode.FAIL.getCode();
+    }
+
+    public ServiceException(String message) {
+        super(message);
+        this.code = RestCode.FAIL.getCode();
+    }
+
+    public ServiceException(Integer code, String message) {
+        super(message);
+        this.code = code;
+    }
+
+    public ServiceException(RestCode resCode) {
+        super(resCode.getMsg());
+        this.code = resCode.getCode();
+    }
+
+    public ServiceException(String message, Throwable cause) {
+        super(message, cause);
+        this.code = RestCode.FAIL.getCode();
+    }
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public void setCode(Integer code) {
+        this.code = code;
+    }
+}

+ 114 - 0
src/main/java/com/metro/security/AdminInterceptor.java

@@ -0,0 +1,114 @@
+package com.metro.security;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import com.metro.entity.ro.account.LoginAccountResp;
+import com.metro.mapper.AccountsMapper;
+import com.metro.restful.RestCode;
+import com.metro.restful.ServiceException;
+import com.metro.service.AccountService;
+import com.metro.utils.IPUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.lang.reflect.Method;
+
+
+/**
+ * 管理员相关权限认证拦截器
+ *
+ * @author pwb
+ * @create 2019/7/15
+ * @since 1.0.0
+ */
+@Component
+@Slf4j
+public class AdminInterceptor implements HandlerInterceptor {
+
+    private final AccountService accountService;
+
+    @Autowired
+    public AdminInterceptor(AccountService adminService) {
+        this.accountService = adminService;
+    }
+
+    /**
+     * 在请求处理之前进行调用(Controller方法调用之前)
+     */
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
+        log.info("【【【【【【【=========preHandle  admin 管理员权限认证 begin==========】】】】】】】");
+        log.info("管理员 IP={} : 请求 path={}", IPUtils.getIP(request), request.getServletPath());
+
+        // 如果不是映射到方法直接通过
+        if (!handler.getClass().isAssignableFrom(HandlerMethod.class)) {
+            return true;
+        }
+        HandlerMethod handlerMethod = (HandlerMethod) handler;
+        Method method = handlerMethod.getMethod();
+        //检查是否有Authority注释
+        Authority annotation = method.getAnnotation(Authority.class);
+        if (annotation != null) {
+            if (!annotation.required()) {
+                return true;
+            }
+        } else {
+            annotation = handlerMethod.getBean().getClass().getAnnotation(Authority.class);
+            if (annotation != null) {
+                if (!annotation.required()) {
+                    return true;
+                }
+            }
+        }
+        //检查有没有需要用户权限的注解
+        String token = request.getHeader("Authorization");
+        if (StringUtils.isEmpty(token)) {
+            throw new ServiceException(RestCode.UNAUTHORIZED);
+        }
+        // 执行认证
+        String userIdStr = JWTUtils.getUserId(token);
+        if (StringUtils.isEmpty(userIdStr)) {
+            throw new ServiceException(RestCode.UNAUTHORIZED);
+        }
+
+        LoginAccountResp userInfo = accountService.getUserInfo(Long.parseLong(userIdStr));
+        if (ObjectUtil.isEmpty(userInfo)) throw new ServiceException(RestCode.UNAUTHORIZED);
+        JWTUtils.verify(token, userInfo.getId().toString(), userInfo.getPassWord());
+        if (annotation == null) {
+            return true;
+        }
+        int[] needAuth = annotation.value();
+        if (needAuth.length == 0) {
+            return true;
+        }
+        if (needAuth[0] == 0) {
+            return true;
+        }
+        throw new ServiceException(RestCode.UNAUTHORIZED);
+
+    }
+
+    /**
+     * 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)
+     */
+    @Override
+    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
+                           ModelAndView modelAndView) {
+    }
+
+    /**
+     * ,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)
+     */
+    @Override
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
+    }
+
+
+}

+ 17 - 0
src/main/java/com/metro/security/Authority.java

@@ -0,0 +1,17 @@
+package com.metro.security;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({ElementType.TYPE, ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Authority {
+    //
+    boolean required() default true;
+
+    int[] value() default {0};
+
+
+}

+ 94 - 0
src/main/java/com/metro/security/JWTUtils.java

@@ -0,0 +1,94 @@
+package com.metro.security;
+
+import com.auth0.jwt.JWT;
+import com.auth0.jwt.JWTVerifier;
+import com.auth0.jwt.algorithms.Algorithm;
+import com.auth0.jwt.exceptions.JWTDecodeException;
+import com.auth0.jwt.exceptions.JWTVerificationException;
+import com.auth0.jwt.interfaces.DecodedJWT;
+import com.metro.restful.CommonException;
+import com.metro.restful.RestCode;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.time.DateUtils;
+import org.springframework.util.DigestUtils;
+
+import java.util.Date;
+
+@Slf4j
+public class JWTUtils {
+
+    private final static String SALT = "YcYp65l;uq234pwb;iIjHg872S-ajfL.khp636";
+
+    /**
+     * 校验token是否正确
+     *
+     * @param token 密钥
+     * @param phone 用户的密码
+     */
+    public static void verify(String token, String userId, String phone) {
+        try {
+            String secret = DigestUtils.md5DigestAsHex(phone.concat(SALT).getBytes());
+            Algorithm algorithm = Algorithm.HMAC256(secret);
+            JWTVerifier verifier = JWT.require(algorithm)
+                    .withClaim("id", userId)
+                    .build();
+            verifier.verify(token);
+        } catch (JWTVerificationException e) {
+            throw new CommonException(RestCode.UNAUTHORIZED.getCode(), e.getMessage());
+        }
+    }
+
+    /**
+     * 获得token中的信息无需secret解密也能获得
+     *
+     * @return token中包含的用户名
+     */
+    public static String getUserId(String token) {
+        try {
+            DecodedJWT jwt = JWT.decode(token);
+            return jwt.getClaim("id").asString();
+        } catch (JWTDecodeException e) {
+            throw new CommonException(RestCode.UNAUTHORIZED.getCode(), e.getMessage());
+        }
+    }
+
+    /**
+     * 生成签名,1年后过期
+     *
+     * @param userId 用户Id
+     * @param phone  用户的密码
+     * @return 加密的token
+     */
+    public static String sign(String userId, String phone) {
+        return sign(userId, phone, getExpireTime());
+    }
+
+
+    public static String sign(String userId, String phone, Date expireTime) {
+        String secret = DigestUtils.md5DigestAsHex(phone.concat(SALT).getBytes());
+        Algorithm algorithm = Algorithm.HMAC256(secret);
+        return JWT.create()
+                .withClaim("id", userId)
+                .withExpiresAt(expireTime)
+                .withIssuedAt(new Date())
+                .sign(algorithm);
+    }
+
+
+    /**
+     * token是否过期
+     *
+     * @return true:过期
+     */
+    public static boolean isTokenExpired(String token) {
+        Date now = new Date(System.currentTimeMillis());
+        DecodedJWT jwt = JWT.decode(token);
+        return jwt.getExpiresAt().before(now);
+    }
+
+    private static Date getExpireTime() {
+        return DateUtils.addYears(new Date(), 1);
+    }
+
+
+}

+ 18 - 0
src/main/java/com/metro/security/SessionUtils.java

@@ -0,0 +1,18 @@
+package com.metro.security;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @description: SessionUtils <br>
+ * @date: 2021/3/21 13:09 <br>
+ * @author: PWB <br>
+ */
+public class SessionUtils {
+
+    public static String getValue(HttpServletRequest request) {
+
+        return "";
+    }
+
+
+}

+ 21 - 2
src/main/java/com/metro/service/AccountService.java

@@ -26,7 +26,7 @@ public interface AccountService {
     IPage<SelectAccountPageResp> page(SelectAccountPageReq req);
 
     /**
-     * 注册账号
+     * 添加
      *
      * @param req 账号信息
      * @return 影响行数
@@ -55,7 +55,7 @@ public interface AccountService {
      * @param req 主键
      * @return 账号详情
      */
-    DetailAccountResp detail(DeleteAccountReq req);
+    DetailAccountResp detail(DetailAccountReq req);
 
     /**
      * 修改账号
@@ -88,4 +88,23 @@ public interface AccountService {
      */
     void importSheet(String filePath);
 
+    /**
+     * 登录
+     * @param req 账号密码
+     * @return 是否成功
+     */
+    LoginAccountResp login(LoginAccountReq req);
+
+    /**
+     * 退出登录
+     * @return 是否成功
+     */
+    Boolean exit(Long userId);
+
+    /**
+     * 获取用户信息
+     * @return 是否成功
+     */
+    LoginAccountResp getUserInfo(Long userId);
+
 }

+ 1 - 0
src/main/java/com/metro/service/MetroService.java

@@ -24,4 +24,5 @@ public interface MetroService {
     //一二级
     List<SelectMetroResp> list(SelectMetroReq req);
 
+    List selectMetroAll();
 }

+ 0 - 12
src/main/java/com/metro/service/PoliceService.java

@@ -1,12 +0,0 @@
-package com.metro.service;
-
-/**
- * @ClassName: PoliceService
- * @Description: TODO
- * @Author: ZS
- * @CreateName: lws
- * @Date 2022/3/9 11:25
- * ...
- */
-public interface PoliceService {
-}

+ 36 - 0
src/main/java/com/metro/service/QuestionService.java

@@ -0,0 +1,36 @@
+package com.metro.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.metro.entity.ro.Question.*;
+
+/**
+ * @ClassName: PoliceService
+ * @Description: TODO
+ * @Author: ZS
+ * @CreateName: lws
+ * @Date 2022/3/9 11:25
+ * ...
+ */
+public interface QuestionService {
+    /**
+     * 警示记录查询
+     *
+     * @param req 查询条件
+     * @return page列表
+     */
+    IPage page(SelectQuestionPageReq req);
+
+
+    /**
+     * 删除记录
+     *
+     * @param req 主键
+     * @return 影响行数
+     */
+    DeleteQuestionResq delete(DeleteQuestionReq req);
+
+    /*
+    * 查看详情
+    * */
+    SelectQuestionPageResp selectById(SelectQuestionPageReq req);
+}

+ 28 - 0
src/main/java/com/metro/service/TestService.java

@@ -0,0 +1,28 @@
+package com.metro.service;
+
+import org.springframework.scheduling.annotation.Scheduled;
+
+import java.io.IOException;
+import java.util.Date;
+
+/**
+ * @ClassName: TestService
+ * @Description: TODO
+ * @Author: ZS
+ * @CreateName: lws
+ * @Date 2022/3/16 11:07
+ * ...
+ */
+public class TestService {
+    @Scheduled(cron = "0 0/5 * * * *") // 每5min执行一次
+    public void runScheduleTask() throws IOException {
+        System.out.println("阿喵的定时任务开启 ..." + new Date());
+
+    }
+    @Scheduled(cron = "0 0/5 * * * *")
+    private void Test() throws IOException {
+        String resPost = TestUtils.sendPost("http://localhost:8080/newsList", "");
+        System.out.println(resPost);
+    }
+
+}

+ 83 - 15
src/main/java/com/metro/service/impl/AccountServiceImpl.java

@@ -1,6 +1,7 @@
 package com.metro.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.excel.util.CollectionUtils;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -12,13 +13,15 @@ import com.metro.entity.ro.account.*;
 import com.metro.exception.BusinessException;
 import com.metro.mapper.AccountsMapper;
 import com.metro.mapper.AreaMapper;
+import com.metro.security.JWTUtils;
 import com.metro.service.AccountService;
 import com.metro.utils.*;
 import io.github.classgraph.utils.Join;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.time.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.util.CollectionUtils;
+import org.springframework.util.DigestUtils;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.ServletOutputStream;
@@ -28,14 +31,8 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
-import java.util.stream.IntStream;
-import java.util.stream.Stream;
 
 /**
  * @ClassName: AccountServiceImpl
@@ -66,10 +63,10 @@ public class AccountServiceImpl implements AccountService {
         if (CollectionUtils.isEmpty(selectPage.getRecords())) return respPage;
         Set<Integer> areaIdSet = selectPage.getRecords().stream().map(Account::getAreaId).collect(Collectors.toSet());
         Map<Integer, String> areaMap = areaMapper.selectList(new LambdaQueryWrapper<Area>().in(Area::getId, areaIdSet)).stream().collect(Collectors.toMap(Area::getId, p ->
-                Join.join("-", areaMapper.selectList(new LambdaQueryWrapper<Area>().eq(Area::getId, StringUtils.split(p.getDistrictSqe(), "."))).stream().map(Area::getName).collect(Collectors.toList()))
+                Join.join("-", areaMapper.selectList(new LambdaQueryWrapper<Area>().in(Area::getId, StringUtils.split(p.getDistrictSqe(), ","))).stream().map(Area::getName).collect(Collectors.toList()))
         ));
         Map<Integer, String> areaSqeMap = areaMapper.selectList(new LambdaQueryWrapper<Area>().in(Area::getId, areaIdSet)).stream().collect(Collectors.toMap(Area::getId, Area::getDistrictSqe, (t1, t2) -> t1));
-        return selectPage.convert(p -> MapperManager.mapper(p, SelectAccountPageResp.class, q -> q.setAreaSqe(areaSqeMap.get(p.getAreaId())).setAreaDesc(areaMap.get(p.getAreaId()))));
+        return selectPage.convert(p -> MapperManager.mapper(p, SelectAccountPageResp.class, q -> q.setAreaDesc(areaMap.get(p.getAreaId()))));
     }
 
     // page wrapper 查询条件
@@ -78,11 +75,12 @@ public class AccountServiceImpl implements AccountService {
         wrapper.like(StringUtils.isNotEmpty(req.getUserName()), Account::getUserName, req.getUserName());
         wrapper.eq(StringUtils.isNotEmpty(req.getPhone()), Account::getPhone, req.getPhone());
         wrapper.eq(Account::getIsDelete, UserConstant.NOT_DELETE);
+        wrapper.ge(Account::getType, req.getType());
         return wrapper;
     }
 
     /**
-     * 注册账号
+     * 添加账号
      *
      * @param req 账号信息
      * @return 影响行数
@@ -127,10 +125,32 @@ public class AccountServiceImpl implements AccountService {
      * @return 账号详情
      */
     @Override
-    public DetailAccountResp detail(DeleteAccountReq req) {
+    public DetailAccountResp detail(DetailAccountReq req) {
         Account account = accountsMapper.selectById(req.getId());
         Area area = areaMapper.selectById(account.getAreaId());
-        return MapperManager.mapper(account, DetailAccountResp.class, p -> p.setAreaSqe(area.getDistrictSqe()));
+        String[] split = area.getDistrictSqe().trim().split(",");
+        String areaId = null;
+        String cityId = null;
+        String proviceId = null;
+        List<String> strings = Arrays.asList(split);
+        // .11.150.1275.
+        for (int i = 0; i < strings.size(); i++) {
+            if (i == 0) {
+                proviceId = strings.get(i);
+            } else if (i == 1) {
+                cityId = strings.get(i);
+            } else if (i == 2) {
+                areaId = strings.get(i);
+            }
+        }
+        String finalAreaId = areaId;
+        String finalCityId = cityId;
+        String finalProviceId = proviceId;
+        return MapperManager.mapper(account, DetailAccountResp.class, p -> {
+            p.setAreaId(finalAreaId);
+            p.setCityId(finalCityId);
+            p.setProviceId(finalProviceId);
+        });
     }
 
     /**
@@ -146,7 +166,7 @@ public class AccountServiceImpl implements AccountService {
         Account account = accountsMapper.selectOne(new LambdaQueryWrapper<Account>().eq(Account::getAccount, req.getAccount()).eq(Account::getIsDelete, UserConstant.NOT_DELETE));
         if (ObjectUtil.isEmpty(account)) throw new BusinessException(account.getAccount() + "不存在!不能修改");
         return new UpdateAccountResp().setCount(accountsMapper.updateById(MapperManager.mapper(req, Account.class, p -> p.setPassword(MD5UtilNew.string2MD5(req.getPassword()))
-                .setUpdateTime(LocalDateTime.now()).setType(1))));
+                .setUpdateTime(LocalDateTime.now()).setType(1).setUpdateId(req.getUpdateId()))));
     }
 
     /**
@@ -157,7 +177,9 @@ public class AccountServiceImpl implements AccountService {
      */
     @Override
     public BaseResponse<String> uploadPhoto(MultipartFile file) {
+
         return FileUtils.uploadPhoto(file);
+
     }
 
     /**
@@ -174,7 +196,14 @@ public class AccountServiceImpl implements AccountService {
             if (!fileBase.exists()) throw new BusinessException("文件不存在");
             ServletOutputStream outputStream = response.getOutputStream();
             FileInputStream inputStream = new FileInputStream(fileBase);
-            inputStream.transferTo(outputStream);
+            //读取写出
+            int len = 0;
+            byte[] buffer = new byte[1024];
+            while ((len = inputStream.read(buffer)) != -1) {
+                outputStream.write(buffer, 0, len);
+                outputStream.flush();
+            }
+
             outputStream.close();
             inputStream.close();
         } catch (IOException e) {
@@ -200,4 +229,43 @@ public class AccountServiceImpl implements AccountService {
 
     }
 
+    /**
+     * 登录
+     *
+     * @param req 账号密码
+     * @return 是否成功
+     */
+    @Override
+    public LoginAccountResp login(LoginAccountReq req) {
+        Account account = accountsMapper.selectOne(new LambdaQueryWrapper<Account>().eq(Account::getAccount, req.getAccount()).eq(Account::getIsDelete, UserConstant.NOT_DELETE));
+        if (ObjectUtil.isEmpty(account)) throw new BusinessException("账号不存在!请先注册");
+        if (!MD5UtilNew.convertMD5(MD5UtilNew.convertMD5(req.getPassword())).equals(req.getPassword()))
+            throw new BusinessException("密码不对!请重新输入");
+        return MapperManager.mapper(account, LoginAccountResp.class, p -> p.setToken(JWTUtils.sign(account.getId().toString(), account.getPassword(), DateUtils.addDays(new Date(), 1))));
+    }
+
+    /**
+     * 退出登录
+     *
+     * @return 是否成功
+     */
+    @Override
+    public Boolean exit(Long userId) {
+        return null;
+    }
+
+    /**
+     * 获取用户信息
+     *
+     * @return 是否成功
+     */
+    @Override
+    public LoginAccountResp getUserInfo(Long userId) {
+        Account account = accountsMapper.selectOne(new LambdaQueryWrapper<Account>().eq(Account::getId, userId).eq(Account::getIsDelete, UserConstant.NOT_DELETE));
+        if (ObjectUtil.isEmpty(account)) throw new BusinessException("获取用户信息失败");
+        return MapperManager.mapper(account, LoginAccountResp.class);
+    }
+
+
 }
+

+ 10 - 0
src/main/java/com/metro/service/impl/MetroServiceImpl.java

@@ -3,6 +3,7 @@ package com.metro.service.impl;
 import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.metro.entity.po.Area;
 import com.metro.entity.po.Metro;
 import com.metro.entity.ro.metro.SelectMetroReq;
 import com.metro.entity.ro.metro.SelectMetroResp;
@@ -48,6 +49,15 @@ public class MetroServiceImpl implements MetroService {
         }
         return respList;
     }
+    /*
+    * 地铁查询
+    * */
+    @Override
+    public List selectMetroAll() {
+        LambdaQueryWrapper<Metro> wrapper = new LambdaQueryWrapper<>();
+        List<Metro> areaList = metroMapper.selectList(wrapper);
+        return areaList;
+    }
 
     // 地铁查询wrapper
     private Wrapper<Metro> selectListWrapper(SelectMetroReq req) {

+ 6 - 6
src/main/java/com/metro/service/impl/PassreCordsServiceImpl.java

@@ -4,7 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.metro.entity.po.PassreCords;
+import com.metro.entity.po.Question;
 import com.metro.entity.ro.passrecords.SelectPassreCordsPageListReq;
 import com.metro.entity.ro.passrecords.SelectPassreCordsPageListResp;
 import com.metro.mapper.PassreCordsMapper;
@@ -36,16 +36,16 @@ public class PassreCordsServiceImpl implements PassreCordsService {
     @Override
     public IPage<SelectPassreCordsPageListResp> page(SelectPassreCordsPageListReq req) {
         IPage<SelectPassreCordsPageListResp> respPage = new Page<>(req.getPageNo(), req.getPageSize());
-        Page<PassreCords> selectPage = passreCordsMapper.selectPage(new Page<>(req.getPageNo(), req.getPageSize()), pageWrapper(req));
+        Page<Question> selectPage = passreCordsMapper.selectPage(new Page<>(req.getPageNo(), req.getPageSize()), pageWrapper(req));
         if(CollectionUtils.isEmpty(selectPage.getRecords())) return respPage;
         return selectPage.convert(p -> BeanUtil.toBean(p,SelectPassreCordsPageListResp.class));
     }
 
     // page Wrapper
-    private LambdaQueryWrapper<PassreCords> pageWrapper(SelectPassreCordsPageListReq req) {
-        LambdaQueryWrapper<PassreCords> wrapper = new LambdaQueryWrapper<>();
-        wrapper.like(StringUtils.isNotEmpty(req.getBranchName()),PassreCords::getBranchName,req.getBranchName());
-        wrapper.like(StringUtils.isNotEmpty(req.getStaffName()),PassreCords::getStaffName,req.getStaffName());
+    private LambdaQueryWrapper<Question> pageWrapper(SelectPassreCordsPageListReq req) {
+        LambdaQueryWrapper<Question> wrapper = new LambdaQueryWrapper<>();
+        wrapper.like(StringUtils.isNotEmpty(req.getBranchName()),Question::getBranchName,req.getBranchName());
+        wrapper.like(StringUtils.isNotEmpty(req.getStaffName()),Question::getStaffName,req.getStaffName());
         return wrapper;
     }
 

+ 0 - 16
src/main/java/com/metro/service/impl/PoliceServiceImpl.java

@@ -1,16 +0,0 @@
-package com.metro.service.impl;
-
-import com.metro.service.PoliceService;
-import org.springframework.stereotype.Service;
-
-/**
- * @ClassName: PoliceServiceImpl
- * @Description: TODO
- * @Author: ZS
- * @CreateName: lws
- * @Date 2022/3/9 11:26
- * ...
- */
-@Service
-public class PoliceServiceImpl implements PoliceService {
-}

+ 76 - 0
src/main/java/com/metro/service/impl/QuestionServiceImpl.java

@@ -0,0 +1,76 @@
+package com.metro.service.impl;
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.metro.constant.UserConstant;
+import com.metro.entity.po.Account;
+import com.metro.entity.po.Area;
+import com.metro.entity.po.Question;
+import com.metro.entity.ro.Question.DeleteQuestionReq;
+import com.metro.entity.ro.Question.DeleteQuestionResq;
+import com.metro.entity.ro.Question.SelectQuestionPageResp;
+import com.metro.entity.ro.Question.SelectQuestionPageReq;
+import com.metro.entity.ro.account.DetailAccountResp;
+import com.metro.mapper.QuestionMapper;
+import com.metro.service.QuestionService;
+import com.metro.utils.MapperManager;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.time.LocalDateTime;
+
+/**
+ * @ClassName: PoliceServiceImpl
+ * @Description: TODO
+ * @Author: ZS
+ * @CreateName: lws
+ * @Date 2022/3/9 11:26
+ * ...
+ */
+@Service
+public class QuestionServiceImpl implements QuestionService {
+    @Autowired
+    private QuestionMapper mapper;
+    @Override
+
+    /**
+     * 警示记录
+     * @param req 查询条件
+     * @return page 列表
+     */
+    public IPage<SelectQuestionPageResp> page(SelectQuestionPageReq req) {
+        IPage<SelectQuestionPageResp> respPage = new Page<>(req.getPageNo(), req.getPageSize());
+        Page<Question> selectPage = mapper.selectPage(new Page<>(req.getPageNo(), req.getPageSize()), pageWrapper(req));
+        if(CollectionUtils.isEmpty(selectPage.getRecords())) return respPage;
+        return selectPage.convert(p -> BeanUtil.toBean(p,SelectQuestionPageResp.class));
+    }
+
+
+    // page wrapper 查询条件
+    private LambdaQueryWrapper<Question> pageWrapper(SelectQuestionPageReq req) {
+        LambdaQueryWrapper<Question> wrapper = new LambdaQueryWrapper<>();
+        wrapper.like(StringUtils.isNotEmpty(req.getXm()), Question::getXm, req.getXm());
+        wrapper.eq(StringUtils.isNotEmpty(req.getPhone()), Question::getPhone, req.getPhone());
+        return wrapper;
+    }
+
+    /*
+    * 删除记录
+    * */
+    @Override
+    public DeleteQuestionResq delete(DeleteQuestionReq req) {
+        return new DeleteQuestionResq().setCount(mapper.updateById(new Question().setId(req.getId())
+                .setIsDelete(UserConstant.DELETE).setUpdateTimestamp(LocalDateTime.now())));
+    }
+    /*
+    * 查看详情
+    * */
+    @Override
+    public SelectQuestionPageResp selectById(SelectQuestionPageReq req) {
+        Question question = mapper.selectById(req.getId());
+        return MapperManager.mapper(question, SelectQuestionPageResp.class);
+    }
+}

+ 1 - 0
src/main/java/com/metro/utils/CGlibMapper.java

@@ -102,6 +102,7 @@ public class CGlibMapper {
             e.printStackTrace();
         }
         copier.copy(source, instance, null);
+        BeanUtils.copyProperties(source,instance);
         return instance;
     }
 

+ 0 - 1
src/main/java/com/metro/utils/ExcelUtil.java

@@ -6,7 +6,6 @@ import com.alibaba.excel.context.AnalysisContext;
 import com.alibaba.excel.event.AnalysisEventListener;
 import com.alibaba.excel.metadata.BaseRowModel;
 import com.alibaba.excel.metadata.Sheet;
-import com.metro.entity.ro.account.InsertAccountReq;
 import lombok.Data;
 import lombok.Getter;
 import lombok.Setter;

+ 137 - 0
src/main/java/com/metro/utils/IPUtils.java

@@ -0,0 +1,137 @@
+package com.metro.utils;
+
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+
+
+@Slf4j
+public class IPUtils {
+    private final static String UNKNOWN = "unknown";
+    private final static int MAX_LENGTH = 15;
+    private static final String IP_UTILS_FLAG = ",";
+    private static final String LOCALHOST_IP = "0:0:0:0:0:0:0:1";
+    private static final String LOCALHOST_IP1 = "127.0.0.1";
+    private static final String X_ORIGINAL_FORWARDED_FOR = "X-Original-Forwarded-For";
+    private static final String X_FORWARDED_FOR = "X-Forwarded-For";
+    private static final String x_forwarded_for = "x-forwarded-for";
+    private static final String PROXY_CLIENT_IP = "Proxy-Client-IP";
+    private static final String WL_PROXY_CLIENT_IP = "WL-Proxy-Client-IP";
+    private static final String HTTP_CLIENT_IP = "HTTP_CLIENT_IP";
+    private static final String HTTP_X_FORWARDED_FOR = "HTTP_X_FORWARDED_FOR";
+
+    /**
+     * 获取IP地址
+     * 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址
+     * 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址
+     */
+    public static String getIP() {
+        ServletRequestAttributes requestAttributes = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes());
+        if (requestAttributes == null) {
+            return null;
+        }
+        HttpServletRequest request = requestAttributes.getRequest();
+        return getIP(request);
+    }
+
+
+    /**
+     * 获取IP地址
+     * <p>
+     * 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址
+     * 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址
+     */
+    public static String getIP(HttpServletRequest request) {
+        String ip = null;
+        try {
+            //以下两个获取在k8s中,将真实的客户端IP,放到了x-Original-Forwarded-For。而将WAF的回源地址放到了 x-Forwarded-For了。
+            ip = request.getHeader(X_ORIGINAL_FORWARDED_FOR);
+
+            //X-Forwarded-For
+            if (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) {
+                ip = request.getHeader(X_FORWARDED_FOR);
+            }
+            //获取nginx等代理的ip  x-forwarded-for
+            if (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) {
+                ip = request.getHeader(x_forwarded_for);
+            }
+            //Proxy-Client-IP
+            if (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) {
+                ip = request.getHeader(PROXY_CLIENT_IP);
+            }
+
+            //WL-Proxy-Client-IP
+            if (StringUtils.isEmpty(ip) || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) {
+                ip = request.getHeader(WL_PROXY_CLIENT_IP);
+            }
+
+            //HTTP_CLIENT_IP
+            if (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) {
+                ip = request.getHeader(HTTP_CLIENT_IP);
+            }
+
+            //HTTP_X_FORWARDED_FOR
+            if (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) {
+                ip = request.getHeader(HTTP_X_FORWARDED_FOR);
+            }
+            //兼容k8s集群获取ip
+            if (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) {
+                ip = request.getRemoteAddr();
+                if (LOCALHOST_IP1.equalsIgnoreCase(ip) || LOCALHOST_IP.equalsIgnoreCase(ip)) {
+                    //根据网卡取本机配置的IP
+                    try {
+                        InetAddress iNet = InetAddress.getLocalHost();
+                        ip = iNet.getHostAddress();
+                    } catch (UnknownHostException e) {
+                        log.error("getClientIp error: {}", e.getMessage());
+                    }
+                }
+            }
+        } catch (Exception e) {
+            log.error("IPUtils ERROR ", e);
+        }
+        //使用代理,则获取第一个IP地址
+        if (!StringUtils.isEmpty(ip) && ip.indexOf(IP_UTILS_FLAG) > 0) {
+            ip = ip.substring(0, ip.indexOf(IP_UTILS_FLAG));
+        }
+        return ip;
+    }
+
+
+    public static String getIpAddr(HttpServletRequest request) {
+        String ip = null;
+        try {
+            ip = request.getHeader(x_forwarded_for);
+            if (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) {
+                ip = request.getHeader(PROXY_CLIENT_IP);
+            }
+            if (StringUtils.isEmpty(ip) || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) {
+                ip = request.getHeader(WL_PROXY_CLIENT_IP);
+            }
+            if (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) {
+                ip = request.getHeader(HTTP_CLIENT_IP);
+            }
+            if (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) {
+                ip = request.getHeader(HTTP_X_FORWARDED_FOR);
+            }
+            if (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) {
+                ip = request.getRemoteAddr();
+            }
+        } catch (Exception e) {
+            log.error("IPUtils ERROR ", e);
+        }
+        // 使用代理,则获取第一个IP地址
+        if (!StringUtils.isEmpty(ip) && ip.length() > MAX_LENGTH) {
+            if (ip.indexOf(IP_UTILS_FLAG) > 0) {
+                ip = ip.substring(0, ip.indexOf(IP_UTILS_FLAG));
+            }
+        }
+        return LOCALHOST_IP.equals(ip) ? LOCALHOST_IP1 : ip;
+    }
+}