Blame view

service-community/src/main/java/com/java110/community/cmd/parkingSpace/EditParkingSpaceCmd.java 6.7 KB
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
  /**
   * 停车位编辑命令类
   * 
   * 该类负责处理停车位信息的编辑操作,包括参数验证和业务逻辑执行。
   * 通过注解@Java110Cmd声明服务代码为"parkingSpace.editParkingSpace"
   * 继承自Cmd基类,实现validatedoCmd方法。
   * 
   * @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;
  
      /**
       * 参数验证方法
       * 
9750b443   王彪总   fix(config): 更新配置...
52
       * 验证编辑停车位请求的必需参数,包括项目ID、停车位ID、停车场ID、车位编号和面积等。
88e030b7   王彪总   init project
53
54
55
56
57
58
59
60
61
62
       * 同时验证停车位ID的有效性和车位类型修改的合法性。
       * 
       * @param event 命令事件对象,包含请求相关信息
       * @param context 命令数据流上下文,用于获取和设置上下文数据
       * @param reqJson 请求参数的JSON对象
       * @throws CmdException 当参数验证失败或业务逻辑异常时抛出
       */
      @Override
      public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException {
          // 验证必需参数是否存在
9750b443   王彪总   fix(config): 更新配置...
63
          Assert.jsonObjectHaveKey(reqJson, "communityId", "未包含项目ID");
88e030b7   王彪总   init project
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
          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("修改车位失败");
          }
      }
  }