فهرست منبع

update 登录插入员工/住户信息

tjf 2 ماه پیش
والد
کامیت
eec7e3ecd8

+ 14 - 0
ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java

@@ -17,7 +17,9 @@ import org.dromara.common.core.constant.Constants;
 import org.dromara.common.core.constant.SystemConstants;
 import org.dromara.common.core.constant.TenantConstants;
 import org.dromara.common.core.domain.dto.PostDTO;
+import org.dromara.common.core.domain.dto.ResidentInfoDTO;
 import org.dromara.common.core.domain.dto.RoleDTO;
+import org.dromara.common.core.domain.dto.StaffManageDTO;
 import org.dromara.common.core.domain.model.LoginBody;
 import org.dromara.common.core.domain.model.LoginUser;
 import org.dromara.common.core.enums.LoginType;
@@ -30,6 +32,10 @@ import org.dromara.common.redis.utils.RedisUtils;
 import org.dromara.common.satoken.utils.LoginHelper;
 import org.dromara.common.tenant.exception.TenantException;
 import org.dromara.common.tenant.helper.TenantHelper;
+import org.dromara.domain.residentInfo.vo.ResidentInfoVo;
+import org.dromara.domain.staffManage.vo.StaffManageVo;
+import org.dromara.service.IResidentInfoService;
+import org.dromara.service.IStaffManageService;
 import org.dromara.system.domain.SysUser;
 import org.dromara.system.domain.bo.SysSocialBo;
 import org.dromara.system.domain.vo.*;
@@ -67,6 +73,8 @@ public class SysLoginService {
     private final ISysPostService postService;
     private final SysUserMapper userMapper;
     private final ISysClientService clientService;
+    private final IStaffManageService staffManageService;
+    private final IResidentInfoService residentInfoService;
 
 
     /**
@@ -173,6 +181,12 @@ public class SysLoginService {
         List<SysPostVo> posts = postService.selectPostsByUserId(userId);
         loginUser.setRoles(BeanUtil.copyToList(roles, RoleDTO.class));
         loginUser.setPosts(BeanUtil.copyToList(posts, PostDTO.class));
+
+        //查询用户的员工信息和居住人员信息
+        StaffManageVo staffManage = staffManageService.getInfoByUserId(userId);
+        loginUser.setStaffManage(BeanUtil.toBean(staffManage, StaffManageDTO.class));
+        ResidentInfoVo infoByUserId = residentInfoService.getInfoByUserId(userId);
+        loginUser.setResidentInfo(BeanUtil.toBean(infoByUserId, ResidentInfoDTO.class));
         return loginUser;
     }
 

+ 124 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/ResidentInfoDTO.java

@@ -0,0 +1,124 @@
+package org.dromara.common.core.domain.dto;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @Author: tjf
+ * @Date: 2025/4/15 15:06
+ * @Describe:
+ */
+@Data
+@NoArgsConstructor
+public class ResidentInfoDTO implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 居住人员主键,唯一标识每条居住人员信息
+     */
+    private Long residentId;
+
+    /**
+     * 关联房屋信息表的house_id,标识居住人员所属房屋
+     */
+    private Long houseId;
+
+    /**
+     * 关联sys_user表中user_id
+     */
+    private Long userId;
+
+    /**
+     * 居住人员的详细门牌号
+     */
+    private String detailedAddress;
+
+    /**
+     * 居住人员姓名
+     */
+    private String residentName;
+
+    /**
+     * 居住人员身份证号码,18位
+     */
+    private String residentIdCard;
+
+    /**
+     * 居住人员出生日期
+     */
+    private String residentBirthday;
+
+    /**
+     * 居住人员手机号
+     */
+    private String residentPhone;
+
+    /**
+     * 居住人员性别:1-男,2-女
+     */
+    private Long residentGender;
+
+    /**
+     * 居住人员与户主的关系,如父子、夫妻等
+     */
+    private String residentRelationship;
+
+    /**
+     * 是否是户主:Y-是,N-否
+     */
+    private String isHouseholder;
+
+    /**
+     * 是否是租户:Y-是,N-否
+     */
+    private String isTenant;
+
+    /**
+     * 居住人员工作单位
+     */
+    private String residentEmployer;
+
+    /**
+     * 特殊类型
+     */
+    private String specialType;
+
+    /**
+     * 爱好字典值多选
+     */
+    private String residentHobby;
+
+    /**
+     * 居住人员面貌,如党员、群众等
+     */
+    private String residentAppearance;
+
+    /**
+     * 身份证正面
+     */
+    private String idCardFront;
+
+    /**
+     * 身份证反面
+     */
+    private String idCardBack;
+
+    /**
+     * 身份证住址
+     */
+    private String idCardAddress;
+
+    /**
+     * 人脸地址
+     */
+    private String facePhoto;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 94 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/StaffManageDTO.java

@@ -0,0 +1,94 @@
+package org.dromara.common.core.domain.dto;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @Author: tjf
+ * @Date: 2025/4/15 15:05
+ * @Describe:
+ */
+@Data
+@NoArgsConstructor
+public class StaffManageDTO implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 员工管理id
+     */
+
+    private Long staffId;
+
+    /**
+     * 员工账号id
+     */
+    private Long userId;
+
+    /**
+     * 员工姓名
+     */
+    private String staffName;
+
+    /**
+     * 员工性别(1男 2女 )
+     */
+    private String gender;
+
+    /**
+     * 员工类别,1:保安 2:维修人员 3:物业管理
+     */
+    private String staffCategory;
+
+    /**
+     * 维修分类,表示维修人员擅长的维修类别
+     */
+    private String maintenanceCategory;
+
+    /**
+     * 手机号码
+     */
+    private String phoneNumber;
+
+    /**
+     * 头像,存储头像的URL或文件路径
+     */
+    private String avatarPhoto;
+
+    /**
+     * 身份证号码
+     */
+    private String idCard;
+
+    /**
+     * 身份证正面
+     */
+    private String idCardFront;
+
+    /**
+     * 身份证反面
+     */
+    private String idCardBack;
+
+    /**
+     * 相关证件
+     */
+    private String certificate;
+
+    /**
+     * 状态,字典值 1:空闲2:忙碌
+     */
+    private String status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 审核状态 1:未审核 2:审核通过 3:审核未通过
+     */
+    private String examine;
+}

