Ver código fonte

提叫用户基本信息表设计以及实体类创建

chenxiaofei 4 dias atrás
pai
commit
06053aef3a
29 arquivos alterados com 1023 adições e 75 exclusões
  1. 5 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/response/BaseResult.java
  2. 36 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/forkliftapp/AppVersionsController.java
  3. 111 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/forkliftapp/LoadingRecordsController.java
  4. 65 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/forkliftapp/MaterialsController.java
  5. 60 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/forkliftapp/SysArticlesController.java
  6. 69 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/forkliftapp/UsersController.java
  7. 4 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/AppVersions.java
  8. 2 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/Feedbacks.java
  9. 11 1
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/Users.java
  10. 95 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/UsersReq.java
  11. 76 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/res/AppVersionsResVo.java
  12. 75 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/res/LoadingRecordsResVo.java
  13. 43 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/res/MaterialsResVo.java
  14. 61 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/res/SysArticlesResVo.java
  15. 87 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/res/UsersResVo.java
  16. 7 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/repository/AppVersionsService.java
  17. 7 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/repository/SysArticlesService.java
  18. 15 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/repository/UsersService.java
  19. 9 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/repository/impl/AppVersionsServiceImpl.java
  20. 7 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/repository/impl/SysArticlesServiceImpl.java
  21. 20 0
      sckw-modules/sckw-system/src/main/java/com/sckw/system/repository/impl/UsersServiceImpl.java
  22. 32 5
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsAppVersionsService.java
  23. 0 14
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsFeedbacksService.java
  24. 0 14
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsLoadingRecordsService.java
  25. 0 15
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsLoginLogsService.java
  26. 0 14
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsMaterialsService.java
  27. 60 5
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsSysArticlesService.java
  28. 63 6
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsUsersService.java
  29. 3 1
      sql/2026/01/2026_01_07_chenxiaofei_create.sql

+ 5 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/response/BaseResult.java

@@ -30,6 +30,11 @@ public class BaseResult<T> implements Serializable {
         result.setData(data);
         return result;
     }
+    public static <T> BaseResult<T> success(String data) {
+        BaseResult<T> result = new BaseResult<>();
+        result.setMessage(data);
+        return result;
+    }
 
     /**
      * 失败响应 - 自定义消息

+ 36 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/forkliftapp/AppVersionsController.java

@@ -0,0 +1,36 @@
+package com.sckw.system.controller.forkliftapp;
+
+import com.sckw.core.web.response.BaseResult;
+import com.sckw.system.model.vo.res.AppVersionsResVo;
+import com.sckw.system.service.KwsAppVersionsService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 系统版本管理Controller
+ * @author chenxiaofei
+ * @date 2026-01-07
+ */
+@RestController
+@RequestMapping("/appVersions")
+@Tag(name = "版本管理相关接口")
+@RequiredArgsConstructor
+public class AppVersionsController {
+
+    private final KwsAppVersionsService kwsAppVersionsService;
+
+    /**
+     * 检查更新
+     * @param platform 平台类型: 1-Android, 2-iOS
+     * @return BaseResult
+     */
+    @GetMapping("/checkUpdate")
+    @Operation(summary = "检查更新", description = "根据平台类型获取最新版本信息")
+    public BaseResult<AppVersionsResVo> checkUpdate(@RequestParam Integer platform) {
+        return BaseResult.success(kwsAppVersionsService.getLatestVersion(platform));
+    }
+
+}
+

+ 111 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/forkliftapp/LoadingRecordsController.java

