Sfoglia il codice sorgente

feature: 功能开发
1.一卡通管理后台增加了支付管理平台->账户管理的服务
2.RemoteDeptService 增加了提供获取部门树的接口
3.增加了ruoyi-api-backstage模块

luoyb 1 anno fa
parent
commit
c70608427e
33 ha cambiato i file con 1412 aggiunte e 29 eliminazioni
  1. 1 0
      ruoyi-api/pom.xml
  2. 33 0
      ruoyi-api/ruoyi-api-backstage/pom.xml
  3. 20 0
      ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemoteCardTypeService.java
  4. 59 0
      ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/domain/vo/RemoteCardTypeVo.java
  5. 5 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteDeptService.java
  6. 2 1
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteUserService.java
  7. 88 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteDeptVo.java
  8. 1 1
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteDictDataVo.java
  9. 1 0
      ruoyi-auth/src/main/java/org/dromara/auth/service/IAuthStrategy.java
  10. 4 0
      ruoyi-common/ruoyi-common-dict/pom.xml
  11. 4 0
      ruoyi-common/ruoyi-common-log/pom.xml
  12. 14 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/dubbo/RemoteCardTypeServiceImpl.java
  13. 11 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/service/IPtCardtypeService.java
  14. 25 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/service/impl/PtCardtypeServiceImpl.java
  15. 120 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/controller/PtUserAccountController.java
  16. 197 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/domain/PtUserAccount.java
  17. 202 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/domain/bo/PtUserAccountBo.java
  18. 223 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/domain/vo/PtUserAccountVo.java
  19. 15 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/mapper/PtUserAccountMapper.java
  20. 69 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/service/IPtUserAccountService.java
  21. 160 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/service/impl/PtUserAccountServiceImpl.java
  22. 48 0
      ruoyi-modules/ruoyi-backstage/src/main/resources/mapper/payment/PtUserAccountMapper.xml
  23. 1 1
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysDictData.java
  24. 1 1
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysDictType.java
  25. 0 6
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysRole.java
  26. 78 5
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysUser.java
  27. 1 1
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysDictDataBo.java
  28. 1 1
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysDictTypeBo.java
  29. 0 3
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/convert/SysUserBoConvert.java
  30. 1 1
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDictDataVo.java
  31. 19 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteDeptServiceImpl.java
  32. 2 2
      ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
  33. 6 6
      ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfCategoryController.java

+ 1 - 0
ruoyi-api/pom.xml

@@ -13,6 +13,7 @@
         <module>ruoyi-api-system</module>
         <module>ruoyi-api-resource</module>
         <module>ruoyi-api-workflow</module>
+        <module>ruoyi-api-backstage</module>
     </modules>
 
     <artifactId>ruoyi-api</artifactId>

+ 33 - 0
ruoyi-api/ruoyi-api-backstage/pom.xml

@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>org.dromara</groupId>
+        <artifactId>ruoyi-api</artifactId>
+        <version>${revision}</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ruoyi-api-backstage</artifactId>
+
+    <description>
+        ruoyi-api-backstage 一卡通管理后台接口模块
+    </description>
+
+    <dependencies>
+
+        <!-- RuoYi Common Core-->
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-core</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-excel</artifactId>
+        </dependency>
+
+    </dependencies>
+
+</project>

+ 20 - 0
ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemoteCardTypeService.java

@@ -0,0 +1,20 @@
+package org.dromara.backstage.api;
+
+/**
+ * 卡片类别服务
+ *
+ * @author Michelle.Chung
+ */
+public interface RemoteCardTypeService {
+
+    /*
+     * 通过卡片类别Id查询卡片名称
+     *
+     * date 2024-08-05 22:10:45 22:10
+     * @author: luoyibo
+     * @param cardTypeIds 卡片Id串,英文逗号分隔
+     * @return 卡片类别名称串,英文逗号分隔
+     */
+    String selectCardTypeNameByIds(String cardTypeIds);
+
+}

+ 59 - 0
ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/domain/vo/RemoteCardTypeVo.java

@@ -0,0 +1,59 @@
+package org.dromara.backstage.api.domain.vo;
+
+import lombok.Data;
+import java.io.Serial;
+import java.io.Serializable;
+
+
+/**
+ * 授权管理视图对象 sys_client
+ *
+ * @author Michelle.Chung
+ */
+@Data
+public class RemoteCardTypeVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    private Long typeId;
+
+    /**
+     * 卡类别
+     */
+    private String typeName;
+
+    /**
+     * 管理费
+     */
+    private Long commissionCharge;
+
+    /**
+     * 押金
+     */
+    private Long deposit;
+
+    /**
+     * 工本费
+     */
+    private Long productCost;
+
+    /**
+     * 折旧费
+     */
+    private Long depreciation;
+
+    /**
+     * 状态
+     */
+    private String status;
+
+    /**
+     * 类别说明
+     */
+    private String typeNotes;
+
+}

+ 5 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteDeptService.java

@@ -1,5 +1,9 @@
 package org.dromara.system.api;
 
+import cn.hutool.core.lang.tree.Tree;
+
+import java.util.List;
+
 /**
  * 部门服务
  *
@@ -15,4 +19,5 @@ public interface RemoteDeptService {
      */
     String selectDeptNameByIds(String deptIds);
 
+    List<Tree<Long>>deptTree();
 }

+ 2 - 1
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteUserService.java

@@ -101,7 +101,7 @@ public interface RemoteUserService {
     String selectPhonenumberById(Long userId);
 
     /**
-     * 通过用户ID查询用户邮箱
+     * 通过用户ID查询用户邮箱index.vue
      *
      * @param userId 用户id
      * @return 用户邮箱
@@ -131,4 +131,5 @@ public interface RemoteUserService {
      * @return 用户ids
      */
     List<Long> selectUserIdsByRoleIds(List<Long> roleIds);
+
 }

+ 88 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteDeptVo.java

