Blame view

service-community/src/main/java/com/java110/community/cmd/communitySpace/SaveCommunitySpaceConfirmOrderCmd.java 9.23 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
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
  /*
   * Copyright 2017-2020 吴学文 and java110 team.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  package com.java110.community.cmd.communitySpace;
  
  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.doc.annotation.*;
  import com.java110.dto.community.CommunitySpaceConfirmOrderDto;
  import com.java110.dto.community.CommunitySpacePersonTimeDto;
  import com.java110.intf.community.ICommunitySpaceConfirmOrderV1InnerServiceSMO;
  import com.java110.intf.community.ICommunitySpacePersonTimeV1InnerServiceSMO;
  import com.java110.po.communitySpace.CommunitySpaceConfirmOrderPo;
  import com.java110.po.communitySpace.CommunitySpacePersonTimePo;
  import com.java110.utils.exception.CmdException;
  import com.java110.utils.util.Assert;
  import com.java110.utils.util.BeanConvertUtil;
  import com.java110.vo.ResultVo;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  import org.springframework.beans.factory.annotation.Autowired;
  
  import java.util.List;
  
  
  @Java110CmdDoc(title = "场地预约核销",
          description = "手机端 生成二维码 然后扫码枪扫码核销",
          httpMethod = "post",
          url = "http://{ip}:{port}/app/communitySpace.saveCommunitySpaceConfirmOrder",
          resource = "communityDoc",
          author = "吴学文",
          serviceCode = "communitySpace.saveCommunitySpaceConfirmOrder"
  )
  
  @Java110ParamsDoc(params = {
          @Java110ParamDoc(name = "timeId", length = 11, remark = "预约时间ID"),
          @Java110ParamDoc(name = "communityId", length = 30, remark = "小区ID"),
  })
  
  @Java110ResponseDoc(
          params = {
                  @Java110ParamDoc(name = "code", type = "int", length = 11, defaultValue = "0", remark = "返回编号,0 成功 其他失败"),
                  @Java110ParamDoc(name = "msg", type = "String", length = 250, defaultValue = "成功", remark = "描述"),
                  @Java110ParamDoc(name = "data", type = "Array", remark = "有效数据"),
                  @Java110ParamDoc(parentNodeName = "data", name = "appointmentTime", type = "String", remark = "预约时间"),
                  @Java110ParamDoc(parentNodeName = "data", name = "remark", type = "String", remark = "备注"),
                  @Java110ParamDoc(parentNodeName = "data", name = "createTime", type = "String", remark = "核销时间"),
                  @Java110ParamDoc(parentNodeName = "data", name = "hours", type = "String", remark = "核销小时"),
                  @Java110ParamDoc(parentNodeName = "data", name = "spaceName", type = "String", remark = "场地"),
                  @Java110ParamDoc(parentNodeName = "data", name = "personName", type = "String", remark = "预约人"),
                  @Java110ParamDoc(parentNodeName = "data", name = "personTel", type = "String", remark = "预约电话"),
          }
  )
  
  @Java110ExampleDoc(
          reqBody = "{\n" +
                  "       timeId: '123',\n" +
                  "       communityId: '2123123123'\n" +
                  "}",
          resBody = "{\"code\":0,\"data\":[{\"appointmentTime\":\"2022-10-04\",\"communityId\":\"2022081539020475\",\"createTime\":\"2022-10-14 17:51:27\",\"cspId\":\"102022100465470002\",\"hours\":\"0\",\"orderId\":\"102022101460720007\",\"page\":-1,\"personName\":\"张三\",\"personTel\":\"18909711445\",\"records\":0,\"row\":0,\"spaceId\":\"102022100486970002\",\"spaceName\":\"1场地\",\"statusCd\":\"0\",\"timeId\":\"102022100469010004\",\"total\":0}],\"msg\":\"成功\",\"page\":0,\"records\":1,\"rows\":0,\"total\":1}"
  )
  
  /**
   * 场地预约核销命令类
   * 负责处理社区场地预约的核销操作,包括验证预约记录、更新预约状态和生成核销订单
   * 通过扫码枪扫描用户生成的二维码来完成核销流程
   * 
   * @author 吴学文
   * @version 1.0
   * @since 2022-10-14
   */
  @Java110Cmd(serviceCode = "communitySpace.saveCommunitySpaceConfirmOrder")
  public class SaveCommunitySpaceConfirmOrderCmd extends Cmd {
  
      private static Logger logger = LoggerFactory.getLogger(SaveCommunitySpaceConfirmOrderCmd.class);
  
      /** 订单ID前缀 */
      public static final String CODE_PREFIX_ID = "10";
  
      /** 社区场地核销订单服务接口 */
      @Autowired
      private ICommunitySpaceConfirmOrderV1InnerServiceSMO communitySpaceConfirmOrderV1InnerServiceSMOImpl;
  
      /** 社区场地人员时间服务接口 */
      @Autowired
      private ICommunitySpacePersonTimeV1InnerServiceSMO communitySpacePersonTimeV1InnerServiceSMOImpl;
  
      /**
       * 验证请求参数
       * 检查请求报文中是否包含必要的参数
       *
       * @param event 命令事件对象
       * @param cmdDataFlowContext 命令数据流上下文
       * @param reqJson 请求的JSON对象
       */
      @Override
      public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) {
          // 验证请求报文中必须包含timeId参数
          Assert.hasKeyAndValue(reqJson, "timeId", "请求报文中未包含timeId");
          // 验证请求报文中必须包含communityId参数
          Assert.hasKeyAndValue(reqJson, "communityId", "请求报文中未包含communityId");
      }
  
      /**
       * 执行场地预约核销命令
       * 主要流程:查询预约记录 -> 更新预约状态 -> 生成核销订单 -> 返回核销结果
       *
       * @param event 命令事件对象
       * @param cmdDataFlowContext 命令数据流上下文
       * @param reqJson 请求的JSON对象
       * @throws CmdException 当核销过程中出现错误时抛出
       */
      @Override
      @Java110Transactional
      public void doCmd(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) throws CmdException {
  
          // 构建查询条件,查找待核销的预约记录
          CommunitySpacePersonTimeDto communitySpacePersonTimeDto = new CommunitySpacePersonTimeDto();
          communitySpacePersonTimeDto.setTimeId(reqJson.getString("timeId")); // 设置预约时间ID
          communitySpacePersonTimeDto.setCommunityId(reqJson.getString("communityId")); // 设置小区ID
          communitySpacePersonTimeDto.setState(CommunitySpacePersonTimeDto.STATE_WAIT_CONFIRM); // 设置状态为待核销
          // 查询符合条件的预约记录
          List<CommunitySpacePersonTimeDto> communitySpacePersonTimeDtos = communitySpacePersonTimeV1InnerServiceSMOImpl.queryCommunitySpacePersonTimes(communitySpacePersonTimeDto);
  
          // 验证查询结果,确保有且只有一条预约记录
          Assert.listOnlyOne(communitySpacePersonTimeDtos, "未包含预约记录");
  
          // 将预约时间状态更新为已完成(核销中)
          CommunitySpacePersonTimePo communitySpacePersonTimePo = new CommunitySpacePersonTimePo();
          communitySpacePersonTimePo.setTimeId(communitySpacePersonTimeDtos.get(0).getTimeId()); // 设置要更新的时间ID
          communitySpacePersonTimePo.setState(CommunitySpacePersonTimeDto.STATE_FINISH); // 设置状态为已完成
          // 执行更新操作
          int flag = communitySpacePersonTimeV1InnerServiceSMOImpl.updateCommunitySpacePersonTime(communitySpacePersonTimePo);
          if (flag < 1) {
              throw new CmdException("核销预约失败"); // 更新失败时抛出异常
          }
  
          // 创建核销订单记录
          CommunitySpaceConfirmOrderPo communitySpaceConfirmOrderPo = BeanConvertUtil.covertBean(reqJson, CommunitySpaceConfirmOrderPo.class);
          communitySpaceConfirmOrderPo.setOrderId(GenerateCodeFactory.getGeneratorId(CODE_PREFIX_ID)); // 生成订单ID
          communitySpaceConfirmOrderPo.setSpaceId(communitySpacePersonTimeDtos.get(0).getSpaceId()); // 设置场地ID
          communitySpaceConfirmOrderPo.setCspId(communitySpacePersonTimeDtos.get(0).getCspId()); // 设置社区场地人员ID
  
          // 保存核销订单
          flag = communitySpaceConfirmOrderV1InnerServiceSMOImpl.saveCommunitySpaceConfirmOrder(communitySpaceConfirmOrderPo);
          if (flag < 1) {
              throw new CmdException("核销数据失败"); // 保存失败时抛出异常
          }
          
          // 查询刚创建的核销订单详情
          CommunitySpaceConfirmOrderDto communitySpaceConfirmOrderDto = new CommunitySpaceConfirmOrderDto();
          communitySpaceConfirmOrderDto.setOrderId(communitySpaceConfirmOrderPo.getOrderId()); // 设置订单ID作为查询条件
          List<CommunitySpaceConfirmOrderDto> communitySpaceConfirmOrderDtos = communitySpaceConfirmOrderV1InnerServiceSMOImpl.queryCommunitySpaceConfirmOrders(communitySpaceConfirmOrderDto);
  
          // 设置响应结果,返回核销订单详情
          cmdDataFlowContext.setResponseEntity(ResultVo.createResponseEntity(communitySpaceConfirmOrderDtos));
      }
  }