Explorar el Código

物业管理端

tjf hace 4 meses
padre
commit
de947c6b77
Se han modificado 30 ficheros con 878 adiciones y 69 borrados
  1. 10 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/houseInfo/HouseInfoController.java
  2. 1 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/residentInfo/ResidentInfoController.java
  3. 2 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/staffManage/StaffManageController.java
  4. 11 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/staffTrain/StaffTrainManualController.java
  5. 90 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/staffTrainTime/StaffTrainTimeController.java
  6. 1 1
      ruoyi-admin/src/main/resources/application.yml
  7. 10 0
      ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java
  8. 26 7
      ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java
  9. 22 20
      ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/ResidentInfo.java
  10. 1 1
      ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/StaffManage.java
  11. 39 0
      ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java
  12. 3 6
      ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java
  13. 8 1
      ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java
  14. 1 0
      ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml
  15. 111 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/staffTrainTime/StaffTrainTime.java
  16. 8 1
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/ResidentInfoMapper.java
  17. 8 1
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/StaffManageMapper.java
  18. 63 0
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/StaffTrainTimeMapper.java
  19. 8 1
      ruoyi-system/src/main/java/com/ruoyi/system/service/IResidentInfoService.java
  20. 8 1
      ruoyi-system/src/main/java/com/ruoyi/system/service/IStaffManageService.java
  21. 6 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/IStaffTrainManualService.java
  22. 63 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/IStaffTrainTimeService.java
  23. 12 1
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ResidentInfoServiceImpl.java
  24. 11 1
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StaffManageServiceImpl.java
  25. 133 22
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StaffTrainManualServiceImpl.java
  26. 114 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StaffTrainTimeServiceImpl.java
  27. 1 1
      ruoyi-system/src/main/resources/mapper/system/HouseInfoMapper.xml
  28. 7 2
      ruoyi-system/src/main/resources/mapper/system/ResidentInfoMapper.xml
  29. 4 0
      ruoyi-system/src/main/resources/mapper/system/StaffManageMapper.xml
  30. 96 0
      ruoyi-system/src/main/resources/mapper/system/StaffTrainTimeMapper.xml

+ 10 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/houseInfo/HouseInfoController.java

@@ -38,6 +38,16 @@ public class HouseInfoController extends BaseController {
         return getDataTable(list);
     }
 
+    /**
+     * 查询房屋信息列表不分页
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:houseInfo:listNoPage')")
+    @GetMapping("/listNoPage")
+    public TableDataInfo listNoPage(HouseInfo houseInfo) {
+        List<HouseInfo> list = houseInfoService.selectHouseInfoList(houseInfo);
+        return getDataTable(list);
+    }
+
     /**
      * 导出房屋信息列表
      */

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/residentInfo/ResidentInfoController.java

@@ -6,7 +6,7 @@ import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.system.domain.residentInfo.ResidentInfo;
+import com.ruoyi.common.core.domain.entity.ResidentInfo;
 import com.ruoyi.system.service.IResidentInfoService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;

+ 2 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/staffManage/StaffManageController.java

@@ -6,7 +6,7 @@ import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.system.domain.staffManage.StaffManage;
+import com.ruoyi.common.core.domain.entity.StaffManage;
 import com.ruoyi.system.service.IStaffManageService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -86,6 +86,7 @@ public class StaffManageController extends BaseController {
     @Log(title = "员工管理", businessType = BusinessType.DELETE)
     @GetMapping("/delete/{staffIds}")
     public AjaxResult remove(@PathVariable Long[] staffIds) {
+        getUsername();
         return toAjax(staffManageService.deleteStaffManageByStaffIds(staffIds));
     }
 }

+ 11 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/staffTrain/StaffTrainManualController.java

@@ -38,6 +38,7 @@ public class StaffTrainManualController extends BaseController {
         return getDataTable(list);
     }
 
+
     /**
      * 导出员工培训手册列表
      */
@@ -59,6 +60,16 @@ public class StaffTrainManualController extends BaseController {
         return success(staffTrainManualService.selectStaffTrainManualByManualId(manualId));
     }
 
+
+    /**
+     * 获取已读人员名单
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:manual:getRead')")
+    @PostMapping(value = "/getRead")
+    public AjaxResult getRead(StaffTrainManual staffTrainManual) {
+        return staffTrainManualService.getRead(staffTrainManual);
+    }
+
     /**
      * 新增员工培训手册
      */

+ 90 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/staffTrainTime/StaffTrainTimeController.java