@@ -0,0 +1,111 @@
+package com.sckw.system.controller.forkliftapp;
+
+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.sckw.core.utils.BeanUtils;
+import com.sckw.core.web.response.BaseResult;
+import com.sckw.system.model.LoadingRecords;
+import com.sckw.system.model.vo.res.LoadingRecordsResVo;
+import com.sckw.system.repository.LoadingRecordsService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 装载作业记录Controller
+ * @author chenxiaofei
+ * @date 2026-01-07
+ */
+@RestController
+@RequestMapping("/loadingRecords")
+@Tag(name = "装载记录相关接口")
+public class LoadingRecordsController {
+
+    @Autowired
+    private LoadingRecordsService loadingRecordsService;
+
+    /**
+     * 获取订单列表(装载记录列表)
+     * @param pageNum 页码
+     * @param pageSize 每页数量
+     * @param operatorId 操作员ID(可选)
+     * @param workDate 作业日期(可选)
+     * @return BaseResult
+     */
+    @GetMapping("/orders")
+    @Operation(summary = "获取订单列表", description = "分页获取装载记录列表")
+    public BaseResult<IPage<LoadingRecordsResVo>> getOrders(
+            @RequestParam(defaultValue = "1") Integer pageNum,
+            @RequestParam(defaultValue = "10") Integer pageSize,
+            @RequestParam(required = false) Long operatorId,
+            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date workDate) {
+        
+        Page<LoadingRecords> page = new Page<>(pageNum, pageSize);
+        LambdaQueryWrapper<LoadingRecords> wrapper = new LambdaQueryWrapper<>();
+        
+        if (operatorId != null) {
+            wrapper.eq(LoadingRecords::getOperatorId, operatorId);
+        }
+        if (workDate != null) {
+            wrapper.eq(LoadingRecords::getWorkDate, workDate);
+        }
+        
+        wrapper.orderByDesc(LoadingRecords::getCreatedAt);
+        
+        IPage<LoadingRecords> result = loadingRecordsService.page(page, wrapper);
+        
+        // 转换为ResVo
+        Page<LoadingRecordsResVo> resVoPage = new Page<>(result.getCurrent(), result.getSize(), result.getTotal());
+        List<LoadingRecordsResVo> resVoList = result.getRecords().stream()
+                .map(record -> {
+                    LoadingRecordsResVo resVo = new LoadingRecordsResVo();
+                    BeanUtils.copyProperties(record, resVo);
+                    return resVo;
+                })
+                .collect(Collectors.toList());
+        resVoPage.setRecords(resVoList);
+        
+        return BaseResult.success(resVoPage);
+    }
+
+    /**
+     * 创建装载记录
+     * @param loadingRecord 装载记录
+     * @return BaseResult
+     */
+    @PostMapping("/create")
+    @Operation(summary = "创建装载记录", description = "创建新的装载作业记录")
+    public BaseResult<String> createLoadingRecord(@RequestBody LoadingRecords loadingRecord) {
+        boolean success = loadingRecordsService.save(loadingRecord);
+        if (success) {
+            return BaseResult.success("创建成功");
+        }
+        return BaseResult.failed("创建失败");
+    }
+
+    /**
+     * 根据ID获取装载记录详情
+     * @param id 记录ID
+     * @return BaseResult
+     */
+    @GetMapping("/detail")
+    @Operation(summary = "获取装载记录详情", description = "根据ID获取装载记录详细信息")
+    public BaseResult<LoadingRecordsResVo> getLoadingRecordDetail(@RequestParam Long id) {
+        LoadingRecords record = loadingRecordsService.getById(id);
+        if (record == null) {
+            return BaseResult.success(null);
+        }
+        LoadingRecordsResVo resVo = new LoadingRecordsResVo();
+        BeanUtils.copyProperties(record, resVo);
+        return BaseResult.success(resVo);
+    }
+
+}
+

+ 65 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/forkliftapp/MaterialsController.java

@@ -0,0 +1,65 @@
+package com.sckw.system.controller.forkliftapp;
+
+import com.sckw.core.utils.BeanUtils;
+import com.sckw.core.web.response.BaseResult;
+import com.sckw.system.model.Materials;
+import com.sckw.system.model.vo.res.MaterialsResVo;
+import com.sckw.system.repository.MaterialsService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 物料信息Controller
+ * @author chenxiaofei
+ * @date 2026-01-07
+ */
+@RestController
+@RequestMapping("/materials")
+@Tag(name = "物料信息相关接口")
+public class MaterialsController {
+
+    @Autowired
+    private MaterialsService materialsService;
+
+    /**
+     * 获取物料列表
+     * @return BaseResult
+     */
+    @GetMapping("/list")
+    @Operation(summary = "获取物料列表", description = "获取所有物料信息列表")
+    public BaseResult<List<MaterialsResVo>> getMaterialsList() {
+        List<Materials> list = materialsService.list();
+        List<MaterialsResVo> resVoList = list.stream()
+                .map(material -> {
+                    MaterialsResVo resVo = new MaterialsResVo();
+                    BeanUtils.copyProperties(material, resVo);
+                    return resVo;
+                })
+                .collect(Collectors.toList());
+        return BaseResult.success(resVoList);
+    }
+
+    /**
+     * 根据ID获取物料信息
+     * @param id 物料ID
+     * @return BaseResult
+     */
+    @GetMapping("/detail")
+    @Operation(summary = "获取物料详情", description = "根据ID获取物料详细信息")
+    public BaseResult<MaterialsResVo> getMaterialDetail(@RequestParam Long id) {
+        Materials material = materialsService.getById(id);
+        if (material == null) {
+            return BaseResult.success(null);
+        }
+        MaterialsResVo resVo = new MaterialsResVo();
+        BeanUtils.copyProperties(material, resVo);
+        return BaseResult.success(resVo);
+    }
+
+}
+