@@ -0,0 +1,88 @@
+package org.dromara.system.api.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * name: RemoteDeptVo
+ * package: org.dromara.system.api.domain.vo
+ * description: 部门数据视图对象 t_sys_dept
+ * date: 2024-08-05 14:44:19 14:44
+ *
+ * @author luoyibo
+ * @version 0.1
+ * @since JDK 1.8
+ */
+@Data
+public class RemoteDeptVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -7998225905111376660L;
+    /**
+     * 部门id
+     */
+    @ExcelProperty(value = "部门id")
+    private Long deptId;
+
+    /**
+     * 父部门id
+     */
+    private Long parentId;
+
+    /**
+     * 父部门名称
+     */
+    private String parentName;
+
+    /**
+     * 祖级列表
+     */
+    private String ancestors;
+
+    /**
+     * 部门名称
+     */
+    private String deptName;
+
+    /**
+     * 部门类别编码
+     */
+    private String deptType;
+
+    /**
+     * 显示顺序
+     */
+    private Integer orderNum;
+
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+    /**
+     * 邮箱
+     */
+    private String email;
+
+    /**
+     * 部门状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 唯一标识
+     */
+    private String otherId;
+}

+ 1 - 1
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteDictDataVo.java

@@ -8,7 +8,7 @@ import java.util.Date;
 
 
 /**
- * 字典数据视图对象 sys_dict_data
+ * 字典数据视图对象 t_sys_dictData
  *
  * @author Michelle.Chung
  */

+ 1 - 0
ruoyi-auth/src/main/java/org/dromara/auth/service/IAuthStrategy.java

@@ -5,6 +5,7 @@ import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.utils.SpringUtils;
 import org.dromara.system.api.domain.vo.RemoteClientVo;
 
+
 /**
  * 授权策略
  *

+ 4 - 0
ruoyi-common/ruoyi-common-dict/pom.xml

@@ -33,6 +33,10 @@
             <artifactId>dubbo-spring-boot-starter</artifactId>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-api-system</artifactId>
+        </dependency>
 
     </dependencies>
 </project>

+ 4 - 0
ruoyi-common/ruoyi-common-log/pom.xml

@@ -32,6 +32,10 @@
             <artifactId>dubbo-spring-boot-starter</artifactId>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-api-system</artifactId>
+        </dependency>
 
     </dependencies>
 

+ 14 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/dubbo/RemoteCardTypeServiceImpl.java

@@ -0,0 +1,14 @@
+package org.dromara.backstage.basics.dubbo;
+
+/**
+ * name: RemoteCardTypeServiceImpl
+ * package: org.dromara.backstage.basics.dubbo
+ * description: 卡片服务实现
+ * date: 2024-08-05 22:50:13 22:50
+ *
+ * @author luoyibo
+ * @version 0.1
+ * @since JDK 1.8
+ */
+public class RemoteCardTypeServiceImpl {
+}

+ 11 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/service/IPtCardtypeService.java

@@ -66,4 +66,15 @@ public interface IPtCardtypeService {
      * @return 是否删除成功
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    /*
+     *
+     * 通过卡片类别Id查询卡片名称
+     *
+     * date 2024-08-05 22:10:45 22:10
+     * @author: luoyibo
+     * @param cardTypeIds 卡片Id串,英文逗号分隔
+     * @return 卡片类别名称串,英文逗号分隔
+     */
+    String selectCardTypeNameByIds(String cardTypeIds);
 }

+ 25 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/service/impl/PtCardtypeServiceImpl.java

@@ -1,6 +1,10 @@
 package org.dromara.backstage.basics.service.impl;
 
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.util.ObjectUtil;
+import org.dromara.backstage.payment.domain.vo.PtUserAccountVo;
 import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.SpringUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.mybatis.core.page.PageQuery;
@@ -15,6 +19,7 @@ import org.dromara.backstage.basics.domain.PtCardtype;
 import org.dromara.backstage.basics.mapper.PtCardtypeMapper;
 import org.dromara.backstage.basics.service.IPtCardtypeService;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Collection;
@@ -127,4 +132,24 @@ public class PtCardtypeServiceImpl implements IPtCardtypeService {
         }
         return baseMapper.deleteByIds(ids) > 0;
     }
+    /*
+     *
+     * 通过卡片类别Id查询卡片名称
+     *
+     * date 2024-08-05 22:10:45 22:10
+     * @author: luoyibo
+     * @param cardTypeIds 卡片Id串,英文逗号分隔
+     * @return 卡片类别名称串,英文逗号分隔
+     */
+    @Override
+    public String selectCardTypeNameByIds(String cardTypeIds) {
+        List<String> list = new ArrayList<>();
+        for (Long id : StringUtils.splitTo(cardTypeIds, Convert::toLong)) {
+            PtCardtypeVo vo = SpringUtils.getAopProxy(this).queryById(id);
+            if (ObjectUtil.isNotNull(vo)) {
+                list.add(vo.getTypeName());
+            }
+        }
+        return String.join(StringUtils.SEPARATOR, list);
+    }
 }

+ 120 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/controller/PtUserAccountController.java