@@ -0,0 +1,90 @@
+package com.ruoyi.web.controller.staffTrainTime;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.staffTrainTime.StaffTrainTime;
+import com.ruoyi.system.service.IStaffTrainTimeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 员工培训时长Controller
+ *
+ * @author boman
+ * @date 2025-02-21
+ */
+@RestController
+@RequestMapping("/wuYe/staffTrainTime")
+public class StaffTrainTimeController extends BaseController {
+    @Autowired
+    private IStaffTrainTimeService staffTrainTimeService;
+
+    /**
+     * 查询员工培训时长列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:staffTrainTime:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(StaffTrainTime staffTrainTime) {
+        List<StaffTrainTime> list = staffTrainTimeService.selectStaffTrainTimeList(staffTrainTime);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出员工培训时长列表
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:staffTrainTime:export')")
+    @Log(title = "员工培训时长", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, StaffTrainTime staffTrainTime) {
+        List<StaffTrainTime> list = staffTrainTimeService.selectStaffTrainTimeList(staffTrainTime);
+        ExcelUtil<StaffTrainTime> util = new ExcelUtil<StaffTrainTime>(StaffTrainTime.class);
+        util.exportExcel(response, list, "员工培训时长数据");
+    }
+
+    /**
+     * 获取员工培训时长详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:staffTrainTime:query')")
+    @GetMapping(value = "/{trainTimeId}")
+    public AjaxResult getInfo(@PathVariable("trainTimeId") Long trainTimeId) {
+        return success(staffTrainTimeService.selectStaffTrainTimeByTrainTimeId(trainTimeId));
+    }
+
+    /**
+     * 新增员工培训时长
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:staffTrainTime:add')")
+    @Log(title = "员工培训时长", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody StaffTrainTime staffTrainTime) {
+        return toAjax(staffTrainTimeService.insertStaffTrainTime(staffTrainTime));
+    }
+
+    /**
+     * 修改员工培训时长
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:staffTrainTime:edit')")
+    @Log(title = "员工培训时长", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody StaffTrainTime staffTrainTime) {
+        return toAjax(staffTrainTimeService.updateStaffTrainTime(staffTrainTime));
+    }
+
+    /**
+     * 删除员工培训时长
+     */
+    @PreAuthorize("@ss.hasPermi('wuYe:staffTrainTime:remove')")
+    @Log(title = "员工培训时长", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{trainTimeIds}")
+    public AjaxResult remove(@PathVariable Long[] trainTimeIds) {
+        return toAjax(staffTrainTimeService.deleteStaffTrainTimeByTrainTimeIds(trainTimeIds));
+    }
+}

+ 1 - 1
ruoyi-admin/src/main/resources/application.yml

@@ -32,7 +32,7 @@ spring:
   devtools:
     restart:
       # 热部署开关
-      enabled: true
+      enabled: false
 
 # token配置
 token:

+ 10 - 0
ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java

@@ -41,4 +41,14 @@ public class CacheConstants
      * 登录账户密码错误次数 redis key
      */
     public static final String PWD_ERR_CNT_KEY = "pwd_err_cnt:";
+    /**
+     * 员工培训手册阅读人员名单 redis key
+     */
+    public static final String READ_TRAIN = "read_train:";
+    /**
+     * 员工培训手册阅读人员的阅读时间 redis key
+     */
+    public static final String READ_TRAIN_TIME = "read_train_time:";
+
+
 }

+ 26 - 7
ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java

@@ -1,16 +1,11 @@
 package com.ruoyi.common.core.controller;
 
-import java.beans.PropertyEditorSupport;
-import java.util.Date;
-import java.util.List;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.web.bind.WebDataBinder;
-import org.springframework.web.bind.annotation.InitBinder;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.ruoyi.common.constant.HttpStatus;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.ResidentInfo;
+import com.ruoyi.common.core.domain.entity.StaffManage;
 import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.common.core.page.PageDomain;
 import com.ruoyi.common.core.page.TableDataInfo;
@@ -20,6 +15,14 @@ import com.ruoyi.common.utils.PageUtils;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.sql.SqlUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.WebDataBinder;
+import org.springframework.web.bind.annotation.InitBinder;
+
+import java.beans.PropertyEditorSupport;
+import java.util.Date;
+import java.util.List;
 
 /**
  * web层通用数据处理
@@ -199,4 +202,20 @@ public class BaseController
     {
         return getLoginUser().getUsername();
     }
+
+    /**
+     * 获取员工信息
+     */
+    public StaffManage getStaffManage()
+    {
+        return getLoginUser().getStaffManage();
+    }
+
+    /**
+     * 获取员工信息
+     */
+    public ResidentInfo getResidentInfo()
+    {
+        return getLoginUser().getResidentInfo();
+    }
 }

+ 22 - 20
ruoyi-system/src/main/java/com/ruoyi/system/domain/residentInfo/ResidentInfo.java → ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/ResidentInfo.java

@@ -1,4 +1,4 @@
-package com.ruoyi.system.domain.residentInfo;
+package com.ruoyi.common.core.domain.entity;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
@@ -9,7 +9,7 @@ import com.ruoyi.common.core.domain.BaseEntity;
  * 居住人员信息,存储居住人员的详细信息对象 resident_info
  * 
  * @author boman