+ 60 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/forkliftapp/SysArticlesController.java

@@ -0,0 +1,60 @@
+package com.sckw.system.controller.forkliftapp;
+
+import com.sckw.core.web.response.BaseResult;
+import com.sckw.system.model.vo.res.SysArticlesResVo;
+import com.sckw.system.service.KwsSysArticlesService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 系统内容配置Controller
+ * @author chenxiaofei
+ * @date 2026-01-07
+ */
+@RestController
+@RequestMapping("/sysArticles")
+@Tag(name = "系统文章相关接口")
+@RequiredArgsConstructor
+public class SysArticlesController {
+
+
+    private final KwsSysArticlesService kwsSysArticlesService;
+
+    /**
+     * 获取隐私协议
+     * @return BaseResult
+     */
+    @GetMapping("/privacyPolicy")
+    @Operation(summary = "获取隐私协议", description = "获取隐私协议内容")
+    public BaseResult<SysArticlesResVo> getPrivacyPolicy() {
+
+        return BaseResult.success(kwsSysArticlesService.getPrivacyPolicy("PRIVACY_POLICY"));
+    }
+
+    /**
+     * 获取服务协议
+     * @return BaseResult
+     */
+    @GetMapping("/serviceAgreement")
+    @Operation(summary = "获取服务协议", description = "获取服务协议内容")
+    public BaseResult<SysArticlesResVo> getServiceAgreement() {
+
+        return BaseResult.success(kwsSysArticlesService.getServiceAgreement("REG_AGREEMENT"));
+    }
+
+    /**
+     * 根据文章标识获取文章
+     * @param articleKey 文章标识
+     * @return BaseResult
+     */
+    @GetMapping("/getByKey")
+    @Operation(summary = "根据标识获取文章", description = "根据文章标识获取文章内容")
+    public BaseResult<SysArticlesResVo> getByArticleKey(@RequestParam String articleKey) {
+
+        return BaseResult.success(kwsSysArticlesService.getByArticleKey(articleKey));
+    }
+
+}
+

+ 69 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/forkliftapp/UsersController.java

