88e030b7
王彪总
init project
|
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
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
|
package com.java110.user.cmd.owner;
import com.alibaba.fastjson.JSONObject;
import com.java110.core.annotation.Java110Cmd;
import com.java110.core.annotation.Java110Transactional;
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.core.factory.GenerateCodeFactory;
import com.java110.dto.account.AccountDto;
import com.java110.dto.owner.OwnerAppUserDto;
import com.java110.dto.owner.OwnerDto;
import com.java110.dto.owner.OwnerRoomRelDto;
import com.java110.dto.user.UserDto;
import com.java110.intf.acct.IAccountInnerServiceSMO;
import com.java110.intf.user.*;
import com.java110.po.account.AccountPo;
import com.java110.po.owner.OwnerAppUserPo;
import com.java110.po.owner.OwnerPo;
import com.java110.po.user.UserPo;
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 org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
/**
* 业主房屋认证审核命令类
*
* 处理业主房屋认证的审核流程,包括审核通过和审核拒绝两种情况
* 审核通过时会根据业主类型(业主或家庭成员)执行不同的绑定逻辑
* 审核拒绝则直接更新审核状态为失败
*
* @author Java110
* @version 1.0
* @since 2023
*/
@Java110Cmd(serviceCode = "owner.auditAuthOwner")
public class AuditAuthOwnerCmd extends Cmd {
@Autowired
private IOwnerAppUserV1InnerServiceSMO ownerAppUserV1InnerServiceSMOImpl;
@Autowired
private IOwnerAppUserInnerServiceSMO ownerAppUserInnerServiceSMOImpl;
@Autowired
private IUserV1InnerServiceSMO userV1InnerServiceSMOImpl;
@Autowired
private IOwnerRoomRelInnerServiceSMO ownerRoomRelInnerServiceSMOImpl;
@Autowired
private IOwnerV1InnerServiceSMO ownerV1InnerServiceSMOImpl;
@Autowired
private IAccountInnerServiceSMO accountInnerServiceSMOImpl;
/**
* 验证请求参数
*
* 检查必要的请求参数是否存在,并验证审核记录的状态
*
* @param event 命令事件对象
* @param context 命令数据流上下文
* @param reqJson 请求的JSON数据
* @throws CmdException 当参数验证失败时抛出异常
*/
@Override
public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException {
// 验证必要参数是否存在
Assert.hasKeyAndValue(reqJson, "appUserId", "绑定ID不能为空");
Assert.hasKeyAndValue(reqJson, "state", "必填,请填写状态");
Assert.hasKeyAndValue(reqJson, "remark", "必填,请填写审核说明");
Assert.hasKeyAndValue(reqJson, "communityId", "未包含小区信息");
// 验证审核记录是否存在且状态为待审核
OwnerAppUserDto ownerAppUserDto = new OwnerAppUserDto();
ownerAppUserDto.setAppUserId(reqJson.getString("appUserId"));
ownerAppUserDto.setState(OwnerAppUserDto.STATE_AUDITING); // 设置查询条件为待审核状态
List<OwnerAppUserDto> ownerAppUserDtos = ownerAppUserInnerServiceSMOImpl.queryOwnerAppUsers(ownerAppUserDto);
// 确保只存在一条待审核的记录
Assert.listOnlyOne(ownerAppUserDtos, "审核记录不存在");
}
/**
* 执行业主认证审核命令
*
* 根据审核状态执行不同的处理逻辑:
* - 审核拒绝:直接更新审核状态为失败
* - 审核通过:根据业主类型执行绑定逻辑,并更新用户信息和审核状态
*
* @param event 命令事件对象
* @param context 命令数据流上下文
* @param reqJson 请求的JSON数据
* @throws CmdException 当业务处理失败时抛出异常
*/
@Override
@Java110Transactional
public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException {
String userId = CmdContextUtils.getUserId(context);
String state = "";
// 处理审核拒绝的情况
if ("1200".equals(reqJson.getString("state"))) {
OwnerAppUserPo ownerAppUserPo = new OwnerAppUserPo();
ownerAppUserPo.setAppUserId(reqJson.getString("appUserId"));
ownerAppUserPo.setState(OwnerAppUserDto.STATE_AUDIT_ERROR); // 设置状态为审核失败
ownerAppUserPo.setRemark(reqJson.getString("remark"));
int flag = ownerAppUserV1InnerServiceSMOImpl.updateOwnerAppUser(ownerAppUserPo);
if (flag < 1) {
throw new CmdException("修改绑定失败");
}
return; // 审核拒绝直接返回,不执行后续逻辑
}
// 查询待审核的业主应用用户信息
OwnerAppUserDto ownerAppUserDto = new OwnerAppUserDto();
ownerAppUserDto.setAppUserId(reqJson.getString("appUserId"));
ownerAppUserDto.setState(OwnerAppUserDto.STATE_AUDITING);
List<OwnerAppUserDto> ownerAppUserDtos = ownerAppUserInnerServiceSMOImpl.queryOwnerAppUsers(ownerAppUserDto);
String memberId = "";
// 根据业主类型执行不同的绑定逻辑
if (OwnerDto.OWNER_TYPE_CD_OWNER.equals(ownerAppUserDtos.get(0).getOwnerTypeCd())) {
// 处理业主类型的绑定
memberId = bindOwner(ownerAppUserDtos.get(0));
} else {
// 处理家庭成员类型的绑定
memberId = bindOwnerMember(ownerAppUserDtos.get(0), userId);
}
// 更新用户姓名信息
UserPo userPo = new UserPo();
userPo.setName(ownerAppUserDtos.get(0).getAppUserName());
userPo.setUserId(ownerAppUserDtos.get(0).getUserId());
userV1InnerServiceSMOImpl.updateUser(userPo);
// 更新审核状态为成功
OwnerAppUserPo ownerAppUserPo = new OwnerAppUserPo();
ownerAppUserPo.setAppUserId(reqJson.getString("appUserId"));
ownerAppUserPo.setState(OwnerAppUserDto.STATE_AUDIT_SUCCESS);
ownerAppUserPo.setRemark(reqJson.getString("remark"));
ownerAppUserPo.setMemberId(memberId);
int flag = ownerAppUserV1InnerServiceSMOImpl.updateOwnerAppUser(ownerAppUserPo);
if (flag < 1) {
throw new CmdException("修改绑定失败");
}
}
/**
* 绑定家庭成员
*
* 处理家庭成员的绑定逻辑,包括:
* - 验证房屋是否已绑定业主
* - 检查家庭成员是否已存在
* - 创建新的家庭成员记录
*
* @param ownerAppUserDto 业主应用用户数据传输对象
* @param userId 当前操作用户ID
* @return 成员ID
* @throws CmdException 当绑定过程中出现错误时抛出异常
*/
private String bindOwnerMember(OwnerAppUserDto ownerAppUserDto, String userId) {
// 查询房屋与业主的绑定关系
OwnerRoomRelDto ownerRoomRelDto = new OwnerRoomRelDto();
ownerRoomRelDto.setRoomId(ownerAppUserDto.getRoomId());
List<OwnerRoomRelDto> ownerRoomRelDtos = ownerRoomRelInnerServiceSMOImpl.queryOwnerRoomRels(ownerRoomRelDto);
// 验证房屋是否已绑定业主
if (ListUtil.isNull(ownerRoomRelDtos)) {
throw new CmdException("房屋未绑定业主");
}
// 根据手机号和小区查询是否已存在家庭成员
OwnerDto ownerDto = new OwnerDto();
ownerDto.setOwnerId(ownerRoomRelDtos.get(0).getOwnerId());
ownerDto.setLink(ownerAppUserDto.getLink());
ownerDto.setCommunityId(ownerAppUserDto.getCommunityId());
ownerDto.setOwnerTypeCds(new String[]{
OwnerDto.OWNER_TYPE_CD_MEMBER
// 可以扩展其他类型,如租客、临时业主等
// ,
// OwnerDto.OWNER_TYPE_CD_RENTING,
// OwnerDto.OWNER_TYPE_CD_OTHER,
// OwnerDto.OWNER_TYPE_CD_TEMP
});
List<OwnerDto> ownerDtos = ownerV1InnerServiceSMOImpl.queryOwners(ownerDto);
// 如果家庭成员已存在,直接返回成员ID
if (!ListUtil.isNull(ownerDtos)) {
return ownerDtos.get(0).getMemberId();
}
// 根据业主类型设置人员角色
String personRole = OwnerDto.PERSON_ROLE_OWNER;
if (OwnerDto.OWNER_TYPE_CD_MEMBER.equals(ownerAppUserDto.getOwnerTypeCd())) {
personRole = OwnerDto.PERSON_ROLE_MEMBER;
}
// 创建新的家庭成员记录
OwnerPo ownerPo = new OwnerPo();
ownerPo.setMemberId(GenerateCodeFactory.getGeneratorId("11")); // 生成成员ID
ownerPo.setOwnerId(ownerRoomRelDtos.get(0).getOwnerId());
ownerPo.setName(ownerAppUserDto.getAppUserName());
ownerPo.setSex("0"); // 默认性别
ownerPo.setLink(ownerAppUserDto.getLink());
ownerPo.setUserId(userId);
ownerPo.setRemark("业主认证,审核添加");
ownerPo.setOwnerTypeCd(ownerAppUserDto.getOwnerTypeCd());
ownerPo.setCommunityId(ownerAppUserDto.getCommunityId());
ownerPo.setIdCard(ownerAppUserDto.getIdCard());
ownerPo.setState(OwnerDto.STATE_FINISH); // 设置状态为完成
ownerPo.setOwnerFlag(OwnerDto.OWNER_FLAG_TRUE); // 设置业主标志为真
ownerPo.setPersonType(OwnerDto.PERSON_TYPE_PERSON); // 设置人员类型为个人
ownerPo.setPersonRole(personRole); // 设置人员角色
ownerPo.setAddress("无"); // 默认地址
ownerV1InnerServiceSMOImpl.saveOwner(ownerPo);
return ownerPo.getMemberId();
}
/**
* 绑定业主
*
* 处理业主的绑定逻辑,包括:
* - 验证房屋是否已绑定业主
* - 更新业主联系信息
* - 更新账户联系信息
*
* @param ownerAppUserDto 业主应用用户数据传输对象
* @return 业主ID
* @throws CmdException 当绑定过程中出现错误时抛出异常
*/
private String bindOwner(OwnerAppUserDto ownerAppUserDto) {
// 查询房屋与业主的绑定关系
OwnerRoomRelDto ownerRoomRelDto = new OwnerRoomRelDto();
ownerRoomRelDto.setRoomId(ownerAppUserDto.getRoomId());
List<OwnerRoomRelDto> ownerRoomRelDtos = ownerRoomRelInnerServiceSMOImpl.queryOwnerRoomRels(ownerRoomRelDto);
// 验证房屋是否已绑定业主
if (ListUtil.isNull(ownerRoomRelDtos)) {
throw new CmdException("房屋未绑定业主");
}
// 更新业主联系信息
OwnerPo ownerPo = new OwnerPo();
ownerPo.setLink(ownerAppUserDto.getLink());
// ownerPo.setName(ownerAppUserDto.getAppUserName()); // 注释掉的姓名更新
ownerPo.setMemberId(ownerRoomRelDtos.get(0).getOwnerId());
ownerPo.setOwnerId(ownerRoomRelDtos.get(0).getOwnerId());
ownerV1InnerServiceSMOImpl.updateOwner(ownerPo);
// 查询业主账户信息
AccountDto accountDto = new AccountDto();
accountDto.setObjId(ownerRoomRelDtos.get(0).getOwnerId());
accountDto.setPartId(ownerRoomRelDtos.get(0).getCommunityId());
List<AccountDto> accountDtos = accountInnerServiceSMOImpl.queryAccounts(accountDto);
// 如果账户不存在,直接返回业主ID
if (ListUtil.isNull(accountDtos)) {
return ownerRoomRelDtos.get(0).getOwnerId();
}
// 更新账户联系信息
AccountPo accountPo = new AccountPo();
accountPo.setoLink(ownerAppUserDto.getLink());
accountPo.setAcctId(accountDtos.get(0).getAcctId());
accountInnerServiceSMOImpl.updateAccount(accountPo);
return ownerRoomRelDtos.get(0).getOwnerId();
}
}
|