- * @date 2025-02-20
+ * @date 2025-02-21
  */
 public class ResidentInfo extends BaseEntity
 {
@@ -41,10 +41,6 @@ public class ResidentInfo extends BaseEntity
     /** 居住人员出生日期 */
     @Excel(name = "居住人员出生日期")
     private String residentBirthday;
-    /**
-     * 年龄
-     */
-    private String yearsOld;
 
     /** 居住人员手机号 */
     @Excel(name = "居住人员手机号")
@@ -58,9 +54,13 @@ public class ResidentInfo extends BaseEntity
     @Excel(name = "居住人员与户主的关系,如父子、夫妻等")
     private String residentRelationship;
 
-    /** 是否是户主:1-是,0-否 */
-    @Excel(name = "是否是户主:1-是,0-否")
-    private Integer isHouseholder;
+    /** 是否是户主:Y-是,N-否 */
+    @Excel(name = "是否是户主:Y-是,N-否")
+    private String isHouseholder;
+
+    /** 是否是租户:Y-是,N-否 */
+    @Excel(name = "是否是租户:Y-是,N-否")
+    private String isTenant;
 
     /** 居住人员工作单位 */
     @Excel(name = "居住人员工作单位")
@@ -70,15 +70,7 @@ public class ResidentInfo extends BaseEntity
     @Excel(name = "居住人员面貌,如党员、群众等")
     private String residentAppearance;
 
-    public String getYearsOld() {
-        return yearsOld;
-    }
-
-    public void setYearsOld(String yearsOld) {
-        this.yearsOld = yearsOld;
-    }
-
-    public void setResidentId(Long residentId)
+    public void setResidentId(Long residentId) 
     {
         this.residentId = residentId;
     }
@@ -168,15 +160,24 @@ public class ResidentInfo extends BaseEntity
     {
         return residentRelationship;
     }
-    public void setIsHouseholder(Integer isHouseholder) 
+    public void setIsHouseholder(String isHouseholder) 
     {
         this.isHouseholder = isHouseholder;
     }
 
-    public Integer getIsHouseholder() 
+    public String getIsHouseholder() 
     {
         return isHouseholder;
     }
+    public void setIsTenant(String isTenant) 
+    {
+        this.isTenant = isTenant;
+    }
+
+    public String getIsTenant() 
+    {
+        return isTenant;
+    }
     public void setResidentEmployer(String residentEmployer) 
     {
         this.residentEmployer = residentEmployer;
@@ -210,6 +211,7 @@ public class ResidentInfo extends BaseEntity
             .append("residentGender", getResidentGender())
             .append("residentRelationship", getResidentRelationship())
             .append("isHouseholder", getIsHouseholder())
+            .append("isTenant", getIsTenant())
             .append("residentEmployer", getResidentEmployer())
             .append("residentAppearance", getResidentAppearance())
             .append("createBy", getCreateBy())

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/domain/staffManage/StaffManage.java → ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/StaffManage.java

@@ -1,4 +1,4 @@
-package com.ruoyi.system.domain.staffManage;
+package com.ruoyi.common.core.domain.entity;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;

+ 39 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java

@@ -1,9 +1,12 @@
 package com.ruoyi.common.core.domain.model;
 
 import com.alibaba.fastjson2.annotation.JSONField;
+import com.ruoyi.common.core.domain.entity.ResidentInfo;
+import com.ruoyi.common.core.domain.entity.StaffManage;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.userdetails.UserDetails;
+
 import java.util.Collection;
 import java.util.Set;
 
@@ -71,6 +74,16 @@ public class LoginUser implements UserDetails
      */
     private SysUser user;
 
+    /**
+     * 员工信息
+     */
+    private StaffManage staffManage;
+    /**
+     * 居住人员信息
+     */
+    private ResidentInfo residentInfo;
+
+
     public LoginUser()
     {
     }
@@ -89,6 +102,32 @@ public class LoginUser implements UserDetails
         this.permissions = permissions;
     }
 
+    public LoginUser(Long userId, Long deptId, SysUser user, Set<String> permissions,StaffManage staffManage,ResidentInfo residentInfo)
+    {
+        this.userId = userId;
+        this.deptId = deptId;
+        this.user = user;
+        this.permissions = permissions;
+        this.staffManage = staffManage;
+        this.residentInfo = residentInfo;
+    }
+
+    public StaffManage getStaffManage() {
+        return staffManage;
+    }
+
+    public void setStaffManage(StaffManage staffManage) {
+        this.staffManage = staffManage;
+    }
+
+    public ResidentInfo getResidentInfo() {
+        return residentInfo;
+    }
+
+    public void setResidentInfo(ResidentInfo residentInfo) {
+        this.residentInfo = residentInfo;
+    }
+
     public Long getUserId()
     {
         return userId;

+ 3 - 6
ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java

@@ -1,15 +1,12 @@
 package com.ruoyi.common.utils;
 
+import org.apache.commons.lang3.time.DateFormatUtils;
+
 import java.lang.management.ManagementFactory;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.ZoneId;
-import java.time.ZonedDateTime;
+import java.time.*;
 import java.util.Date;
-import org.apache.commons.lang3.time.DateFormatUtils;
 
 /**
  * 时间工具类

+ 8 - 1
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java

@@ -1,5 +1,7 @@
 package com.ruoyi.framework.web.service;
 
+import com.ruoyi.system.service.IResidentInfoService;
+import com.ruoyi.system.service.IStaffManageService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -34,6 +36,11 @@ public class UserDetailsServiceImpl implements UserDetailsService
     @Autowired
     private SysPermissionService permissionService;
 
+    @Autowired
+    private IResidentInfoService residentInfoService;
+    @Autowired
+    private IStaffManageService staffManageService;
+
     @Override
     public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException
     {
@@ -61,6 +68,6 @@ public class UserDetailsServiceImpl implements UserDetailsService
 
     public UserDetails createLoginUser(SysUser user)
     {
-        return new LoginUser(user.getUserId(), user.getDeptId(), user, permissionService.getMenuPermission(user));
+        return new LoginUser(user.getUserId(), user.getDeptId(), user, permissionService.getMenuPermission(user),staffManageService.selectStaffManageByUserId(user.getUserId()),residentInfoService.selectResidentInfoByUserId(user.getUserId()));
     }
 }

+ 1 - 0
ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml

@@ -74,6 +74,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 				AND date_format(create_time,'%Y%m%d') &lt;= date_format(#{params.endTime},'%Y%m%d')
 			</if>
 		</where>
+		order by create_time DESC
 	</select>
 
 	<select id="selectDbTableList" parameterType="GenTable" resultMap="GenTableResult">

+ 111 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/staffTrainTime/StaffTrainTime.java

@@ -0,0 +1,111 @@
+package com.ruoyi.system.domain.staffTrainTime;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 员工培训时长对象 staff_train_time
+ * 
+ * @author boman
+ * @date 2025-02-21
+ */
+public class StaffTrainTime extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 员工培训时长ID */
+    private Long trainTimeId;
+
+    /** 员工管理id */
+    @Excel(name = "员工管理id")
+    private Long staffId;
+
+    /** 员工姓名 */
+    @Excel(name = "员工姓名")
+    private String staffName;
+
+    /** 员工账号id */
+    @Excel(name = "员工账号id")
+    private Long userId;
+
+    /** 员工培训手册ID */
+    @Excel(name = "员工培训手册ID")
+    private Long manualId;
+
+    /** 阅读时长 */
+    @Excel(name = "阅读时长")
+    private int staffTime;
+
+    public void setTrainTimeId(Long trainTimeId) 
+    {
+        this.trainTimeId = trainTimeId;
+    }
+
+    public Long getTrainTimeId() 
+    {
+        return trainTimeId;
+    }
+    public void setStaffId(Long staffId) 
+    {
+        this.staffId = staffId;
+    }
+
+    public Long getStaffId() 
+    {
+        return staffId;
+    }
+    public void setStaffName(String staffName) 
+    {
+        this.staffName = staffName;
+    }
+
+    public String getStaffName() 
+    {
+        return staffName;
+    }
+    public void setUserId(Long userId) 
+    {
+        this.userId = userId;
+    }
+
+    public Long getUserId() 
+    {
+        return userId;
+    }
+    public void setManualId(Long manualId) 
+    {
+        this.manualId = manualId;
+    }
+
+    public Long getManualId() 
+    {
+        return manualId;
+    }
+
+    public int getStaffTime() {
+        return staffTime;
+    }
+
+    public void setStaffTime(int staffTime) {
+        this.staffTime = staffTime;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("trainTimeId", getTrainTimeId())
+            .append("staffId", getStaffId())
+            .append("staffName", getStaffName())
+            .append("userId", getUserId())
+            .append("manualId", getManualId())
+            .append("staffTime", getStaffTime())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 8 - 1
ruoyi-system/src/main/java/com/ruoyi/system/mapper/ResidentInfoMapper.java

@@ -1,6 +1,6 @@
 package com.ruoyi.system.mapper;
 
-import com.ruoyi.system.domain.residentInfo.ResidentInfo;
+import com.ruoyi.common.core.domain.entity.ResidentInfo;
 
 import java.util.List;
 
@@ -60,4 +60,11 @@ public interface ResidentInfoMapper
      * @return 结果
      */
     public int deleteResidentInfoByResidentIds(Long[] residentIds);
+
+    /**
+     * 根据userId查询居住人员信息
+     * @param userId
+     * @return
+     */
+    public ResidentInfo selectResidentInfoByUserId(Long userId);
 }

+ 8 - 1
ruoyi-system/src/main/java/com/ruoyi/system/mapper/StaffManageMapper.java

@@ -1,6 +1,6 @@
 package com.ruoyi.system.mapper;
 
-import com.ruoyi.system.domain.staffManage.StaffManage;
+import com.ruoyi.common.core.domain.entity.StaffManage;
 
 import java.util.List;
 
@@ -60,4 +60,11 @@ public interface StaffManageMapper
      * @return 结果
      */
     public int deleteStaffManageByStaffIds(Long[] staffIds);
+
+    /**
+     * 根据userId查询员工信息
+     * @param userId
+     * @return
+     */
+    public StaffManage selectStaffManageByUserId(Long userId);
 }

+ 63 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/StaffTrainTimeMapper.java

@@ -0,0 +1,63 @@
+package com.ruoyi.system.mapper;
+
+import com.ruoyi.system.domain.staffTrainTime.StaffTrainTime;
+
+import java.util.List;
+
+
+/**
+ * 员工培训时长Mapper接口
+ * 
+ * @author boman
+ * @date 2025-02-21
+ */
+public interface StaffTrainTimeMapper 
+{
+    /**
+     * 查询员工培训时长
+     * 
+     * @param trainTimeId 员工培训时长主键
+     * @return 员工培训时长
+     */
+    public StaffTrainTime selectStaffTrainTimeByTrainTimeId(Long trainTimeId);
+
+    /**
+     * 查询员工培训时长列表
+     * 
+     * @param staffTrainTime 员工培训时长
+     * @return 员工培训时长集合
+     */
+    public List<StaffTrainTime> selectStaffTrainTimeList(StaffTrainTime staffTrainTime);
+
+    /**
+     * 新增员工培训时长
+     * 
+     * @param staffTrainTime 员工培训时长
+     * @return 结果
+     */
+    public int insertStaffTrainTime(StaffTrainTime staffTrainTime);
+
+    /**
+     * 修改员工培训时长
+     * 
+     * @param staffTrainTime 员工培训时长
+     * @return 结果
+     */
+    public int updateStaffTrainTime(StaffTrainTime staffTrainTime);
+
+    /**
+     * 删除员工培训时长
+     * 
+     * @param trainTimeId 员工培训时长主键
+     * @return 结果
+     */
+    public int deleteStaffTrainTimeByTrainTimeId(Long trainTimeId);
+
+    /**
+     * 批量删除员工培训时长
+     * 
+     * @param trainTimeIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteStaffTrainTimeByTrainTimeIds(Long[] trainTimeIds);
+}

+ 8 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/IResidentInfoService.java

@@ -1,6 +1,6 @@
 package com.ruoyi.system.service;
 
-import com.ruoyi.system.domain.residentInfo.ResidentInfo;
+import com.ruoyi.common.core.domain.entity.ResidentInfo;
 
 import java.util.List;
 
@@ -60,4 +60,11 @@ public interface IResidentInfoService
      * @return 结果
      */
     public int deleteResidentInfoByResidentId(Long residentId);
+
+    /**
+     * 根据userId查询居住人员信息
+     * @param userId
+     * @return
+     */
+    ResidentInfo selectResidentInfoByUserId(Long userId);
 }

+ 8 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/IStaffManageService.java

@@ -1,6 +1,6 @@
 package com.ruoyi.system.service;
 
-import com.ruoyi.system.domain.staffManage.StaffManage;
+import com.ruoyi.common.core.domain.entity.StaffManage;
 
 import java.util.List;
 
@@ -60,4 +60,11 @@ public interface IStaffManageService
      * @return 结果
      */
     public int deleteStaffManageByStaffId(Long staffId);
+
+    /**
+     * 根据userId查询员工信息
+     * @param userId
+     * @return
+     */
+    public StaffManage selectStaffManageByUserId(Long userId);
 }