@@ -0,0 +1,69 @@
+package com.sckw.system.controller.forkliftapp;
+
+
+import com.sckw.core.web.constant.HttpStatus;
+import com.sckw.core.web.response.BaseResult;
+import com.sckw.system.model.vo.req.UsersReq;
+import com.sckw.system.model.vo.res.UsersResVo;
+import com.sckw.system.service.KwsUsersService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 用户基础信息Controller
+ * @author chenxiaofei
+ * @date 2026-01-07
+ */
+@RestController
+@RequestMapping("/users")
+@Tag(name = "用户信息相关接口")
+@RequiredArgsConstructor
+public class UsersController {
+
+
+    private final KwsUsersService kwsUsersService;
+
+    /**
+     * 获取用户信息
+     * @param id 用户ID
+     * @return BaseResult
+     */
+    @GetMapping("/userInfo")
+    @Operation(summary = "获取用户信息", description = "根据用户ID获取用户详细信息")
+    public BaseResult<UsersResVo> getUserInfo(@RequestParam Long id) {
+
+
+        return BaseResult.success(kwsUsersService.getUserInfo(id));
+    }
+
+    /**
+     * 账户注销
+     * @param id 用户ID
+     * @return BaseResult
+     */
+    @PostMapping("/deleteAccount")
+    @Operation(summary = "账户注销", description = "注销用户账户")
+    public BaseResult<String> deleteAccount(@RequestParam Long id, @RequestParam String reason) {
+
+        return BaseResult.success(kwsUsersService.deleteAccount(id,reason));
+    }
+
+    /**
+     * 更新用户信息
+     * @param req 用户信息
+     * @return BaseResult
+     */
+    @PostMapping("/update")
+    @Operation(summary = "更新用户信息", description = "更新用户基本信息")
+    public BaseResult<String> update(@RequestBody UsersReq req) {
+        boolean success =  kwsUsersService.update(req);
+        if (success) {
+            return BaseResult.success(HttpStatus.MSG_005);
+        }
+        return BaseResult.failed(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
+    }
+
+}
+

+ 4 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/AppVersions.java

@@ -5,10 +5,12 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Builder;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
+import java.io.Serial;
 import java.io.Serializable;
 import java.util.Date;
 
@@ -21,8 +23,10 @@ import java.util.Date;
 @Data
 @Accessors(chain = true)
 @TableName("app_versions")
+@Builder
 public class AppVersions implements Serializable {
 
+    @Serial
     private static final long serialVersionUID = 1L;
 
     /**

+ 2 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/Feedbacks.java

@@ -9,6 +9,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
+import java.io.Serial;
 import java.io.Serializable;
 import java.util.Date;
 
@@ -23,6 +24,7 @@ import java.util.Date;
 @TableName("feedbacks")
 public class Feedbacks implements Serializable {
 
+    @Serial
     private static final long serialVersionUID = 1L;
 
     /**

+ 11 - 1
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/Users.java

@@ -32,6 +32,11 @@ public class Users implements Serializable {
      */
     @TableId(type = IdType.ASSIGN_ID)
     private Long id;
+    /**
+     * 企业ID
+     * */
+    @TableField("ent_id")
+    private Integer entId;
 
     /**
      * 登录账号
@@ -70,10 +75,15 @@ public class Users implements Serializable {
     private Integer roleType;
 
     /**
-     * 状态: 0-禁用, 1-启用
+     * 状态: 0-注册, 1-启用 ,2-注销;
      */
     @TableField("status")
     private Integer status;
+    /**
+     * 注销原因
+     */
+    @TableField("reason")
+    private String reason;
 
     /**
      * 注册时间

+ 95 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/UsersReq.java

@@ -0,0 +1,95 @@
+package com.sckw.system.model.vo.req;
+
+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.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 用户基础信息表
+ * @author chenxiaofei
+ * @date 2026-01-07
+ */
+@EqualsAndHashCode(callSuper = false)
+@Data
+@Accessors(chain = true)
+@TableName("users")
+@Schema(description = "用户基础信息")
+public class UsersReq implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 雪花ID
+     */
+    @Schema(description = "雪花ID")
+    private Long id;
+
+    /**
+     * 登录账号
+     */
+    @Schema(description = "登录账号")
+    private String username;
+
+    /**
+     * 加密存储的密码
+     */
+    @Schema(description = "加密存储的密码")
+    private String passwordHash;
+
+    /**
+     * 用户姓名
+     */
+    @Schema(description = "用户姓名")
+    private String fullName;
+
+    /**
+     * 头像URL地址
+     */
+    @Schema(description = "头像URL地址")
+    private String avatarUrl;
+
+    /**
+     * 联系电话
+     */
+    @Schema(description = "联系电话")
+    private String phone;
+
+    /**
+     * 角色: 1-铲车司机(监管员), 2-门卫
+     */
+    @Schema(description = "角色: 1-铲车司机(监管员), 2-门卫")
+    private Integer roleType;
+
+    /**
+     * 状态: 0-禁用, 1-启用
+     */
+    @Schema(description = "状态: 0-禁用, 1-启用")
+    private Integer status;
+
+    /**
+     * 注册时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Schema(description = "注册时间")
+    private Date createdAt;
+
+    /**
+     * 更新时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Schema(description = "更新时间")
+    private Date updatedAt;
+
+}
+

+ 76 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/res/AppVersionsResVo.java

@@ -0,0 +1,76 @@
+package com.sckw.system.model.vo.res;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.sckw.core.utils.LongToStringUtils;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 系统版本管理返回对象
+ * @author chenxiaofei
+ * @date 2026-01-07
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@Schema(description = "系统版本管理返回对象")
+public class AppVersionsResVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 雪花ID
+     */
+    @JsonSerialize(using = LongToStringUtils.class)
+    @Schema(description = "雪花ID")
+    private Long id;
+
+    /**
+     * 版本号
+     */
+    @Schema(description = "版本号")
+    private String versionCode;
+
+    /**
+     * 平台类型: 1-Android, 2-iOS
+     */
+    @Schema(description = "平台类型: 1-Android, 2-iOS")
+    private Integer platform;
+
+    /**
+     * 更新日志
+     */
+    @Schema(description = "更新日志")
+    private String updateLog;
+
+    /**
+     * 安装包下载地址
+     */
+    @Schema(description = "安装包下载地址")
+    private String downloadUrl;
+
+    /**
+     * 是否强制更新: 0-否, 1-是
+     */
+    @Schema(description = "是否强制更新: 0-否, 1-是")
+    private Integer isForceUpdate;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Schema(description = "创建时间")
+    private Date createdAt;
+
+}
+

+ 75 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/res/LoadingRecordsResVo.java

@@ -0,0 +1,75 @@
+package com.sckw.system.model.vo.res;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.sckw.core.utils.LongToStringUtils;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 装载作业记录返回对象
+ * @author chenxiaofei
+ * @date 2026-01-07
+ */
+@Data
+public class LoadingRecordsResVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 雪花ID
+     */
+    @JsonSerialize(using = LongToStringUtils.class)
+    private Long id;
+
+    /**
+     * 操作员ID
+     */
+    @JsonSerialize(using = LongToStringUtils.class)
+    private Long operatorId;
+
+    /**
+     * 车牌号
+     */
+    private String licensePlate;
+
+    /**
+     * 客户名称
+     */
+    private String customerName;
+
+    /**
+     * 装载类型: 1-装载, 2-补货
+     */
+    private Integer loadType;
+
+    /**
+     * 物料ID
+     */
+    @JsonSerialize(using = LongToStringUtils.class)
+    private Long materialId;
+
+    /**
+     * 装载数量/重量
+     */
+    private BigDecimal quantity;
+
+    /**
+     * 作业日期
+     */
+    @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
+    private Date workDate;
+
+    /**
+     * 记录创建时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdAt;
+
+}
+

+ 43 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/res/MaterialsResVo.java

@@ -0,0 +1,43 @@
+package com.sckw.system.model.vo.res;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.sckw.core.utils.LongToStringUtils;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 物料信息返回对象
+ * @author chenxiaofei
+ * @date 2026-01-07
+ */
+@Data
+public class MaterialsResVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 雪花ID
+     */
+    @JsonSerialize(using = LongToStringUtils.class)
+    private Long id;
+
+    /**
+     * 物料名称
+     */
+    private String materialName;
+
+    /**
+     * 物料分类
+     */
+    private String category;
+
+    /**
+     * 计量单位
+     */
+    private String unit;
+
+}
+