@@ -0,0 +1,120 @@
+package org.dromara.backstage.payment.controller;
+
+import java.util.List;
+
+import cn.hutool.core.lang.tree.Tree;
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.system.api.RemoteDeptService;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.backstage.payment.domain.vo.PtUserAccountVo;
+import org.dromara.backstage.payment.domain.bo.PtUserAccountBo;
+import org.dromara.backstage.payment.service.IPtUserAccountService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 一卡通账户
+ * 前端访问路由地址为:/payment/ptUserAccount
+ *
+ * @author LionLi
+ * @date 2024-08-05
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/payment/ptUserAccount")
+public class PtUserAccountController extends BaseController {
+
+    private final IPtUserAccountService ptUserAccountService;
+
+    @DubboReference
+    private final RemoteDeptService remoteDeptService;
+    /**
+     * 查询一卡通账户列表
+     */
+    @SaCheckPermission("payment:ptUserAccount:list")
+    @GetMapping("/list")
+    public TableDataInfo<PtUserAccountVo> list(PtUserAccountBo bo, PageQuery pageQuery) {
+        return ptUserAccountService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 导出一卡通账户列表
+     */
+    @SaCheckPermission("payment:ptUserAccount:export")
+    @Log(title = "一卡通账户", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(PtUserAccountBo bo, HttpServletResponse response) {
+        List<PtUserAccountVo> list = ptUserAccountService.queryList(bo);
+        ExcelUtil.exportExcel(list, "一卡通账户", PtUserAccountVo.class, response);
+    }
+
+    /**
+     * 获取一卡通账户详细信息
+     *
+     * @param userId 主键
+     */
+    @SaCheckPermission("payment:ptUserAccount:query")
+    @GetMapping("/{userId}")
+    public R<PtUserAccountVo> getInfo(@NotNull(message = "主键不能为空")
+                                     @PathVariable Long userId) {
+        return R.ok(ptUserAccountService.queryById(userId));
+    }
+
+    /**
+     * 新增一卡通账户
+     */
+    @SaCheckPermission("payment:ptUserAccount:add")
+    @Log(title = "一卡通账户", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping()
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody PtUserAccountBo bo) {
+        return toAjax(ptUserAccountService.insertByBo(bo));
+    }
+
+    /**
+     * 修改一卡通账户
+     */
+    @SaCheckPermission("payment:ptUserAccount:edit")
+    @Log(title = "一卡通账户", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping()
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody PtUserAccountBo bo) {
+        return toAjax(ptUserAccountService.updateByBo(bo));
+    }
+
+    /**
+     * 删除一卡通账户
+     *
+     * @param userIds 主键串
+     */
+    @SaCheckPermission("payment:ptUserAccount:remove")
+    @Log(title = "一卡通账户", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{userIds}")
+    public R<Void> remove(@NotEmpty(message = "主键不能为空")
+                          @PathVariable Long[] userIds) {
+        return toAjax(ptUserAccountService.deleteWithValidByIds(List.of(userIds), true));
+    }
+
+    /**
+     * 获取部门树列表
+     */
+    @SaCheckPermission("payment:ptUserAccount:list")
+    @GetMapping("/deptTree")
+    public R<List<Tree<Long>>> deptTree() {
+        return R.ok(remoteDeptService.deptTree());
+    }
+}

+ 197 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/domain/PtUserAccount.java

@@ -0,0 +1,197 @@
+package org.dromara.backstage.payment.domain;
+
+import org.dromara.common.encrypt.annotation.EncryptField;
+import org.dromara.common.encrypt.enumd.AlgorithmType;
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.io.Serial;
+
+/**
+ * 一卡通账户对象 t_pt_userAccount
+ *
+ * @author LionLi
+ * @date 2024-08-05
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("t_pt_userAccount")
+public class PtUserAccount extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 账户Id,主键
+     */
+    @TableId(value = "user_id")
+    private Long userId;
+
+    /**
+     * 岗位Id
+     */
+    private Long postId;
+
+    /**
+     * 部门Id
+     */
+    private Long deptId;
+
+    /**
+     * 账户名/登录账号
+     */
+    private String userName;
+
+    /**
+     * 登录密码
+     */
+    private String password;
+
+    /**
+     * 账户编号/工号
+     */
+    private String userNumb;
+
+    /**
+     * 账户昵称
+     */
+    private String nickName;
+
+    /**
+     * 账户姓名
+     */
+    private String realName;
+
+    /**
+     * 账户性别,见sys_user_sex字典类型
+     */
+    private String sex;
+
+    /**
+     * 账户类型(0=内部账户 1=老师 2=学生 3=家长  4=其他人员)
+     */
+    private String category;
+
+    /**
+     * 账户邮箱
+     */
+    private String email;
+
+    /**
+     * 通信地址
+     */
+    private String address;
+
+    /**
+     * 手机号码
+     */
+    @EncryptField(algorithm = AlgorithmType.BASE64)
+    private String phone;
+
+    /**
+     * 头像地址
+     */
+    private Long avatar;
+
+    /**
+     * 身份证号
+     */
+    private String idNumber;
+
+    /**
+     * 一卡通账户状态(0-未开户  1-已开户  -1已销户)
+     */
+    private String accountStatus;
+
+    /**
+     * 账户是否被冻结,见sys_yes_no字典类型
+     */
+    private String freezeStatus;
+
+    /**
+     * 消费密码
+     */
+    private String consumePwd;
+
+    /**
+     * 账户流水号
+     */
+    private Long userNo;
+
+    /**
+     * 账户卡片类型
+     */
+    private Long cardType;
+
+    /**
+     * 账户有效期
+     */
+    private Date lifespan;
+
+    /**
+     * 64位2进制数据,某位的数据1代表具备某个属性
+     */
+    private Long userAttr;
+
+    /**
+     * 人脸照片地址
+     */
+    private String photo;
+
+    /**
+     * 人员编制,对应 ZXXBZLB 字典类型
+     */
+    private String formation;
+
+    /**
+     * 是否隐藏,见sys_yes_no字典类型,内置的系统账号是需要隐藏的
+     */
+    private String hidden;
+
+    /**
+     * 唯一身份标识,第三方统一身份认证ID
+     */
+    private String otherId;
+
+    /**
+     * 第三方人员状态
+     */
+    private String userState;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 最后登录IP
+     */
+    private String loginIp;
+
+    /**
+     * 最后登录时间
+     */
+    private Date loginDate;
+
+    /**
+     * 账户状态,见sys_normal_disable字典类型
+     */
+    private String status;
+
+    /**
+     * 删除标志(0-未删除 2-已删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 账户类型(sys_user一卡通账户)
+     */
+    private String userType;
+
+
+}

+ 202 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/domain/bo/PtUserAccountBo.java

@@ -0,0 +1,202 @@
+package org.dromara.backstage.payment.domain.bo;
+
+import org.dromara.backstage.payment.domain.PtUserAccount;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 一卡通账户业务对象 t_pt_userAccount
+ *
+ * @author LionLi
+ * @date 2024-08-05
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = PtUserAccount.class, reverseConvertGenerate = false)
+public class PtUserAccountBo extends BaseEntity {
+
+    /**
+     * 账户Id,主键
+     */
+    @NotNull(message = "账户Id,主键不能为空", groups = { EditGroup.class })
+    private Long userId;
+
+    /**
+     * 岗位Id
+     */
+    @NotNull(message = "岗位Id不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Long postId;
+
+    /**
+     * 部门Id
+     */
+    @NotNull(message = "部门Id不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Long deptId;
+
+    /**
+     * 账户名/登录账号
+     */
+    @NotBlank(message = "账户名/登录账号不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String userName;
+
+    /**
+     * 登录密码
+     */
+    private String password;
+
+    /**
+     * 账户编号/工号
+     */
+    @NotBlank(message = "账户编号/工号不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String userNumb;
+
+    /**
+     * 账户昵称
+     */
+    private String nickName;
+
+    /**
+     * 账户姓名
+     */
+    @NotBlank(message = "账户姓名不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String realName;
+
+    /**
+     * 账户性别,见sys_user_sex字典类型
+     */
+    @NotBlank(message = "账户性别,见sys_user_sex字典类型不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String sex;
+
+    /**
+     * 账户类型(0=内部账户 1=老师 2=学生 3=家长  4=其他人员)
+     */
+    @NotBlank(message = "账户类型(0=内部账户 1=老师 2=学生 3=家长  4=其他人员)不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String category;
+
+    /**
+     * 账户邮箱
+     */
+    private String email;
+
+    /**
+     * 通信地址
+     */
+    private String address;
+
+    /**
+     * 手机号码
+     */
+    @NotBlank(message = "手机号码不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String phone;
+
+    /**
+     * 头像地址
+     */
+    private Long avatar;
+
+    /**
+     * 身份证号
+     */
+    private String idNumber;
+
+    /**
+     * 一卡通账户状态(0-未开户  1-已开户  -1已销户)
+     */
+    @NotBlank(message = "一卡通账户状态(0-未开户  1-已开户  -1已销户)不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String accountStatus;
+
+    /**
+     * 账户是否被冻结,见sys_yes_no字典类型
+     */
+    @NotBlank(message = "账户是否被冻结,见sys_yes_no字典类型不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String freezeStatus;
+
+    /**
+     * 消费密码
+     */
+    @NotBlank(message = "消费密码不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String consumePwd;
+
+    /**
+     * 账户流水号
+     */
+    @NotNull(message = "账户流水号不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Long userNo;
+
+    /**
+     * 账户卡片类型
+     */
+    @NotNull(message = "账户卡片类型不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Long cardType;
+
+    /**
+     * 账户有效期
+     */
+    @NotNull(message = "账户有效期不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Date lifespan;
+
+    /**
+     * 64位2进制数据,某位的数据1代表具备某个属性
+     */
+    private Long userAttr;
+
+    /**
+     * 人脸照片地址
+     */
+    private String photo;
+
+    /**
+     * 人员编制,对应 ZXXBZLB 字典类型
+     */
+    private String formation;
+
+    /**
+     * 是否隐藏,见sys_yes_no字典类型,内置的系统账号是需要隐藏的
+     */
+    private String hidden;
+
+    /**
+     * 唯一身份标识,第三方统一身份认证ID
+     */
+    private String otherId;
+
+    /**
+     * 第三方人员状态
+     */
+    private String userState;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 最后登录IP
+     */
+    private String loginIp;
+
+    /**
+     * 最后登录时间
+     */
+    private Date loginDate;
+
+    /**
+     * 账户状态,见sys_normal_disable字典类型
+     */
+    @NotBlank(message = "账户状态,见sys_normal_disable字典类型不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String status;
+
+    /**
+     * 账户类型(sys_user一卡通账户)
+     */
+    private String userType;
+
+
+}

+ 223 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/domain/vo/PtUserAccountVo.java

@@ -0,0 +1,223 @@
+package org.dromara.backstage.payment.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.dromara.backstage.payment.domain.PtUserAccount;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.common.translation.annotation.Translation;
+import org.dromara.common.translation.constant.TransConstant;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 一卡通账户视图对象 t_pt_userAccount
+ *
+ * @author LionLi
+ * @date 2024-08-05
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = PtUserAccount.class)
+public class PtUserAccountVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 账户Id,主键
+     */
+    @ExcelProperty(value = "账户Id,主键")
+    private Long userId;
+
+    /**
+     * 岗位Id
+     */
+    @ExcelProperty(value = "岗位Id")
+    private Long postId;
+
+    /**
+     * 部门Id
+     */
+    @ExcelProperty(value = "部门Id")
+    private Long deptId;
+
+    /**
+     * 账户名/登录账号
+     */
+    @ExcelProperty(value = "账户名/登录账号")
+    private String userName;
+
+    /**
+     * 登录密码
+     */
+    @ExcelProperty(value = "登录密码")
+    private String password;
+
+    /**
+     * 账户编号/工号
+     */
+    @ExcelProperty(value = "账户编号/工号")
+    private String userNumb;
+
+    /**
+     * 账户姓名
+     */
+    @ExcelProperty(value = "账户姓名")
+    private String realName;
+
+    /**
+     * 账户性别,见sys_user_sex字典类型
+     */
+    @ExcelProperty(value = "账户性别,见sys_user_sex字典类型")
+    private String sex;
+
+    /**
+     * 账户类型(0=内部账户 1=老师 2=学生 3=家长  4=其他人员)
+     */
+    @ExcelProperty(value = "账户类型", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "0==内部账户,1==老师,2==学生,3==家长,4==其他人员")
+    private String category;
+
+    /**
+     * 账户邮箱
+     */
+    @ExcelProperty(value = "账户邮箱")
+    private String email;
+
+    /**
+     * 通信地址
+     */
+    @ExcelProperty(value = "通信地址")
+    private String address;
+
+    /**
+     * 手机号码
+     */
+    @ExcelProperty(value = "手机号码")
+    private String phone;
+
+    /**
+     * 头像地址
+     */
+    @ExcelProperty(value = "头像地址")
+    private Long avatar;
+
+    /**
+     * 身份证号
+     */
+    @ExcelProperty(value = "身份证号")
+    private String idNumber;
+
+    /**
+     * 一卡通账户状态(0-未开户  1-已开户  -1已销户)
+     */
+    @ExcelProperty(value = "一卡通账户状态", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "0=-未开户,1=-已开户,-=1已销户")
+    private String accountStatus;
+
+    /**
+     * 账户是否被冻结,见sys_yes_no字典类型
+     */
+    @ExcelProperty(value = "账户是否被冻结,见sys_yes_no字典类型")
+    private String freezeStatus;
+
+    /**
+     * 消费密码
+     */
+    @ExcelProperty(value = "消费密码")
+    private String consumePwd;
+
+    /**
+     * 账户流水号
+     */
+    @ExcelProperty(value = "账户流水号")
+    private Long userNo;
+
+    /**
+     * 账户卡片类型
+     */
+    @ExcelProperty(value = "账户卡片类型")
+    private Long cardType;
+
+    /**
+     * 账户有效期
+     */
+    @ExcelProperty(value = "账户有效期")
+    private Date lifespan;
+
+    /**
+     * 64位2进制数据,某位的数据1代表具备某个属性
+     */
+    @ExcelProperty(value = "64位2进制数据,某位的数据1代表具备某个属性")
+    private Long userAttr;
+
+    /**
+     * 人脸照片地址
+     */
+    @ExcelProperty(value = "人脸照片地址")
+    private String photo;
+
+    /**
+     * 人员编制,对应 ZXXBZLB 字典类型
+     */
+    @ExcelProperty(value = "人员编制,对应 ZXXBZLB 字典类型")
+    private String formation;
+
+    /**
+     * 是否隐藏,见sys_yes_no字典类型,内置的系统账号是需要隐藏的
+     */
+    @ExcelProperty(value = "是否隐藏,见sys_yes_no字典类型,内置的系统账号是需要隐藏的")
+    private String hidden;
+
+    /**
+     * 唯一身份标识,第三方统一身份认证ID
+     */
+    @ExcelProperty(value = "唯一身份标识,第三方统一身份认证ID")
+    private String otherId;
+
+    /**
+     * 第三方人员状态
+     */
+    @ExcelProperty(value = "第三方人员状态")
+    private String userState;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+    /**
+     * 最后登录IP
+     */
+    @ExcelProperty(value = "最后登录IP")
+    private String loginIp;
+
+    /**
+     * 最后登录时间
+     */
+    @ExcelProperty(value = "最后登录时间")
+    private Date loginDate;
+
+    /**
+     * 账户状态,见sys_normal_disable字典类型
+     */
+    @ExcelProperty(value = "账户状态,见sys_normal_disable字典类型")
+    private String status;
+
+    /**
+     * 部门名
+     */
+    @Translation(type = TransConstant.DEPT_ID_TO_NAME, mapper = "deptId")
+    private String deptName;
+
+}

+ 15 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/mapper/PtUserAccountMapper.java

@@ -0,0 +1,15 @@
+package org.dromara.backstage.payment.mapper;
+
+import org.dromara.backstage.payment.domain.PtUserAccount;
+import org.dromara.backstage.payment.domain.vo.PtUserAccountVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 一卡通账户Mapper接口
+ *
+ * @author LionLi
+ * @date 2024-08-05
+ */
+public interface PtUserAccountMapper extends BaseMapperPlus<PtUserAccount, PtUserAccountVo> {
+
+}

+ 69 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/service/IPtUserAccountService.java

@@ -0,0 +1,69 @@
+package org.dromara.backstage.payment.service;
+
+import org.dromara.backstage.payment.domain.PtUserAccount;
+import org.dromara.backstage.payment.domain.vo.PtUserAccountVo;
+import org.dromara.backstage.payment.domain.bo.PtUserAccountBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 一卡通账户Service接口
+ *
+ * @author LionLi
+ * @date 2024-08-05
+ */
+public interface IPtUserAccountService {
+
+    /**
+     * 查询一卡通账户
+     *
+     * @param userId 主键
+     * @return 一卡通账户
+     */
+    PtUserAccountVo queryById(Long userId);
+
+    /**
+     * 分页查询一卡通账户列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 一卡通账户分页列表
+     */
+    TableDataInfo<PtUserAccountVo> queryPageList(PtUserAccountBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的一卡通账户列表
+     *
+     * @param bo 查询条件
+     * @return 一卡通账户列表
+     */
+    List<PtUserAccountVo> queryList(PtUserAccountBo bo);
+
+    /**
+     * 新增一卡通账户
+     *
+     * @param bo 一卡通账户
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(PtUserAccountBo bo);
+
+    /**
+     * 修改一卡通账户
+     *
+     * @param bo 一卡通账户
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(PtUserAccountBo bo);
+
+    /**
+     * 校验并批量删除一卡通账户信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 160 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/service/impl/PtUserAccountServiceImpl.java

@@ -0,0 +1,160 @@
+package org.dromara.backstage.payment.service.impl;
+
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.dromara.backstage.payment.domain.bo.PtUserAccountBo;
+import org.dromara.backstage.payment.domain.vo.PtUserAccountVo;
+import org.dromara.backstage.payment.domain.PtUserAccount;
+import org.dromara.backstage.payment.mapper.PtUserAccountMapper;
+import org.dromara.backstage.payment.service.IPtUserAccountService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 一卡通账户Service业务层处理
+ *
+ * @author LionLi
+ * @date 2024-08-05
+ */
+@RequiredArgsConstructor
+@Service
+public class PtUserAccountServiceImpl implements IPtUserAccountService {
+
+    private final PtUserAccountMapper baseMapper;
+
+    /**
+     * 查询一卡通账户
+     *
+     * @param userId 主键
+     * @return 一卡通账户
+     */
+    @Override
+    public PtUserAccountVo queryById(Long userId){
+        return baseMapper.selectVoById(userId);
+    }
+
+    /**
+     * 分页查询一卡通账户列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 一卡通账户分页列表
+     */
+    @Override
+    public TableDataInfo<PtUserAccountVo> queryPageList(PtUserAccountBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<PtUserAccount> lqw = buildQueryWrapper(bo);
+        lqw.orderByAsc(PtUserAccount::getDeptId)
+            .orderByAsc(PtUserAccount::getRealName);
+        Page<PtUserAccountVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的一卡通账户列表
+     *
+     * @param bo 查询条件
+     * @return 一卡通账户列表
+     */
+    @Override
+    public List<PtUserAccountVo> queryList(PtUserAccountBo bo) {
+        LambdaQueryWrapper<PtUserAccount> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<PtUserAccount> buildQueryWrapper(PtUserAccountBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<PtUserAccount> lqw = Wrappers.lambdaQuery();
+        lqw.eq(bo.getPostId() != null, PtUserAccount::getPostId, bo.getPostId());
+        lqw.eq(bo.getDeptId() != null, PtUserAccount::getDeptId, bo.getDeptId());
+        lqw.like(StringUtils.isNotBlank(bo.getUserName()), PtUserAccount::getUserName, bo.getUserName());
+        lqw.eq(StringUtils.isNotBlank(bo.getPassword()), PtUserAccount::getPassword, bo.getPassword());
+        lqw.eq(StringUtils.isNotBlank(bo.getUserNumb()), PtUserAccount::getUserNumb, bo.getUserNumb());
+        lqw.like(StringUtils.isNotBlank(bo.getNickName()), PtUserAccount::getNickName, bo.getNickName());
+        lqw.like(StringUtils.isNotBlank(bo.getRealName()), PtUserAccount::getRealName, bo.getRealName());
+        lqw.eq(StringUtils.isNotBlank(bo.getSex()), PtUserAccount::getSex, bo.getSex());
+        lqw.eq(StringUtils.isNotBlank(bo.getCategory()), PtUserAccount::getCategory, bo.getCategory());
+        lqw.eq(StringUtils.isNotBlank(bo.getEmail()), PtUserAccount::getEmail, bo.getEmail());
+        lqw.eq(StringUtils.isNotBlank(bo.getAddress()), PtUserAccount::getAddress, bo.getAddress());
+        lqw.eq(StringUtils.isNotBlank(bo.getPhone()), PtUserAccount::getPhone, bo.getPhone());
+        lqw.eq(bo.getAvatar() != null, PtUserAccount::getAvatar, bo.getAvatar());
+        lqw.eq(StringUtils.isNotBlank(bo.getIdNumber()), PtUserAccount::getIdNumber, bo.getIdNumber());
+        lqw.eq(StringUtils.isNotBlank(bo.getAccountStatus()), PtUserAccount::getAccountStatus, bo.getAccountStatus());
+        lqw.eq(StringUtils.isNotBlank(bo.getFreezeStatus()), PtUserAccount::getFreezeStatus, bo.getFreezeStatus());
+        lqw.eq(StringUtils.isNotBlank(bo.getConsumePwd()), PtUserAccount::getConsumePwd, bo.getConsumePwd());
+        lqw.eq(bo.getUserNo() != null, PtUserAccount::getUserNo, bo.getUserNo());
+        lqw.eq(bo.getCardType() != null, PtUserAccount::getCardType, bo.getCardType());
+        lqw.eq(bo.getLifespan() != null, PtUserAccount::getLifespan, bo.getLifespan());
+        lqw.eq(bo.getUserAttr() != null, PtUserAccount::getUserAttr, bo.getUserAttr());
+        lqw.eq(StringUtils.isNotBlank(bo.getPhoto()), PtUserAccount::getPhoto, bo.getPhoto());
+        lqw.eq(StringUtils.isNotBlank(bo.getFormation()), PtUserAccount::getFormation, bo.getFormation());
+        lqw.eq(StringUtils.isNotBlank(bo.getHidden()), PtUserAccount::getHidden, bo.getHidden());
+        lqw.eq(StringUtils.isNotBlank(bo.getOtherId()), PtUserAccount::getOtherId, bo.getOtherId());
+        lqw.eq(StringUtils.isNotBlank(bo.getUserState()), PtUserAccount::getUserState, bo.getUserState());
+        lqw.eq(StringUtils.isNotBlank(bo.getLoginIp()), PtUserAccount::getLoginIp, bo.getLoginIp());
+        lqw.eq(bo.getLoginDate() != null, PtUserAccount::getLoginDate, bo.getLoginDate());
+        lqw.eq(StringUtils.isNotBlank(bo.getStatus()), PtUserAccount::getStatus, bo.getStatus());
+        lqw.eq(StringUtils.isNotBlank(bo.getUserType()), PtUserAccount::getUserType, bo.getUserType());
+        return lqw;
+    }
+
+    /**
+     * 新增一卡通账户
+     *
+     * @param bo 一卡通账户
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(PtUserAccountBo bo) {
+        PtUserAccount add = MapstructUtils.convert(bo, PtUserAccount.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setUserId(add.getUserId());
+        }
+        return flag;
+    }
+
+    /**
+     * 修改一卡通账户
+     *
+     * @param bo 一卡通账户
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(PtUserAccountBo bo) {
+        PtUserAccount update = MapstructUtils.convert(bo, PtUserAccount.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(PtUserAccount entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除一卡通账户信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+}

+ 48 - 0
ruoyi-modules/ruoyi-backstage/src/main/resources/mapper/payment/PtUserAccountMapper.xml

@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.dromara.backstage.payment.mapper.PtUserAccountMapper">
+
+    <resultMap type="org.dromara.backstage.payment.domain.PtUserAccount" id="PtUserAccountResult">
+            <result property="userId"    column="user_id"    />
+            <result property="tenantId"    column="tenant_id"    />
+            <result property="postId"    column="post_id"    />
+            <result property="deptId"    column="dept_id"    />
+            <result property="userName"    column="user_name"    />
+            <result property="password"    column="password"    />
+            <result property="userNumb"    column="user_numb"    />
+            <result property="nickName"    column="nick_name"    />
+            <result property="realName"    column="real_name"    />
+            <result property="sex"    column="sex"    />
+            <result property="category"    column="category"    />
+            <result property="email"    column="email"    />
+            <result property="address"    column="address"    />
+            <result property="phone"    column="phone"    />
+            <result property="avatar"    column="avatar"    />
+            <result property="idNumber"    column="id_number"    />
+            <result property="accountStatus"    column="account_status"    />
+            <result property="freezeStatus"    column="freeze_status"    />
+            <result property="consumePwd"    column="consume_pwd"    />
+            <result property="userNo"    column="user_no"    />
+            <result property="cardType"    column="card_type"    />
+            <result property="lifespan"    column="lifespan"    />
+            <result property="userAttr"    column="user_attr"    />
+            <result property="photo"    column="photo"    />
+            <result property="formation"    column="formation"    />
+            <result property="hidden"    column="hidden"    />
+            <result property="otherId"    column="other_id"    />
+            <result property="userState"    column="user_state"    />
+            <result property="remark"    column="remark"    />
+            <result property="loginIp"    column="login_ip"    />
+            <result property="loginDate"    column="login_date"    />
+            <result property="status"    column="status"    />
+            <result property="delFlag"    column="del_flag"    />
+            <result property="createDept"    column="create_dept"    />
+            <result property="createBy"    column="create_by"    />
+            <result property="createTime"    column="create_time"    />
+            <result property="updateBy"    column="update_by"    />
+            <result property="updateTime"    column="update_time"    />
+            <result property="userType"    column="user_type"    />
+    </resultMap>
+</mapper>

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysDictData.java

@@ -8,7 +8,7 @@ import org.dromara.common.core.constant.UserConstants;
 import org.dromara.common.tenant.core.TenantEntity;
 
 /**
- * 字典数据表 sys_dict_data
+ * 字典数据表 t_sys_dictData
  *
  * @author Lion Li
  */

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysDictType.java

@@ -7,7 +7,7 @@ import lombok.EqualsAndHashCode;
 import org.dromara.common.tenant.core.TenantEntity;
 
 /**
- * 字典类型表 sys_dict_type
+ * 字典类型表 t_sys_dictType
  *
  * @author Lion Li
  */

+ 0 - 6
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysRole.java

@@ -61,12 +61,6 @@ public class SysRole extends TenantEntity {
      */
     private String status;
 
-    /**
-     * 删除标志(0代表存在 2代表删除)
-     */
-//    @TableLogic
-//    private String delFlag;
-
     /**
      * 备注
      */

+ 78 - 5
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysUser.java

@@ -32,6 +32,10 @@ public class SysUser extends TenantEntity {
      */
     private Long deptId;
 
+    /**
+     * 岗位Id
+     */
+    private Long postId;
 
     /**
      * 用户账号
@@ -43,6 +47,21 @@ public class SysUser extends TenantEntity {
      */
     private String nickName;
 
+    /**
+     * 用户姓名
+     */
+    private String realName;
+
+    /**
+     * 通信地址
+     */
+    private String address;
+
+    /**
+     * 身份证号
+     */
+    private String idNumber;
+
     /**
      * 用户类型(sys_user系统用户)
      */
@@ -87,11 +106,6 @@ public class SysUser extends TenantEntity {
      */
     private String status;
 
-    /**
-     * 删除标志(0代表存在 2代表删除)
-     */
-//    @TableLogic
-//    private String delFlag;
 
     /**
      * 最后登录IP
@@ -108,6 +122,65 @@ public class SysUser extends TenantEntity {
      */
     private String remark;
 
+    /**
+     * 一卡通账户状态(0-未开户  1-已开户  -1已销户)
+     */
+    private String accountStatus;
+
+    /**
+     * 账户是否被冻结,见sys_yes_no字典类型
+     */
+    private String freezeStatus;
+
+    /**
+     * 消费密码
+     */
+    private String consumePwd;
+
+    /**
+     * 账户流水号
+     */
+    private Long userNo;
+
+    /**
+     * 账户卡片类型
+     */
+    private Long cardType;
+
+    /**
+     * 账户有效期
+     */
+    private Date lifespan;
+
+    /**
+     * 64位2进制数据,某位的数据1代表具备某个属性
+     */
+    private Long userAttr;
+
+    /**
+     * 人脸照片地址
+     */
+    private String photo;
+
+    /**
+     * 人员编制,对应 ZXXBZLB 字典类型
+     */
+    private String formation;
+
+    /**
+     * 是否隐藏,见sys_yes_no字典类型,内置的系统账号是需要隐藏的
+     */
+    private String hidden;
+
+    /**
+     * 唯一身份标识,第三方统一身份认证ID
+     */
+    private String otherId;
+
+    /**
+     * 第三方人员状态
+     */
+    private String userState;
 
     public SysUser(Long userId) {
         this.userId = userId;

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysDictDataBo.java

@@ -10,7 +10,7 @@ import org.dromara.common.mybatis.core.domain.BaseEntity;
 import org.dromara.system.domain.SysDictData;
 
 /**
- * 字典数据业务对象 sys_dict_data
+ * 字典数据业务对象 t_sys_dictData
  *
  * @author Michelle.Chung
  */

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysDictTypeBo.java

@@ -11,7 +11,7 @@ import org.dromara.common.mybatis.core.domain.BaseEntity;
 import org.dromara.system.domain.SysDictType;
 
 /**
- * 字典类型业务对象 sys_dict_type
+ * 字典类型业务对象 t_sys_dictType
  *
  * @author Michelle.Chung
  */

+ 0 - 3
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/convert/SysUserBoConvert.java

@@ -1,15 +1,12 @@
 package org.dromara.system.domain.convert;
 
 import io.github.linpeilie.BaseMapper;
-import org.dromara.system.api.domain.bo.RemoteOperLogBo;
 import org.dromara.system.api.domain.bo.RemoteUserBo;
-import org.dromara.system.domain.bo.SysOperLogBo;
 import org.dromara.system.domain.bo.SysUserBo;
 import org.mapstruct.Mapper;
 import org.mapstruct.Mapping;
 import org.mapstruct.MappingConstants;
 import org.mapstruct.ReportingPolicy;
-import org.mapstruct.factory.Mappers;
 
 /**
  * 用户信息转换器

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDictDataVo.java

@@ -14,7 +14,7 @@ import java.util.Date;
 
 
 /**
- * 字典数据视图对象 sys_dict_data
+ * 字典数据视图对象 t_sys_dictData
  *
  * @author Michelle.Chung
  */

+ 19 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteDeptServiceImpl.java

@@ -1,11 +1,15 @@
 package org.dromara.system.dubbo;
 
+import cn.hutool.core.lang.tree.Tree;
 import org.dromara.system.api.RemoteDeptService;
+import org.dromara.system.domain.bo.SysDeptBo;
 import org.dromara.system.service.ISysDeptService;
 import lombok.RequiredArgsConstructor;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * 部门服务
  *
@@ -28,4 +32,19 @@ public class RemoteDeptServiceImpl implements RemoteDeptService {
     public String selectDeptNameByIds(String deptIds) {
         return sysDeptService.selectDeptNameByIds(deptIds);
     }
+
+    /*
+     *
+     * 查询部门树
+     *
+     * date 2024-08-05 22:07:32 22:07
+     * @author: luoyibo
+     * @param
+     * @return
+     */
+    @Override
+    public List<Tree<Long>>deptTree(){
+        SysDeptBo dept = new SysDeptBo();
+        return sysDeptService.selectDeptTreeList(dept);
+    }
 }

+ 2 - 2
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -52,7 +52,7 @@
         from t_sys_user u
              left join t_sys_dept d on u.dept_id = d.dept_id
              left join sys_user_role sur on u.user_id = sur.user_id
-             left join sys_role r on r.role_id = sur.role_id
+             left join t_sys_role r on r.role_id = sur.role_id
         ${ew.getCustomSqlSegment}
     </select>
 
@@ -61,7 +61,7 @@
         from t_sys_user u
              left join t_sys_dept d on u.dept_id = d.dept_id
              left join sys_user_role sur on u.user_id = sur.user_id
-             left join sys_role r on r.role_id = sur.role_id
+             left join t_sys_role r on r.role_id = sur.role_id
         ${ew.getCustomSqlSegment}
     </select>
 

+ 6 - 6
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfCategoryController.java

@@ -38,7 +38,7 @@ public class WfCategoryController extends BaseController {
     /**
      * 查询流程分类列表
      */
-    @SaCheckPermission("workflow:category:list")
+    @SaCheckPermission("workflow:userType:list")
     @GetMapping("/list")
     public R<List<WfCategoryVo>> list(WfCategoryBo bo) {
         List<WfCategoryVo> list = wfCategoryService.queryList(bo);
@@ -49,7 +49,7 @@ public class WfCategoryController extends BaseController {
     /**
      * 导出流程分类列表
      */
-    @SaCheckPermission("workflow:category:export")
+    @SaCheckPermission("workflow:userType:export")
     @Log(title = "流程分类", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(WfCategoryBo bo, HttpServletResponse response) {
@@ -62,7 +62,7 @@ public class WfCategoryController extends BaseController {
      *
      * @param id 主键
      */
-    @SaCheckPermission("workflow:category:query")
+    @SaCheckPermission("workflow:userType:query")
     @GetMapping("/{id}")
     public R<WfCategoryVo> getInfo(@NotNull(message = "主键不能为空")
                                    @PathVariable Long id) {
@@ -72,7 +72,7 @@ public class WfCategoryController extends BaseController {
     /**
      * 新增流程分类
      */
-    @SaCheckPermission("workflow:category:add")
+    @SaCheckPermission("workflow:userType:add")
     @Log(title = "流程分类", businessType = BusinessType.INSERT)
     @RepeatSubmit()
     @PostMapping()
@@ -83,7 +83,7 @@ public class WfCategoryController extends BaseController {
     /**
      * 修改流程分类
      */
-    @SaCheckPermission("workflow:category:edit")
+    @SaCheckPermission("workflow:userType:edit")
     @Log(title = "流程分类", businessType = BusinessType.UPDATE)
     @RepeatSubmit()
     @PutMapping()
@@ -96,7 +96,7 @@ public class WfCategoryController extends BaseController {
      *
      * @param ids 主键串
      */
-    @SaCheckPermission("workflow:category:remove")
+    @SaCheckPermission("workflow:userType:remove")
     @Log(title = "流程分类", businessType = BusinessType.DELETE)
     @DeleteMapping("/{ids}")
     public R<Void> remove(@NotEmpty(message = "主键不能为空")