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
|
/**
* 停车位编辑命令类
*
* 该类负责处理停车位信息的编辑操作,包括参数验证和业务逻辑执行。
* 通过注解@Java110Cmd声明服务代码为"parkingSpace.editParkingSpace"。
* 继承自Cmd基类,实现validate和doCmd方法。
*
* @author Java110
* @version 1.0
* @since 2023
*/
package com.java110.community.cmd.parkingSpace;
import com.alibaba.fastjson.JSONObject;
import com.java110.core.annotation.Java110Cmd;
import com.java110.core.context.ICmdDataFlowContext;
import com.java110.core.event.cmd.Cmd;
import com.java110.core.event.cmd.CmdEvent;
import com.java110.dto.parking.ParkingSpaceDto;
import com.java110.intf.community.IParkingSpaceInnerServiceSMO;
import com.java110.intf.community.IParkingSpaceV1InnerServiceSMO;
import com.java110.po.parking.ParkingSpacePo;
import com.java110.utils.constant.BusinessTypeConstant;
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 org.springframework.beans.factory.annotation.Autowired;
import java.text.ParseException;
import java.util.List;
@Java110Cmd(serviceCode = "parkingSpace.editParkingSpace")
public class EditParkingSpaceCmd extends Cmd {
/**
* 停车位内部服务接口
*/
@Autowired
private IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl;
/**
* 停车位V1版本内部服务接口
*/
@Autowired
private IParkingSpaceV1InnerServiceSMO parkingSpaceV1InnerServiceSMOImpl;
/**
* 参数验证方法
*
* 验证编辑停车位请求的必需参数,包括小区ID、停车位ID、停车场ID、车位编号和面积等。
* 同时验证停车位ID的有效性和车位类型修改的合法性。
*
* @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, "psId", "未包含停车位ID");
Assert.jsonObjectHaveKey(reqJson, "paId", "未包含停车场信息");
Assert.jsonObjectHaveKey(reqJson, "num", "请求报文中未包含num");
Assert.jsonObjectHaveKey(reqJson, "area", "请求报文中未包含area");
// 验证停车位ID不能为空
Assert.hasLength(reqJson.getString("psId"), "停车位ID不能为空");
// 验证停车位ID不能以"-"开头,确保是已有ID
if (reqJson.getString("psId").startsWith("-")) {
throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "停车位ID必须为已有ID");
}
// 查询停车位信息,验证停车位是否存在
ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto();
parkingSpaceDto.setCommunityId(reqJson.getString("communityId"));
parkingSpaceDto.setPsId(reqJson.getString("psId"));
List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto);
// 验证查询结果,必须存在且唯一
if (parkingSpaceDtos == null || parkingSpaceDtos.size() != 1) {
throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "未查询到停车位信息" + JSONObject.toJSONString(parkingSpaceDto));
}
// 如果不修改车位类型,直接返回
if (!reqJson.containsKey("parkingType")) {
return;
}
// 如果车位类型没有变化,直接返回
if (parkingSpaceDtos.get(0).getParkingType().equals(reqJson.getString("parkingType"))) {
return;
}
// 验证子母车位的修改限制:子母车位不能修改为其他类型,其他类型也不能修改为子母车位
if (ParkingSpaceDto.TYPE_CD_SON_MOTHER.equals(reqJson.getString("parkingType"))
|| ParkingSpaceDto.TYPE_CD_SON_MOTHER.equals(parkingSpaceDtos.get(0).getParkingType())
) {
throw new CmdException("子母车位不能修改为其他车位,其他车位也不能修改为子母车位!");
}
}
/**
* 执行停车位编辑命令
*
* 根据请求参数更新停车位信息,包括车位编号、面积等属性。
* 先查询现有停车位信息,然后更新到数据库。
*
* @param event 命令事件对象,包含请求相关信息
* @param context 命令数据流上下文,用于获取和设置上下文数据
* @param reqJson 请求参数的JSON对象
* @throws CmdException 当业务执行失败时抛出
* @throws ParseException 当数据解析异常时抛出
*/
@Override
public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
// 查询要编辑的停车位信息
ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto();
parkingSpaceDto.setCommunityId(reqJson.getString("communityId"));
parkingSpaceDto.setPsId(reqJson.getString("psId"));
List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto);
// 验证停车位信息是否存在且唯一
if (parkingSpaceDtos == null || parkingSpaceDtos.size() != 1) {
throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "未查询到停车位信息" + JSONObject.toJSONString(parkingSpaceDto));
}
// 获取现有的停车位信息
parkingSpaceDto = parkingSpaceDtos.get(0);
// 创建业务对象并设置更新数据
JSONObject businessParkingSpace = new JSONObject();
businessParkingSpace.putAll(reqJson);
// 保持原有状态不变
businessParkingSpace.put("state", parkingSpaceDto.getState());
// 将JSON对象转换为停车位PO对象
ParkingSpacePo parkingSpacePo = BeanConvertUtil.covertBean(businessParkingSpace, ParkingSpacePo.class);
// 调用V1版本服务更新停车位信息
// parkingSpaceInnerServiceSMOImpl.updateParkingSpace(parkingSpacePo);
int flag = parkingSpaceV1InnerServiceSMOImpl.updateParkingSpace(parkingSpacePo);
// 检查更新结果,失败时抛出异常
if (flag < 1) {
throw new CmdException("修改车位失败");
}
}
}
|