+ 61 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/res/SysArticlesResVo.java

@@ -0,0 +1,61 @@
+package com.sckw.system.model.vo.res;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.sckw.core.utils.LongToStringUtils;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 系统内容配置返回对象
+ * @author chenxiaofei
+ * @date 2026-01-07
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class SysArticlesResVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 雪花ID
+     */
+    private Long id;
+
+    /**
+     * 条款唯一标识 (如: REG_AGREEMENT, PRIVACY_POLICY)
+     */
+    private String articleKey;
+
+    /**
+     * 条款标题
+     */
+    private String title;
+
+    /**
+     * 条款详细内容 (富文本/HTML)
+     */
+    private String content;
+
+    /**
+     * 版本号
+     */
+    private String version;
+
+    /**
+     * 更新时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updatedAt;
+
+}
+

+ 87 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/res/UsersResVo.java

@@ -0,0 +1,87 @@
+package com.sckw.system.model.vo.res;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.sckw.core.utils.LongToStringUtils;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 用户信息返回对象
+ * @author chenxiaofei
+ * @date 2026-01-07
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@Schema(description = "用户信息返回对象")
+public class UsersResVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 雪花ID
+     */
+    @JsonSerialize(using = LongToStringUtils.class)
+    @Schema(description = "雪花ID")
+    private Long id;
+
+    /**
+     * 登录账号
+     */
+    @Schema(description = "登录账号")
+    private String username;
+
+    /**
+     * 用户姓名
+     */
+    @Schema(description = "用户姓名")
+    private String fullName;
+
+    /**
+     * 头像URL地址
+     */
+    @Schema(description = "头像URL地址")
+    private String avatarUrl;
+
+    /**
+     * 联系电话
+     */
+    @Schema(description = "联系电话")
+    private String phone;
+
+    /**
+     * 角色: 1-铲车司机(监管员), 2-门卫
+     */
+    @Schema(description = "角色: 1-铲车司机(监管员), 2-门卫")
+    private Integer roleType;
+
+    /**
+     * 状态: 0-禁用, 1-启用
+     */
+    @Schema(description = "状态: 0-禁用, 1-启用")
+    private Integer status;
+
+    /**
+     * 注册时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Schema(description = "注册时间")
+    private Date createdAt;
+
+    /**
+     * 更新时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Schema(description = "更新时间")
+    private Date updatedAt;
+
+}
+

+ 7 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/repository/AppVersionsService.java

@@ -10,5 +10,12 @@ import com.sckw.system.model.AppVersions;
  */
 public interface AppVersionsService extends IService<AppVersions> {
 
+    /**
+     * 获取最新版本
+     * @param platform 平台类型: 1-Android, 2-iOS
+     * @return AppVersions
+     */
+    AppVersions getLatestVersion(Integer platform);
+
 }
 