+ 6 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/IStaffTrainManualService.java

@@ -1,5 +1,6 @@
 package com.ruoyi.system.service;
 
+import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.system.domain.staffTrain.StaffTrainManual;
 
 import java.util.List;
@@ -60,4 +61,9 @@ public interface IStaffTrainManualService
      * @return 结果
      */
     public int deleteStaffTrainManualByManualId(Long manualId);
+
+    /**
+     * 获取已读人员名单
+     */
+    public AjaxResult getRead(StaffTrainManual staffTrainManual);
 }

+ 63 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/IStaffTrainTimeService.java

@@ -0,0 +1,63 @@
+package com.ruoyi.system.service;
+
+import com.ruoyi.system.domain.staffTrainTime.StaffTrainTime;
+
+import java.util.List;
+
+
+/**
+ * 员工培训时长Service接口
+ * 
+ * @author boman
+ * @date 2025-02-21
+ */
+public interface IStaffTrainTimeService 
+{
+    /**
+     * 查询员工培训时长
+     * 
+     * @param trainTimeId 员工培训时长主键
+     * @return 员工培训时长
+     */
+    public StaffTrainTime selectStaffTrainTimeByTrainTimeId(Long trainTimeId);
+
+    /**
+     * 查询员工培训时长列表
+     * 
+     * @param staffTrainTime 员工培训时长
+     * @return 员工培训时长集合
+     */
+    public List<StaffTrainTime> selectStaffTrainTimeList(StaffTrainTime staffTrainTime);
+
+    /**
+     * 新增员工培训时长
+     * 
+     * @param staffTrainTime 员工培训时长
+     * @return 结果
+     */
+    public int insertStaffTrainTime(StaffTrainTime staffTrainTime);
+
+    /**
+     * 修改员工培训时长
+     * 
+     * @param staffTrainTime 员工培训时长
+     * @return 结果
+     */
+    public int updateStaffTrainTime(StaffTrainTime staffTrainTime);
+
+    /**
+     * 批量删除员工培训时长
+     * 
+     * @param trainTimeIds 需要删除的员工培训时长主键集合
+     * @return 结果
+     */
+    public int deleteStaffTrainTimeByTrainTimeIds(Long[] trainTimeIds);
+
+    /**
+     * 删除员工培训时长信息
+     * 
+     * @param trainTimeId 员工培训时长主键
+     * @return 结果
+     */
+    public int deleteStaffTrainTimeByTrainTimeId(Long trainTimeId);
+}

