Blame view

service-community/src/main/java/com/java110/community/cmd/ownerRepair/CloseRepairDispatchCmd.java 7.27 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
176
177
178
179
180
181
182
183
  /**
   * 关闭报修派单命令类
   * 
   * 该命令类用于处理报修单的关闭派单操作,主要功能包括:
   * 1. 验证关闭派单请求参数的完整性
   * 2. 更新报修处理人员状态信息
   * 3. 更新报修单状态信息
   * 4. 根据处理结果设置报修单的最终状态
   * 
   * @author Java110
   * @version 1.0
   * @since 2023
   */
  package com.java110.community.cmd.ownerRepair;
  
  import com.alibaba.fastjson.JSONObject;
  import com.java110.core.annotation.Java110Cmd;
  import com.java110.core.context.DataFlowContext;
  import com.java110.core.context.ICmdDataFlowContext;
  import com.java110.core.event.cmd.Cmd;
  import com.java110.core.event.cmd.CmdEvent;
  import com.java110.dto.repair.RepairDto;
  import com.java110.dto.repair.RepairUserDto;
  import com.java110.intf.community.IRepairInnerServiceSMO;
  import com.java110.intf.community.IRepairPoolV1InnerServiceSMO;
  import com.java110.intf.community.IRepairUserInnerServiceSMO;
  import com.java110.intf.community.IRepairUserV1InnerServiceSMO;
  import com.java110.po.owner.RepairPoolPo;
  import com.java110.po.owner.RepairUserPo;
  import com.java110.utils.constant.BusinessTypeConstant;
  import com.java110.utils.constant.StateConstant;
  import com.java110.utils.exception.CmdException;
  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 = "ownerRepair.closeRepairDispatch")
  public class CloseRepairDispatchCmd extends Cmd {
  
      /**
       * 报修内部服务接口
       */
      @Autowired
      private IRepairInnerServiceSMO repairInnerServiceSMOImpl;
  
      /**
       * 报修用户内部服务接口
       */
      @Autowired
      private IRepairUserInnerServiceSMO repairUserInnerServiceSMOImpl;
  
      /**
       * 报修用户V1版本内部服务接口
       */
      @Autowired
      private IRepairUserV1InnerServiceSMO repairUserV1InnerServiceSMOImpl;
  
      /**
       * 报修池V1版本内部服务接口
       */
      @Autowired
      private IRepairPoolV1InnerServiceSMO repairPoolV1InnerServiceSMOImpl;
  
      /**
       * 验证请求参数
       * 
       * 该方法用于验证关闭报修派单请求的必需参数是否完整
       * 
       * @param event 命令事件对象,包含请求相关信息
       * @param context 命令数据流上下文,用于获取和设置上下文数据
       * @param reqJson 请求参数的JSON对象
       * @throws CmdException 当参数验证失败时抛出异常
       */
      @Override
      public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException {
          // 验证必需参数是否存在
          Assert.hasKeyAndValue(reqJson, "state", "未包含处理信息");
          Assert.hasKeyAndValue(reqJson, "context", "未包含处理内容");
          Assert.hasKeyAndValue(reqJson, "repairId", "未包含报修单信息");
          Assert.hasKeyAndValue(reqJson, "communityId", "未包含小区信息");
          Assert.hasKeyAndValue(reqJson, "staffId", "未包含员工ID");
      }
  
      /**
       * 执行关闭报修派单命令
       * 
       * 该方法负责执行关闭报修派单的核心业务逻辑,包括:
       * 1. 更新报修处理人员信息
       * 2. 更新报修单状态信息
       * 
       * @param event 命令事件对象
       * @param context 命令数据流上下文
       * @param reqJson 请求参数的JSON对象
       * @throws CmdException 当业务处理失败时抛出异常
       * @throws ParseException 当数据解析异常时抛出异常
       */
      @Override
      public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
          // 更新报修处理人员信息
          modifyBusinessRepairUser(reqJson);
          // 更新报修单状态信息
          modifyBusinessRepair(reqJson);
      }
  
      /**
       * 修改报修处理人员业务信息
       * 
       * 该方法用于更新指定报修单处理人员的状态和处理内容
       * 
       * @param paramInJson 包含更新参数的JSON对象,必须包含:
       *                   - repairId: 报修单ID
       *                   - staffId: 员工ID
       *                   - state: 处理状态
       *                   - context: 处理内容
       * @throws CmdException 当更新失败或查询到多条数据时抛出异常
       */
      public void modifyBusinessRepairUser(JSONObject paramInJson) {
          // 构建查询条件
          RepairUserDto repairUserDto = new RepairUserDto();
          repairUserDto.setRepairId(paramInJson.getString("repairId"));
          repairUserDto.setUserId(paramInJson.getString("staffId"));
          
          // 查询报修处理人员信息
          List<RepairUserDto> repairUserDtos = repairUserInnerServiceSMOImpl.queryRepairUsers(repairUserDto);
          
          // 验证查询结果,确保只查询到一条记录
          Assert.isOne(repairUserDtos, "查询到多条数据,repairId=" + repairUserDto.getRepairId() + " userId = " + repairUserDto.getUserId());
          
          // 构建更新数据
          JSONObject businessObj = new JSONObject();
          businessObj.putAll(BeanConvertUtil.beanCovertMap(repairUserDtos.get(0)));
          businessObj.put("state", paramInJson.getString("state"));
          businessObj.put("context", paramInJson.getString("context"));
  
          // 转换为PO对象并执行更新
          RepairUserPo repairUserPo = BeanConvertUtil.covertBean(businessObj, RepairUserPo.class);
          int flag = repairUserV1InnerServiceSMOImpl.updateRepairUserNew(repairUserPo);
          
          // 验证更新结果
          if (flag < 1) {
              throw new CmdException("修改用户失败");
          }
      }
  
      /**
       * 修改报修单业务信息
       * 
       * 该方法用于更新报修单的状态信息,根据处理结果设置不同的状态值
       * 
       * @param paramInJson 包含更新参数的JSON对象,必须包含:
       *                   - repairId: 报修单ID
       *                   - state: 处理状态
       * @throws CmdException 当更新失败或查询到多条数据时抛出异常
       */
      public void modifyBusinessRepair(JSONObject paramInJson) {
          // 查询报修单
          RepairDto repairDto = new RepairDto();
          repairDto.setRepairId(paramInJson.getString("repairId"));
  
          List<RepairDto> repairDtos = repairInnerServiceSMOImpl.queryRepairs(repairDto);
  
          // 验证查询结果,确保只查询到一条记录
          Assert.isOne(repairDtos, "查询到多条数据,repairId=" + repairDto.getRepairId());
  
          // 构建更新数据
          JSONObject businessOwnerRepair = new JSONObject();
          businessOwnerRepair.putAll(BeanConvertUtil.beanCovertMap(repairDtos.get(0)));
          // 根据处理状态设置报修单最终状态:10002表示派单完成,其他表示未派单
          businessOwnerRepair.put("state", "10002".equals(paramInJson.getString("state")) ? StateConstant.REPAIR_DISPATCH_FINISH : StateConstant.REPAIR_NO_DISPATCH);
  
          // 转换为PO对象并执行更新
          RepairPoolPo repairPoolPo = BeanConvertUtil.covertBean(businessOwnerRepair, RepairPoolPo.class);
          int flag = repairPoolV1InnerServiceSMOImpl.updateRepairPoolNew(repairPoolPo);
          
          // 验证更新结果
          if (flag < 1) {
              throw new CmdException("修改失败");
          }
      }
  }