QueryAdminOwnersCmd.java
7.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
/**
* 业主管理查询命令类
*
* 该命令类用于处理管理员查询业主信息的请求,支持分页查询和房屋信息关联查询。
* 主要功能包括:
* 1. 验证管理员权限和分页参数
* 2. 根据房屋信息查询对应的业主ID
* 3. 查询当前管理员有权限的项目业主信息
* 4. 查询业主相关的统计数据
* 5. 返回分页格式的查询结果
*
* @serviceCode owner.queryAdminOwners
* @version 1.0
*/
package com.java110.user.cmd.owner;
import com.alibaba.fastjson.JSONObject;
import com.java110.core.annotation.Java110Cmd;
import com.java110.core.context.CmdContextUtils;
import com.java110.core.context.ICmdDataFlowContext;
import com.java110.core.event.cmd.Cmd;
import com.java110.core.event.cmd.CmdEvent;
import com.java110.doc.annotation.*;
import com.java110.dto.owner.OwnerDto;
import com.java110.dto.privilege.BasePrivilegeDto;
import com.java110.dto.room.RoomDto;
import com.java110.intf.common.IFileRelInnerServiceSMO;
import com.java110.intf.community.IMenuInnerServiceSMO;
import com.java110.intf.community.IRoomInnerServiceSMO;
import com.java110.intf.user.IOwnerInnerServiceSMO;
import com.java110.intf.user.IStaffCommunityV1InnerServiceSMO;
import com.java110.user.bmo.owner.IQueryOwnerStatisticsBMO;
import com.java110.utils.exception.CmdException;
import com.java110.utils.util.Assert;
import com.java110.utils.util.BeanConvertUtil;
import com.java110.utils.util.ListUtil;
import com.java110.utils.util.StringUtil;
import com.java110.vo.ResultVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Java110Cmd(serviceCode = "owner.queryAdminOwners")
public class QueryAdminOwnersCmd extends Cmd {
@Autowired
private IOwnerInnerServiceSMO ownerInnerServiceSMOImpl;
@Autowired
private IRoomInnerServiceSMO roomInnerServiceSMOImpl;
@Autowired
private IQueryOwnerStatisticsBMO queryOwnerStatisticsBMOImpl;
@Autowired
private IStaffCommunityV1InnerServiceSMO staffCommunityV1InnerServiceSMOImpl;
/**
* 验证请求参数
*
* 该方法用于验证管理员权限和分页参数的有效性
*
* @param event 命令事件对象
* @param cmdDataFlowContext 命令数据流上下文
* @param reqJson 请求参数JSON对象
* @throws CmdException 当参数验证失败时抛出异常
*/
@Override
public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) throws CmdException {
// 验证管理员权限
super.validateAdmin(cmdDataFlowContext);
// 验证分页参数
super.validatePageInfo(reqJson);
}
/**
* 执行业主查询命令
*
* 主要流程:
* 1. 根据房屋信息刷新房间ID
* 2. 构建业主查询条件
* 3. 获取管理员有权限的项目列表
* 4. 查询业主总数和分页数据
* 5. 查询业主统计数据
* 6. 构建响应结果
*
* @param event 命令事件对象
* @param cmdDataFlowContext 命令数据流上下文
* @param reqJson 请求参数JSON对象
* @throws CmdException 当命令执行过程中出现错误时抛出异常
*/
@Override
public void doCmd(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) throws CmdException {
// 根据房屋名称查询对应的房间ID
freshRoomId(reqJson);
// 将请求参数转换为业主查询DTO对象
OwnerDto ownerDto = BeanConvertUtil.covertBean(reqJson, OwnerDto.class);
// 获取当前登录用户ID
String staffId = CmdContextUtils.getUserId(cmdDataFlowContext);
// 查询当前用户有权限管理的项目ID列表
List<String> communityIds = staffCommunityV1InnerServiceSMOImpl.queryStaffCommunityIds(staffId);
// 如果用户有权限管理的项目不为空,设置到查询条件中
if (!ListUtil.isNull(communityIds)) {
ownerDto.setCommunityIds(communityIds.toArray(new String[communityIds.size()]));
}
// 获取每页显示条数
int row = reqJson.getInteger("row");
// 查询符合条件的业主总数
int total = ownerInnerServiceSMOImpl.queryOwnersCount(ownerDto);
List<OwnerDto> ownerDtos = null;
if (total > 0) {
// 查询业主分页数据
ownerDtos = ownerInnerServiceSMOImpl.queryOwners(ownerDto);
// 查询业主相关的统计数据并合并到业主信息中
ownerDtos = queryOwnerStatisticsBMOImpl.queryAdminData(ownerDtos);
} else {
// 如果没有数据,返回空列表
ownerDtos = new ArrayList<>();
}
// 计算总页数并构建响应实体
ResponseEntity<String> responseEntity = ResultVo.createResponseEntity((int) Math.ceil((double) total / (double) row), total, ownerDtos);
cmdDataFlowContext.setResponseEntity(responseEntity);
}
/**
* 根据房屋名称刷新房间ID
*
* 该方法用于解析房屋名称格式(楼栋-单元-房屋),查询对应的房间ID并设置到请求参数中
*
* @param reqJson 请求参数JSON对象
* @throws IllegalArgumentException 当房屋名称格式不正确时抛出异常
*/
private void freshRoomId(JSONObject reqJson) {
// 检查请求参数中是否包含房屋名称
if (!reqJson.containsKey("roomName")) {
return;
}
String roomName = reqJson.getString("roomName");
// 如果房屋名称为空,直接返回
if (StringUtil.isEmpty(roomName)) {
return;
}
// 验证房屋名称格式必须包含"-"分隔符
if (!roomName.contains("-")) {
throw new IllegalArgumentException("房屋格式错误,请写入如 楼栋-单元-房屋 格式");
}
// 按"-"分隔符分割房屋名称,最多分割3部分
String[] params = roomName.split("-", 3);
// 验证分割后的参数数量必须为3(楼栋、单元、房屋)
if (params.length != 3) {
throw new IllegalArgumentException("房屋格式错误,请写入如 楼栋-单元-房屋 格式");
}
// 构建房屋查询条件
RoomDto roomDto = new RoomDto();
roomDto.setFloorNum(params[0]); // 设置楼栋号
roomDto.setUnitNum(params[1]); // 设置单元号
roomDto.setRoomNum(params[2]); // 设置房间号
roomDto.setCommunityId(reqJson.getString("communityId")); // 设置项目ID
// 查询符合条件的房屋信息
List<RoomDto> roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
// 验证查询结果必须且只能有一条记录
Assert.listOnlyOne(roomDtos, "未查询到房屋下业主信息");
// 将查询到的房间ID设置到请求参数中
reqJson.put("roomId", roomDtos.get(0).getRoomId());
}
}