+ 7 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/repository/SysArticlesService.java

@@ -10,5 +10,12 @@ import com.sckw.system.model.SysArticles;
  */
 public interface SysArticlesService extends IService<SysArticles> {
 
+    /**
+     * 根据文章标识获取文章
+     * @param articleKey 文章标识
+     * @return SysArticles
+     */
+    SysArticles getByArticleKey(String articleKey);
+
 }
 

+ 15 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/repository/UsersService.java

@@ -10,5 +10,20 @@ import com.sckw.system.model.Users;
  */
 public interface UsersService extends IService<Users> {
 
+    /**
+     * 根据用户名查询用户
+     * @param username 用户名
+     * @return Users
+     */
+    Users getByUsername(String username);
+
+    /**
+     * 根据手机号查询用户
+     * @param phone 手机号
+     * @return Users
+     */
+    Users getByPhone(String phone);
+
+    Users queryById(Long id);
 }
 

+ 9 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/repository/impl/AppVersionsServiceImpl.java

@@ -1,5 +1,6 @@
 package com.sckw.system.repository.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.sckw.system.dao.AppVersionsDao;
 import com.sckw.system.model.AppVersions;
@@ -14,5 +15,13 @@ import org.springframework.stereotype.Service;
 @Service
 public class AppVersionsServiceImpl extends ServiceImpl<AppVersionsDao, AppVersions> implements AppVersionsService {
 
+    @Override
+    public AppVersions getLatestVersion(Integer platform) {
+        return this.getOne(Wrappers.<AppVersions>lambdaQuery()
+                .eq(AppVersions::getPlatform, platform)
+                .orderByDesc(AppVersions::getCreatedAt)
+                .last("limit 1"));
+    }
+
 }
 

+ 7 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/repository/impl/SysArticlesServiceImpl.java

@@ -1,5 +1,6 @@
 package com.sckw.system.repository.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.sckw.system.dao.SysArticlesDao;
 import com.sckw.system.model.SysArticles;
@@ -14,5 +15,11 @@ import org.springframework.stereotype.Service;
 @Service
 public class SysArticlesServiceImpl extends ServiceImpl<SysArticlesDao, SysArticles> implements SysArticlesService {
 
+    @Override
+    public SysArticles getByArticleKey(String articleKey) {
+        return this.getOne(new LambdaQueryWrapper<SysArticles>()
+                .eq(SysArticles::getArticleKey, articleKey));
+    }
+
 }
 

+ 20 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/repository/impl/UsersServiceImpl.java

@@ -1,5 +1,6 @@
 package com.sckw.system.repository.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.sckw.system.dao.UsersDao;
 import com.sckw.system.model.Users;
@@ -14,5 +15,24 @@ import org.springframework.stereotype.Service;
 @Service
 public class UsersServiceImpl extends ServiceImpl<UsersDao, Users> implements UsersService {
 
+    @Override
+    public Users getByUsername(String username) {
+        return this.getOne(new LambdaQueryWrapper<Users>()
+                .eq(Users::getUsername, username)
+                .eq(Users::getStatus, 1));
+    }
+
+    @Override
+    public Users getByPhone(String phone) {
+        return this.getOne(new LambdaQueryWrapper<Users>()
+                .eq(Users::getPhone, phone)
+                .eq(Users::getStatus, 1));
+    }
+
+    @Override
+    public Users queryById(Long id) {
+        return getById(id);
+    }
+
 }
 