+ 12 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ResidentInfoServiceImpl.java

@@ -1,7 +1,7 @@
 package com.ruoyi.system.service.impl;
 
 import com.ruoyi.common.utils.DateUtils;
-import com.ruoyi.system.domain.residentInfo.ResidentInfo;
+import com.ruoyi.common.core.domain.entity.ResidentInfo;
 import com.ruoyi.system.mapper.ResidentInfoMapper;
 import com.ruoyi.system.service.IResidentInfoService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -95,4 +95,15 @@ public class ResidentInfoServiceImpl implements IResidentInfoService
     {
         return residentInfoMapper.deleteResidentInfoByResidentId(residentId);
     }
+
+    /**
+     * 根据userId查询居住人员信息
+     * @param userId
+     * @return
+     */
+    @Override
+    public ResidentInfo selectResidentInfoByUserId(Long userId) {
+        residentInfoMapper.selectResidentInfoByUserId(userId);
+        return null;
+    }
 }

+ 11 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StaffManageServiceImpl.java

@@ -1,7 +1,7 @@
 package com.ruoyi.system.service.impl;
 
 import com.ruoyi.common.utils.DateUtils;
-import com.ruoyi.system.domain.staffManage.StaffManage;
+import com.ruoyi.common.core.domain.entity.StaffManage;
 import com.ruoyi.system.mapper.StaffManageMapper;
 import com.ruoyi.system.service.IStaffManageService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -94,4 +94,14 @@ public class StaffManageServiceImpl implements IStaffManageService
     {
         return staffManageMapper.deleteStaffManageByStaffId(staffId);
     }
+
+    /**
+     * 根据userId查询员工信息
+     * @param userId
+     * @return
+     */
+    @Override
+    public StaffManage selectStaffManageByUserId(Long userId) {
+        return staffManageMapper.selectStaffManageByUserId(userId);
+    }
 }

+ 133 - 22
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StaffTrainManualServiceImpl.java

@@ -1,96 +1,207 @@
 package com.ruoyi.system.service.impl;
 
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.StaffManage;
+import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.system.domain.staffTrain.StaffTrainManual;
 import com.ruoyi.system.mapper.StaffTrainManualMapper;
 import com.ruoyi.system.service.IStaffTrainManualService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import java.util.List;
+
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
+import static com.ruoyi.common.constant.CacheConstants.READ_TRAIN;
+import static com.ruoyi.common.constant.CacheConstants.READ_TRAIN_TIME;
 
 /**
  * 员工培训手册Service业务层处理
- * 
+ *
  * @author boman
  * @date 2025-02-18
  */
 @Service
