SellParkingSpaceCmd.java
10 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
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
package com.java110.community.cmd.parkingSpace;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.java110.core.annotation.Java110Cmd;
import com.java110.core.annotation.Java110Transactional;
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.owner.OwnerCarDto;
import com.java110.dto.parking.ParkingSpaceDto;
import com.java110.intf.community.IParkingSpaceInnerServiceSMO;
import com.java110.intf.community.IParkingSpaceV1InnerServiceSMO;
import com.java110.intf.fee.IFeeConfigInnerServiceSMO;
import com.java110.intf.user.IOwnerCarAttrInnerServiceSMO;
import com.java110.intf.user.IOwnerCarV1InnerServiceSMO;
import com.java110.po.car.OwnerCarPo;
import com.java110.po.owner.OwnerCarAttrPo;
import com.java110.po.parking.ParkingSpacePo;
import com.java110.utils.constant.ResponseConstant;
import com.java110.utils.exception.CmdException;
import com.java110.utils.exception.ListenerExecuteException;
import com.java110.utils.util.Assert;
import com.java110.utils.util.BeanConvertUtil;
import com.java110.utils.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import java.text.ParseException;
import java.util.List;
/**
* 停车位出售/出租命令处理类
* 负责处理停车位的出售和出租业务逻辑,包括参数验证、车位状态修改、车辆信息保存等操作
*
* @author Java110
* @version 1.0
* @since 2023
*/
@Java110Cmd(serviceCode = "parkingSpace.sellParkingSpace")
public class SellParkingSpaceCmd extends Cmd {
/** 费用配置服务 */
@Autowired
private IFeeConfigInnerServiceSMO feeConfigInnerServiceSMOImpl;
/** 停车位查询服务 */
@Autowired
private IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl;
/** 停车位操作服务 */
@Autowired
private IParkingSpaceV1InnerServiceSMO parkingSpaceV1InnerServiceSMOImpl;
/** 车主车辆操作服务 */
@Autowired
private IOwnerCarV1InnerServiceSMO ownerCarV1InnerServiceSMOImpl;
/** 车主车辆属性服务 */
@Autowired
private IOwnerCarAttrInnerServiceSMO ownerCarAttrInnerServiceSMOImpl;
/**
* 参数验证方法
* 验证请求参数是否完整和有效
*
* @param event 命令事件对象
* @param context 数据流上下文
* @param reqJson 请求参数JSON对象
* @throws CmdException 当参数验证失败时抛出异常
*/
@Override
public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException {
// 验证必需参数是否存在
Assert.jsonObjectHaveKey(reqJson, "communityId", "未包含项目ID");
Assert.jsonObjectHaveKey(reqJson, "ownerId", "请求报文中未包含ownerId");
Assert.jsonObjectHaveKey(reqJson, "carNum", "请求报文中未包含carNum");
Assert.jsonObjectHaveKey(reqJson, "carBrand", "请求报文中未包含carBrand");
Assert.jsonObjectHaveKey(reqJson, "carType", "请求报文中未包含carType");
Assert.jsonObjectHaveKey(reqJson, "carColor", "未包含carColor");
Assert.jsonObjectHaveKey(reqJson, "psId", "未包含psId");
Assert.jsonObjectHaveKey(reqJson, "storeId", "未包含storeId");
//Assert.jsonObjectHaveKey(reqJson, "receivedAmount", "未包含receivedAmount");
Assert.jsonObjectHaveKey(reqJson, "sellOrHire", "未包含sellOrHire");
// 验证必需参数是否为空
Assert.hasLength(reqJson.getString("communityId"), "项目ID不能为空");
Assert.hasLength(reqJson.getString("ownerId"), "ownerId不能为空");
Assert.hasLength(reqJson.getString("psId"), "psId不能为空");
//Assert.isMoney(reqJson.getString("receivedAmount"), "不是有效的实收金额");
// 验证出售/出租类型参数是否有效
if (!"H".equals(reqJson.getString("sellOrHire"))
&& !"S".equals(reqJson.getString("sellOrHire"))) {
throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "请求报文中sellOrFire值错误 ,出售为S 出租为H");
}
}
/**
* 命令执行方法
* 处理停车位出售/出租的核心业务逻辑
*
* @param event 命令事件对象
* @param context 数据流上下文
* @param reqJson 请求参数JSON对象
* @throws CmdException 当业务处理失败时抛出异常
* @throws ParseException 当数据解析失败时抛出异常
*/
@Override
@Java110Transactional
public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
// 生成费用ID
String feeId = GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_feeId);
reqJson.put("feeId", feeId);
// 执行停车位出售/出租操作
sellParkingSpace(reqJson);
// 设置车辆号码类型(出售S/出租H)
reqJson.put("carNumType", reqJson.getString("sellOrHire"));
// 修改停车位状态
modifySellParkingSpaceState(reqJson);
}
/**
* 修改停车位状态信息
* 根据出售/出租操作更新停车位的状态
*
* @param paramInJson 接口调用方传入的参数JSON对象
*/
public void modifySellParkingSpaceState(JSONObject paramInJson) {
// 构建停车位查询条件
ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto();
parkingSpaceDto.setCommunityId(paramInJson.getString("communityId"));
parkingSpaceDto.setPsId(paramInJson.getString("psId"));
// 查询停车位信息
List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto);
// 验证查询结果
if (parkingSpaceDtos == null || parkingSpaceDtos.size() != 1) {
// 如果未查询到或查询到多个停车位,直接返回不处理
//throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "未查询到停车位信息" + JSONObject.toJSONString(parkingSpaceDto));
return;
}
// 获取查询到的停车位信息
parkingSpaceDto = parkingSpaceDtos.get(0);
// 构建停车位更新对象
JSONObject businessParkingSpace = new JSONObject();
businessParkingSpace.putAll(BeanConvertUtil.beanCovertMap(parkingSpaceDto));
// 设置新的停车位状态
businessParkingSpace.put("state", paramInJson.getString("carNumType"));
// 转换为PO对象并执行更新
ParkingSpacePo parkingSpacePo = BeanConvertUtil.covertBean(businessParkingSpace, ParkingSpacePo.class);
int flag = parkingSpaceV1InnerServiceSMOImpl.updateParkingSpace(parkingSpacePo);
if (flag < 1) {
throw new CmdException("修改车位失败");
}
}
/**
* 出售/出租停车位
* 保存车辆信息到车主车辆表
*
* @param paramInJson 接口调用方传入的参数JSON对象
*/
public void sellParkingSpace(JSONObject paramInJson) {
// 构建车主车辆业务对象
JSONObject businessOwnerCar = new JSONObject();
businessOwnerCar.putAll(paramInJson);
// 生成车辆成员ID
businessOwnerCar.put("memberId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_carId));
// 处理车辆ID,如果不存在或为负数则使用生成的ID
if (!paramInJson.containsKey("carId") || paramInJson.getString("carId").startsWith("-")) {
businessOwnerCar.put("carId", businessOwnerCar.getString("memberId"));
}
// 转换为PO对象
OwnerCarPo ownerCarPo = BeanConvertUtil.covertBean(businessOwnerCar, OwnerCarPo.class);
// 设置车辆状态为正常
ownerCarPo.setState(OwnerCarDto.STATE_NORMAL);
// 如果没有指定车辆类型,则设置为主要车辆
if (!paramInJson.containsKey("carTypeCd") || StringUtil.isEmpty(paramInJson.getString("carTypeCd"))) {
ownerCarPo.setCarTypeCd(OwnerCarDto.CAR_TYPE_PRIMARY);
}
// 处理车辆属性信息
dealOwnerCarAttr(paramInJson, ownerCarPo);
// 保存车辆信息
int flag = ownerCarV1InnerServiceSMOImpl.saveOwnerCar(ownerCarPo);
if (flag < 1) {
throw new CmdException("保存车辆失败");
}
}
/**
* 处理车主车辆属性
* 保存车辆的扩展属性信息
*
* @param paramInJson 接口调用方传入的参数JSON对象
* @param ownerCarPo 车主车辆PO对象
*/
private void dealOwnerCarAttr(JSONObject paramInJson, OwnerCarPo ownerCarPo) {
// 检查是否存在属性数据
if (!paramInJson.containsKey("attrs")) {
return;
}
// 获取属性数组
JSONArray attrs = paramInJson.getJSONArray("attrs");
if (attrs.size() < 1) {
return;
}
// 遍历并保存每个属性
JSONObject attr = null;
int flag = 0;
for (int attrIndex = 0; attrIndex < attrs.size(); attrIndex++) {
attr = attrs.getJSONObject(attrIndex);
OwnerCarAttrPo ownerCarAttrPo = new OwnerCarAttrPo();
// 生成属性ID
ownerCarAttrPo.setAttrId(GenerateCodeFactory.getAttrId());
// 设置项目ID
ownerCarAttrPo.setCommunityId(ownerCarPo.getCommunityId());
// 设置车辆ID
ownerCarAttrPo.setCarId(ownerCarPo.getCarId());
// 设置规格代码和值
ownerCarAttrPo.setSpecCd(attr.getString("specCd"));
ownerCarAttrPo.setValue(attr.getString("value"));
// 保存车辆属性
flag = ownerCarAttrInnerServiceSMOImpl.saveOwnerCarAttr(ownerCarAttrPo);
if (flag < 1) {
throw new CmdException("保存车辆属性失败");
}
}
}
}