+ 32 - 5
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsAppVersionsService.java

@@ -1,14 +1,41 @@
 package com.sckw.system.service;
 
+import com.sckw.core.utils.BeanUtils;
+import com.sckw.core.web.response.BaseResult;
+import com.sckw.system.model.AppVersions;
+import com.sckw.system.model.vo.res.AppVersionsResVo;
+import com.sckw.system.repository.AppVersionsService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 /**
- * 系统版本管理表Service接口
- * @author chenxiaofei
- * @date 2026-01-07
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description : 版本管理相关接口
+ * @create :2026-01-07 15:50:00
  */
 @Service
-public class KwsAppVersionsService  {
+@RequiredArgsConstructor
+@Slf4j
+public class KwsAppVersionsService {
 
-}
+    private final AppVersionsService appVersionsService;
 
+    public AppVersionsResVo getLatestVersion(Integer platform) {
+        log.info("查询最新版本信息,平台类型: {}", platform);
+        AppVersions latestVersion = appVersionsService.getLatestVersion(platform);
+        if (latestVersion == null) {
+            return new AppVersionsResVo();
+        }
+        
+        return AppVersionsResVo.builder()
+                .id(latestVersion.getId())
+                .versionCode(latestVersion.getVersionCode())
+                .platform(latestVersion.getPlatform())
+                .downloadUrl(latestVersion.getDownloadUrl())
+                .isForceUpdate(latestVersion.getIsForceUpdate())
+                .build();
+    }
+}

+ 0 - 14
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsFeedbacksService.java

@@ -1,14 +0,0 @@
-package com.sckw.system.service;
-
-import org.springframework.stereotype.Service;
-
-/**
- * 意见反馈表Service接口
- * @author chenxiaofei
- * @date 2026-01-07
- */
-@Service
-public class KwsFeedbacksService  {
-
-}
-

+ 0 - 14
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsLoadingRecordsService.java

@@ -1,14 +0,0 @@
-package com.sckw.system.service;
-
-import org.springframework.stereotype.Service;
-
-/**
- * 装载作业记录表Service接口
- * @author chenxiaofei
- * @date 2026-01-07
- */
-@Service
-public class KwsLoadingRecordsService  {
-
-}
-

+ 0 - 15
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsLoginLogsService.java

@@ -1,15 +0,0 @@
-package com.sckw.system.service;
-
-
-import org.springframework.stereotype.Service;
-
-/**
- * 登录日志表Service接口
- * @author chenxiaofei
- * @date 2026-01-07
- */
-@Service
-public class KwsLoginLogsService  {
-
-}
-

+ 0 - 14
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsMaterialsService.java

@@ -1,14 +0,0 @@
-package com.sckw.system.service;
-
-import org.springframework.stereotype.Service;
-
-/**
- * 物料信息字典表Service接口
- * @author chenxiaofei
- * @date 2026-01-07
- */
-@Service
-public class KwsMaterialsService {
-
-}
-

+ 60 - 5
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsSysArticlesService.java

@@ -1,14 +1,69 @@
 package com.sckw.system.service;
 
+import com.sckw.core.utils.BeanUtils;
+import com.sckw.core.web.response.BaseResult;
+import com.sckw.system.model.SysArticles;
+import com.sckw.system.model.vo.res.SysArticlesResVo;
+import com.sckw.system.repository.SysArticlesService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 /**
- * 系统内容配置表Service接口
- * @author chenxiaofei
- * @date 2026-01-07
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description : 系统文件相关接口
+ * @create :2026-01-07 16:41:00
  */
 @Service