+ 11 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/model/LoginUser.java

@@ -3,7 +3,9 @@ package org.dromara.common.core.domain.model;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import org.dromara.common.core.domain.dto.PostDTO;
+import org.dromara.common.core.domain.dto.ResidentInfoDTO;
 import org.dromara.common.core.domain.dto.RoleDTO;
+import org.dromara.common.core.domain.dto.StaffManageDTO;
 
 import java.io.Serial;
 import java.io.Serializable;
@@ -132,6 +134,15 @@ public class LoginUser implements Serializable {
      */
     private String deviceType;
 
+    /**
+     * 员工信息
+     */
+    private StaffManageDTO staffManage;
+    /**
+     * 居住人员信息
+     */
+    private ResidentInfoDTO residentInfo;
+
     /**
      * 获取登录id
      */

+ 14 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/DateUtils.java

@@ -17,6 +17,7 @@ import java.util.concurrent.TimeUnit;
  * @author ruoyi
  */
 public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
+    public static String YYYY_MM = "yyyy-MM";
     private static final String[] PARSE_PATTERNS = {
         "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
         "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
@@ -35,6 +36,19 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
         return new Date();
     }
 
+    public static String getMonth()
+    {
+        return dateTimeNow(YYYY_MM);
+    }
+
+    public static final String dateTimeNow(final String format)
+    {
+        return parseDateToStr(format, new Date());
+    }
+    public static final String parseDateToStr(final String format, final Date date)
+    {
+        return new SimpleDateFormat(format).format(date);
+    }
     /**
      * 获取当前日期的字符串表示,格式为YYYY-MM-DD
      *

+ 1 - 1
ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/domain/staffTrainTime/StaffTrainTime.java

@@ -50,7 +50,7 @@ public class StaffTrainTime extends TenantEntity {
     /**
      * 阅读时长
      */
-    private String staffTime;
+    private Integer staffTime;
 
     /**
      * 备注

+ 4 - 0
ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/mapper/ResidentInfoMapper.java

@@ -1,5 +1,6 @@
 package org.dromara.mapper;
 
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
 import org.dromara.domain.residentInfo.ResidentInfo;
 import org.dromara.domain.residentInfo.vo.ResidentInfoVo;
@@ -12,4 +13,7 @@ import org.dromara.domain.residentInfo.vo.ResidentInfoVo;
  */
 public interface ResidentInfoMapper extends BaseMapperPlus<ResidentInfo, ResidentInfoVo> {
 
+    @InterceptorIgnore(tenantLine = "true", dataPermission = "false")
+    ResidentInfoVo getInfoByUserId(Long userId);
+
 }

+ 7 - 0
ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/service/IResidentInfoService.java

@@ -24,6 +24,13 @@ public interface IResidentInfoService {
      */
     ResidentInfoVo queryById(Long residentId);
 
+    /**
+     * 根据userId获取居住人员信息
+     * @param userId
+     * @return
+     */
+    ResidentInfoVo getInfoByUserId(Long userId);
+
     /**
      * 分页查询居住人员信息,存储居住人员的详细信息列表
      *

+ 10 - 0
ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/service/impl/ResidentInfoServiceImpl.java

@@ -42,6 +42,16 @@ public class ResidentInfoServiceImpl implements IResidentInfoService {
         return baseMapper.selectVoById(residentId);
     }
 
+    /**
+     * 根据userId获取居住人员信息
+     * @param userId
+     * @return
+     */
+    @Override
+    public ResidentInfoVo getInfoByUserId(Long userId) {
+        return baseMapper.getInfoByUserId(userId);
+    }
+
     /**
      * 分页查询居住人员信息,存储居住人员的详细信息列表
      *

+ 31 - 7
ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/service/impl/StaffTrainTimeServiceImpl.java

@@ -1,13 +1,16 @@
 package org.dromara.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.dto.StaffManageDTO;
+import org.dromara.common.core.utils.DateUtils;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.satoken.utils.LoginHelper;
 import org.dromara.domain.staffTrainTime.StaffTrainTime;
 import org.dromara.domain.staffTrainTime.bo.StaffTrainTimeBo;
 import org.dromara.domain.staffTrainTime.vo.StaffTrainTimeVo;
@@ -38,7 +41,7 @@ public class StaffTrainTimeServiceImpl implements IStaffTrainTimeService {
      * @return 员工培训时长
      */
     @Override
-    public StaffTrainTimeVo queryById(Long trainTimeId){
+    public StaffTrainTimeVo queryById(Long trainTimeId) {
         return baseMapper.selectVoById(trainTimeId);
     }
 
@@ -52,8 +55,9 @@ public class StaffTrainTimeServiceImpl implements IStaffTrainTimeService {
     @Override
     public TableDataInfo<StaffTrainTimeVo> queryPageList(StaffTrainTimeBo bo, PageQuery pageQuery) {
         LambdaQueryWrapper<StaffTrainTime> lqw = buildQueryWrapper(bo);
-        Page<StaffTrainTimeVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
-        return TableDataInfo.build(result);
+        pageQuery.setOrderByColumn("staff_time");
+        IPage<StaffTrainTimeVo> staffTrainTimeVoIPage = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(staffTrainTimeVoIPage);
     }
 
     /**
@@ -88,9 +92,29 @@ public class StaffTrainTimeServiceImpl implements IStaffTrainTimeService {
      */
     @Override
     public Boolean insertByBo(StaffTrainTimeBo bo) {
+        boolean flag = false;
         StaffTrainTime add = MapstructUtils.convert(bo, StaffTrainTime.class);
         validEntityBeforeSave(add);
-        boolean flag = baseMapper.insert(add) > 0;
+        Long userId = LoginHelper.getUserId();
+        add.setUserId(userId);
+        StaffTrainTime staffTrainTime = baseMapper.selectOne(new LambdaQueryWrapper<StaffTrainTime>().eq(StaffTrainTime::getUserId, userId));
+        if (staffTrainTime != null) {
+            int staffTime = staffTrainTime.getStaffTime();
+            //更新阅读时长
+            staffTrainTime.setStaffTime(staffTime + staffTrainTime.getStaffTime());
+            Long trainTimeId = staffTrainTime.getTrainTimeId();
+            staffTrainTime.setTrainTimeId(trainTimeId);
+            flag = baseMapper.updateById(staffTrainTime) > 0;
+            return flag;
+        }
+
+        StaffManageDTO staffManage = LoginHelper.getLoginUser().getStaffManage();
+        if (staffManage != null) {
+            staffTrainTime.setStaffId(staffManage.getStaffId());
+            staffTrainTime.setStaffName(staffManage.getStaffName());
+            staffTrainTime.setCreateTime(DateUtils.getNowDate());
+            flag = baseMapper.insert(add) > 0;
+        }
         if (flag) {
             bo.setTrainTimeId(add.getTrainTimeId());
         }
@@ -113,7 +137,7 @@ public class StaffTrainTimeServiceImpl implements IStaffTrainTimeService {
     /**
      * 保存前的数据校验
      */
-    private void validEntityBeforeSave(StaffTrainTime entity){
+    private void validEntityBeforeSave(StaffTrainTime entity) {
         //TODO 做一些数据校验,如唯一约束
     }
 
@@ -126,7 +150,7 @@ public class StaffTrainTimeServiceImpl implements IStaffTrainTimeService {
      */
     @Override
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
-        if(isValid){
+        if (isValid) {
             //TODO 做一些业务上的校验,判断是否需要校验
         }
         return baseMapper.deleteByIds(ids) > 0;

+ 36 - 7
ruoyi-modules/ruoyi-wuye/src/main/java/org/dromara/service/impl/VisitorManageServiceImpl.java

@@ -4,10 +4,13 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.ObjectUtils;
+import org.dromara.common.core.utils.DateUtils;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.redis.utils.RedisUtils;
 import org.dromara.domain.visitor.VisitorManage;
 import org.dromara.domain.visitor.bo.VisitorManageBo;
 import org.dromara.domain.visitor.vo.VisitorManageVo;
@@ -19,6 +22,9 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
+import static org.dromara.common.core.constant.Constants.NOW_MONTH_VISITOR_CAR;
+import static org.dromara.common.core.constant.Constants.Y;
+
 /**
  * 来访管理Service业务层处理
  *
@@ -95,11 +101,22 @@ public class VisitorManageServiceImpl implements IVisitorManageService {
      */
     @Override
     public Boolean insertByBo(VisitorManageBo bo) {
-        VisitorManage add = MapstructUtils.convert(bo, VisitorManage.class);
-        validEntityBeforeSave(add);
-        boolean flag = baseMapper.insert(add) > 0;
+        VisitorManage visitorManage = MapstructUtils.convert(bo, VisitorManage.class);
+        validEntityBeforeSave(visitorManage);
+        visitorManage.setVisitorTime(DateUtils.getNowDate());
+        //统计中外来车辆
+        if (Y.equals(visitorManage.getIsCar())) {
+            int currentMonth = 1;
+            Object nowMonthRedis = RedisUtils.getCacheObject(NOW_MONTH_VISITOR_CAR + DateUtils.getMonth());
+            if (ObjectUtils.isNotEmpty(nowMonthRedis)) {
+                currentMonth = (int) nowMonthRedis + currentMonth;
+            }
+            RedisUtils.setCacheObject(NOW_MONTH_VISITOR_CAR + DateUtils.getMonth(), currentMonth);
+        }
+
+        boolean flag = baseMapper.insert(visitorManage) > 0;
         if (flag) {
-            bo.setVisitorManageId(add.getVisitorManageId());
+            bo.setVisitorManageId(visitorManage.getVisitorManageId());
         }
         return flag;
     }
@@ -112,9 +129,21 @@ public class VisitorManageServiceImpl implements IVisitorManageService {
      */
     @Override
     public Boolean updateByBo(VisitorManageBo bo) {
-        VisitorManage update = MapstructUtils.convert(bo, VisitorManage.class);
-        validEntityBeforeSave(update);
-        return baseMapper.updateById(update) > 0;
+        VisitorManage visitorManage = MapstructUtils.convert(bo, VisitorManage.class);
+        validEntityBeforeSave(visitorManage);
+        if (Y.equals(visitorManage.getIsCar())) {
+            VisitorManage visitorManageOld = baseMapper.selectById(visitorManage.getVisitorManageId());
+            if (!Y.equals(visitorManageOld.getIsCar())) {
+                int currentMonth = 1;
+                Object nowMonthRedis = RedisUtils.getCacheObject(NOW_MONTH_VISITOR_CAR + DateUtils.getMonth());
+                if (ObjectUtils.isNotEmpty(nowMonthRedis)) {
+                    currentMonth = (int) nowMonthRedis + currentMonth;
+                }
+                RedisUtils.setCacheObject(NOW_MONTH_VISITOR_CAR + DateUtils.getMonth(), currentMonth);
+            }
+        }
+
+        return baseMapper.updateById(visitorManage) > 0;
     }
 
     /**

+ 18 - 0
ruoyi-modules/ruoyi-wuye/src/main/resources/mapper/wuYe/ResidentInfoMapper.xml

@@ -4,4 +4,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.dromara.mapper.ResidentInfoMapper">
 
+    <resultMap type="org.dromara.domain.residentInfo.vo.ResidentInfoVo" id="ResidentInfoResult">
+        <id property="residentId" column="resident_id"/>
+    </resultMap>
+
+    <sql id="selectResidentInfoVo">
+        select  s.resident_id,s.tenant_id,s.user_id,s.house_id,s.detailed_address,s.resident_name,s.resident_id_card
+             ,s.resident_birthday,s.resident_phone,s.resident_gender,s.resident_relationship,s.is_householder,s.is_tenant,s.resident_employer,s.special_type
+             s.resident_hobby,s.resident_appearance,s.id_card_front,s.id_card_back,s.id_card_address,s.face_photo,s.create_time
+        from resident_info s
+    </sql>
+
+    <select id="getInfoByUserId" resultMap="ResidentInfoResult">
+        <include refid="selectResidentInfoVo"></include>
+        where s.user_id = #{userId}
+    </select>
+
+
+
 </mapper>