-public class StaffTrainManualServiceImpl implements IStaffTrainManualService 
-{
+public class StaffTrainManualServiceImpl implements IStaffTrainManualService {
     @Autowired
     private StaffTrainManualMapper staffTrainManualMapper;
+    @Autowired
+    private RedisCache redisCache;
 
     /**
      * 查询员工培训手册
-     * 
+     *
      * @param manualId 员工培训手册主键
      * @return 员工培训手册
      */
     @Override
-    public StaffTrainManual selectStaffTrainManualByManualId(Long manualId)
-    {
+    public StaffTrainManual selectStaffTrainManualByManualId(Long manualId) {
+
+        //获取该培训手册对象阅读人员的value值
+        List<String> valueList = redisCache.getCacheList(READ_TRAIN + manualId);
+        //获取当前登录人的员工信息
+        StaffManage staffManage = SecurityUtils.getLoginUser().getStaffManage();
+        //获取员工姓名
+        String staffName = "未知";
+        if (staffManage != null) {
+            staffName = staffManage.getStaffName();
+        }
+        if (valueList != null && valueList.size() > 0) {
+            //组装value值
+            String value = SecurityUtils.getUserId() + ":" + staffName;
+            //如果value不重复则新增
+            if (!valueList.contains(value)) {
+                //阅读名单存储到redis key = read_train:manualId value = userId+":"+员工姓名
+                valueList.add(value);
+                redisCache.setCacheList(READ_TRAIN + manualId, valueList);
+                //新增阅读时间
+                //key = read_train_time:manualId:userId
+                redisCache.setCacheObject(READ_TRAIN_TIME + manualId + ":" + SecurityUtils.getUserId(), DateUtils.getTime());
+            }
+        }
         return staffTrainManualMapper.selectStaffTrainManualByManualId(manualId);
     }
 
     /**
      * 查询员工培训手册列表
-     * 
+     *
      * @param staffTrainManual 员工培训手册
      * @return 员工培训手册
      */
     @Override
-    public List<StaffTrainManual> selectStaffTrainManualList(StaffTrainManual staffTrainManual)
-    {
+    public List<StaffTrainManual> selectStaffTrainManualList(StaffTrainManual staffTrainManual) {
         return staffTrainManualMapper.selectStaffTrainManualList(staffTrainManual);
     }
 
     /**
      * 新增员工培训手册
-     * 
+     *
      * @param staffTrainManual 员工培训手册
      * @return 结果
      */
     @Override
-    public int insertStaffTrainManual(StaffTrainManual staffTrainManual)
-    {
+    public int insertStaffTrainManual(StaffTrainManual staffTrainManual) {
         staffTrainManual.setCreateTime(DateUtils.getNowDate());
         return staffTrainManualMapper.insertStaffTrainManual(staffTrainManual);
     }
 
     /**
      * 修改员工培训手册
-     * 
+     *
      * @param staffTrainManual 员工培训手册
      * @return 结果
      */
     @Override
-    public int updateStaffTrainManual(StaffTrainManual staffTrainManual)
-    {
+    public int updateStaffTrainManual(StaffTrainManual staffTrainManual) {
         staffTrainManual.setUpdateTime(DateUtils.getNowDate());
         return staffTrainManualMapper.updateStaffTrainManual(staffTrainManual);
     }
 
     /**
      * 批量删除员工培训手册
-     * 
+     *
      * @param manualIds 需要删除的员工培训手册主键
      * @return 结果
      */
     @Override
-    public int deleteStaffTrainManualByManualIds(Long[] manualIds)
-    {
+    public int deleteStaffTrainManualByManualIds(Long[] manualIds) {
         return staffTrainManualMapper.deleteStaffTrainManualByManualIds(manualIds);
     }
 
     /**
      * 删除员工培训手册信息
-     * 
+     *
      * @param manualId 员工培训手册主键
      * @return 结果
      */
     @Override
-    public int deleteStaffTrainManualByManualId(Long manualId)
-    {
+    public int deleteStaffTrainManualByManualId(Long manualId) {
         return staffTrainManualMapper.deleteStaffTrainManualByManualId(manualId);
     }
+
+    /**
+     * 获取已读人员名单
+     */
+    @Override
+    public AjaxResult getRead(StaffTrainManual staffTrainManual) {
+        //定义返回值
+        List<Map<String, String>> resultList = new ArrayList<>();
+        String searchValue = staffTrainManual.getSearchValue();
+        Date searchTime = staffTrainManual.getCreateTime();
+        Long manualId = staffTrainManual.getManualId();
+
+        List<String> valueList = redisCache.getCacheList(READ_TRAIN + manualId);
+        if (valueList != null && valueList.size() > 0) {
+            //value = userId+":"+员工姓名
+            for (String value : valueList) {
+                String[] split = value.split(":");
+                //key = read_train:manualId:userId
+                String readTime = redisCache.getCacheObject(READ_TRAIN_TIME + ":" + manualId + ":" + split[0]);
+                Map<String, String> map = new HashMap<>(2);
+                if (StringUtils.isBlank(searchValue) && searchTime == null) {
+                    map.put("name", split[1]);
+                    //key = read_train:manualId:userId
+                    map.put("time", readTime);
+                    resultList.add(map);
+                }
+                //如果搜索姓名不为空
+                else if (StringUtils.isNotBlank(searchValue)) {
+                    //如果搜索日期不为空
+                    if (searchTime != null) {
+                        // 创建日期格式化对象
+                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+                        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+                        LocalDateTime dateTime = LocalDateTime.parse(readTime, formatter);
+                        // 构造仅包含年月日的新时间字符串
+                        LocalDate date = dateTime.toLocalDate();
+                        String formattedDate = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                        //split[1] = 员工姓名
+                        if (searchValue.equals(split[1]) && sdf.format(searchTime).equals(formattedDate)) {
+                            map.put("name", split[1]);
+                            map.put("time", readTime);
+                            resultList.add(map);
+                        }
+                    } else {
+                        //搜索日期为空
+                        if (searchValue.equals(split[1])) {
+                            map.put("name", split[1]);
+                            map.put("time", readTime);
+                            resultList.add(map);
+                        }
+                    }
+                } else if (searchTime != null) {
+                    // 创建日期格式化对象
+                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+                    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+                    LocalDateTime dateTime = LocalDateTime.parse(readTime, formatter);
+                    // 构造仅包含年月日的新时间字符串
+                    LocalDate date = dateTime.toLocalDate();
+                    String formattedDate = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                    if (StringUtils.isNotBlank(searchValue)) {
+                        if (searchValue.equals(split[1]) && sdf.format(searchTime).equals(formattedDate)) {
+                            map.put("name", split[1]);
+                            map.put("time", readTime);
+                            resultList.add(map);
+                        }
+                    } else {
+                        if (sdf.format(searchTime).equals(formattedDate)) {
+                            map.put("name", split[1]);
+                            map.put("time", readTime);
+                            resultList.add(map);
+                        }
+                    }
+                }
+                map.put("name", split[1]);
+                map.put("time", readTime);
+                resultList.add(map);
+            }
+        }
+        return AjaxResult.success(resultList);
+    }
 }

+ 114 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StaffTrainTimeServiceImpl.java

@@ -0,0 +1,114 @@
+package com.ruoyi.system.service.impl;
+
+import com.ruoyi.common.core.domain.entity.StaffManage;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.system.domain.staffTrainTime.StaffTrainTime;
+import com.ruoyi.system.mapper.StaffTrainTimeMapper;
+import com.ruoyi.system.service.IStaffTrainTimeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * 员工培训时长Service业务层处理
+ *
+ * @author boman
+ * @date 2025-02-21
+ */
+@Service
+public class StaffTrainTimeServiceImpl implements IStaffTrainTimeService {
+    @Autowired
+    private StaffTrainTimeMapper staffTrainTimeMapper;
+
+    /**
+     * 查询员工培训时长
+     *
+     * @param trainTimeId 员工培训时长主键
+     * @return 员工培训时长
+     */
+    @Override
+    public StaffTrainTime selectStaffTrainTimeByTrainTimeId(Long trainTimeId) {
+        return staffTrainTimeMapper.selectStaffTrainTimeByTrainTimeId(trainTimeId);
+    }
+
+    /**
+     * 查询员工培训时长列表
+     *
+     * @param staffTrainTime 员工培训时长
+     * @return 员工培训时长
+     */
+    @Override
+    public List<StaffTrainTime> selectStaffTrainTimeList(StaffTrainTime staffTrainTime) {
+        //根据时长进行排序
+        List<StaffTrainTime> staffTrainTimes = staffTrainTimeMapper.selectStaffTrainTimeList(staffTrainTime);
+        if (staffTrainTimes != null) {
+            staffTrainTimes.sort(Comparator.comparingInt(StaffTrainTime::getStaffTime));
+        }
+        return staffTrainTimes;
+    }
+
+    /**
+     * 新增员工培训时长
+     *
+     * @param staffTrainTime 员工培训时长
+     * @return 结果
+     */
+    @Override
+    public int insertStaffTrainTime(StaffTrainTime staffTrainTime) {
+        staffTrainTime.setUserId(SecurityUtils.getUserId());
+        //判断是否已经有这个员工的信息
+        List<StaffTrainTime> staffTrainTimes = staffTrainTimeMapper.selectStaffTrainTimeList(staffTrainTime);
+        if (staffTrainTimes != null && staffTrainTimes.size() > 0) {
+            int staffTime = staffTrainTimes.get(0).getStaffTime();
+            //更新阅读时长
+            staffTrainTime.setStaffTime(staffTime + staffTrainTime.getStaffTime());
+            return staffTrainTimeMapper.updateStaffTrainTime(staffTrainTime);
+        }
+        StaffManage staffManage = SecurityUtils.getLoginUser().getStaffManage();
+        if (staffManage != null){
+            staffTrainTime.setStaffId(staffManage.getStaffId());
+            staffTrainTime.setStaffName(staffManage.getStaffName());
+            staffTrainTime.setCreateTime(DateUtils.getNowDate());
+            return staffTrainTimeMapper.insertStaffTrainTime(staffTrainTime);
+        }
+
+        return 1;
+    }
+
+    /**
+     * 修改员工培训时长
+     *
+     * @param staffTrainTime 员工培训时长
+     * @return 结果
+     */
+    @Override
+    public int updateStaffTrainTime(StaffTrainTime staffTrainTime) {
+        staffTrainTime.setUpdateTime(DateUtils.getNowDate());
+        return staffTrainTimeMapper.updateStaffTrainTime(staffTrainTime);
+    }
+
+    /**
+     * 批量删除员工培训时长
+     *
+     * @param trainTimeIds 需要删除的员工培训时长主键
+     * @return 结果
+     */
+    @Override
+    public int deleteStaffTrainTimeByTrainTimeIds(Long[] trainTimeIds) {
+        return staffTrainTimeMapper.deleteStaffTrainTimeByTrainTimeIds(trainTimeIds);
+    }
+
+    /**
+     * 删除员工培训时长信息
+     *
+     * @param trainTimeId 员工培训时长主键
+     * @return 结果
+     */
+    @Override
+    public int deleteStaffTrainTimeByTrainTimeId(Long trainTimeId) {
+        return staffTrainTimeMapper.deleteStaffTrainTimeByTrainTimeId(trainTimeId);
+    }
+}

+ 1 - 1
ruoyi-system/src/main/resources/mapper/system/HouseInfoMapper.xml

@@ -29,7 +29,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectHouseInfoVo">
-        select house_id, owner_name, location, right_type, area, document_number, property_unit_number, co_ownership, usage, usage_period, registration_date, co_owner, detailed_address, has_parking_space, community_name, house_status, create_by, create_time, update_by, update_time, remark from house_info
+        select house_id, owner_name, location, right_type, area, document_number, property_unit_number, co_ownership, usage_type, usage_period, registration_date, co_owner, detailed_address, has_parking_space, community_name, house_status, create_by, create_time, update_by, update_time, remark from house_info
     </sql>
 
     <select id="selectHouseInfoList" parameterType="HouseInfo" resultMap="HouseInfoResult">

+ 7 - 2
ruoyi-system/src/main/resources/mapper/system/ResidentInfoMapper.xml

@@ -16,6 +16,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="residentGender"    column="resident_gender"    />
         <result property="residentRelationship"    column="resident_relationship"    />
         <result property="isHouseholder"    column="is_householder"    />
+        <result property="isTenant"    column="is_tenant"    />
         <result property="residentEmployer"    column="resident_employer"    />
         <result property="residentAppearance"    column="resident_appearance"    />
         <result property="createBy"    column="create_by"    />
@@ -26,7 +27,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectResidentInfoVo">
-        select resident_id, house_id, user_id, detailed_address, resident_name, resident_id_card, resident_birthday, resident_phone, resident_gender, resident_relationship, is_householder, resident_employer, resident_appearance, create_by, create_time, update_by, update_time, remark from resident_info
+        select resident_id, house_id, user_id, detailed_address, resident_name, resident_id_card, resident_birthday, resident_phone, resident_gender, resident_relationship, is_householder, is_tenant, resident_employer, resident_appearance, create_by, create_time, update_by, update_time, remark from resident_info
     </sql>
 
     <select id="selectResidentInfoList" parameterType="ResidentInfo" resultMap="ResidentInfoResult">
@@ -41,7 +42,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="residentPhone != null  and residentPhone != ''"> and resident_phone = #{residentPhone}</if>
             <if test="residentGender != null "> and resident_gender = #{residentGender}</if>
             <if test="residentRelationship != null  and residentRelationship != ''"> and resident_relationship = #{residentRelationship}</if>
-            <if test="isHouseholder != null "> and is_householder = #{isHouseholder}</if>
+            <if test="isHouseholder != null  and isHouseholder != ''"> and is_householder = #{isHouseholder}</if>
+            <if test="isTenant != null  and isTenant != ''"> and is_tenant = #{isTenant}</if>
             <if test="residentEmployer != null  and residentEmployer != ''"> and resident_employer = #{residentEmployer}</if>
             <if test="residentAppearance != null  and residentAppearance != ''"> and resident_appearance = #{residentAppearance}</if>
         </where>
@@ -65,6 +67,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="residentGender != null">resident_gender,</if>
             <if test="residentRelationship != null">resident_relationship,</if>
             <if test="isHouseholder != null">is_householder,</if>
+            <if test="isTenant != null">is_tenant,</if>
             <if test="residentEmployer != null">resident_employer,</if>
             <if test="residentAppearance != null">resident_appearance,</if>
             <if test="createBy != null">create_by,</if>
@@ -84,6 +87,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="residentGender != null">#{residentGender},</if>
             <if test="residentRelationship != null">#{residentRelationship},</if>
             <if test="isHouseholder != null">#{isHouseholder},</if>
+            <if test="isTenant != null">#{isTenant},</if>
             <if test="residentEmployer != null">#{residentEmployer},</if>
             <if test="residentAppearance != null">#{residentAppearance},</if>
             <if test="createBy != null">#{createBy},</if>
@@ -107,6 +111,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="residentGender != null">resident_gender = #{residentGender},</if>
             <if test="residentRelationship != null">resident_relationship = #{residentRelationship},</if>
             <if test="isHouseholder != null">is_householder = #{isHouseholder},</if>
+            <if test="isTenant != null">is_tenant = #{isTenant},</if>
             <if test="residentEmployer != null">resident_employer = #{residentEmployer},</if>
             <if test="residentAppearance != null">resident_appearance = #{residentAppearance},</if>
             <if test="createBy != null">create_by = #{createBy},</if>

+ 4 - 0
ruoyi-system/src/main/resources/mapper/system/StaffManageMapper.xml

@@ -50,6 +50,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="selectStaffManageVo"/>
         where staff_id = #{staffId}
     </select>
+    <select id="selectStaffManageByUserId" parameterType="Long" resultMap="StaffManageResult">
+        <include refid="selectStaffManageVo"/>
+        where user_id = #{userId}
+    </select>
 
     <insert id="insertStaffManage" parameterType="StaffManage" useGeneratedKeys="true" keyProperty="staffId">
         insert into staff_manage

+ 96 - 0
ruoyi-system/src/main/resources/mapper/system/StaffTrainTimeMapper.xml

@@ -0,0 +1,96 @@
+<?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="com.ruoyi.system.mapper.StaffTrainTimeMapper">
+    
+    <resultMap type="StaffTrainTime" id="StaffTrainTimeResult">
+        <result property="trainTimeId"    column="train_time_id"    />
+        <result property="staffId"    column="staff_id"    />
+        <result property="staffName"    column="staff_name"    />
+        <result property="userId"    column="user_id"    />
+        <result property="manualId"    column="manual_id"    />
+        <result property="staffTime"    column="staff_time"    />
+        <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="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectStaffTrainTimeVo">
+        select train_time_id, staff_id, staff_name, user_id, manual_id, staff_time, create_by, create_time, update_by, update_time, remark from staff_train_time
+    </sql>
+
+    <select id="selectStaffTrainTimeList" parameterType="StaffTrainTime" resultMap="StaffTrainTimeResult">
+        <include refid="selectStaffTrainTimeVo"/>
+        <where>  
+            <if test="staffId != null "> and staff_id = #{staffId}</if>
+            <if test="staffName != null  and staffName != ''"> and staff_name like concat('%', #{staffName}, '%')</if>
+            <if test="userId != null "> and user_id = #{userId}</if>
+            <if test="manualId != null "> and manual_id = #{manualId}</if>
+            <if test="staffTime != null  and staffTime != ''"> and staff_time = #{staffTime}</if>
+        </where>
+    </select>
+    
+    <select id="selectStaffTrainTimeByTrainTimeId" parameterType="Long" resultMap="StaffTrainTimeResult">
+        <include refid="selectStaffTrainTimeVo"/>
+        where train_time_id = #{trainTimeId}
+    </select>
+
+    <insert id="insertStaffTrainTime" parameterType="StaffTrainTime" useGeneratedKeys="true" keyProperty="trainTimeId">
+        insert into staff_train_time
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="staffId != null">staff_id,</if>
+            <if test="staffName != null">staff_name,</if>
+            <if test="userId != null">user_id,</if>
+            <if test="manualId != null">manual_id,</if>
+            <if test="staffTime != null">staff_time,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="staffId != null">#{staffId},</if>
+            <if test="staffName != null">#{staffName},</if>
+            <if test="userId != null">#{userId},</if>
+            <if test="manualId != null">#{manualId},</if>
+            <if test="staffTime != null">#{staffTime},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updateStaffTrainTime" parameterType="StaffTrainTime">
+        update staff_train_time
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="staffId != null">staff_id = #{staffId},</if>
+            <if test="staffName != null">staff_name = #{staffName},</if>
+            <if test="userId != null">user_id = #{userId},</if>
+            <if test="manualId != null">manual_id = #{manualId},</if>
+            <if test="staffTime != null">staff_time = #{staffTime},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where train_time_id = #{trainTimeId}
+    </update>
+
+    <delete id="deleteStaffTrainTimeByTrainTimeId" parameterType="Long">
+        delete from staff_train_time where train_time_id = #{trainTimeId}
+    </delete>
+
+    <delete id="deleteStaffTrainTimeByTrainTimeIds" parameterType="String">
+        delete from staff_train_time where train_time_id in 
+        <foreach item="trainTimeId" collection="array" open="(" separator="," close=")">
+            #{trainTimeId}
+        </foreach>
+    </delete>
+</mapper>