-public class KwsSysArticlesService  {
+@RequiredArgsConstructor
+@Slf4j
+public class KwsSysArticlesService {
+    private final SysArticlesService sysArticlesService;
+    public SysArticlesResVo getPrivacyPolicy(String privacyPolicy) {
+        SysArticles article = sysArticlesService.getByArticleKey(privacyPolicy);
+        if (article == null) {
+            log.error("隐私协议内容不存在");
+            return new SysArticlesResVo();
+        }
+        return SysArticlesResVo.builder()
+                .id(article.getId())
+                .articleKey(article.getArticleKey())
+                .title(article.getTitle())
+                .content(article.getContent())
+                .version(article.getVersion())
+                .build();
+    }
 
-}
+    public SysArticlesResVo getServiceAgreement(String regAgreement) {
+        SysArticles article = sysArticlesService.getByArticleKey(regAgreement);
+        if (article == null) {
+            log.error("服务协议内容不存在");
+            return new SysArticlesResVo();
+        }
+       return SysArticlesResVo.builder()
+                .id(article.getId())
+                .articleKey(article.getArticleKey())
+                .title(article.getTitle())
+                .content(article.getContent())
+                .version(article.getVersion())
+                .build();
+    }
+
+    public SysArticlesResVo getByArticleKey(String articleKey) {
+        SysArticles article = sysArticlesService.getByArticleKey(articleKey);
 
+        if (article == null) {
+            log.error("文章内容不存在");
+            return new SysArticlesResVo();
+        }
+
+        return SysArticlesResVo.builder()
+                .id(article.getId())
+                .articleKey(article.getArticleKey())
+                .title(article.getTitle())
+                .content(article.getContent())
+                .version(article.getVersion())
+                .build();
+    }
+}

+ 63 - 6
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsUsersService.java

@@ -1,15 +1,72 @@
 package com.sckw.system.service;
 
-
+import com.sckw.core.exception.BusinessException;
+import com.sckw.core.utils.BeanUtils;
+import com.sckw.core.web.constant.HttpStatus;
+import com.sckw.core.web.response.BaseResult;
+import com.sckw.system.model.Users;
+import com.sckw.system.model.vo.req.UsersReq;
+import com.sckw.system.model.vo.res.UsersResVo;
+import com.sckw.system.repository.UsersService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 /**
- * 用户基础信息表Service接口
- * @author chenxiaofei
- * @date 2026-01-07
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description : 用户信息相关接口
+ * @create :2026-01-07 16:05:00
  */
 @Service
-public class KwsUsersService{
+@RequiredArgsConstructor
+@Slf4j
+public class KwsUsersService {
+    private final UsersService usersService;
+    public UsersResVo getUserInfo(Long id) {
+        log.info("获取用户信息,用户id:{}", id);
+        Users user = usersService.queryById(id);
+        if (user == null) {
+            throw new BusinessException("用户不存在");
+        }
+       return UsersResVo.builder()
+                .id(user.getId())
+                .username(user.getUsername())
+                .fullName(user.getFullName())
+                .avatarUrl(user.getAvatarUrl())
+                .phone(user.getPhone())
+                .roleType(user.getRoleType())
+                .status(user.getStatus())
+                .build();
+    }
 
-}
+    public String deleteAccount(Long id,String reason) {
+        Users user = usersService.queryById(id);
+        if (user == null) {
+            throw new BusinessException("用户不存在");
+        }
+        // 更新状态为禁用
+        user.setStatus(0);
+        user.setReason(reason);
+        boolean b = usersService.updateById(user);
+        if (b) {
+            return"注销成功";
+        }
 
+        return  "注销失败";
+    }
+
+    public boolean update(UsersReq req) {
+        Users users = new Users();
+        users.setId(req.getId());
+        users.setUsername(req.getUsername());
+        users.setPasswordHash(req.getPasswordHash());
+        users.setFullName(req.getFullName());
+        users.setAvatarUrl(req.getAvatarUrl());
+        users.setPhone(req.getPhone());
+        users.setRoleType(req.getRoleType());
+        users.setStatus(req.getStatus());
+        return usersService.updateById(users);
+    }
+}

+ 3 - 1
sql/2026/01/2026_01_07_chenxiaofei_create.sql

@@ -1,13 +1,15 @@
 -- 1. 用户基础信息表
 CREATE TABLE `users` (
                          `id` BIGINT UNSIGNED PRIMARY KEY COMMENT '雪花ID',
+                         `ent_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '关联企业ID',
                          `username` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '登录账号',
                          `password_hash` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '加密存储的密码',
                          `full_name` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '用户姓名',
                          `avatar_url` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '头像URL地址',
                          `phone` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '联系电话',
                          `role_type` TINYINT NOT NULL DEFAULT 1 COMMENT '角色: 1-铲车司机(监管员), 2-门卫',
-                         `status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态: 0-禁用, 1-启用',
+                         `status` TINYINT NOT NULL DEFAULT 0 COMMENT '状态: 0-注册, 1-启用, 2-注销',
+                         `reason` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '注销原因',
                          `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间',
                          `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
                          UNIQUE KEY `uk_username` (`username`)