diff --git a/ruoyi-api/property-api/src/main/java/org/dromara/property/api/RemoteResidentPersonService.java b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/RemoteResidentPersonService.java
index b3d4986c..0ab4d6f5 100644
--- a/ruoyi-api/property-api/src/main/java/org/dromara/property/api/RemoteResidentPersonService.java
+++ b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/RemoteResidentPersonService.java
@@ -1,6 +1,8 @@
package org.dromara.property.api;
+import org.dromara.common.core.exception.residentPerson.ResidentPersonException;
import org.dromara.property.api.domain.vo.RemoteResidentPersonVo;
+import org.dromara.property.api.model.LoginResidentPerson;
import java.util.List;
@@ -16,4 +18,13 @@ public interface RemoteResidentPersonService {
// 更新E8平台id
Boolean updateE8Id(Long personId, Long e8Id);
+
+ /**
+ * 通过手机号查询用户信息
+ *
+ * @param phone 手机号
+ * @param tenantId 租户id
+ * @return 结果
+ */
+ LoginResidentPerson getResidentPersonInfo(String phone, String tenantId) throws ResidentPersonException;
}
diff --git a/ruoyi-api/property-api/src/main/java/org/dromara/property/api/domain/vo/RemoteFloorVo.java b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/domain/vo/RemoteFloorVo.java
index 62adc36a..4cccce59 100644
--- a/ruoyi-api/property-api/src/main/java/org/dromara/property/api/domain/vo/RemoteFloorVo.java
+++ b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/domain/vo/RemoteFloorVo.java
@@ -33,10 +33,10 @@ public class RemoteFloorVo implements Serializable {
*/
private String floorName;
- /**
- * 楼层号
- */
- private Long floorNumber;
+// /**
+// * 楼层号
+// */
+// private Long floorNumber;
/**
* 楼层类型
diff --git a/ruoyi-api/property-api/src/main/java/org/dromara/property/api/model/LoginResidentPerson.java b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/model/LoginResidentPerson.java
new file mode 100644
index 00000000..99a9d9a6
--- /dev/null
+++ b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/model/LoginResidentPerson.java
@@ -0,0 +1,119 @@
+package org.dromara.property.api.model;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Set;
+
+/**
+ * @author lsm
+ * @apiNote LoginResidentPerson
+ * @since 2025/9/5
+ */
+@Data
+@NoArgsConstructor
+public class LoginResidentPerson implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 租户ID
+ */
+ private String tenantId;
+
+ /**
+ * 用户ID
+ */
+ private Long userId;
+
+ /**
+ * 所属单位id
+ */
+ private Long unitId;
+
+ /**
+ * 所属单位名称
+ */
+ private String unitName;
+
+ /**
+ * 用户唯一标识
+ */
+ private String token;
+
+ /**
+ * 用户类型
+ */
+ private String userType;
+
+ /**
+ * 登录时间
+ */
+ private Long loginTime;
+
+ /**
+ * 过期时间
+ */
+ private Long expireTime;
+
+ /**
+ * 登录IP地址
+ */
+ private String ipaddr;
+
+ /**
+ * 登录地点
+ */
+ private String loginLocation;
+
+ /**
+ * 浏览器类型
+ */
+ private String browser;
+
+ /**
+ * 操作系统
+ */
+ private String os;
+
+ /**
+ * 用户名
+ */
+ private String username;
+
+ /**
+ * 用户昵称
+ */
+ private String nickname;
+
+ /**
+ * 密码
+ */
+ private String password;
+
+ /**
+ * 用户角色(1管理员2普通用户)
+ */
+ private Integer userRoles;
+
+ /**
+ * 客户端
+ */
+ private String clientKey;
+
+ /**
+ * 获取登录id
+ */
+ public String getLoginId() {
+ if (userType == null) {
+ throw new IllegalArgumentException("用户类型不能为空");
+ }
+ if (userId == null) {
+ throw new IllegalArgumentException("用户ID不能为空");
+ }
+ return userType + ":" + userId;
+ }
+}
diff --git a/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteMessageService.java b/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteMessageService.java
index d674c81f..7a8533e9 100644
--- a/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteMessageService.java
+++ b/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteMessageService.java
@@ -23,4 +23,13 @@ public interface RemoteMessageService {
* @param message 消息内容
*/
void publishAll(String message);
+
+ /**
+ * 向指定的用户的指定会话发送消息
+ *
+ * @param userId 要发送消息的用户id
+ * @param token 用户的会话令牌
+ * @param message 要发送的消息内容
+ */
+ void sendMessage(Long userId, String token, String message);
}
diff --git a/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteMessageServiceStub.java b/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteMessageServiceStub.java
index 0ee2791e..a980af95 100644
--- a/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteMessageServiceStub.java
+++ b/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteMessageServiceStub.java
@@ -44,4 +44,20 @@ public class RemoteMessageServiceStub implements RemoteMessageService {
log.warn("推送功能未开启或服务未找到");
}
}
+
+ /**
+ * 向指定的用户的指定会话发送消息
+ *
+ * @param userId 要发送消息的用户id
+ * @param token 用户的会话令牌
+ * @param message 要发送的消息内容
+ */
+ @Override
+ public void sendMessage(Long userId, String token, String message) {
+ try {
+ remoteMessageService.sendMessage(userId, token, message);
+ } catch (Exception e) {
+ log.warn("推送功能未开启或服务未找到");
+ }
+ }
}
diff --git a/ruoyi-auth/pom.xml b/ruoyi-auth/pom.xml
index 902f1c44..fff261f1 100644
--- a/ruoyi-auth/pom.xml
+++ b/ruoyi-auth/pom.xml
@@ -99,6 +99,11 @@
ruoyi-common-loadbalancer
+
+ org.dromara
+ property-api
+
+
diff --git a/ruoyi-auth/src/main/java/org/dromara/auth/form/ResidentLoginBody.java b/ruoyi-auth/src/main/java/org/dromara/auth/form/ResidentLoginBody.java
new file mode 100644
index 00000000..818ca029
--- /dev/null
+++ b/ruoyi-auth/src/main/java/org/dromara/auth/form/ResidentLoginBody.java
@@ -0,0 +1,31 @@
+package org.dromara.auth.form;
+
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.common.core.domain.model.LoginBody;
+import org.hibernate.validator.constraints.Length;
+
+/**
+ * @author lsm
+ * @apiNote ResidentLoginBody
+ * @since 2025/9/5
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ResidentLoginBody extends LoginBody {
+
+ /**
+ * 用户名
+ */
+ @NotBlank(message = "{user.username.not.blank}")
+ @Length(min = 2, max = 30, message = "{user.username.length.valid}")
+ private String username;
+
+ /**
+ * 用户密码
+ */
+ @NotBlank(message = "{user.password.not.blank}")
+ @Length(min = 5, max = 30, message = "{user.password.length.valid}")
+ private String password;
+}
diff --git a/ruoyi-auth/src/main/java/org/dromara/auth/service/impl/ResidentAuthStrategy.java b/ruoyi-auth/src/main/java/org/dromara/auth/service/impl/ResidentAuthStrategy.java
new file mode 100644
index 00000000..3c23b388
--- /dev/null
+++ b/ruoyi-auth/src/main/java/org/dromara/auth/service/impl/ResidentAuthStrategy.java
@@ -0,0 +1,68 @@
+package org.dromara.auth.service.impl;
+
+import cn.dev33.satoken.stp.StpUtil;
+import cn.dev33.satoken.stp.parameter.SaLoginParameter;
+import cn.hutool.crypto.digest.BCrypt;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.auth.domain.vo.LoginVo;
+import org.dromara.auth.form.PasswordLoginBody;
+import org.dromara.auth.service.IAuthStrategy;
+import org.dromara.auth.service.SysLoginService;
+import org.dromara.common.core.enums.LoginType;
+import org.dromara.common.core.utils.ValidatorUtils;
+import org.dromara.common.json.utils.JsonUtils;
+import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.common.tenant.helper.TenantHelper;
+import org.dromara.property.api.RemoteResidentPersonService;
+import org.dromara.property.api.model.LoginResidentPerson;
+import org.dromara.system.api.domain.vo.RemoteClientVo;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author lsm
+ * @apiNote ResidentAuthStrategy
+ * @since 2025/9/5
+ */
+@Slf4j
+@Service("resident" + IAuthStrategy.BASE_NAME)
+@RequiredArgsConstructor
+public class ResidentAuthStrategy implements IAuthStrategy {
+
+ private final SysLoginService loginService;
+
+ @DubboReference
+ private RemoteResidentPersonService remoteResidentPersonService;
+
+ @Override
+ public LoginVo login(String body, RemoteClientVo client) {
+ PasswordLoginBody loginBody = JsonUtils.parseObject(body, PasswordLoginBody.class);
+ ValidatorUtils.validate(loginBody);
+ assert loginBody != null;
+ String tenantId = loginBody.getTenantId();
+ String username = loginBody.getUsername();
+ String password = loginBody.getPassword();
+
+ LoginResidentPerson loginUser = TenantHelper.dynamic(tenantId, () -> {
+ LoginResidentPerson user = remoteResidentPersonService.getResidentPersonInfo(username, tenantId);
+ loginService.checkLogin(LoginType.PASSWORD, tenantId, username, () -> !BCrypt.checkpw(password, user.getPassword()));
+ return user;
+ });
+ loginUser.setClientKey(client.getClientKey());
+ SaLoginParameter model = new SaLoginParameter();
+ model.setDeviceType(client.getDeviceType());
+ // 自定义分配 不同用户体系 不同 token 授权时间 不设置默认走全局 yml 配置
+ // 例如: 后台用户30分钟过期 app用户1天过期
+ model.setTimeout(client.getTimeout());
+ model.setActiveTimeout(client.getActiveTimeout());
+ model.setExtra(LoginHelper.CLIENT_KEY, client.getClientId());
+ LoginHelper.residentLogin(loginUser, model);
+
+ LoginVo loginVo = new LoginVo();
+ loginVo.setAccessToken(StpUtil.getTokenValue());
+ loginVo.setExpireIn(StpUtil.getTokenTimeout());
+ loginVo.setClientId(client.getClientId());
+ return loginVo;
+ }
+}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/exception/residentPerson/ResidentPersonException.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/exception/residentPerson/ResidentPersonException.java
new file mode 100644
index 00000000..eae962d8
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/exception/residentPerson/ResidentPersonException.java
@@ -0,0 +1,19 @@
+package org.dromara.common.core.exception.residentPerson;
+
+import org.dromara.common.core.exception.base.BaseException;
+
+import java.io.Serial;
+
+/**
+ * @author lsm
+ * @apiNote ResidentPersonException
+ * @since 2025/9/5
+ */
+public class ResidentPersonException extends BaseException {
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ public ResidentPersonException(String message) {
+ super("residentPerson", null, null, message);
+ }
+}
diff --git a/ruoyi-common/ruoyi-common-satoken/pom.xml b/ruoyi-common/ruoyi-common-satoken/pom.xml
index 5643acb8..82beefe3 100644
--- a/ruoyi-common/ruoyi-common-satoken/pom.xml
+++ b/ruoyi-common/ruoyi-common-satoken/pom.xml
@@ -35,6 +35,11 @@
ruoyi-api-system
+
+ org.dromara
+ property-api
+
+
org.dromara
diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java
index e6b0404f..7b0b2125 100644
--- a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java
+++ b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/service/SaPermissionImpl.java
@@ -8,10 +8,13 @@ import org.dromara.common.core.service.PermissionService;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.property.api.model.LoginResidentPerson;
import org.dromara.system.api.model.LoginUser;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
+import java.util.Objects;
/**
* sa-token 权限管理实现类
@@ -26,15 +29,30 @@ public class SaPermissionImpl implements StpInterface {
@Override
public List getPermissionList(Object loginId, String loginType) {
LoginUser loginUser = LoginHelper.getLoginUser();
- if (ObjectUtil.isNull(loginUser) || !loginUser.getLoginId().equals(loginId)) {
+ LoginResidentPerson loginResidentPerson = LoginHelper.getLoginResident();
+ // 使用Objects.equals进行null安全的比较
+ boolean isUserMatch = ObjectUtil.isNotNull(loginUser) && Objects.equals(loginUser.getLoginId(), loginId);
+ boolean isResidentMatch = ObjectUtil.isNotNull(loginResidentPerson) && Objects.equals(loginResidentPerson.getLoginId(), loginId);
+ if (isUserMatch) {
+ // 用户匹配时的逻辑
PermissionService permissionService = getPermissionService();
- if (ObjectUtil.isNotNull(permissionService)) {
- List list = StringUtils.splitList(loginId.toString(), ":");
- return new ArrayList<>(permissionService.getMenuPermission(Long.parseLong(list.get(1))));
- } else {
+ if (ObjectUtil.isNull(permissionService)) {
throw new ServiceException("PermissionService 实现类不存在");
}
+ List parts = StringUtils.splitList(loginId.toString(), ":");
+ return new ArrayList<>(permissionService.getMenuPermission(Long.parseLong(parts.get(1))));
+ } else if (isResidentMatch) {
+ // 居民匹配时的逻辑
+ return Arrays.asList(
+ "resident:person:list",
+ "resident:person:add",
+ "resident:person:query",
+ "resident:person:edit",
+ "resident:person:remove"
+ );
}
+
+
UserType userType = UserType.getUserType(loginUser.getUserType());
if (userType == UserType.APP_USER) {
// 其他端 自行根据业务编写
diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java
index 7d2136e6..69bd60ec 100644
--- a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java
+++ b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java
@@ -11,6 +11,7 @@ import lombok.NoArgsConstructor;
import org.dromara.common.core.constant.SystemConstants;
import org.dromara.common.core.constant.TenantConstants;
import org.dromara.common.core.enums.UserType;
+import org.dromara.property.api.model.LoginResidentPerson;
import org.dromara.system.api.model.LoginUser;
import java.util.Set;
@@ -83,6 +84,57 @@ public class LoginHelper {
return (T) session.get(LOGIN_USER_KEY);
}
+
+ /**
+ * 入驻员工
+ */
+ private static final String UNIT_KEY = "unitId";
+ public static final String UNIT_NAME_KEY = "unitName";
+ private static final String RESIDENT_PERSON_KEY = "residentPerson";
+
+ /**
+ * 登录系统 基于 设备类型
+ * 针对相同用户体系不同设备
+ *
+ * @param loginUser 登录用户信息
+ * @param model 配置参数
+ */
+ public static void residentLogin(LoginResidentPerson loginUser, SaLoginParameter model) {
+ model = ObjectUtil.defaultIfNull(model, new SaLoginParameter());
+ StpUtil.login(loginUser.getLoginId(),
+ model.setExtra(TENANT_KEY, loginUser.getTenantId())
+ .setExtra(USER_KEY, loginUser.getUserId())
+ .setExtra(USER_NAME_KEY, loginUser.getUsername())
+ .setExtra(UNIT_KEY, loginUser.getUnitId())
+ .setExtra(UNIT_NAME_KEY, loginUser.getUnitName())
+ );
+ StpUtil.getTokenSession().set(RESIDENT_PERSON_KEY, loginUser);
+ }
+
+ /**
+ * 获取用户(多级缓存)
+ */
+ @SuppressWarnings("unchecked cast")
+ public static T getLoginResident() {
+ SaSession session = StpUtil.getTokenSession();
+ if (ObjectUtil.isNull(session)) {
+ return null;
+ }
+ return (T) session.get(RESIDENT_PERSON_KEY);
+ }
+
+ /**
+ * 获取用户基于token
+ */
+ @SuppressWarnings("unchecked cast")
+ public static T getLoginResident(String token) {
+ SaSession session = StpUtil.getTokenSessionByToken(token);
+ if (ObjectUtil.isNull(session)) {
+ return null;
+ }
+ return (T) session.get(RESIDENT_PERSON_KEY);
+ }
+
/**
* 获取用户id
*/
diff --git a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java
index cb944285..fec8fc6f 100644
--- a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java
+++ b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java
@@ -132,6 +132,34 @@ public class SseEmitterManager {
}
}
+
+ /**
+ * 向指定的用户的指定会话发送消息
+ *
+ * @param userId 要发送消息的用户id
+ * @param token 用户的会话令牌
+ * @param message 要发送的消息内容
+ */
+ public void sendMessage(Long userId, String token, String message) {
+ Map emitters = USER_TOKEN_EMITTERS.get(userId);
+ if (MapUtil.isNotEmpty(emitters)) {
+ for (Map.Entry entry : emitters.entrySet()){
+ if (entry.getKey().equals(token)) {
+ try {
+ entry.getValue().send(SseEmitter.event()
+ .name("message")
+ .data(message));
+ } catch (Exception e) {
+ SseEmitter remove = emitters.remove(entry.getKey());
+ if (remove != null) {
+ remove.complete();
+ }
+ }
+ }
+ }
+ }
+ }
+
/**
* 本机全用户会话发送消息
*
diff --git a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/utils/SseMessageUtils.java b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/utils/SseMessageUtils.java
index ce3aad47..84867370 100644
--- a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/utils/SseMessageUtils.java
+++ b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/utils/SseMessageUtils.java
@@ -38,6 +38,20 @@ public class SseMessageUtils {
MANAGER.sendMessage(userId, message);
}
+ /**
+ * 向指定的用户的指定会话发送消息
+ *
+ * @param userId 要发送消息的用户id
+ * @param token 用户的会话令牌
+ * @param message 要发送的消息内容
+ */
+ public static void sendMessage(Long userId, String token, String message) {
+ if (!isEnable()) {
+ return;
+ }
+ MANAGER.sendMessage(userId, token, message);
+ }
+
/**
* 本机全用户会话发送消息
*
diff --git a/ruoyi-modules/Property/pom.xml b/ruoyi-modules/Property/pom.xml
index 4135f974..d3af6ed2 100644
--- a/ruoyi-modules/Property/pom.xml
+++ b/ruoyi-modules/Property/pom.xml
@@ -125,6 +125,11 @@
ruoyi-common-websocket
+
+ org.dromara
+ ruoyi-common-sse
+
+
org.apache.rocketmq
rocketmq-spring-boot-starter
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CustomerFeedbacksController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CustomerFeedbacksController.java
index bb26c674..2a9c7937 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CustomerFeedbacksController.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/CustomerFeedbacksController.java
@@ -40,7 +40,7 @@ public class CustomerFeedbacksController extends BaseController {
/**
* 查询客户服务-意见反馈列表
*/
- // @SaCheckPermission("system:feedbacks:list")
+ @SaCheckPermission("system:feedbacks:list")
@GetMapping("/list")
public TableDataInfo list(CustomerFeedbacksBo bo, PageQuery pageQuery) {
return customerFeedbacksService.queryPageList(bo, pageQuery);
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/IndexController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/IndexController.java
new file mode 100644
index 00000000..777b25a9
--- /dev/null
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/IndexController.java
@@ -0,0 +1,32 @@
+package org.dromara.property.controller;
+
+
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.property.domain.vo.IndexCountVo;
+import org.dromara.property.service.IndexService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author yuyongle
+ * @version 1.0
+ * @description: 首页展示数据
+ * @date 2025/9/5 14:35
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/index")
+public class IndexController {
+ private final IndexService indexService;
+ /**
+ * 首页统计数量
+ */
+ @GetMapping("/indexCount")
+ public R indexCount() {
+ return R.ok(indexService.indexCount());
+ }
+}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/MeetParticipantsController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/MeetParticipantsController.java
new file mode 100644
index 00000000..01467d0c
--- /dev/null
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/MeetParticipantsController.java
@@ -0,0 +1,67 @@
+package org.dromara.property.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import jakarta.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.property.domain.bo.MeetParticipantsBo;
+import org.dromara.property.domain.vo.MeetParticipantsVo;
+import org.dromara.property.service.IMeetParticipantsService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 会议室参会记录
+ * 前端访问路由地址为:/property/participants
+ *
+ * @author mocheng
+ * @date 2025-09-03
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/participants")
+public class MeetParticipantsController extends BaseController {
+
+ private final IMeetParticipantsService meetParticipantsService;
+
+ /**
+ * 查询会议室参会记录列表
+ */
+ //@SaCheckPermission("property:participants:list")
+ @GetMapping("/list")
+ public TableDataInfo list(MeetParticipantsBo bo, PageQuery pageQuery) {
+ return meetParticipantsService.queryPageList(bo, pageQuery);
+ }
+
+
+ /**
+ * 获取会议室参会记录详细信息
+ *
+ * @param id 主键
+ */
+ @SaCheckPermission("property:participants:query")
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable("id") Long id) {
+ return R.ok(meetParticipantsService.queryById(id));
+ }
+
+ /**
+ * 新增会议室参会记录
+ */
+ @SaCheckPermission("property:participants:add")
+ @Log(title = "会议室参会记录", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody MeetParticipantsBo bo) {
+ return toAjax(meetParticipantsService.insertByBo(bo));
+ }
+}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ResidentPersonController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ResidentPersonController.java
index 2ac858dc..29f9c45f 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ResidentPersonController.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ResidentPersonController.java
@@ -9,8 +9,7 @@ import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import lombok.extern.slf4j.Slf4j;
-import org.dromara.common.excel.core.ExcelResult;
-import org.dromara.property.domain.vo.ResidentPersonImportVo;
+import org.dromara.property.domain.vo.residentVo.ResidentPersonImportVo;
import org.dromara.property.listener.ResidentPersonImportListener;
import org.dromara.property.utils.UploadFaceUtil;
import org.springframework.http.MediaType;
@@ -26,9 +25,9 @@ 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.property.domain.vo.ResidentPersonVo;
-import org.dromara.property.domain.bo.ResidentPersonBo;
-import org.dromara.property.service.IResidentPersonService;
+import org.dromara.property.domain.vo.residentVo.ResidentPersonVo;
+import org.dromara.property.domain.bo.residentBo.ResidentPersonBo;
+import org.dromara.property.service.residentService.IResidentPersonService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.springframework.web.multipart.MultipartFile;
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ResidentUnitController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ResidentUnitController.java
index bc8a7e0e..f9570734 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ResidentUnitController.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/ResidentUnitController.java
@@ -17,9 +17,9 @@ 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.property.domain.vo.ResidentUnitVo;
-import org.dromara.property.domain.bo.ResidentUnitBo;
-import org.dromara.property.service.IResidentUnitService;
+import org.dromara.property.domain.vo.residentVo.ResidentUnitVo;
+import org.dromara.property.domain.bo.residentBo.ResidentUnitBo;
+import org.dromara.property.service.residentService.IResidentUnitService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MInspectionTaskDetailController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MInspectionTaskDetailController.java
index 1eac4a9e..4a2d6854 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MInspectionTaskDetailController.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MInspectionTaskDetailController.java
@@ -2,22 +2,22 @@ package org.dromara.property.controller.mobile;
import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.property.domain.bo.InspectionTaskDetailBo;
-import org.dromara.property.domain.vo.mobile.MInspectionPointVo;
-import org.dromara.property.service.IInspectionPointService;
+import org.dromara.property.domain.bo.mobile.InspectionTaskDetailToOrderBo;
+import org.dromara.property.domain.vo.mobile.MInspectionTaskDetailVo;
import org.dromara.property.service.IInspectionTaskDetailService;
import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
/**
* @author yuyongle
* @version 1.0
- * @description: TODO
+ * @description: 移动端巡检点任务
* @date 2025/9/1 17:13
*/
@Validated
@@ -30,7 +30,30 @@ public class MInspectionTaskDetailController extends BaseController {
* 查询巡检点列表
*/
@GetMapping("/list")
- public TableDataInfo list(InspectionTaskDetailBo bo, PageQuery pageQuery) {
+ public TableDataInfo list(InspectionTaskDetailBo bo, PageQuery pageQuery) {
return inspectionTaskDetailService.mQueryPageList(bo,pageQuery);
}
+
+
+ /**
+ * 扫码签到
+ */
+ @PostMapping("/signIn")
+ public R signIn(@Validated(EditGroup.class) @RequestBody InspectionTaskDetailBo bo) {
+ return toAjax(inspectionTaskDetailService.signIn(bo));
+ }
+ /**
+ * 提交巡检明细
+ */
+ @PostMapping("/submit")
+ public R submit(@Validated(EditGroup.class) @RequestBody InspectionTaskDetailBo bo) {
+ return toAjax(inspectionTaskDetailService.submit(bo));
+ }
+ /**
+ * 巡检提报工单
+ */
+ @PostMapping("/reportedOrder")
+ public R reportedOrder(@Validated(EditGroup.class) @RequestBody InspectionTaskDetailToOrderBo bo) {
+ return toAjax(inspectionTaskDetailService.reportedOrder(bo));
+ }
}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/smartDevicesController/TbMeterInfoController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/smartDevicesController/TbMeterInfoController.java
index 967996d2..716e3bfa 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/smartDevicesController/TbMeterInfoController.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/smartDevicesController/TbMeterInfoController.java
@@ -44,6 +44,8 @@ public class TbMeterInfoController extends BaseController {
@SaCheckPermission("property:meterInfo:list")
@GetMapping("/list")
public TableDataInfo list(TbMeterInfoBo bo, PageQuery pageQuery) {
+ pageQuery.setOrderByColumn("createTime");
+ pageQuery.setIsAsc("desc");
return tbMeterInfoService.queryPageList(bo, pageQuery);
}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XResidentPersonController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XResidentPersonController.java
new file mode 100644
index 00000000..c34c4ada
--- /dev/null
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/xcx/XResidentPersonController.java
@@ -0,0 +1,114 @@
+package org.dromara.property.controller.xcx;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+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.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+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.common.web.core.BaseController;
+import org.dromara.property.api.model.LoginResidentPerson;
+import org.dromara.property.domain.bo.residentBo.ResidentPersonBo;
+import org.dromara.property.domain.vo.residentVo.ResidentPersonVo;
+import org.dromara.property.service.residentService.IResidentPersonService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 移动端访问入驻员工
+ * 前端访问路由地址为:/property/person
+ *
+ * @author mocheng
+ * @since 2025-06-19
+ */
+@Slf4j
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/xcx/person")
+public class XResidentPersonController extends BaseController {
+
+ private final IResidentPersonService residentPersonService;
+ /**
+ * 获取登录员工信息
+ */
+ @GetMapping("/getInfo")
+ public R getInfo() {
+ LoginResidentPerson loginUser = LoginHelper.getLoginResident();
+ ResidentPersonVo vo = new ResidentPersonVo();
+ assert loginUser != null;
+ vo.setId(loginUser.getUserId());
+ vo.setUserName(loginUser.getUsername());
+ vo.setUserRoles(loginUser.getUserRoles());
+ vo.setUnitId(loginUser.getUnitId());
+ vo.setUnitName(loginUser.getUnitName());
+ return R.ok(vo);
+ }
+
+ /**
+ * 查询单位未审核入驻员工列表
+ */
+ @SaCheckPermission("resident:person:list")
+ @GetMapping("/list")
+ public TableDataInfo list(ResidentPersonBo bo, PageQuery pageQuery) {
+ return residentPersonService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 获取入驻员工详细信息
+ *
+ * @param id 主键
+ */
+ @SaCheckPermission("resident:person:query")
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable("id") Long id) {
+ return R.ok(residentPersonService.queryById(id));
+ }
+
+ /**
+ * 新增入驻员工
+ */
+ @SaCheckPermission("resident:person:add")
+ @Log(title = "入驻员工", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody ResidentPersonBo bo) {
+ return toAjax(residentPersonService.insertByBo(bo));
+ }
+
+ /**
+ * 修改入驻员工
+ */
+ @SaCheckPermission("resident:person:edit")
+ @Log(title = "入驻员工", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody ResidentPersonBo bo) {
+ return toAjax(residentPersonService.updateByBo(bo));
+ }
+
+ /**
+ * 删除入驻员工
+ *
+ * @param ids 主键串
+ */
+ @SaCheckPermission("resident:person:remove")
+ @Log(title = "入驻员工", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable("ids") Long[] ids) {
+ return toAjax(residentPersonService.deleteWithValidByIds(List.of(ids), true));
+ }
+
+}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CustomerFeedbacks.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CustomerFeedbacks.java
index f0f9a840..4ae8e33a 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CustomerFeedbacks.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CustomerFeedbacks.java
@@ -72,7 +72,7 @@ public class CustomerFeedbacks extends TenantEntity {
private String status;
/**
- * 客服电话
+ * 反馈单位
*/
- private String serviceName;
+ private Long feedbackUnit;
}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionPoint.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionPoint.java
index f7df1d5a..de55d3cb 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionPoint.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionPoint.java
@@ -36,7 +36,10 @@ public class InspectionPoint extends TenantEntity {
* 巡检点名称
*/
private String pointName;
-
+ /**
+ * 巡检位置
+ */
+ private String inspectionLocation;
/**
* 巡检点类型
*/
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionTask.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionTask.java
index 4a317e69..c4098708 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionTask.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionTask.java
@@ -29,6 +29,10 @@ public class InspectionTask extends TenantEntity {
@TableId(value = "id")
private Long id;
+ /**
+ * 任务名称
+ */
+ private String taskName;
/**
* 巡检计划id
*/
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionTaskDetail.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionTaskDetail.java
index be920a68..57a52f6e 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionTaskDetail.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/InspectionTaskDetail.java
@@ -1,5 +1,6 @@
package org.dromara.property.domain;
+import cn.idev.excel.annotation.ExcelProperty;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
@@ -55,6 +56,10 @@ public class InspectionTaskDetail extends TenantEntity {
* 签到类型(1.现场拍照、2.摄像头签到、3.现场扫码)
*/
private String signType;
+ /**
+ * 实际签到状态(0未签到1.已签到)
+ */
+ private String actualSignState;
/**
* 实际巡检时间
@@ -111,7 +116,10 @@ public class InspectionTaskDetail extends TenantEntity {
* 点结束时间
*/
private Date pointEndTime;
-
+ /**
+ * 工单id
+ */
+ private Long orderId;
/**
* 搜索值
*/
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Meet.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Meet.java
index 6567fad3..e57051ef 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Meet.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Meet.java
@@ -1,5 +1,6 @@
package org.dromara.property.domain;
+import cn.idev.excel.annotation.ExcelProperty;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
@@ -41,6 +42,9 @@ public class Meet extends TenantEntity {
* 5圆形会议室
* 6贵宾会议室)
*/
+
+ private String secrecyGrade;
+
private String meetingRoomType;
/**
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/MeetParticipants.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/MeetParticipants.java
new file mode 100644
index 00000000..52093fdd
--- /dev/null
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/MeetParticipants.java
@@ -0,0 +1,55 @@
+package org.dromara.property.domain;
+
+import net.sf.jsqlparser.util.validation.metadata.DatabaseException;
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.util.Date;
+
+/**
+ * 会议室参会记录对象 meet_participants
+ *
+ * @author mocheng
+ * @date 2025-09-03
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("meet_participants")
+public class MeetParticipants extends TenantEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键id
+ */
+ @TableId(value = "id")
+ private Long id;
+
+ /**
+ * 会议室id
+ */
+ private Long meetBookId;
+
+ /**
+ * 入驻人员id
+ */
+ private Long residentPersonId;
+ /**
+ * 签到状态
+ */
+ private String signState;
+ /**
+ * 签到时间
+ */
+ private Date signTime;
+
+ /**
+ * 搜索值
+ */
+ private String searchValue;
+
+}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbBuilding.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbBuilding.java
index 6c64de2a..cb92a912 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbBuilding.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbBuilding.java
@@ -58,16 +58,28 @@ public class TbBuilding extends TenantEntity {
* 电梯数量
*/
private Integer elevatorCount;
+ /**
+ * 建筑面积(平方米)
+ */
+ private Float area;
+ /**
+ * 套内面积(平方米)
+ */
+ private Float insideInArea;
+ /**
+ * 公摊面积(平方米)
+ */
+ private Float sharedArea;
/**
* 竣工日期
*/
private Date completionDate;
- /**
- * 地址
- */
- private String addr;
+// /**
+// * 地址
+// */
+// private String addr;
/**
* 经度
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbCommunity.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbCommunity.java
index 084fc4c6..da340c60 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbCommunity.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbCommunity.java
@@ -34,10 +34,10 @@ public class TbCommunity extends TenantEntity {
*/
private String communityName;
- /**
- * 社区类型 1:园区,2:小区
- */
- private Integer communityType;
+// /**
+// * 社区类型 1:园区,2:小区
+// */
+// private Integer communityType;
private String cityFullCode;
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbFloor.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbFloor.java
index 7f6accc1..8fa19206 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbFloor.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/TbFloor.java
@@ -47,16 +47,27 @@ public class TbFloor extends TenantEntity {
*/
private String floorName;
- /**
- * 楼层号
- */
- private Integer floorNumber;
+// /**
+// * 楼层号
+// */
+// private Integer floorNumber;
/**
* 楼层类型
*/
private Integer floorType;
-
+ /**
+ * 建筑面积(平方米)
+ */
+ private Float area;
+ /**
+ * 套内面积(平方米)
+ */
+ private Float insideInArea;
+ /**
+ * 公摊面积(平方米)
+ */
+ private Float sharedArea;
/**
* 房间数量
*/
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CustomerFeedbacksBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CustomerFeedbacksBo.java
index 8e995092..eadb50fc 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CustomerFeedbacksBo.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CustomerFeedbacksBo.java
@@ -76,11 +76,8 @@ public class CustomerFeedbacksBo extends BaseEntity {
* 客服电话
*/
private String serviceName;
-
/**
- * 搜索值
+ * 反馈单位
*/
- private String searchValue;
-
-
+ private Long feedbackUnit;
}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionPointBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionPointBo.java
index 174c74a8..61d76b3e 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionPointBo.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/InspectionPointBo.java
@@ -43,7 +43,11 @@ public class InspectionPointBo extends BaseEntity {
*/
@NotBlank(message = "巡检点类型不能为空", groups = { AddGroup.class, EditGroup.class })
private String pointType;
-
+ /**
+ * 巡检位置
+ */
+ @NotBlank(message = "巡检位置不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String inspectionLocation;
/**
* nfc编码
*/
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MeetBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MeetBo.java
index 20eb0676..491b6898 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MeetBo.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MeetBo.java
@@ -45,6 +45,9 @@ public class MeetBo extends BaseEntity {
* 5圆形会议室
* 6贵宾会议室)
*/
+ @ExcelProperty(value = "保密等级")
+ private String secrecyGrade;
+
@NotBlank(message = "会议室类型不能为空")
private String meetingRoomType;
/**
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MeetParticipantsBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MeetParticipantsBo.java
new file mode 100644
index 00000000..ef032c5e
--- /dev/null
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MeetParticipantsBo.java
@@ -0,0 +1,57 @@
+package org.dromara.property.domain.bo;
+
+import org.dromara.property.domain.MeetParticipants;
+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;
+
+/**
+ * 会议室参会记录业务对象 meet_participants
+ *
+ * @author mocheng
+ * @date 2025-09-03
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = MeetParticipants.class, reverseConvertGenerate = false)
+public class MeetParticipantsBo extends BaseEntity {
+
+ /**
+ * 主键id
+ */
+ @NotNull(message = "主键id不能为空", groups = { EditGroup.class })
+ private Long id;
+
+ /**
+ * 会议室预约id
+ */
+ @NotNull(message = "会议室预约不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Long meetBookId;
+
+ /**
+ * 入驻人员id
+ */
+ @NotNull(message = "入驻人员id不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Long residentPersonId;
+ /**
+ * 签到状态
+ */
+ private String signState;
+ /**
+ * 签到时间
+ */
+ private Date signTime;
+
+ /**
+ * 搜索值
+ */
+ private String searchValue;
+
+
+}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbBuildingBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbBuildingBo.java
index 458da36d..76aa6cdc 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbBuildingBo.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbBuildingBo.java
@@ -45,7 +45,18 @@ public class TbBuildingBo extends BaseEntity {
* 总层数
*/
private Integer floorCount;
-
+ /**
+ * 建筑面积(平方米)
+ */
+ private Float area;
+ /**
+ * 套内面积(平方米)
+ */
+ private Float insideInArea;
+ /**
+ * 公摊面积(平方米)
+ */
+ private Float sharedArea;
/**
* 单元数
*/
@@ -66,11 +77,11 @@ public class TbBuildingBo extends BaseEntity {
*/
private Date completionDate;
- /**
- * 地址
- */
- @NotBlank(message = "地址不能为空", groups = {AddGroup.class, EditGroup.class})
- private String addr;
+// /**
+// * 地址
+// */
+// @NotBlank(message = "地址不能为空", groups = {AddGroup.class, EditGroup.class})
+// private String addr;
/**
* 经度
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbCommunityBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbCommunityBo.java
index 1b11acd3..a953c0a4 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbCommunityBo.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbCommunityBo.java
@@ -35,11 +35,11 @@ public class TbCommunityBo extends BaseEntity {
@NotBlank(message = "社区名称不能为空", groups = {AddGroup.class, EditGroup.class})
private String communityName;
- /**
- * 社区类型 1:园区,2:小区
- */
- @NotNull(message = "社区类型 1:园区,2:小区不能为空", groups = {AddGroup.class, EditGroup.class})
- private Integer communityType;
+// /**
+// * 社区类型 1:园区,2:小区
+// */
+// @NotNull(message = "社区类型 1:园区,2:小区不能为空", groups = {AddGroup.class, EditGroup.class})
+// private Integer communityType;
@NotBlank(message = "城市不能为null", groups = {AddGroup.class, EditGroup.class})
private String cityFullCode;
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbFloorBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbFloorBo.java
index 2e4ecaec..bab33942 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbFloorBo.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbFloorBo.java
@@ -37,12 +37,23 @@ public class TbFloorBo extends BaseEntity {
@NotBlank(message = "楼层数名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String floorName;
+// /**
+// * 楼层号
+// */
+// @NotNull(message = "楼层号不能为空", groups = { AddGroup.class, EditGroup.class })
+// private Integer floorNumber;
/**
- * 楼层号
+ * 建筑面积(平方米)
*/
- @NotNull(message = "楼层号不能为空", groups = { AddGroup.class, EditGroup.class })
- private Integer floorNumber;
-
+ private Float area;
+ /**
+ * 套内面积(平方米)
+ */
+ private Float insideInArea;
+ /**
+ * 公摊面积(平方米)
+ */
+ private Float sharedArea;
/**
* 楼层类型
*/
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbRoomBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbRoomBo.java
index bfc8aeeb..9a0deafc 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbRoomBo.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbRoomBo.java
@@ -79,4 +79,13 @@ public class TbRoomBo extends BaseEntity {
* 是否重要(1非常重要、2重要、3一般)
*/
private String imgUrl;
+ /**
+ * 园区id
+ */
+ private Long communityId;
+
+ /**
+ * 建筑id
+ */
+ private Long buildingId;
}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/mobile/InspectionTaskDetailToOrderBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/mobile/InspectionTaskDetailToOrderBo.java
new file mode 100644
index 00000000..b281af32
--- /dev/null
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/mobile/InspectionTaskDetailToOrderBo.java
@@ -0,0 +1,121 @@
+package org.dromara.property.domain.bo.mobile;
+
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+
+import java.util.Date;
+
+/**
+ * @author yuyongle
+ * @version 1.0
+ * @description: TODO
+ * @date 2025/9/5 11:40
+ */
+@Data
+public class InspectionTaskDetailToOrderBo {
+ /**
+ * 主键id
+ */
+ @NotNull(message = "主键id不能为空", groups = { EditGroup.class })
+ private Long id;
+ /**
+ * 工单类型id
+ */
+ @NotNull(message = "工单类型id不能为空", groups = { EditGroup.class })
+ private Long orderTypeId;
+ /**
+ * 任务id
+ */
+ @NotNull(message = "任务id不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Long taskId;
+
+ /**
+ * 路线id
+ */
+ private Long routeId;
+
+ /**
+ * 巡检计划id
+ */
+ @NotNull(message = "巡检计划id不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Long planId;
+
+ /**
+ * 巡检点id
+ */
+ private Long pointId;
+
+ /**
+ * 签到类型(1.现场拍照、2.摄像头签到、3.现场扫码)
+ */
+ private String signType;
+
+ /**
+ * 实际巡检时间
+ */
+ private Date actualInspectionTime;
+
+ /**
+ * 实际签到状态(1已签到2.未签到)
+ */
+ private String actualSignState;
+
+ /**
+ * 巡检状态(0未完成,1已完成)
+ */
+ private String inspectionState;
+
+ /**
+ * 巡检图片
+ */
+ private String inspectionImage;
+
+ /**
+ * 计划巡检人
+ */
+ private String planInspectionPerson;
+
+ /**
+ * 实际巡检人
+ */
+ private String actualInspectionPerson;
+
+
+ /**
+ * 巡检结果
+ */
+ private String inspectionResults;
+
+ /**
+ * 巡检描述
+ */
+ private String inspectionDesc;
+
+ /**
+ * 巡检位置
+ */
+ private String inspectionLocation;
+
+ /**
+ * 实际巡检时间
+ */
+ private Date inspectionTime;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+ /**
+ * 点开始时间
+ */
+ private Date pointStartTime;
+
+ /**
+ * 点结束时间
+ */
+ private Date pointEndTime;
+}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ResidentPersonBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/residentBo/ResidentPersonBo.java
similarity index 92%
rename from ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ResidentPersonBo.java
rename to ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/residentBo/ResidentPersonBo.java
index 47fbb1c2..d8eed187 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ResidentPersonBo.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/residentBo/ResidentPersonBo.java
@@ -1,6 +1,6 @@
-package org.dromara.property.domain.bo;
+package org.dromara.property.domain.bo.residentBo;
-import org.dromara.property.domain.ResidentPerson;
+import org.dromara.property.domain.entity.resident.ResidentPerson;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
@@ -114,7 +114,7 @@ public class ResidentPersonBo extends BaseEntity {
/**
* 状态
*/
- private Long state = 1L;
+ private Integer state;
/**
* 备注
@@ -129,9 +129,10 @@ public class ResidentPersonBo extends BaseEntity {
/**
* 用户角色(1管理员2普通用户)
*/
- private String userRoles;
+ private Integer userRoles;
+
/**
* 是否审核通过(1通过2不通过)
*/
- private String isAudit;
+ private Integer isAudit;
}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ResidentUnitBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/residentBo/ResidentUnitBo.java
similarity index 95%
rename from ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ResidentUnitBo.java
rename to ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/residentBo/ResidentUnitBo.java
index 95612baf..1aade1e7 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ResidentUnitBo.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/residentBo/ResidentUnitBo.java
@@ -1,6 +1,6 @@
-package org.dromara.property.domain.bo;
+package org.dromara.property.domain.bo.residentBo;
-import org.dromara.property.domain.ResidentUnit;
+import org.dromara.property.domain.entity.resident.ResidentUnit;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ResidentPerson.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/entity/resident/ResidentPerson.java
similarity index 93%
rename from ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ResidentPerson.java
rename to ruoyi-modules/Property/src/main/java/org/dromara/property/domain/entity/resident/ResidentPerson.java
index 00f96171..addd508e 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ResidentPerson.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/entity/resident/ResidentPerson.java
@@ -1,4 +1,4 @@
-package org.dromara.property.domain;
+package org.dromara.property.domain.entity.resident;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
@@ -87,15 +87,15 @@ public class ResidentPerson extends TenantEntity {
/**
* 状态
*/
- private Long state;
+ private Integer state;
/**
* 用户角色(1管理员2普通用户)
*/
- private String userRoles;
+ private Integer userRoles;
/**
* 是否审核通过(1通过2不通过)
*/
- private String isAudit;
+ private Integer isAudit;
/**
* 备注
*/
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ResidentUnit.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/entity/resident/ResidentUnit.java
similarity index 96%
rename from ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ResidentUnit.java
rename to ruoyi-modules/Property/src/main/java/org/dromara/property/domain/entity/resident/ResidentUnit.java
index 8faa2608..0b5d4986 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ResidentUnit.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/entity/resident/ResidentUnit.java
@@ -1,4 +1,4 @@
-package org.dromara.property.domain;
+package org.dromara.property.domain.entity.resident;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CustomerFeedbacksVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CustomerFeedbacksVo.java
index 7784ed58..6acdb93d 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CustomerFeedbacksVo.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CustomerFeedbacksVo.java
@@ -94,10 +94,13 @@ public class CustomerFeedbacksVo implements Serializable {
private String status;
/**
- * 客服电话
+ * 反馈单位
*/
- @ExcelProperty(value = "客服电话")
- private String serviceName;
+ private Long feedbackUnit;
+ /**
+ * 反馈单位文本
+ */
+ private String feedbackUnitText;
/**
* 搜索值
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/IndexCountVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/IndexCountVo.java
new file mode 100644
index 00000000..d5e9b3f8
--- /dev/null
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/IndexCountVo.java
@@ -0,0 +1,134 @@
+package org.dromara.property.domain.vo;
+
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+@Data
+@Accessors(chain = true)
+@NoArgsConstructor // 无参构造用于反序列化
+@AllArgsConstructor(access = AccessLevel.PRIVATE) // 私有全参构造,供 Builder 使用
+public class IndexCountVo {
+
+ private Integer workOrdersTotal; // 总工单数
+ private Integer workOrdersToday; // 今日工单数
+ private List satisfactionChartList; // 工单类型分布饼图
+ private List statusChartVoChartList; // 设备状态分布图表
+ private Integer visitorsToday; // 今日访客数
+ private Integer visitorsTotal; // 总访客数
+
+ @Data
+ @Accessors(chain = true)
+ @NoArgsConstructor
+ @AllArgsConstructor(access = AccessLevel.PRIVATE)
+ public static class PieChartVo {
+ private String type; // 类型名称(如:维修、咨询)
+ private Integer quantity; // 数量
+
+ public static PieChartVoBuilder builder() {
+ return new PieChartVoBuilder();
+ }
+
+ public static class PieChartVoBuilder {
+ private String type;
+ private Integer quantity;
+
+ public PieChartVoBuilder type(String type) {
+ this.type = type;
+ return this;
+ }
+
+ public PieChartVoBuilder quantity(Integer quantity) {
+ this.quantity = quantity;
+ return this;
+ }
+
+ public PieChartVo build() {
+ return new PieChartVo(type, quantity);
+ }
+ }
+ }
+
+ @Data
+ @Accessors(chain = true)
+ @NoArgsConstructor
+ @AllArgsConstructor(access = AccessLevel.PRIVATE)
+ public static class StatusChartVo {
+ private String state; // 使用状态(如:使用中,停用中,已报废,闲置中)
+ private Integer quantity; // 数量
+
+ public static StatusChartVoBuilder builder() {
+ return new StatusChartVoBuilder();
+ }
+
+ public static class StatusChartVoBuilder {
+ private String state;
+ private Integer quantity;
+
+ public StatusChartVoBuilder state(String state) {
+ this.state = state;
+ return this;
+ }
+
+ public StatusChartVoBuilder quantity(Integer quantity) {
+ this.quantity = quantity;
+ return this;
+ }
+
+ public StatusChartVo build() {
+ return new StatusChartVo(state, quantity);
+ }
+ }
+ }
+
+ public static IndexCountVoBuilder builder() {
+ return new IndexCountVoBuilder();
+ }
+
+ public static class IndexCountVoBuilder {
+ private Integer workOrdersTotal;
+ private Integer workOrdersToday;
+ private List satisfactionChartList;
+ private List statusChartVoChartList;
+ private Integer visitorsToday;
+ private Integer visitorsTotal;
+
+ public IndexCountVoBuilder workOrdersTotal(Integer workOrdersTotal) {
+ this.workOrdersTotal = workOrdersTotal;
+ return this;
+ }
+
+ public IndexCountVoBuilder workOrdersToday(Integer workOrdersToday) {
+ this.workOrdersToday = workOrdersToday;
+ return this;
+ }
+
+ public IndexCountVoBuilder visitorsToday(Integer visitorsToday) {
+ this.visitorsToday = visitorsToday;
+ return this;
+ }
+
+ public IndexCountVoBuilder visitorsTotal(Integer visitorsTotal) {
+ this.visitorsTotal = visitorsTotal;
+ return this;
+ }
+
+ public IndexCountVoBuilder satisfactionChartList(List satisfactionChartList) {
+ this.satisfactionChartList = satisfactionChartList;
+ return this;
+ }
+
+ public IndexCountVoBuilder statusChartVoChartList(List statusChartVoChartList) {
+ this.statusChartVoChartList = statusChartVoChartList;
+ return this;
+ }
+
+ public IndexCountVo build() {
+ return new IndexCountVo(workOrdersTotal, workOrdersToday, satisfactionChartList, statusChartVoChartList, visitorsToday, visitorsTotal);
+ }
+ }
+}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionPointVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionPointVo.java
index 0c688eb7..f72124bf 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionPointVo.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionPointVo.java
@@ -48,7 +48,10 @@ public class InspectionPointVo implements Serializable {
*/
@ExcelProperty(value = "巡检点名称")
private String pointName;
-
+ /**
+ * 巡检位置
+ */
+ private String inspectionLocation;
/**
* 巡检点类型
*/
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionTaskDetailVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionTaskDetailVo.java
index 479b7b04..e1a48883 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionTaskDetailVo.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/InspectionTaskDetailVo.java
@@ -43,24 +43,46 @@ public class InspectionTaskDetailVo implements Serializable {
*/
@ExcelProperty(value = "任务id")
private Long taskId;
-
+ /**
+ * 任务text
+ */
+ @ExcelProperty(value = "任务text")
+ private String taskText;
/**
* 路线id
*/
@ExcelProperty(value = "路线id")
private Long routeId;
-
+ /**
+ * 路线text
+ */
+ @ExcelProperty(value = "路线text")
+ private String routeText;
+ /**
+ * 工单id
+ */
+ private Long orderId;
/**
* 巡检计划id
*/
@ExcelProperty(value = "巡检计划id")
private Long planId;
+ /**
+ * 巡检计划text
+ */
+ @ExcelProperty(value = " 巡检计划text")
+ private Long planText;
/**
* 巡检点id
*/
@ExcelProperty(value = "巡检点id")
private Long pointId;
+ /**
+ * 巡检点text
+ */
+ @ExcelProperty(value = "巡检点text")
+ private Long pointText;
/**
* 签到类型(1.现场拍照、2.摄像头签到、3.现场扫码)
@@ -102,12 +124,22 @@ public class InspectionTaskDetailVo implements Serializable {
*/
@ExcelProperty(value = "计划巡检人")
private String planInspectionPerson;
+ /**
+ * 计划巡检人text
+ */
+ @ExcelProperty(value = "计划巡检人Text")
+ private String planInspectionPersonText;
/**
* 实际巡检人
*/
@ExcelProperty(value = "实际巡检人")
private String actualInspectionPerson;
+ /**
+ * 实际巡检人Text
+ */
+ @ExcelProperty(value = "实际巡检人Text")
+ private String actualInspectionPersonText;
/**
* 巡检结果
*/
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MeetParticipantsVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MeetParticipantsVo.java
new file mode 100644
index 00000000..35fbc0fc
--- /dev/null
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MeetParticipantsVo.java
@@ -0,0 +1,58 @@
+package org.dromara.property.domain.vo;
+
+import org.dromara.property.domain.MeetParticipants;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.property.domain.vo.residentVo.ResidentPersonVo;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 会议室参会记录视图对象 meet_participants
+ *
+ * @author mocheng
+ * @date 2025-09-03
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = MeetParticipants.class)
+public class MeetParticipantsVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键id
+ */
+ private Long id;
+
+ /**
+ * 会议室预约id
+ */
+ private Long meetBookId;
+ /**
+ * 入驻人员id
+ */
+ private Long residentPersonId;
+ /**
+ * 会议室预约记录
+ */
+ private MeetBookingVo meetBookingVo;
+ /**
+ * 参会人员
+ */
+ private ResidentPersonVo residentPersonVo;
+ /**
+ * 签到状态
+ */
+ private String signState;
+ /**
+ * 签到时间
+ */
+ private Date signTime;
+}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MeetVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MeetVo.java
index b562928e..47dc24de 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MeetVo.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MeetVo.java
@@ -48,6 +48,9 @@ public class MeetVo implements Serializable {
*/
@ExcelProperty(value = "会议室类型")
private String meetingRoomType;
+
+ @ExcelProperty(value = "保密等级")
+ private String secrecyGrade;
/**
* 会议室位置
*/
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersVo.java
index 5ab02bee..ff8ba198 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersVo.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ServiceWorkOrdersVo.java
@@ -5,11 +5,12 @@ import cn.idev.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.property.domain.ServiceWorkOrders;
+import org.dromara.property.domain.vo.mobile.MServiceWorkOrdersRecordVo;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
-
+import java.util.List;
/**
@@ -156,4 +157,8 @@ public class ServiceWorkOrdersVo implements Serializable {
* 创建时间
*/
private Date createTime;
+ /**
+ * 工单记录
+ */
+ List recordVoList;
}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbBuildingVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbBuildingVo.java
index 3f892373..ce1d24e0 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbBuildingVo.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbBuildingVo.java
@@ -35,7 +35,10 @@ public class TbBuildingVo implements Serializable {
*/
@ExcelProperty(value = "园区编码")
private Long communityId;
-
+ /**
+ * 园区文本
+ */
+ private String communityText;
/**
* 建筑名称
*/
@@ -62,7 +65,18 @@ public class TbBuildingVo implements Serializable {
@Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "buildType", other = "sis_build_use_type")
private String buildTypeName;
-
+ /**
+ * 建筑面积(平方米)
+ */
+ private Float area;
+ /**
+ * 套内面积(平方米)
+ */
+ private Float insideInArea;
+ /**
+ * 公摊面积(平方米)
+ */
+ private Float sharedArea;
/**
* 电梯数量
*/
@@ -75,11 +89,11 @@ public class TbBuildingVo implements Serializable {
@ExcelProperty(value = "竣工日期")
private Date completionDate;
- /**
- * 地址
- */
- @ExcelProperty(value = "地址")
- private String addr;
+// /**
+// * 地址
+// */
+// @ExcelProperty(value = "地址")
+// private String addr;
/**
* 经度
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbCommunityVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbCommunityVo.java
index 9e4853f9..c2e0cff8 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbCommunityVo.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbCommunityVo.java
@@ -37,11 +37,11 @@ public class TbCommunityVo implements Serializable {
@ExcelProperty(value = "社区名称")
private String communityName;
- /**
- * 社区类型 1:园区,2:小区
- */
- @ExcelProperty(value = "社区类型 1:园区,2:小区")
- private Long communityType;
+// /**
+// * 社区类型 1:园区,2:小区
+// */
+// @ExcelProperty(value = "社区类型 1:园区,2:小区")
+// private Long communityType;
private String cityFullCode;
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbFloorVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbFloorVo.java
index b4735df3..bf90780e 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbFloorVo.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbFloorVo.java
@@ -1,5 +1,8 @@
package org.dromara.property.domain.vo;
+import jakarta.validation.constraints.NotBlank;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
import org.dromara.property.domain.TbFloor;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
@@ -38,12 +41,20 @@ public class TbFloorVo implements Serializable {
* 社区id
*/
private Long communityId;
+ /**
+ * 社区文本
+ */
+ private String communityText;
/**
* 建筑名称
*/
@ExcelProperty(value = "建筑名称")
private Long buildingId;
+ /**
+ * 建筑文本
+ */
+ private String buildingText;
/**
* 单元编码
@@ -57,11 +68,11 @@ public class TbFloorVo implements Serializable {
@ExcelProperty(value = "楼层数名称")
private String floorName;
- /**
- * 楼层号
- */
- @ExcelProperty(value = "楼层号")
- private Long floorNumber;
+// /**
+// * 楼层号
+// */
+// @ExcelProperty(value = "楼层号")
+// private Long floorNumber;
/**
* 楼层类型
@@ -74,7 +85,18 @@ public class TbFloorVo implements Serializable {
*/
@ExcelProperty(value = "房间数量")
private Integer roomCount;
-
+ /**
+ * 建筑面积(平方米)
+ */
+ private Float area;
+ /**
+ * 套内面积(平方米)
+ */
+ private Float insideInArea;
+ /**
+ * 公摊面积(平方米)
+ */
+ private Float sharedArea;
/**
* 层高
*/
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbRoomVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbRoomVo.java
index 4290fc39..35e6d934 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbRoomVo.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbRoomVo.java
@@ -56,6 +56,11 @@ public class TbRoomVo implements Serializable {
*/
@ExcelProperty(value = "所属楼层ID")
private Long floorId;
+ /**
+ * 所属楼层text
+ */
+ @ExcelProperty(value = "所属楼层Text")
+ private String floorText;
/**
* 房间号(如101,202)
@@ -120,4 +125,17 @@ public class TbRoomVo implements Serializable {
* 图片
*/
private String imgUrl;
+ /**
+ * 园区文本
+ */
+ private String communityText;
+
+ /**
+ * 建筑文本
+ */
+ private String buildingText;
+ /**
+ * 入驻单位文本
+ */
+ private String residentUnitText;
}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/mobile/MInspectionPointVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/mobile/MInspectionPointVo.java
deleted file mode 100644
index 26920080..00000000
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/mobile/MInspectionPointVo.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package org.dromara.property.domain.vo.mobile;
-
-
-import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
-import cn.idev.excel.annotation.ExcelProperty;
-import io.github.linpeilie.annotations.AutoMapper;
-import lombok.Data;
-import org.dromara.property.domain.InspectionTaskDetail;
-
-import java.io.Serial;
-import java.util.Date;
-
-/**
- * @author yuyongle
- * @version 1.0
- * @description: TODO
- * @date 2025/9/1 16:24
- */
-@Data
-@ExcelIgnoreUnannotated
-@AutoMapper(target = InspectionTaskDetail.class)
-public class MInspectionPointVo {
-
- @Serial
- private static final long serialVersionUID = 1L;
-
- /**
- * 主键id
- */
- @ExcelProperty(value = "主键id")
- private Long id;
-
- /**
- * 巡检点id
- */
- @ExcelProperty(value = "巡检点id")
- private Long pointId;
- /**
- * 巡检点名称
- */
- @ExcelProperty(value = "巡检点名称")
- private String pointName;
-
- /**
- * 巡检状态(0未完成,1已完成)
- */
- @ExcelProperty(value = "巡检状态(0未完成,1已完成)")
- private String inspectionState;
-
- /**
- * 巡检结果
- */
- @ExcelProperty(value = "巡检结果")
- private String inspectionResults;
-
- /**
- * 点开始时间
- */
- @ExcelProperty(value = "点开始时间")
- private Date pointStartTime;
-
- /**
- * 点结束时间
- */
- @ExcelProperty(value = "点结束时间")
- private Date pointEndTime;
-}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/mobile/MInspectionTaskDetailVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/mobile/MInspectionTaskDetailVo.java
new file mode 100644
index 00000000..ef1e0260
--- /dev/null
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/mobile/MInspectionTaskDetailVo.java
@@ -0,0 +1,170 @@
+package org.dromara.property.domain.vo.mobile;
+
+
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.common.translation.annotation.Translation;
+import org.dromara.common.translation.constant.TransConstant;
+import org.dromara.property.domain.InspectionTaskDetail;
+
+import java.io.Serial;
+import java.util.Date;
+
+/**
+ * @author yuyongle
+ * @version 1.0
+ * @description: TODO
+ * @date 2025/9/1 16:24
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = InspectionTaskDetail.class)
+public class MInspectionTaskDetailVo {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键id
+ */
+ @ExcelProperty(value = "主键id")
+ private Long id;
+
+ /**
+ * 巡检点id
+ */
+ @ExcelProperty(value = "巡检点id")
+ private Long pointId;
+ /**
+ * 巡检点名称
+ */
+ @ExcelProperty(value = "巡检点名称")
+ private String pointName;
+
+ /**
+ * 巡检状态(0未完成,1已完成)
+ */
+ @ExcelProperty(value = "巡检状态(0未完成,1已完成)")
+ private String inspectionState;
+
+ /**
+ * 巡检结果
+ */
+ @ExcelProperty(value = "巡检结果")
+ private String inspectionResults;
+
+ /**
+ * 点开始时间
+ */
+ @ExcelProperty(value = "点开始时间")
+ private Date pointStartTime;
+
+ /**
+ * 点结束时间
+ */
+ @ExcelProperty(value = "点结束时间")
+ private Date pointEndTime;
+
+ /**
+ * 任务id
+ */
+ @ExcelProperty(value = "任务id")
+ private Long taskId;
+
+ /**
+ * 路线id
+ */
+ @ExcelProperty(value = "路线id")
+ private Long routeId;
+
+ /**
+ * 巡检计划id
+ */
+ @ExcelProperty(value = "巡检计划id")
+ private Long planId;
+ /**
+ * 工单id
+ */
+ @ExcelProperty(value = "工单id")
+ private Long orderId;
+
+ /**
+ * 签到类型(1.现场拍照、2.摄像头签到、3.现场扫码)
+ */
+ @ExcelProperty(value = "签到类型(1.现场拍照、2.摄像头签到、3.现场扫码)")
+ private String signType;
+
+ /**
+ * 实际巡检时间
+ */
+ @ExcelProperty(value = "实际巡检时间")
+ private Date actualInspectionTime;
+
+ /**
+ * 实际签到状态(0未签到1.已签到)
+ */
+ private String actualSignState;
+
+ /**
+ * 巡检图片
+ */
+ @ExcelProperty(value = "巡检图片")
+ private String inspectionImage;
+
+ /**
+ * 巡检图片Url
+ */
+ @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "inspectionImage")
+ private String inspectionImageUrl;
+ /**
+ * 计划巡检人
+ */
+ @ExcelProperty(value = "计划巡检人")
+ private String planInspectionPerson;
+ /**
+ * 计划巡检人文本
+ */
+ @ExcelProperty(value = "计划巡检人文本")
+ private String planInspectionPersonText;
+
+ /**
+ * 实际巡检人
+ */
+ @ExcelProperty(value = "实际巡检人")
+ private String actualInspectionPerson;
+ /**
+ * 实际巡检人文本
+ */
+ @ExcelProperty(value = "实际巡检人文本")
+ private String actualInspectionPersonText;
+
+ /**
+ * 巡检描述
+ */
+ @ExcelProperty(value = "巡检描述")
+ private String inspectionDesc;
+
+ /**
+ * 巡检位置
+ */
+ @ExcelProperty(value = "巡检位置")
+ private String inspectionLocation;
+
+ /**
+ * 实际巡检时间
+ */
+ @ExcelProperty(value = "实际巡检时间")
+ private Date inspectionTime;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ private String remark;
+ /**
+ * 工单
+ */
+ private MServiceWorkOrdersVo mServiceWorkOrdersVo;
+}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentPersonImportVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/residentVo/ResidentPersonImportVo.java
similarity index 85%
rename from ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentPersonImportVo.java
rename to ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/residentVo/ResidentPersonImportVo.java
index b849480e..ebb89f9b 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentPersonImportVo.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/residentVo/ResidentPersonImportVo.java
@@ -1,17 +1,13 @@
-package org.dromara.property.domain.vo;
+package org.dromara.property.domain.vo.residentVo;
-import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
-import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
-import org.dromara.property.domain.ResidentPerson;
import java.io.Serial;
import java.io.Serializable;
-import java.util.Date;
/**
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentPersonVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/residentVo/ResidentPersonVo.java
similarity index 86%
rename from ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentPersonVo.java
rename to ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/residentVo/ResidentPersonVo.java
index 88f0d0b2..9cb930f6 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentPersonVo.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/residentVo/ResidentPersonVo.java
@@ -1,7 +1,8 @@
-package org.dromara.property.domain.vo;
+package org.dromara.property.domain.vo.residentVo;
import java.util.Date;
-import org.dromara.property.domain.ResidentPerson;
+
+import org.dromara.property.domain.entity.resident.ResidentPerson;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
@@ -11,7 +12,6 @@ import java.io.Serial;
import java.io.Serializable;
-
/**
* 入驻员工视图对象 resident_person
*
@@ -102,7 +102,7 @@ public class ResidentPersonVo implements Serializable {
* 状态
*/
@ExcelProperty(value = "状态")
- private Long state;
+ private Integer state;
/**
* 备注
@@ -143,5 +143,20 @@ public class ResidentPersonVo implements Serializable {
*/
private Integer rosterType;
+ /**
+ * 密码
+ */
+ private String password;
+
+ /**
+ * 用户角色(1管理员2普通用户)
+ */
+ private Integer userRoles;
+
+ /**
+ * 是否审核通过(1通过2不通过)
+ */
+ private Integer isAudit;
+
}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentUnitVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/residentVo/ResidentUnitVo.java
similarity index 94%
rename from ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentUnitVo.java
rename to ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/residentVo/ResidentUnitVo.java
index 2e9cc0f6..e93abf8d 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentUnitVo.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/residentVo/ResidentUnitVo.java
@@ -1,7 +1,7 @@
-package org.dromara.property.domain.vo;
+package org.dromara.property.domain.vo.residentVo;
import java.util.Date;
-import org.dromara.property.domain.ResidentUnit;
+import org.dromara.property.domain.entity.resident.ResidentUnit;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteFloorServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteFloorServiceImpl.java
index 46ea27fa..c7856cd3 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteFloorServiceImpl.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteFloorServiceImpl.java
@@ -99,7 +99,7 @@ public class RemoteFloorServiceImpl implements RemoteFloorService {
RemoteFloorVo remoteFloorVo = new RemoteFloorVo();
remoteFloorVo.setId(item.getId());
remoteFloorVo.setFloorName(item.getFloorName());
- remoteFloorVo.setFloorNumber(item.getFloorNumber());
+// remoteFloorVo.setFloorNumber(item.getFloorNumber());
remoteFloorVos.add(remoteFloorVo);
});
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteResidentPersonServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteResidentPersonServiceImpl.java
index 9fa95e96..3f9400ae 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteResidentPersonServiceImpl.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteResidentPersonServiceImpl.java
@@ -1,13 +1,17 @@
package org.dromara.property.dubbo;
+import cn.hutool.core.util.ObjectUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboService;
+import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.property.api.RemoteResidentPersonService;
import org.dromara.property.api.domain.vo.RemoteResidentPersonVo;
-import org.dromara.property.domain.bo.ResidentPersonBo;
-import org.dromara.property.domain.vo.ResidentPersonVo;
-import org.dromara.property.service.IResidentPersonService;
+import org.dromara.property.api.model.LoginResidentPerson;
+import org.dromara.property.domain.bo.residentBo.ResidentPersonBo;
+import org.dromara.property.domain.vo.residentVo.ResidentPersonVo;
+import org.dromara.common.core.exception.residentPerson.ResidentPersonException;
+import org.dromara.property.service.residentService.IResidentPersonService;
import java.util.List;
@@ -52,4 +56,44 @@ public class RemoteResidentPersonServiceImpl implements RemoteResidentPersonServ
return residentPersonService.updateByBo(bo);
}
+
+ /**
+ * 通过手机号查询用户信息
+ *
+ * @param phone 手机号
+ * @param tenantId 租户id
+ * @return 结果
+ */
+ public LoginResidentPerson getResidentPersonInfo(String phone, String tenantId) throws ResidentPersonException {
+ return TenantHelper.dynamic(tenantId, () -> {
+ ResidentPersonVo vo = residentPersonService.queryByPhone(phone, tenantId);
+ if (ObjectUtil.isEmpty(vo)) {
+ throw new ResidentPersonException("入驻员工");
+ }
+ if (vo.getIsAudit() == null || vo.getIsAudit() != 1) {
+ throw new ResidentPersonException("当前员工未审核");
+ }
+
+ if (vo.getState() == 0) {
+ throw new ResidentPersonException("当前员工账号被禁用");
+ }
+
+ if (vo.getState() == 2) {
+ throw new ResidentPersonException("当前员工已离职");
+ }
+
+ LoginResidentPerson login = new LoginResidentPerson();
+ login.setTenantId(tenantId);
+ login.setUserId(vo.getId());
+ login.setUsername(vo.getUserName());
+ login.setNickname(vo.getUserName());
+ login.setPassword(vo.getPassword());
+ login.setUserRoles(vo.getUserRoles());
+ login.setUnitId(vo.getUnitId());
+ login.setUnitName(vo.getUnitName());
+ login.setUserType("resident_person");
+ return login;
+ });
+ }
+
}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/listener/ResidentPersonImportListener.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/listener/ResidentPersonImportListener.java
index 0231a2cf..786ce5ed 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/listener/ResidentPersonImportListener.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/listener/ResidentPersonImportListener.java
@@ -15,14 +15,13 @@ import org.dromara.common.core.utils.ValidatorUtils;
import org.dromara.common.excel.core.ExcelListener;
import org.dromara.common.excel.core.ExcelResult;
import org.dromara.common.satoken.utils.LoginHelper;
-import org.dromara.property.domain.bo.ResidentPersonBo;
-import org.dromara.property.domain.vo.ResidentPersonImportVo;
-import org.dromara.property.domain.vo.ResidentPersonVo;
-import org.dromara.property.domain.vo.ResidentUnitVo;
-import org.dromara.property.service.IResidentPersonService;
-import org.dromara.property.service.IResidentUnitService;
+import org.dromara.property.domain.bo.residentBo.ResidentPersonBo;
+import org.dromara.property.domain.vo.residentVo.ResidentPersonImportVo;
+import org.dromara.property.domain.vo.residentVo.ResidentPersonVo;
+import org.dromara.property.domain.vo.residentVo.ResidentUnitVo;
+import org.dromara.property.service.residentService.IResidentPersonService;
+import org.dromara.property.service.residentService.IResidentUnitService;
-import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -69,7 +68,7 @@ public class ResidentPersonImportListener extends AnalysisEventListener {
+
+}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/ResidentPersonMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/ResidentPersonMapper.java
index 76f77fb7..090962ef 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/ResidentPersonMapper.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/ResidentPersonMapper.java
@@ -1,8 +1,8 @@
package org.dromara.property.mapper;
import org.apache.ibatis.annotations.Mapper;
-import org.dromara.property.domain.ResidentPerson;
-import org.dromara.property.domain.vo.ResidentPersonVo;
+import org.dromara.property.domain.entity.resident.ResidentPerson;
+import org.dromara.property.domain.vo.residentVo.ResidentPersonVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/ResidentUnitMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/ResidentUnitMapper.java
index 2d679d1f..c5071f38 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/ResidentUnitMapper.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/ResidentUnitMapper.java
@@ -1,8 +1,8 @@
package org.dromara.property.mapper;
import org.apache.ibatis.annotations.Mapper;
-import org.dromara.property.domain.ResidentUnit;
-import org.dromara.property.domain.vo.ResidentUnitVo;
+import org.dromara.property.domain.entity.resident.ResidentUnit;
+import org.dromara.property.domain.vo.residentVo.ResidentUnitVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionPointService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionPointService.java
index 215b14b2..6ccd07bf 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionPointService.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionPointService.java
@@ -3,7 +3,6 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.property.domain.bo.InspectionPointBo;
import org.dromara.property.domain.vo.InspectionPointVo;
-import org.dromara.property.domain.vo.mobile.MInspectionPointVo;
import java.util.Collection;
import java.util.List;
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionTaskDetailService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionTaskDetailService.java
index 8a404105..5b4f3626 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionTaskDetailService.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IInspectionTaskDetailService.java
@@ -1,10 +1,11 @@
package org.dromara.property.service;
+import org.dromara.property.domain.bo.mobile.InspectionTaskDetailToOrderBo;
import org.dromara.property.domain.vo.InspectionTaskDetailVo;
import org.dromara.property.domain.bo.InspectionTaskDetailBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
-import org.dromara.property.domain.vo.mobile.MInspectionPointVo;
+import org.dromara.property.domain.vo.mobile.MInspectionTaskDetailVo;
import java.util.Collection;
import java.util.List;
@@ -75,5 +76,23 @@ public interface IInspectionTaskDetailService {
* @param pageQuery
* @return
*/
- TableDataInfo mQueryPageList(InspectionTaskDetailBo bo, PageQuery pageQuery);
+ TableDataInfo mQueryPageList(InspectionTaskDetailBo bo, PageQuery pageQuery);
+
+ /**
+ * 巡检明细签到
+ * @param bo
+ * @return
+ */
+ Boolean signIn(InspectionTaskDetailBo bo);
+ /**
+ * 提交巡检明细
+ */
+ Boolean submit(InspectionTaskDetailBo bo);
+
+ /**
+ * 巡检提报工单
+ * @param bo
+ * @return
+ */
+ Boolean reportedOrder(InspectionTaskDetailToOrderBo bo);
}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IMeetParticipantsService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IMeetParticipantsService.java
new file mode 100644
index 00000000..649d0ebd
--- /dev/null
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IMeetParticipantsService.java
@@ -0,0 +1,52 @@
+package org.dromara.property.service;
+
+import org.dromara.property.domain.MeetParticipants;
+import org.dromara.property.domain.vo.MeetParticipantsVo;
+import org.dromara.property.domain.bo.MeetParticipantsBo;
+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 mocheng
+ * @date 2025-09-03
+ */
+public interface IMeetParticipantsService {
+
+ /**
+ * 查询会议室参会记录
+ *
+ * @param id 主键
+ * @return 会议室参会记录
+ */
+ MeetParticipantsVo queryById(Long id);
+
+ /**
+ * 分页查询会议室参会记录列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 会议室参会记录分页列表
+ */
+ TableDataInfo queryPageList(MeetParticipantsBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询符合条件的会议室参会记录列表
+ *
+ * @param bo 查询条件
+ * @return 会议室参会记录列表
+ */
+ List queryList(MeetParticipantsBo bo);
+
+ /**
+ * 新增会议室参会记录
+ *
+ * @param bo 会议室参会记录
+ * @return 是否新增成功
+ */
+ Boolean insertByBo(MeetParticipantsBo bo);
+}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IndexService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IndexService.java
new file mode 100644
index 00000000..f7ba1d94
--- /dev/null
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IndexService.java
@@ -0,0 +1,15 @@
+package org.dromara.property.service;
+
+import org.dromara.property.domain.vo.IndexCountVo;
+
+/**
+ * 首页展示数据
+ * @author yuyongle
+ * @date 2025-06-21
+ */
+public interface IndexService {
+ /**
+ * 首页统计数量
+ */
+ IndexCountVo indexCount();
+}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CapitalApplicationServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CapitalApplicationServiceImpl.java
index beb8846f..bfcbca22 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CapitalApplicationServiceImpl.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CapitalApplicationServiceImpl.java
@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.property.domain.*;
+import org.dromara.property.domain.entity.resident.ResidentPerson;
import org.dromara.property.domain.vo.CapitalInfoVo;
import org.dromara.property.mapper.*;
import org.springframework.stereotype.Service;
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostCarChargeServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostCarChargeServiceImpl.java
index d0c778df..d5e07a81 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostCarChargeServiceImpl.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostCarChargeServiceImpl.java
@@ -17,13 +17,13 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.property.domain.*;
import org.dromara.property.domain.bo.CostCarChargeBo;
import org.dromara.property.domain.bo.CostChargeReturnFeeBo;
+import org.dromara.property.domain.entity.resident.ResidentPerson;
import org.dromara.property.domain.enums.ChargeStatusEnum;
import org.dromara.property.domain.vo.CostCarChargeVo;
import org.dromara.property.domain.vo.CostItemsVo;
import org.dromara.property.mapper.*;
import org.dromara.property.service.ICostCarChargeService;
import org.dromara.system.api.RemoteUserService;
-import org.dromara.system.api.domain.vo.RemoteUserVo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -31,8 +31,6 @@ import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;
import java.util.Map;
-import java.util.Objects;
-import java.util.stream.Collectors;
/**
* 费用-车辆收费Service业务层处理
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostHouseChargeServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostHouseChargeServiceImpl.java
index b8fb38c3..277e0a5c 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostHouseChargeServiceImpl.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostHouseChargeServiceImpl.java
@@ -17,11 +17,12 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.property.domain.*;
import org.dromara.property.domain.bo.CostChargeReturnFeeBo;
+import org.dromara.property.domain.entity.resident.ResidentPerson;
import org.dromara.property.domain.enums.ChargeStatusEnum;
import org.dromara.property.domain.vo.*;
+import org.dromara.property.domain.vo.residentVo.ResidentPersonVo;
import org.dromara.property.mapper.*;
import org.dromara.system.api.RemoteUserService;
-import org.dromara.system.api.domain.vo.RemoteUserVo;
import org.springframework.stereotype.Service;
import org.dromara.property.domain.bo.CostHouseChargeBo;
import org.dromara.property.service.ICostHouseChargeService;
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CustomerContingenPlanServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CustomerContingenPlanServiceImpl.java
index 4037023b..303fba71 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CustomerContingenPlanServiceImpl.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CustomerContingenPlanServiceImpl.java
@@ -11,15 +11,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.dromara.common.translation.annotation.Translation;
-import org.dromara.property.domain.CostReturnPayFee;
import org.dromara.property.domain.CustomerContingenPlan;
import org.dromara.property.domain.CustomerContingenPlanRecord;
-import org.dromara.property.domain.ResidentPerson;
+import org.dromara.property.domain.entity.resident.ResidentPerson;
import org.dromara.property.domain.bo.CustomerContingenPlanBo;
import org.dromara.property.domain.vo.CustomerContingenPlanRecordVo;
import org.dromara.property.domain.vo.CustomerContingenPlanVo;
-import org.dromara.property.domain.vo.ResidentUnitVo;
import org.dromara.property.mapper.CustomerContingenPlanMapper;
import org.dromara.property.mapper.CustomerContingenPlanRecordMapper;
import org.dromara.property.mapper.ResidentPersonMapper;
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CustomerFeedbacksServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CustomerFeedbacksServiceImpl.java
index bbd57e96..81bfb14c 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CustomerFeedbacksServiceImpl.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CustomerFeedbacksServiceImpl.java
@@ -3,26 +3,26 @@ package org.dromara.property.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
+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 lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
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 lombok.extern.slf4j.Slf4j;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
-import org.dromara.property.domain.*;
+import org.dromara.property.domain.CustomerFeedbacks;
+import org.dromara.property.domain.ServiceWorkOrders;
+import org.dromara.property.domain.ServiceWorkOrdersRecord;
+import org.dromara.property.domain.ServiceWorkOrdersType;
import org.dromara.property.domain.bo.CustomerFeedbacksBo;
-import org.dromara.property.domain.bo.ServiceWorkOrdersBo;
import org.dromara.property.domain.vo.CustomerFeedbacksVo;
-import org.dromara.property.domain.vo.CustomerNoticesVo;
-import org.dromara.property.mapper.CustomerFeedbacksMapper;
-import org.dromara.property.mapper.ServiceWorkOrdersMapper;
-import org.dromara.property.mapper.ServiceWorkOrdersRecordMapper;
-import org.dromara.property.mapper.ServiceWorkOrdersTypeMapper;
+
+import org.dromara.property.domain.vo.residentVo.ResidentUnitVo;
+import org.dromara.property.mapper.*;
import org.dromara.property.service.ICustomerFeedbacksService;
import org.dromara.system.api.RemoteUserService;
import org.dromara.system.api.domain.vo.RemoteUserVo;
@@ -30,10 +30,9 @@ import org.dromara.system.api.model.LoginUser;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import java.util.Map;
-import java.util.Collection;
import java.util.stream.Collectors;
/**
@@ -51,6 +50,7 @@ public class CustomerFeedbacksServiceImpl implements ICustomerFeedbacksService {
private final ServiceWorkOrdersMapper serviceWorkOrdersMapper;
private final ServiceWorkOrdersTypeMapper serviceWorkOrdersTypeMapper;
private final ServiceWorkOrdersRecordMapper serviceWorkOrdersRecordMapper;
+ private final ResidentUnitMapper residentUnitMapper;
@DubboReference
private RemoteUserService remoteUserService;
@@ -96,8 +96,12 @@ public class CustomerFeedbacksServiceImpl implements ICustomerFeedbacksService {
.distinct()
.collect(Collectors.toList());
List remoteUserVos = remoteUserService.selectListByIds(uerIds);
+ //收集反馈单位id
+ List feedbackUnitIds = result.getRecords().stream().map(CustomerFeedbacksVo::getFeedbackUnit).distinct().toList();
+ //收集反馈单位weimap
+ Map unitNameMap = residentUnitMapper.selectVoByIds(feedbackUnitIds).stream().collect(Collectors.toMap(ResidentUnitVo::getId, ResidentUnitVo::getName));
result.getRecords().stream().forEach(s -> {
- assembly(s, serviceWorkOrdersTypes, remoteUserVos);
+ assembly(s, serviceWorkOrdersTypes, remoteUserVos,unitNameMap);
});
}
return TableDataInfo.build(result);
@@ -108,7 +112,7 @@ public class CustomerFeedbacksServiceImpl implements ICustomerFeedbacksService {
* @param customerFeedbacksVo 意见反馈返回信息
*
*/
- private void assembly(CustomerFeedbacksVo customerFeedbacksVo, List serviceWorkOrdersTypes, List remoteUserVos) {
+ private void assembly(CustomerFeedbacksVo customerFeedbacksVo, List serviceWorkOrdersTypes, List remoteUserVos,Map unitNameMap) {
if (CollUtil.isNotEmpty(remoteUserVos)) {
RemoteUserVo remoteUserVo = remoteUserVos.stream()
.filter(vo -> vo.getUserId() != null && vo.getUserId().equals(customerFeedbacksVo.getFeedbackPersion())).findFirst().orElse(null);
@@ -118,6 +122,7 @@ public class CustomerFeedbacksServiceImpl implements ICustomerFeedbacksService {
ServiceWorkOrdersType serviceWorkOrdersType = serviceWorkOrdersTypes.stream().filter(vo -> vo.getId() != null && vo.getId().equals(customerFeedbacksVo.getFeedbackType())).findFirst().orElse(null);
customerFeedbacksVo.setFeedbackTypeName(ObjectUtil.isNotEmpty(serviceWorkOrdersType) ? serviceWorkOrdersType.getOrderTypeName() : null);
}
+ customerFeedbacksVo.setFeedbackUnitText(unitNameMap.get(customerFeedbacksVo.getFeedbackUnit()));
}
/**
@@ -145,7 +150,6 @@ public class CustomerFeedbacksServiceImpl implements ICustomerFeedbacksService {
lqw.eq(StringUtils.isNotBlank(bo.getFeedbackImg()), CustomerFeedbacks::getFeedbackImg, bo.getFeedbackImg());
lqw.eq(StringUtils.isNotBlank(bo.getIsWorkOrder()), CustomerFeedbacks::getIsWorkOrder, bo.getIsWorkOrder());
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), CustomerFeedbacks::getStatus, bo.getStatus());
- lqw.like(StringUtils.isNotBlank(bo.getServiceName()), CustomerFeedbacks::getServiceName, bo.getServiceName());
lqw.eq(StringUtils.isNotBlank(bo.getSearchValue()), CustomerFeedbacks::getSearchValue, bo.getSearchValue());
return lqw;
}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/EnumFetcherServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/EnumFetcherServiceImpl.java
index b10e19d8..e171a8fd 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/EnumFetcherServiceImpl.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/EnumFetcherServiceImpl.java
@@ -162,7 +162,7 @@ public class EnumFetcherServiceImpl implements EnumFetcherService {
new LambdaQueryWrapper()
.le(AttendanceUserGroup::getStartDate, today)
.ge(AttendanceUserGroup::getEndDate, today)
- .eq(AttendanceUserGroup::getDeptId, serviceWorkOrdersType.getCreateDept())
+ .eq(AttendanceUserGroup::getDeptId, serviceWorkOrdersType.getDeptId())
);
if (CollUtil.isEmpty(attendanceUserGroups)) {
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/IndexServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/IndexServiceImpl.java
new file mode 100644
index 00000000..ce60a053
--- /dev/null
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/IndexServiceImpl.java
@@ -0,0 +1,151 @@
+package org.dromara.property.service.impl;
+
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.property.domain.Machine;
+import org.dromara.property.domain.MachineType;
+import org.dromara.property.domain.ServiceWorkOrders;
+import org.dromara.property.domain.ServiceWorkOrdersType;
+import org.dromara.property.domain.entity.resident.ResidentPerson;
+import org.dromara.property.domain.vo.IndexCountVo;
+import org.dromara.property.domain.vo.ServiceWorkOrderAnalysisVo;
+import org.dromara.property.mapper.*;
+import org.dromara.property.service.IndexService;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @author yuyongle
+ * @version 1.0
+ * @description: 首页展示数据
+ * @date 2025/9/5 15:01
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class IndexServiceImpl implements IndexService {
+ private final ServiceWorkOrdersMapper serviceWorkOrdersMapper;
+ private final ServiceWorkOrdersTypeMapper typesMapper;
+ private final ResidentPersonMapper residentPersonMapper;
+ private final MachineTypeMapper machineTypeMapper;
+ private final MachineMapper machineMapper;
+
+ /**
+ * 首页统计数量
+ */
+ @Override
+ public IndexCountVo indexCount() {
+ IndexCountVo indexCountVo = new IndexCountVo();
+ List serviceWorkOrderList = serviceWorkOrdersMapper.selectList();
+ indexCountVo.setWorkOrdersTotal(serviceWorkOrderList.size());
+ if (CollUtil.isNotEmpty(serviceWorkOrderList)) {
+ //筛选今日创建的工单
+ List serviceWorkOrdersToday = serviceWorkOrderList.stream()
+ .filter(s -> DateUtil.isSameDay(s.getCreateTime(), new Date()))
+ .toList();
+ indexCountVo.setWorkOrdersToday(serviceWorkOrdersToday.size());
+ List pieChartVos = calculateWorkOrderTypeDistribution(serviceWorkOrderList);
+ indexCountVo.setSatisfactionChartList(pieChartVos);
+ }else {
+ indexCountVo.setWorkOrdersToday(0);
+ indexCountVo.setSatisfactionChartList(new ArrayList<>());
+ }
+ //查询访客数量
+ List residentPersionList = residentPersonMapper.selectList();
+ indexCountVo.setVisitorsTotal(residentPersionList.size());
+ if (CollUtil.isNotEmpty(residentPersionList)) {
+ //筛选今日创建的工单
+ List todayResidentPersonlist = residentPersionList.stream()
+ .filter(s -> DateUtil.isSameDay(s.getCreateTime(), new Date()))
+ .toList();
+ indexCountVo.setVisitorsToday(todayResidentPersonlist.size());
+ }else {
+ indexCountVo.setVisitorsToday(0);
+ }
+ //查询设备各状态数量
+ List statusChartVos = new ArrayList<>();
+
+ indexCountVo.setStatusChartVoChartList(statusChartVos);
+
+ //查询设备总数
+ List machineList = machineMapper.selectList();
+ //查询设备各状态数量
+ List machineStatusChartVos = calculateMachineTypeDistribution(machineList);
+ statusChartVos.addAll(machineStatusChartVos);
+ indexCountVo.setStatusChartVoChartList(statusChartVos);
+ //查询各种工单状态
+
+
+ return indexCountVo;
+ }
+ // 计算工单类型分布
+ private List calculateWorkOrderTypeDistribution(List serviceWorkOrdersList) {
+ // 按 typeId 分组统计数量
+ Map workOrderTypeCounts = serviceWorkOrdersList.stream()
+ .collect(Collectors.groupingBy(ServiceWorkOrders::getType, Collectors.counting()));
+
+ List result = new ArrayList<>();
+
+ for (Map.Entry entry : workOrderTypeCounts.entrySet()) {
+ Long typeId = entry.getKey();
+ Integer count = entry.getValue().intValue();
+
+ // 查询类型名称
+ ServiceWorkOrdersType serviceWorkOrdersType = typesMapper.selectById(typeId);
+ String type = serviceWorkOrdersType != null ? serviceWorkOrdersType.getOrderTypeName() : "未知类型";
+
+ // 添加到结果中
+ result.add( IndexCountVo.PieChartVo.builder()
+ .type(type)
+ .quantity(count)
+ .build());
+ }
+
+ return result;
+ }
+
+ // 计算设备类型分布
+ private List calculateMachineTypeDistribution(List machinesList) {
+// // 按 typeId 分组统计数量
+// Map machineTypeCounts = machinesList.stream()
+// .collect(Collectors.groupingBy(Machine::getMachineTypeId, Collectors.counting()));
+ List result = new ArrayList<>();
+
+// for (Map.Entry entry : machineTypeCounts.entrySet()) {
+// Long typeId = entry.getKey();
+// Integer count = entry.getValue().intValue();
+//
+// // 查询类型名称
+// MachineType machineType = machineTypeMapper.selectById(typeId);
+// String type = machineType != null ? machineType.getMachineTypeName() : "未知类型";
+// // 添加到结果中
+// result.add(IndexCountVo.StatusChartVo.builder()
+// .type(type)
+// .quantity(count)
+// .build());
+// }
+
+ //计算状态分布
+ Map machineStateCounts = machinesList.stream()
+ .collect(Collectors.groupingBy(Machine::getState, Collectors.counting()));
+ for (Map.Entry entry : machineStateCounts.entrySet()) {
+ String state = entry.getKey();
+ Integer count = entry.getValue().intValue();
+ result.add(IndexCountVo.StatusChartVo.builder()
+ .state(state)
+ .quantity(count)
+ .build());
+ }
+
+ return result;
+ }
+}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPlanServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPlanServiceImpl.java
index 5bb675a3..968fae54 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPlanServiceImpl.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPlanServiceImpl.java
@@ -24,9 +24,8 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.property.domain.*;
import org.dromara.property.domain.bo.InspectionPlanBo;
import org.dromara.property.domain.bo.InspectionPlanStaffBo;
-import org.dromara.property.domain.bo.MachineMaintainPlanBo;
-import org.dromara.property.domain.bo.MachineMaintainPlanStaffBo;
import org.dromara.property.domain.vo.*;
+import org.dromara.property.domain.vo.residentVo.ResidentPersonVo;
import org.dromara.property.mapper.*;
import org.dromara.property.service.IInspectionPlanService;
import org.dromara.system.api.RemoteUserService;
@@ -55,8 +54,10 @@ public class InspectionPlanServiceImpl implements IInspectionPlanService {
private final ResidentPersonMapper residentPersonMapper;
private final InspectionPlanStaffMapper inspectionPlanStaffMapper;
private final InspectionRouteMapper inspectionRouteMapper;
+ private final InspectionPointMapper inspectionPointMapper;
private final InspectionRoutePointMapper inspectionRoutePointMapper;
private final InspectionTaskMapper inspectionTaskMapper;
+ private final InspectionTaskDetailMapper inspectionTaskDetailMapper;
@DubboReference
private RemoteUserService remoteUserService;
@@ -227,6 +228,7 @@ public class InspectionPlanServiceImpl implements IInspectionPlanService {
if (DateUtil.isIn(today, startDate, endDate) && inspectionDayList.contains(day)) {
InspectionTask task = new InspectionTask();
task.setInspectionPlanId(p.getId());
+ task.setTaskName(plan.getPlanName()+"的任务");
task.setTaskType(plan.getSignType());
task.setPlanInsTime(startDate + "~" + p.getEndTime());
task.setTenantId(plan.getTenantId());
@@ -268,6 +270,7 @@ public class InspectionPlanServiceImpl implements IInspectionPlanService {
task.setInspectionPlanId(p.getId());
task.setInspectionPlanId(p.getId());
task.setTaskType(plan.getSignType());
+ task.setTaskName(plan.getPlanName()+"的任务");
task.setPlanInsTime(startDate + "~" + p.getEndTime());
task.setTenantId(plan.getTenantId());
task.setStatus("0");
@@ -275,7 +278,6 @@ public class InspectionPlanServiceImpl implements IInspectionPlanService {
String userIds = inspectionPlanStaffVos.stream().map(vo -> vo.getUserId().toString()).collect(Collectors.joining(","));
String userNames = inspectionPlanStaffVos.stream().map(InspectionPlanStaffVo::getUserName).collect(Collectors.joining(","));
-
task.setPlanUserId(userIds);
task.setPlanUserName(userNames);
} else {
@@ -301,13 +303,28 @@ public class InspectionPlanServiceImpl implements IInspectionPlanService {
Assert.isTrue(CollUtil.isNotEmpty(inspectionRoutePointVoList), "该计划路线没有关联的巡检点");
//收集巡检点id
List pointIds = inspectionRoutePointVoList.stream().map(vo -> vo.getPointId()).toList();
- List inspectionRoutePointVos = inspectionRoutePointMapper.selectVoByIds(pointIds);
- Assert.isTrue(CollUtil.isNotEmpty(inspectionRoutePointVos), "未找到巡检点");
- inspectionRoutePointVos.forEach(vo -> {
+ List inspectionPointVos = inspectionPointMapper.selectVoByIds(pointIds);
+ Assert.isTrue(CollUtil.isNotEmpty(inspectionPointVos), "未找到巡检点");
+ //根据计划id查询计划巡检人
+ List inspectionPlanStaffVos = inspectionPlanStaffMapper.selectVoList(
+ new LambdaQueryWrapper()
+ .eq(InspectionPlanStaff::getInspectionPlanId, plan.getId())
+ );
+ //收集userId为以,分隔
+ String userIds = inspectionPlanStaffVos.stream().map(vo -> vo.getUserId().toString()).collect(Collectors.joining(","));
+ //查询用户姓名用,分割
+ // String nickname = remoteUserService.selectNicknameByIds(userIds);
+
+ inspectionPointVos.forEach(vo -> {
InspectionTaskDetail taskDetail = new InspectionTaskDetail();
taskDetail.setTaskId(task.getId());
- taskDetail.setRouteId(vo.getRouteId());
- taskDetail.setPointId(vo.getPointId());
+ taskDetail.setRouteId(plan.getInspectionRouteId());
+ taskDetail.setPointId(vo.getId());
+ taskDetail.setPlanId(plan.getId());
+ taskDetail.setInspectionState("0");
+ taskDetail.setSignType(plan.getSignType());
+ taskDetail.setInspectionLocation(vo.getInspectionLocation());
+ taskDetail.setPlanInspectionPerson(userIds);
// 分割
String[] parts = StrUtil.splitToArray(task.getPlanInsTime(), '~');
String dateTimeStr1 = parts[0]; // 完整时间
@@ -321,6 +338,9 @@ public class InspectionPlanServiceImpl implements IInspectionPlanService {
Date endDate = DateUtil.parse(dateTimeStr2, DatePattern.NORM_DATETIME_FORMAT);
taskDetail.setPointStartTime(startDate);
taskDetail.setPointEndTime(endDate);
+ taskDetail.setActualSignState("0");
+ taskDetail.setInspectionLocation(vo.getInspectionLocation());
+ inspectionTaskDetailMapper.insert(taskDetail);
});
}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPointServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPointServiceImpl.java
index b47d781c..e4dd9d86 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPointServiceImpl.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPointServiceImpl.java
@@ -11,13 +11,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.dromara.property.domain.InspectionPlanStaff;
import org.dromara.property.domain.InspectionPoint;
import org.dromara.property.domain.bo.InspectionPointBo;
import org.dromara.property.domain.vo.InspectionItemVo;
-import org.dromara.property.domain.vo.InspectionPlanVo;
import org.dromara.property.domain.vo.InspectionPointVo;
-import org.dromara.property.domain.vo.mobile.MInspectionPointVo;
import org.dromara.property.mapper.InspectionItemMapper;
import org.dromara.property.mapper.InspectionPlanMapper;
import org.dromara.property.mapper.InspectionPointMapper;
@@ -25,7 +22,6 @@ import org.dromara.property.service.IInspectionPointService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Collection;
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionTaskDetailServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionTaskDetailServiceImpl.java
index cebbe748..04423e19 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionTaskDetailServiceImpl.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionTaskDetailServiceImpl.java
@@ -2,7 +2,11 @@ package org.dromara.property.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
+import org.apache.commons.beanutils.BeanMap;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -12,20 +16,28 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.dromara.property.domain.vo.InspectionPointVo;
-import org.dromara.property.domain.vo.mobile.MInspectionPointVo;
-import org.dromara.property.mapper.InspectionPointMapper;
+import org.dromara.common.redis.utils.RedisUtils;
+import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.property.domain.*;
+import org.dromara.property.domain.bo.ServiceWorkOrdersTypeBo;
+import org.dromara.property.domain.bo.mobile.InspectionTaskDetailToOrderBo;
+import org.dromara.property.domain.enums.OrderReportingTypeEnum;
+import org.dromara.property.domain.enums.OrderTypeOperationEnum;
+import org.dromara.property.domain.enums.WorkOrderStatusEnum;
+import org.dromara.property.domain.vo.*;
+import org.dromara.property.domain.vo.mobile.MInspectionTaskDetailVo;
+import org.dromara.property.domain.vo.mobile.MServiceWorkOrdersRecordVo;
+import org.dromara.property.domain.vo.mobile.MServiceWorkOrdersVo;
+import org.dromara.property.mapper.*;
+import org.dromara.property.mapper.attendanceMapper.AttendanceUserGroupMapper;
+import org.dromara.system.api.model.LoginUser;
import org.springframework.stereotype.Service;
import org.dromara.property.domain.bo.InspectionTaskDetailBo;
-import org.dromara.property.domain.vo.InspectionTaskDetailVo;
-import org.dromara.property.domain.InspectionTaskDetail;
-import org.dromara.property.mapper.InspectionTaskDetailMapper;
import org.dromara.property.service.IInspectionTaskDetailService;
+import org.springframework.transaction.annotation.Transactional;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Collection;
+import java.time.LocalDate;
+import java.util.*;
import java.util.stream.Collectors;
/**
@@ -41,6 +53,13 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer
private final InspectionTaskDetailMapper baseMapper;
private final InspectionPointMapper inspectionPointMapper;
+ private final InspectionPlanMapper inspectionPlanMapper;
+ private final InspectionRouteMapper inspectionRouteMapper;
+ private final InspectionTaskMapper inspectionTaskMapper;
+ private final ServiceWorkOrdersTypeMapper typesMapper;
+ private final ServiceWorkOrdersMapper serviceWorkOrdersMapper;
+ private final ServiceWorkOrdersRecordMapper workOrdersRecordMapper;
+ private final AttendanceUserGroupMapper attendanceUserGroupMapper;
/**
* 查询巡检明细
@@ -49,7 +68,7 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer
* @return 巡检明细
*/
@Override
- public InspectionTaskDetailVo queryById(Long id){
+ public InspectionTaskDetailVo queryById(Long id) {
return baseMapper.selectVoById(id);
}
@@ -64,9 +83,38 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer
public TableDataInfo queryPageList(InspectionTaskDetailBo bo, PageQuery pageQuery) {
LambdaQueryWrapper lqw = buildQueryWrapper(bo);
Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ if (CollUtil.isNotEmpty(result.getRecords())) {
+// //收集任务id为list
+// List taskIds = result.getRecords().stream().map(InspectionTaskDetailVo::getTaskId).toList();
+// //收集任务为map id和名称
+// Map taskNameMap = inspectionTaskMapper.selectVoByIds(taskIds).stream()
+// .collect(Collectors.toMap(InspectionTaskVo::getId, InspectionTaskVo::getPlanName));
+// //收集路线id为list
+// List routeIds = result.getRecords().stream().map(InspectionTaskDetailVo::getRouteId).toList();
+// //收集任务为map id和名称
+// Map routeNameMap = inspectionRouteMapper.selectVoByIds(routeIds).stream()
+// .collect(Collectors.toMap(InspectionRouteVo::getId, InspectionRouteVo::getRouteName));
+// //收集路线列表
+// List inspectionRoutes = inspectionRouteMapper.selectVoByIds(routeIds);
+// //收集计划id为list
+// List planIds = result.getRecords().stream().map(InspectionTaskDetailVo::getPlanId).toList();
+// //收集计划列表
+// Map planNameMap = inspectionPlanMapper.selectVoByIds(routeIds).stream()
+// .collect(Collectors.toMap(InspectionPlanVo::getId, InspectionPlanVo::getPlanName));
+// //巡检点id为list
+// List pointIds = result.getRecords().stream().map(InspectionTaskDetailVo::getPointId).toList();
+ result.getRecords().stream().forEach(vo -> {
+ disposeData(vo);
+ });
+ }
+
return TableDataInfo.build(result);
}
+ private void disposeData(InspectionTaskDetailVo vo) {
+
+ }
+
/**
* 查询符合条件的巡检明细列表
*
@@ -110,6 +158,7 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer
* @return 是否新增成功
*/
@Override
+ @Transactional(rollbackFor = Exception.class)
public Boolean insertByBo(InspectionTaskDetailBo bo) {
InspectionTaskDetail add = MapstructUtils.convert(bo, InspectionTaskDetail.class);
validEntityBeforeSave(add);
@@ -127,6 +176,7 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer
* @return 是否修改成功
*/
@Override
+ @Transactional(rollbackFor = Exception.class)
public Boolean updateByBo(InspectionTaskDetailBo bo) {
InspectionTaskDetail update = MapstructUtils.convert(bo, InspectionTaskDetail.class);
validEntityBeforeSave(update);
@@ -136,7 +186,7 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer
/**
* 保存前的数据校验
*/
- private void validEntityBeforeSave(InspectionTaskDetail entity){
+ private void validEntityBeforeSave(InspectionTaskDetail entity) {
//TODO 做一些数据校验,如唯一约束
}
@@ -148,13 +198,15 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer
* @return 是否删除成功
*/
@Override
+ @Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
- if(isValid){
+ if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
//移动端
+
/**
* APP端查询巡检明细列表
*
@@ -163,25 +215,25 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer
* @return
*/
@Override
- public TableDataInfo mQueryPageList(InspectionTaskDetailBo bo, PageQuery pageQuery) {
+ public TableDataInfo mQueryPageList(InspectionTaskDetailBo bo, PageQuery pageQuery) {
LambdaQueryWrapper lqw = buildQueryWrapper(bo);
Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
// 转换 VO 类型
- List mInspectionTaskDetailVo=new ArrayList<>();
+ List mInspectionTaskDetailVo = new ArrayList<>();
// 转换并设置 typeName
- if(CollUtil.isNotEmpty(result.getRecords())){
+ if (CollUtil.isNotEmpty(result.getRecords())) {
//收集巡检点id
List pointIdList = result.getRecords().stream().map(InspectionTaskDetailVo::getPointId).collect(Collectors.toList());
- //查询巡检点转成巡检点名称转成map id->名称
+ //查询巡检点转成巡检点名称转成map id->名称
Map pointNameMap = inspectionPointMapper.selectVoByIds(pointIdList).stream().collect(Collectors.toMap(InspectionPointVo::getId, InspectionPointVo::getPointName));
mInspectionTaskDetailVo = result.getRecords().stream().map(vo -> {
- MInspectionPointVo mVo = BeanUtil.copyProperties(vo, MInspectionPointVo.class);
- dataProcessing(mVo,pointNameMap);
+ MInspectionTaskDetailVo mVo = BeanUtil.copyProperties(vo, MInspectionTaskDetailVo.class);
+ dataProcessing(mVo, pointNameMap);
return mVo;
}).collect(Collectors.toList());
}
// 构建分页结果
- Page pageResult = new Page<>();
+ Page pageResult = new Page<>();
pageResult.setRecords(mInspectionTaskDetailVo);
pageResult.setTotal(result.getTotal());
pageResult.setCurrent(result.getCurrent());
@@ -190,11 +242,165 @@ public class InspectionTaskDetailServiceImpl implements IInspectionTaskDetailSer
}
/**
+ * 处理数据
*
* @param mInspectionTaskDetailVo
* @param pointNameMap
*/
- private void dataProcessing(MInspectionPointVo mInspectionTaskDetailVo, Map pointNameMap){
- mInspectionTaskDetailVo.setPointName( ObjectUtil.defaultIfNull(pointNameMap.get(mInspectionTaskDetailVo.getPointId()), "未知点位"));
+ private void dataProcessing(MInspectionTaskDetailVo mInspectionTaskDetailVo, Map pointNameMap) {
+ mInspectionTaskDetailVo.setPointName(ObjectUtil.defaultIfNull(pointNameMap.get(mInspectionTaskDetailVo.getPointId()), "未知点位"));
+ //查询工单
+ if(ObjectUtil.isNotEmpty(mInspectionTaskDetailVo.getOrderId())){
+ ServiceWorkOrdersVo serviceWorkOrdersVo = serviceWorkOrdersMapper.selectVoById(mInspectionTaskDetailVo.getOrderId());
+ if(ObjectUtil.isNotEmpty(serviceWorkOrdersVo)){
+ List serviceWorkOrdersRecordVos = workOrdersRecordMapper.selectVoList(
+ new LambdaQueryWrapper<>(ServiceWorkOrdersRecord.class).eq(ServiceWorkOrdersRecord::getOrderId, serviceWorkOrdersVo.getId())
+ );
+ List mServiceWorkOrdersRecordVos = BeanUtil.copyToList(serviceWorkOrdersRecordVos, MServiceWorkOrdersRecordVo.class);
+ serviceWorkOrdersVo.setRecordVoList(mServiceWorkOrdersRecordVos);
+ mInspectionTaskDetailVo.setMServiceWorkOrdersVo(ObjectUtil.isNotEmpty( serviceWorkOrdersVo)? BeanUtil.copyProperties(serviceWorkOrdersVo, MServiceWorkOrdersVo.class):null);
+
+ }
+ }
+ }
+
+ /**
+ * 巡检明细签到
+ *
+ * @param bo
+ * @return
+ */
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Boolean signIn(InspectionTaskDetailBo bo) {
+ //查询巡检明细
+ InspectionTaskDetail inspectionTaskDetail = baseMapper.selectById(bo.getId());
+ String planInspectionPerson = inspectionTaskDetail.getPlanInspectionPerson();
+
+ // 将逗号分隔的字符串转换为Long类型的List
+ List planInspectionPersonIds = Collections.emptyList();
+ if (StringUtils.isNotBlank(planInspectionPerson)) {
+ planInspectionPersonIds = Arrays.stream(planInspectionPerson.split(","))
+ .map(String::trim)
+ .filter(StringUtils::isNotBlank)
+ .map(Long::valueOf)
+ .collect(Collectors.toList());
+ }
+ Assert.isTrue(inspectionTaskDetail.getActualSignState().equals("0"), "该巡检点已签到,请勿重复签到");
+ bo.setPointStartTime(new Date());
+ bo.setActualSignState("1");
+ //当前登录用户id
+ LoginUser loginUser = LoginHelper.getLoginUser();
+ Assert.isTrue(planInspectionPersonIds.contains(loginUser.getUserId()), "当前签到人不在计划巡检人列表内");
+ bo.setActualInspectionPerson(loginUser.getUserId().toString());
+ InspectionTaskDetail update = MapstructUtils.convert(bo, InspectionTaskDetail.class);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 提交巡检明细
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Boolean submit(InspectionTaskDetailBo bo) {
+ //查询巡检明细
+ InspectionTaskDetail inspectionTaskDetail = baseMapper.selectById(bo.getId());
+ Assert.isTrue(inspectionTaskDetail.getInspectionState().equals("0"), "该巡检点已巡检,请勿重复提交");
+ bo.setInspectionState("1");
+ bo.setPointEndTime(new Date());
+ bo.setInspectionState("1");
+ InspectionTaskDetail update = MapstructUtils.convert(bo, InspectionTaskDetail.class);
+ return baseMapper.updateById(update) > 0;
+ }
+ /**
+ * 巡检提报工单
+ * @param bo
+ * @return
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Boolean reportedOrder(InspectionTaskDetailToOrderBo bo) {
+ //查询工单类型
+ ServiceWorkOrdersType serviceWorkOrdersType = typesMapper.selectById(bo.getOrderTypeId());
+ ServiceWorkOrders serviceWorkOrders = new ServiceWorkOrders();
+ serviceWorkOrders.setReportingType(OrderReportingTypeEnum.PHONE_REPORT.getValue());
+ LoginUser user = LoginHelper.getLoginUser();
+ serviceWorkOrders.setOrderNo("GD" + IdUtil.getSnowflakeNextIdStr());
+ serviceWorkOrders.setOrderName("巡检"+bo.getPointId());
+ serviceWorkOrders.setStatus(WorkOrderStatusEnum.CREATE_ORDER.getValue());
+ serviceWorkOrders.setInitiatorPeople(user.getNickname());
+ serviceWorkOrders.setProcessingWeight(serviceWorkOrdersType.getProcessingWeight());
+ serviceWorkOrders.setType(serviceWorkOrdersType.getId());
+ serviceWorkOrders.setLocation(bo.getInspectionLocation());
+ boolean flag = serviceWorkOrdersMapper.insert(serviceWorkOrders) > 0;
+ if (flag) {
+ bo.setId(serviceWorkOrders.getId());
+ ServiceWorkOrdersRecord serviceWorkOrdersRecord = new ServiceWorkOrdersRecord();
+ serviceWorkOrdersRecord.setOrderId(serviceWorkOrders.getId());
+ serviceWorkOrdersRecord.setStatus(serviceWorkOrders.getStatus());
+ //serviceWorkOrdersRecord.setHandler(add.getHandler());
+ boolean flags = workOrdersRecordMapper.insert(serviceWorkOrdersRecord) > 0;
+ if (flags) {
+ if (serviceWorkOrdersType.getOperationMode().equals(OrderTypeOperationEnum.AUTOMATE_DISPATCH.getValue())) {
+ handleServiceWorkOrder(serviceWorkOrders,serviceWorkOrdersType,bo);
+ }
+ }
+ }
+ return flag;
+ }
+ //自动派单
+ private void handleServiceWorkOrder(ServiceWorkOrders serviceWorkOrders,ServiceWorkOrdersType serviceWorkOrdersType,InspectionTaskDetailToOrderBo bo) {
+ LocalDate today = LocalDate.now();
+ // 1. 获取今日排班人员(优先查缓存,未命中则查询数据库并缓存)
+ List attendanceUserGroups = RedisUtils.getCacheList(DateUtil.today());
+ List attendanceUserGroupList = attendanceUserGroupMapper.selectList(
+ new LambdaQueryWrapper()
+ .le(AttendanceUserGroup::getStartDate, today)
+ .ge(AttendanceUserGroup::getEndDate, today)
+ .eq(AttendanceUserGroup::getDeptId, serviceWorkOrdersType.getDeptId())
+ .orderByAsc(AttendanceUserGroup::getStartDate)
+ );
+ if (CollUtil.isEmpty(attendanceUserGroups)|| attendanceUserGroups.size() != attendanceUserGroupList.size()) {
+ attendanceUserGroups=attendanceUserGroupList;
+ Assert.isTrue(CollUtil.isNotEmpty(attendanceUserGroups), "暂无排班人员");
+ // 缓存当天排班数据(假设当天不会变)
+ RedisUtils.setCacheList(DateUtil.today(), attendanceUserGroups);
+ }
+
+ // 2. 获取并更新轮询索引(原子性很重要)
+ int currentIndex;
+ Integer lastScheduleId = RedisUtils.getCacheObject(DateUtil.today() + "LastScheduleId");
+ if (lastScheduleId == null || lastScheduleId < 0 || lastScheduleId >= attendanceUserGroups.size()) {
+ currentIndex = 0; // 越界或未设置,重置为0
+ } else {
+ currentIndex = lastScheduleId + 1;
+ if (currentIndex >= attendanceUserGroups.size()) {
+ currentIndex = 0; // 循环轮询
+ }
+ }
+ RedisUtils.setCacheObject(DateUtil.today() + "LastScheduleId", currentIndex);
+ // 3. 分配处理人
+ AttendanceUserGroup assignedGroup = attendanceUserGroups.get(currentIndex);
+ Long employeeId = assignedGroup.getEmployeeId();
+
+ serviceWorkOrders.setHandler(employeeId);
+ serviceWorkOrders.setStatus(WorkOrderStatusEnum.DISPATCHED.getValue());
+
+ // 4. 插入记录
+ ServiceWorkOrdersRecord record = new ServiceWorkOrdersRecord();
+ record.setOrderId(serviceWorkOrders.getId());
+ record.setHandler(employeeId);
+ record.setStatus(WorkOrderStatusEnum.DISPATCHED.getValue());
+ workOrdersRecordMapper.insert(record);
+
+ // 5. 更新工单
+ serviceWorkOrders.setDispatchTime(new Date());
+ serviceWorkOrdersMapper.updateById(serviceWorkOrders);
+ //修改巡检明细接口
+ InspectionTaskDetail inspectionTaskDetail = baseMapper.selectById(bo.getId());
+ inspectionTaskDetail.setOrderId(serviceWorkOrders.getId());
+ baseMapper.updateById(inspectionTaskDetail);
+ log.info("成功派单,工单号:{}", serviceWorkOrders.getOrderNo());
}
}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MachineServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MachineServiceImpl.java
index 4fc8bf35..6f13abb2 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MachineServiceImpl.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MachineServiceImpl.java
@@ -11,9 +11,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.dromara.property.domain.MachineMaintainTask;
-import org.dromara.property.domain.MachineType;
import org.dromara.property.domain.vo.*;
+import org.dromara.property.domain.vo.residentVo.ResidentPersonVo;
import org.dromara.property.mapper.MachineLocationMapper;
import org.dromara.property.mapper.MachineTypeMapper;
import org.dromara.property.mapper.ResidentPersonMapper;
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetBookingServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetBookingServiceImpl.java
index ff54ba26..40478219 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetBookingServiceImpl.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetBookingServiceImpl.java
@@ -14,15 +14,15 @@ 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.property.domain.MeetAttach;
import org.dromara.property.domain.MeetAttachOrder;
import org.dromara.property.domain.MeetBooking;
import org.dromara.property.domain.bo.MeetBookingBo;
import org.dromara.property.domain.vo.*;
+import org.dromara.property.domain.vo.residentVo.ResidentPersonVo;
+import org.dromara.property.domain.vo.residentVo.ResidentUnitVo;
import org.dromara.property.mapper.*;
import org.dromara.property.service.IMeetBookingService;
import org.dromara.system.api.RemoteUserService;
-import org.dromara.system.api.domain.vo.RemoteUserVo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetParticipantsServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetParticipantsServiceImpl.java
new file mode 100644
index 00000000..3015413a
--- /dev/null
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetParticipantsServiceImpl.java
@@ -0,0 +1,155 @@
+package org.dromara.property.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
+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 lombok.extern.slf4j.Slf4j;
+import org.dromara.property.domain.vo.MeetBookingVo;
+import org.dromara.property.domain.vo.residentVo.ResidentPersonVo;
+import org.dromara.property.domain.vo.residentVo.ResidentUnitVo;
+import org.dromara.property.mapper.MeetBookingMapper;
+import org.dromara.property.mapper.ResidentPersonMapper;
+import org.dromara.property.mapper.ResidentUnitMapper;
+import org.springframework.stereotype.Service;
+import org.dromara.property.domain.bo.MeetParticipantsBo;
+import org.dromara.property.domain.vo.MeetParticipantsVo;
+import org.dromara.property.domain.MeetParticipants;
+import org.dromara.property.mapper.MeetParticipantsMapper;
+import org.dromara.property.service.IMeetParticipantsService;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 会议室参会记录Service业务层处理
+ *
+ * @author mocheng
+ * @date 2025-09-03
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class MeetParticipantsServiceImpl implements IMeetParticipantsService {
+
+ private final MeetParticipantsMapper baseMapper;
+ private final MeetBookingMapper meetBookingMapper;
+ private final ResidentPersonMapper residentPersonMapper;
+ private final ResidentUnitMapper residentUnitMapper;
+
+
+ /**
+ * 查询会议室参会记录
+ *
+ * @param id 主键
+ * @return 会议室参会记录
+ */
+ @Override
+ public MeetParticipantsVo queryById(Long id) {
+ MeetParticipantsVo meetParticipantsVo = baseMapper.selectVoById(id);
+ ResidentPersonVo residentPersonVo = residentPersonMapper.selectVoById(meetParticipantsVo.getResidentPersonId());
+ MeetBookingVo meetBookingVo = meetBookingMapper.selectVoById(meetParticipantsVo.getMeetBookId());
+ meetParticipantsVo.setResidentPersonVo(ObjectUtil.isNotEmpty(residentPersonVo)?residentPersonVo:null);
+ meetParticipantsVo.setMeetBookingVo(ObjectUtil.isNotEmpty(meetBookingVo)?meetBookingVo:null);
+ return meetParticipantsVo;
+ }
+
+ /**
+ * 分页查询会议室参会记录列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 会议室参会记录分页列表
+ */
+ @Override
+ public TableDataInfo queryPageList(MeetParticipantsBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ if (CollUtil.isNotEmpty(result.getRecords())) {
+ //将会议室id和入驻人员id收集
+ List meetIds = result.getRecords().stream().map(MeetParticipantsVo::getMeetBookId).distinct().toList();
+ List residentPersonIds = result.getRecords().stream().map(MeetParticipantsVo::getResidentPersonId).distinct().toList();
+ List residentPersonVos = residentPersonMapper.selectVoByIds(residentPersonIds);
+ List meetBookingVos = meetBookingMapper.selectVoByIds(meetIds);
+ handData(residentPersonVos, meetBookingVos);
+ //处理数据
+ result.getRecords().forEach(s -> {
+ s.setMeetBookingVo(meetBookingVos.stream().filter(vo -> vo.getId().equals(s.getMeetBookId())).findFirst().orElse(null));
+ s.setResidentPersonVo(residentPersonVos.stream().filter(vo -> vo.getId().equals(s.getResidentPersonId())).findFirst().orElse(null));
+ });
+ }
+ return TableDataInfo.build(result);
+ }
+/**
+ * 处理数据
+ */
+ private void handData(List residentPersonVos ,List meetBookingVos){
+ List residentUnitVolist = residentUnitMapper.selectVoList();
+ List residentPersonVoList = residentPersonMapper.selectVoList();
+ meetBookingVos.stream().forEach(s -> {
+ if (CollUtil.isNotEmpty(residentUnitVolist)) {
+ ResidentUnitVo residentUnitVo = residentUnitVolist.stream()
+ .filter(vo -> vo.getId() != null && String.valueOf(vo.getId()).equals(s.getUnit())).findFirst().orElse(null);
+ s.setUnitName(ObjectUtil.isNotEmpty(residentUnitVo) ? residentUnitVo.getName() : null);
+ }
+ if (CollUtil.isNotEmpty(residentPersonVoList)) {
+ ResidentPersonVo residentPersonVo = residentPersonVoList.stream()
+ .filter(vo -> vo.getId() != null && String.valueOf(vo.getId()).equals(s.getPerson())).findFirst().orElse(null);
+ s.setPersonName(ObjectUtil.isNotEmpty(residentPersonVo) ? residentPersonVo.getUserName() : null);
+ s.setPhone(ObjectUtil.isNotEmpty(residentPersonVo) ? residentPersonVo.getPhone() : null);
+ }
+ });
+ }
+ /**
+ * 查询符合条件的会议室参会记录列表
+ *
+ * @param bo 查询条件
+ * @return 会议室参会记录列表
+ */
+ @Override
+ public List queryList(MeetParticipantsBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(MeetParticipantsBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.orderByAsc(MeetParticipants::getId);
+ lqw.eq(bo.getMeetBookId() != null, MeetParticipants::getMeetBookId, bo.getMeetBookId());
+ lqw.eq(bo.getResidentPersonId() != null, MeetParticipants::getResidentPersonId, bo.getResidentPersonId());
+ lqw.eq(StringUtils.isNotBlank(bo.getSearchValue()), MeetParticipants::getSearchValue, bo.getSearchValue());
+ return lqw;
+ }
+
+ /**
+ * 新增会议室参会记录
+ *
+ * @param bo 会议室参会记录
+ * @return 是否新增成功
+ */
+ @Override
+ public Boolean insertByBo(MeetParticipantsBo bo) {
+ MeetParticipants add = MapstructUtils.convert(bo, MeetParticipants.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setId(add.getId());
+ }
+ return flag;
+ }
+
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(MeetParticipants entity) {
+ //TODO 做一些数据校验,如唯一约束
+ }
+}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetServiceImpl.java
index 9cec2e91..a70d40a1 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetServiceImpl.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetServiceImpl.java
@@ -1,10 +1,8 @@
package org.dromara.property.service.impl;
-import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import org.apache.dubbo.config.annotation.DubboReference;
-import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -16,8 +14,6 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.property.domain.MeetAttach;
import org.dromara.property.domain.MeetBooking;
-import org.dromara.property.domain.vo.MeetAttachVo;
-import org.dromara.property.domain.vo.ResidentPersonVo;
import org.dromara.property.mapper.*;
import org.dromara.system.api.RemoteUserService;
import org.dromara.system.api.domain.vo.RemoteUserVo;
@@ -34,7 +30,6 @@ import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
-import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServerBookingServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServerBookingServiceImpl.java
index 441baa60..14919434 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServerBookingServiceImpl.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServerBookingServiceImpl.java
@@ -9,7 +9,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.dromara.property.domain.ResidentUnit;
import org.springframework.stereotype.Service;
import org.dromara.property.domain.bo.ServerBookingBo;
import org.dromara.property.domain.vo.ServerBookingVo;
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbBuildingServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbBuildingServiceImpl.java
index ab046057..20b85250 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbBuildingServiceImpl.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbBuildingServiceImpl.java
@@ -23,6 +23,7 @@ import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.List;
import java.util.Map;
+import java.util.stream.Collectors;
/**
* 建筑Service业务层处理
@@ -60,6 +61,13 @@ public class TbBuildingServiceImpl implements ITbBuildingService {
public TableDataInfo queryPageList(TbBuildingBo bo, PageQuery pageQuery) {
LambdaQueryWrapper lqw = buildQueryWrapper(bo);
Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ //收集社区id
+ List communityIds = result.getRecords().stream().map(TbBuildingVo::getCommunityId).toList();
+ //查询社区名称map
+ Map communityMap = communityMapper.selectVoByIds(communityIds).stream().collect(Collectors.toMap(TbCommunityVo::getId, TbCommunityVo::getCommunityName));
+ result.getRecords().forEach(s->{
+ s.setCommunityText(communityMap.get(s.getCommunityId()));
+ });
return TableDataInfo.build(result);
}
@@ -87,7 +95,7 @@ public class TbBuildingServiceImpl implements ITbBuildingService {
lqw.eq(bo.getBuildType() != null, TbBuilding::getBuildType, bo.getBuildType());
lqw.eq(bo.getElevatorCount() != null, TbBuilding::getElevatorCount, bo.getElevatorCount());
lqw.eq(bo.getCompletionDate() != null, TbBuilding::getCompletionDate, bo.getCompletionDate());
- lqw.eq(StringUtils.isNotBlank(bo.getAddr()), TbBuilding::getAddr, bo.getAddr());
+// lqw.eq(StringUtils.isNotBlank(bo.getAddr()), TbBuilding::getAddr, bo.getAddr());
lqw.eq(StringUtils.isNotBlank(bo.getLon()), TbBuilding::getLon, bo.getLon());
lqw.eq(StringUtils.isNotBlank(bo.getLat()), TbBuilding::getLat, bo.getLat());
lqw.eq(bo.getSort() != null, TbBuilding::getSort, bo.getSort());
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbCommunityServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbCommunityServiceImpl.java
index 6c272ef2..ab4cc5a7 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbCommunityServiceImpl.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbCommunityServiceImpl.java
@@ -174,7 +174,7 @@ public class TbCommunityServiceImpl implements ITbCommunityService {
lqw.orderByDesc(TbCommunity::getCreateTime)
.orderByDesc(TbCommunity::getUpdateTime);
lqw.like(StringUtils.isNotBlank(bo.getCommunityName()), TbCommunity::getCommunityName, bo.getCommunityName());
- lqw.eq(bo.getCommunityType() != null, TbCommunity::getCommunityType, bo.getCommunityType());
+// lqw.eq(bo.getCommunityType() != null, TbCommunity::getCommunityType, bo.getCommunityType());
lqw.eq(StringUtils.isNotBlank(bo.getProvince()), TbCommunity::getProvince, bo.getProvince());
lqw.eq(StringUtils.isNotBlank(bo.getCity()), TbCommunity::getCity, bo.getCity());
lqw.eq(StringUtils.isNotBlank(bo.getDistrict()), TbCommunity::getDistrict, bo.getDistrict());
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbFloorServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbFloorServiceImpl.java
index 656c5529..eef9de46 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbFloorServiceImpl.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbFloorServiceImpl.java
@@ -1,5 +1,7 @@
package org.dromara.property.service.impl;
+import aj.org.objectweb.asm.Handle;
+import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -10,12 +12,18 @@ 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.property.domain.TbCommunity;
import org.dromara.property.domain.TbE8Config;
import org.dromara.property.domain.TbFloor;
import org.dromara.property.domain.bo.TbFloorBo;
+import org.dromara.property.domain.vo.InspectionPointVo;
import org.dromara.property.domain.vo.TbBuildingVo;
+import org.dromara.property.domain.vo.TbCommunityVo;
import org.dromara.property.domain.vo.TbFloorVo;
+import org.dromara.property.mapper.TbBuildingMapper;
+import org.dromara.property.mapper.TbCommunityMapper;
import org.dromara.property.mapper.TbFloorMapper;
+import org.dromara.property.mapper.TbRoomMapper;
import org.dromara.property.service.ITbBuildingService;
import org.dromara.property.service.ITbFloorService;
import org.dromara.property.service.ITbUnitService;
@@ -23,8 +31,10 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
+import java.util.stream.Collectors;
/**
* 楼层Service业务层处理
@@ -40,6 +50,8 @@ public class TbFloorServiceImpl implements ITbFloorService {
private final TbFloorMapper baseMapper;
private final ITbUnitService tbUnitService;
private final ITbBuildingService iTbBuildingService;
+ private final TbBuildingMapper tbBuildingMapper;
+ private final TbCommunityMapper tbCommunityMapper;
/**
* 查询楼层
@@ -63,9 +75,29 @@ public class TbFloorServiceImpl implements ITbFloorService {
public TableDataInfo queryPageList(TbFloorBo bo, PageQuery pageQuery) {
LambdaQueryWrapper lqw = buildQueryWrapper(bo);
Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ if (CollUtil.isNotEmpty(result.getRecords())) {
+ //收集园区id
+ List communityIds = result.getRecords().stream().map(TbFloorVo::getCommunityId).toList();
+ //查询园区为map
+ Map pointNameMap = tbCommunityMapper.selectVoByIds(communityIds).stream().collect(Collectors.toMap(TbCommunityVo::getId, TbCommunityVo::getCommunityName));
+
+
+ //收集建筑id
+ List buildingIds = result.getRecords().stream().map(TbFloorVo::getBuildingId).toList();
+ //查询建筑为map
+ Map buildingNameMap = tbBuildingMapper.selectVoByIds(buildingIds).stream().collect(Collectors.toMap(TbBuildingVo::getId, TbBuildingVo::getBuildingName));
+ result.getRecords().stream().forEach(s -> {
+ handleData(s, pointNameMap, buildingNameMap);
+ });
+ }
return TableDataInfo.build(result);
}
+ private void handleData(TbFloorVo floorVo, Map pointNameMap, Map buildingNameMap) {
+ floorVo.setCommunityText(pointNameMap.get(floorVo.getCommunityId()));
+ floorVo.setBuildingText(buildingNameMap.get(floorVo.getBuildingId()));
+ }
+
/**
* 查询符合条件的楼层列表
*
@@ -84,8 +116,8 @@ public class TbFloorServiceImpl implements ITbFloorService {
lqw.orderByDesc(TbFloor::getCreateTime)
.orderByDesc(TbFloor::getUpdateTime);
lqw.like(StringUtils.isNotBlank(bo.getFloorName()), TbFloor::getFloorName, bo.getFloorName());
- lqw.eq(bo.getFloorNumber() != null, TbFloor::getFloorNumber, bo.getFloorNumber());
- lqw.eq(bo.getBuildingId()!= null, TbFloor::getUnitId, bo.getBuildingId());
+// lqw.eq(bo.getFloorNumber() != null, TbFloor::getFloorNumber, bo.getFloorNumber());
+ lqw.eq(bo.getBuildingId() != null, TbFloor::getUnitId, bo.getBuildingId());
lqw.eq(bo.getFloorType() != null, TbFloor::getFloorType, bo.getFloorType());
lqw.eq(bo.getRoomCount() != null, TbFloor::getRoomCount, bo.getRoomCount());
lqw.eq(bo.getFloorHeight() != null, TbFloor::getFloorHeight, bo.getFloorHeight());
@@ -107,10 +139,10 @@ public class TbFloorServiceImpl implements ITbFloorService {
// 验证同一单元楼层是否已经存在
LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
- lqw.eq(TbFloor::getBuildingId, bo.getBuildingId())
- .eq(TbFloor::getFloorNumber, bo.getFloorNumber());
+ lqw.eq(TbFloor::getBuildingId, bo.getBuildingId());
+// .eq(TbFloor::getFloorNumber, bo.getFloorNumber());
boolean numberExists = baseMapper.selectCount(lqw) > 0;
- Assert.isFalse(numberExists, "单元:{},建筑:{}已存在。", bo.getBuildingId(), bo.getFloorNumber());
+ Assert.isFalse(numberExists, "建筑:{}已存在。", bo.getBuildingId());
TbFloor add = MapstructUtils.convert(bo, TbFloor.class);
add.setCommunityId(tbBuildingVo.getCommunityId());
@@ -170,8 +202,8 @@ public class TbFloorServiceImpl implements ITbFloorService {
@Override
public List queryByBuildingId(Long buildingId) {
LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
- lqw.eq(TbFloor::getBuildingId, buildingId)
- .orderByAsc(TbFloor::getFloorNumber);
+ lqw.eq(TbFloor::getBuildingId, buildingId);
+// .orderByAsc(TbFloor::getFloorNumber);
return baseMapper.selectVoList(lqw);
}
}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbRoomServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbRoomServiceImpl.java
index 34a59e1c..c7b2de9e 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbRoomServiceImpl.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbRoomServiceImpl.java
@@ -1,6 +1,8 @@
package org.dromara.property.service.impl;
+import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -11,10 +13,15 @@ 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.property.domain.TbRoom;
-import org.dromara.property.domain.TbRoomBooking;
import org.dromara.property.domain.bo.TbRoomBo;
+import org.dromara.property.domain.entity.resident.ResidentUnit;
+import org.dromara.property.domain.vo.TbBuildingVo;
+import org.dromara.property.domain.vo.TbCommunityVo;
import org.dromara.property.domain.vo.TbFloorVo;
import org.dromara.property.domain.vo.TbRoomVo;
+import org.dromara.property.mapper.ResidentUnitMapper;
+import org.dromara.property.mapper.TbBuildingMapper;
+import org.dromara.property.mapper.TbCommunityMapper;
import org.dromara.property.mapper.TbRoomMapper;
import org.dromara.property.service.ITbFloorService;
import org.dromara.property.service.ITbRoomService;
@@ -37,6 +44,9 @@ public class TbRoomServiceImpl implements ITbRoomService {
private final TbRoomMapper baseMapper;
private final ITbFloorService tbFloorService;
+ private final TbBuildingMapper tbBuildingMapper;
+ private final TbCommunityMapper tbCommunityMapper;
+ private final ResidentUnitMapper residentUnitMapper;
/**
* 查询房间信息
@@ -46,7 +56,24 @@ public class TbRoomServiceImpl implements ITbRoomService {
*/
@Override
public TbRoomVo queryById(Long id) {
- return baseMapper.selectVoById(id);
+ TbRoomVo tbRoomVo = baseMapper.selectVoById(id);
+ //查询园区id
+ TbCommunityVo tbCommunityVo = tbCommunityMapper.selectVoById(tbRoomVo.getCommunityId());
+ tbRoomVo.setCommunityText(ObjectUtil.isNotEmpty(tbCommunityVo) ? tbCommunityVo.getCommunityName() : null);
+ //查询楼栋id
+ TbBuildingVo tbBuildingVo = tbBuildingMapper.selectVoById(tbRoomVo.getBuildingId());
+ tbRoomVo.setBuildingText(ObjectUtil.isNotEmpty(tbBuildingVo) ? tbBuildingVo.getBuildingName() : null);
+ //查询楼栋信息
+ TbFloorVo tbFloorVo = tbFloorService.queryById(tbRoomVo.getFloorId());
+ tbRoomVo.setFloorText(ObjectUtil.isNotEmpty(tbFloorVo) ? tbFloorVo.getFloorName() : null);
+ List residentUnits = residentUnitMapper.selectList(
+ new LambdaQueryWrapper()
+ .eq(ResidentUnit::getLocation, tbRoomVo.getId())
+ );
+ if (CollUtil.isNotEmpty(residentUnits)) {
+ tbRoomVo.setResidentUnitText(residentUnits.get(0).getName());
+ }
+ return tbRoomVo;
}
/**
@@ -83,6 +110,8 @@ public class TbRoomServiceImpl implements ITbRoomService {
lqw.eq(StringUtils.isNotBlank(bo.getRoomNumber()), TbRoom::getRoomNumber, bo.getRoomNumber());
lqw.eq(bo.getRoomType() != null, TbRoom::getRoomType, bo.getRoomType());
lqw.eq(bo.getFloorId() != null, TbRoom::getFloorId, bo.getFloorId());
+ lqw.eq(bo.getCommunityId() != null, TbRoom::getCommunityId, bo.getCommunityId());
+ lqw.eq(bo.getBuildingId() != null, TbRoom::getBuildingId, bo.getBuildingId());
lqw.eq(bo.getArea() != null, TbRoom::getArea, bo.getArea());
lqw.eq(StringUtils.isNotBlank(bo.getLayout()), TbRoom::getLayout, bo.getLayout());
lqw.eq(bo.getOrientation() != null, TbRoom::getOrientation, bo.getOrientation());
@@ -154,19 +183,23 @@ public class TbRoomServiceImpl implements ITbRoomService {
/**
* 获取房间名称
+ *
* @param roomId 房间id
* @return 房间名称
*/
@Override
public String queryRoomName(Long roomId) {
return baseMapper.queryRoomName(roomId);
- } /**
+ }
+
+ /**
* 获取房间名称
+ *
* @param
* @return 房间名称
*/
@Override
- public List queryRoomNameList(List ids) {
+ public List queryRoomNameList(List ids) {
return baseMapper.queryRoomNameList(ids);
}
}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentPersonServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/residentImpl/ResidentPersonServiceImpl.java
similarity index 84%
rename from ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentPersonServiceImpl.java
rename to ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/residentImpl/ResidentPersonServiceImpl.java
index 1c0310cc..597a51e9 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentPersonServiceImpl.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/residentImpl/ResidentPersonServiceImpl.java
@@ -1,6 +1,8 @@
-package org.dromara.property.service.impl;
+package org.dromara.property.service.impl.residentImpl;
import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.crypto.digest.BCrypt;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.common.core.utils.MapstructUtils;
@@ -11,18 +13,17 @@ 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.extern.slf4j.Slf4j;
-import org.dromara.property.domain.Questionnaire;
-import org.dromara.property.domain.vo.ResidentUnitVo;
-import org.dromara.property.service.IResidentUnitService;
+import org.dromara.property.domain.vo.residentVo.ResidentUnitVo;
+import org.dromara.property.service.residentService.IResidentUnitService;
import org.dromara.sis.api.RemoteSisAuthService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
-import org.dromara.property.domain.bo.ResidentPersonBo;
-import org.dromara.property.domain.vo.ResidentPersonVo;
-import org.dromara.property.domain.ResidentPerson;
+import org.dromara.property.domain.bo.residentBo.ResidentPersonBo;
+import org.dromara.property.domain.vo.residentVo.ResidentPersonVo;
+import org.dromara.property.domain.entity.resident.ResidentPerson;
import org.dromara.property.mapper.ResidentPersonMapper;
-import org.dromara.property.service.IResidentPersonService;
+import org.dromara.property.service.residentService.IResidentPersonService;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
@@ -59,7 +60,23 @@ public class ResidentPersonServiceImpl implements IResidentPersonService {
*/
@Override
public ResidentPersonVo queryById(Long id) {
- return baseMapper.selectVoById(id);
+ ResidentPersonVo residentPersonVo = baseMapper.selectVoById(id);
+ residentPersonVo.setPassword(null);
+ return residentPersonVo;
+ }
+
+ /**
+ * 查询入驻员工
+ *
+ * @param phone 手机号
+ * @param tenantId 租户id
+ * @return 入驻员工
+ */
+ @Override
+ public ResidentPersonVo queryByPhone(String phone, String tenantId) {
+ return baseMapper.selectVoOne(new LambdaQueryWrapper()
+ .eq(ResidentPerson::getPhone, phone)
+ .eq(ResidentPerson::getTenantId, tenantId));
}
/**
@@ -73,6 +90,9 @@ public class ResidentPersonServiceImpl implements IResidentPersonService {
public TableDataInfo queryPageList(ResidentPersonBo bo, PageQuery pageQuery) {
LambdaQueryWrapper lqw = buildQueryWrapper(bo);
Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ result.getRecords().forEach(s -> {
+ s.setPassword(null);
+ });
return TableDataInfo.build(result);
}
@@ -85,7 +105,11 @@ public class ResidentPersonServiceImpl implements IResidentPersonService {
@Override
public List queryList(ResidentPersonBo bo) {
LambdaQueryWrapper lqw = buildQueryWrapper(bo);
- return baseMapper.selectVoList(lqw);
+ List residentPersonVos = baseMapper.selectVoList(lqw);
+ residentPersonVos.forEach(s -> {
+ s.setPassword(null);
+ });
+ return residentPersonVos;
}
private LambdaQueryWrapper buildQueryWrapper(ResidentPersonBo bo) {
@@ -123,10 +147,15 @@ public class ResidentPersonServiceImpl implements IResidentPersonService {
// 首次入驻新用户权限组默认使用公司权限
ResidentUnitVo ruVo = residentUnitService.queryById(bo.getUnitId());
- add.setPassword("123456");
+ // 密码加密,不存明文密码
+ if (Objects.equals(add.getPassword(), "") || add.getPassword() == null){
+ add.setPassword(BCrypt.hashpw("123456"));
+ }else {
+ add.setPassword(BCrypt.hashpw(add.getPassword()));
+ }
//查询该单位下是否有管理员
new LambdaQueryWrapper().eq(ResidentPerson::getUnitId, bo.getUnitId())
- .eq(ResidentPerson::getUserRoles, "1");
+ .eq(ResidentPerson::getUserRoles, 1);
add.setAuthGroupId(ruVo.getAuthGroupId());
add.setAuthBegDate(ruVo.getAuthBegDate());
@@ -188,7 +217,7 @@ public class ResidentPersonServiceImpl implements IResidentPersonService {
private void validEntityBeforeSave(ResidentPerson entity) {
//TODO 做一些数据校验,如唯一约束
LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
- lqw.eq(ResidentPerson::getIdCard, entity.getUserName())
+ lqw.eq(ResidentPerson::getPhone, entity.getPhone())
.eq(ResidentPerson::getUnitId, entity.getUnitId());
boolean exists = baseMapper.exists(lqw);
Assert.isTrue(!exists, "当前单位,{}已入驻!", entity.getUserName());
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentUnitServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/residentImpl/ResidentUnitServiceImpl.java
similarity index 89%
rename from ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentUnitServiceImpl.java
rename to ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/residentImpl/ResidentUnitServiceImpl.java
index 9bd9fa87..b1fbf5b0 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentUnitServiceImpl.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/residentImpl/ResidentUnitServiceImpl.java
@@ -1,6 +1,7 @@
-package org.dromara.property.service.impl;
+package org.dromara.property.service.impl.residentImpl;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.crypto.digest.BCrypt;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -10,16 +11,16 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.dromara.property.domain.ResidentPerson;
+import org.dromara.property.domain.entity.resident.ResidentPerson;
import org.dromara.property.mapper.ResidentPersonMapper;
-import org.dromara.property.service.IResidentPersonService;
+import org.dromara.property.service.residentService.IResidentPersonService;
import org.dromara.property.service.ITbRoomService;
import org.springframework.stereotype.Service;
-import org.dromara.property.domain.bo.ResidentUnitBo;
-import org.dromara.property.domain.vo.ResidentUnitVo;
-import org.dromara.property.domain.ResidentUnit;
+import org.dromara.property.domain.bo.residentBo.ResidentUnitBo;
+import org.dromara.property.domain.vo.residentVo.ResidentUnitVo;
+import org.dromara.property.domain.entity.resident.ResidentUnit;
import org.dromara.property.mapper.ResidentUnitMapper;
-import org.dromara.property.service.IResidentUnitService;
+import org.dromara.property.service.residentService.IResidentUnitService;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
@@ -32,7 +33,7 @@ import java.util.stream.Collectors;
* 入驻单位Service业务层处理
*
* @author mocheng
- * @date 2025-06-19
+ * @since 2025-06-19
*/
@Slf4j
@RequiredArgsConstructor
@@ -139,21 +140,22 @@ public class ResidentUnitServiceImpl implements IResidentUnitService {
/**
* 新增一个管理员
- * @param unit
+ * @param unit 入驻单位
*/
private void addResidentPerson(ResidentUnit unit) {
ResidentPerson residentPerson = new ResidentPerson();
residentPerson.setUserName(unit.getContactPerson());
residentPerson.setPhone(unit.getPhone().toString());
residentPerson.setGender(1L);
- residentPerson.setState(2L);
- residentPerson.setUserRoles("1");
- residentPerson.setIsAudit("1");
+ residentPerson.setState(2);
+ residentPerson.setUserRoles(1);
+ residentPerson.setIsAudit(1);
residentPerson.setAuthGroupId(unit.getAuthGroupId());
residentPerson.setAuthBegDate(unit.getAuthBegDate());
residentPerson.setAuthEndDate(unit.getAuthEndDate());
residentPerson.setUnitId(unit.getId());
residentPerson.setUnitName(unit.getName());
+ residentPerson.setPassword(BCrypt.hashpw("123456"));
personMapper.insert(residentPerson);
}
/**
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java
index 3c7ea77b..4da94807 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterInfoServiceImpl.java
@@ -1,8 +1,12 @@
package org.dromara.property.service.impl.smartDevicesImpl;
+import cn.dev33.satoken.context.mock.SaTokenContextMockUtil;
+import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.date.TimeInterval;
import cn.hutool.core.lang.Assert;
import com.alibaba.fastjson.JSONObject;
+import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.common.core.domain.TreeNode;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
@@ -15,8 +19,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.satoken.utils.LoginHelper;
-import org.dromara.common.websocket.dto.WebSocketMessageDto;
-import org.dromara.common.websocket.utils.WebSocketUtils;
import org.dromara.property.domain.bo.TbFloorBo;
import org.dromara.property.domain.vo.TbBuildingVo;
import org.dromara.property.domain.vo.TbCommunityVo;
@@ -27,6 +29,7 @@ import org.dromara.property.service.ITbCommunityService;
import org.dromara.property.service.ITbFloorService;
import org.dromara.property.tasks.HeartbeatTasks;
import org.dromara.property.utils.MeterRecordUtil;
+import org.dromara.resource.api.RemoteMessageService;
import org.dromara.system.api.model.LoginUser;
import org.springframework.stereotype.Service;
import org.dromara.property.domain.bo.smartDevicesBo.TbMeterInfoBo;
@@ -61,6 +64,9 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService {
private final MeterRecordUtil meterRecordUtil;
private final HeartbeatTasks heartbeatTasks;
+ @DubboReference
+ private RemoteMessageService remoteMessageService;
+
/**
* 查询水电气
*
@@ -85,8 +91,7 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService {
Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
// 创建楼层ID到楼层名称的映射,避免重复查询
List floorList = floorService.queryList(new TbFloorBo());
- Map floorMap = floorList.stream()
- .collect(Collectors.toMap(TbFloorVo::getId, TbFloorVo::getFloorName, (key1, key2) -> key1));
+ Map floorMap = floorList.stream().collect(Collectors.toMap(TbFloorVo::getId, TbFloorVo::getFloorName, (key1, key2) -> key1));
// 为每个灯控信息设置楼层名称
result.getRecords().forEach(record -> {
@@ -114,7 +119,6 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService {
private LambdaQueryWrapper buildQueryWrapper(TbMeterInfoBo bo) {
Map params = bo.getParams();
LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
- lqw.orderByAsc(TbMeterInfo::getId);
lqw.like(StringUtils.isNotBlank(bo.getHostIp()), TbMeterInfo::getHostIp, bo.getHostIp());
lqw.eq(StringUtils.isNotBlank(bo.getMeterCode()), TbMeterInfo::getMeterCode, bo.getMeterCode());
lqw.eq(StringUtils.isNotBlank(bo.getFactoryNo()), TbMeterInfo::getFactoryNo, bo.getFactoryNo());
@@ -270,13 +274,13 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService {
// 获取当前登录用户
LoginUser user = LoginHelper.getLoginUser();
+ String tokenValue = StpUtil.getTokenValue();
if (user == null) {
heartbeatTasks.stopTask("Meter_Status_Reading");
return;
}
// 初始化WebSocket消息
- WebSocketMessageDto webSocketMessage = new WebSocketMessageDto();
JSONObject jsonObject = new JSONObject();
jsonObject.put("type", "meter");
@@ -291,23 +295,17 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService {
heartbeatTasks.stopTask("Meter_Status_Reading");
jsonObject.put("readingTime", DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
jsonObject.put("data", new ArrayList<>());
- webSocketMessage.setMessage(jsonObject.toString());
- webSocketMessage.setSessionKeys(List.of(user.getUserId()));
- WebSocketUtils.publishMessage(webSocketMessage);
+ remoteMessageService.sendMessage(user.getUserId(), tokenValue, jsonObject.toString());
return;
}
// 获取唯一的主机IP列表
- String[] hostIpArr = meterInfoVoList.stream()
- .map(TbMeterInfoVo::getHostIp)
- .distinct()
- .toArray(String[]::new);
+ String[] hostIpArr = meterInfoVoList.stream().map(TbMeterInfoVo::getHostIp).distinct().toArray(String[]::new);
// 统计每个IP对应的仪表数量
Map ipCountMap = new HashMap<>();
for (String ip : hostIpArr) {
- ipCountMap.put(ip, baseMapper.selectCount(new LambdaQueryWrapper()
- .eq(TbMeterInfo::getHostIp, ip)));
+ ipCountMap.put(ip, baseMapper.selectCount(new LambdaQueryWrapper().eq(TbMeterInfo::getHostIp, ip)));
}
// 启动定时任务
@@ -316,47 +314,46 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService {
List meterResults;
try {
+ TimeInterval timeInterval = new TimeInterval();
meterResults = meterRecordUtil.getMeterStatus(ipCountMap, hostIpArr);
+ log.info("仪表数据获取耗时:{}ms", timeInterval.interval());
} catch (Exception e) {
// 获取数据失败,设置所有仪表通信状态为0并发送消息
- handleMeterCommunicationFailure(user, jsonObject, meterInfoVoList, webSocketMessage);
+ handleMeterCommunicationFailure(user, jsonObject, meterInfoVoList, tokenValue);
return;
}
// 处理仪表读数和状态
- processMeterResults(user, jsonObject, meterResults, meterInfoVoList, webSocketMessage);
+ processMeterResults(user, jsonObject, meterResults, meterInfoVoList, tokenValue);
}, 30000);
}
/**
* 处理仪表通信失败的情况
*
- * @param meterInfoVoList 仪表列表
- * @param jsonObject 消息对象
- * @param webSocketMessage WebSocket消息
- * @param user 当前用户
+ * @param meterInfoVoList 仪表列表
+ * @param jsonObject 消息对象
+ * @param user 当前用户
*/
- private void handleMeterCommunicationFailure(LoginUser user, JSONObject jsonObject, List meterInfoVoList, WebSocketMessageDto webSocketMessage) {
+ private void handleMeterCommunicationFailure(LoginUser user, JSONObject jsonObject, List meterInfoVoList, String tokenValue) {
meterInfoVoList.forEach(item -> item.setCommunicationState(0L));
jsonObject.put("data", meterInfoVoList);
- webSocketMessage.setMessage(jsonObject.toString());
- webSocketMessage.setSessionKeys(List.of(user.getUserId()));
- WebSocketUtils.publishMessage(webSocketMessage);
+ SaTokenContextMockUtil.setMockContext(() -> {
+ remoteMessageService.sendMessage(user.getUserId(), tokenValue, jsonObject.toString());
+ });
}
/**
* 处理仪表读数结果
*
- * @param meterInfoVoList 仪表列表
- * @param meterResults 读数结果
- * @param jsonObject 消息对象
- * @param webSocketMessage WebSocket消息
- * @param user 当前用户
+ * @param meterInfoVoList 仪表列表
+ * @param meterResults 读数结果
+ * @param jsonObject 消息对象
+ * @param user 当前用户
*/
- private void processMeterResults(LoginUser user, JSONObject jsonObject, List meterResults, List meterInfoVoList, WebSocketMessageDto webSocketMessage) {
+ private void processMeterResults(LoginUser user, JSONObject jsonObject, List meterResults, List meterInfoVoList, String tokenValue) {
// 创建IP到结果的映射,提高查找效率
- Map meterResultMap = meterResults.stream()
- .collect(Collectors.toMap(MeterResult::getIp, Function.identity(), (v1, v2) -> v1));
+ Map meterResultMap = meterResults.stream().collect(Collectors.toMap(MeterResult::getIp, Function.identity(), (v1, v2) -> v1));
for (TbMeterInfoVo item : meterInfoVoList) {
MeterResult meterResult = meterResultMap.get(item.getHostIp());
@@ -373,8 +370,7 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService {
try {
int codeIndex = Integer.parseInt(meterCode);
if (codeIndex >= 0 && codeIndex < collectionValue.size()) {
- BigDecimal initReading = BigDecimal.valueOf(collectionValue.get(codeIndex))
- .setScale(2, RoundingMode.HALF_UP);
+ BigDecimal initReading = BigDecimal.valueOf(collectionValue.get(codeIndex)).setScale(2, RoundingMode.HALF_UP);
item.setInitReading(initReading);
item.setCommunicationState(initReading.compareTo(BigDecimal.ZERO) == 0 ? 0L : 1L);
} else {
@@ -386,8 +382,8 @@ public class TbMeterInfoServiceImpl implements ITbMeterInfoService {
}
jsonObject.put("data", meterInfoVoList);
- webSocketMessage.setMessage(jsonObject.toString());
- webSocketMessage.setSessionKeys(List.of(user.getUserId()));
- WebSocketUtils.publishMessage(webSocketMessage);
+ SaTokenContextMockUtil.setMockContext(() -> {
+ remoteMessageService.sendMessage(user.getUserId(), tokenValue, jsonObject.toString());
+ });
}
}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java
index bf6a03b9..1492aaeb 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/smartDevicesImpl/TbMeterRecordServiceImpl.java
@@ -1,6 +1,7 @@
package org.dromara.property.service.impl.smartDevicesImpl;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
@@ -169,20 +170,24 @@ public class TbMeterRecordServiceImpl implements ITbMeterRecordService {
continue;
}
+ String newReadingTime = result.getRecordTime();
+ Date newReadingTimeDate = DateUtil.parse(newReadingTime);
+ Date oldReadingTimeDate = DateUtil.offset(newReadingTimeDate, DateField.HOUR, -1);
+
// 获取设备id
Collection meterIds = infoList.stream().map(TbMeterInfoVo::getId).toList();
// 取出上次抄表记录
LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();
lqw.in(TbMeterRecord::getMeterId, meterIds)
- .orderByDesc(TbMeterRecord::getReadingTime)
- .last("limit " + meterIds.size());
+ .eq(TbMeterRecord::getReadingTime, oldReadingTimeDate)
+ .orderByDesc(TbMeterRecord::getReadingTime);
List recordOld = baseMapper.selectList(lqw);
List recordNew = new ArrayList<>(infoList.size());
boolean hasOldRecords = CollUtil.isNotEmpty(recordOld);
- log.info("当前采集器ip下{}抄表记录, ip:{}", hasOldRecords ? "有" : "无", result.getIp());
+ log.info("当前采集器ip下{}前一小时抄表记录, ip:{}", hasOldRecords ? "有" : "无", result.getIp());
// 创建meterId到旧记录的映射,提高查找效率
Map oldRecordMap = hasOldRecords ?
recordOld.stream().collect(Collectors.toMap(TbMeterRecord::getMeterId, Function.identity())) :
@@ -197,10 +202,12 @@ public class TbMeterRecordServiceImpl implements ITbMeterRecordService {
record.setTenantId(info.getTenantId());
// 获取当前读数
- BigDecimal currentReading = BigDecimal.valueOf(
- result.getCollectionValue().get(Integer.parseInt(info.getMeterCode()))
- );
- record.setCurrentReading(currentReading);
+ int meterCode = Integer.parseInt(info.getMeterCode());
+ if (meterCode + 1 <= result.getCollectionValue().size()){
+ record.setCurrentReading(BigDecimal.valueOf(result.getCollectionValue().get(meterCode)));
+ }else {
+ record.setCurrentReading(BigDecimal.ZERO);
+ }
// 设置上次读数
if (hasOldRecords) {
@@ -209,10 +216,10 @@ public class TbMeterRecordServiceImpl implements ITbMeterRecordService {
record.setPreviousReading(oldRecord.getCurrentReading());
} else {
// 如果没有找到对应的旧记录,使用默认值
- record.setPreviousReading(BigDecimal.ZERO);
+ record.setPreviousReading(record.getCurrentReading());
}
} else {
- record.setPreviousReading(BigDecimal.ZERO);
+ record.setPreviousReading(record.getCurrentReading());
}
record.setReadingMethod(MeterRecordTypeEnum.AUTO_RECORD.getCode());
@@ -301,6 +308,7 @@ public class TbMeterRecordServiceImpl implements ITbMeterRecordService {
private Map trendMonthData(String floorId, String meterId, Long meterType, String year) {
Map resultMap = new HashMap<>();
List