|
@@ -0,0 +1,139 @@
|
|
|
+package com.persagy.apm.energyalarmstarter.alarmdata.service;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.google.common.collect.Lists;
|
|
|
+import com.persagy.apm.energyalarmstarter.alarmdata.feign.DmpResult;
|
|
|
+import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.alarmrecord.QueryAlarmRecordDTO;
|
|
|
+import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.alarmrecord.UpdateAlarmRecordDTO;
|
|
|
+import com.persagy.apm.energyalarmstarter.alarmdata.model.vo.AlarmRecordItem;
|
|
|
+import com.persagy.apm.energyalarmstarter.alarmdata.mq.model.OrderStateMessage;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
+
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @description: 工单状态变化处理
|
|
|
+ * @author: lixing
|
|
|
+ * @company: Persagy Technology Co.,Ltd
|
|
|
+ * @since: 2020/12/16 9:45 上午
|
|
|
+ * @version: V1.0
|
|
|
+ **/
|
|
|
+@Service
|
|
|
+public class OrderStateChangeService {
|
|
|
+ @Autowired
|
|
|
+ private AlarmRecordServiceImpl alarmRecordService;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 当工单状态变化时,更新报警记录
|
|
|
+ *
|
|
|
+ * @param orderStateMessage 工单状态变化消息
|
|
|
+ * @author lixing
|
|
|
+ * @version V1.0 2021/11/15 12:08 下午
|
|
|
+ */
|
|
|
+ public void updateAlarmWhenOrderStateChange(OrderStateMessage orderStateMessage) throws Exception {
|
|
|
+ // 根据工单状态获取对应的报警处理状态
|
|
|
+ Integer alarmTreatState = getAlarmTreatState(orderStateMessage.getOrder_state());
|
|
|
+ if (alarmTreatState == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 根据工单id获取要修改的报警记录
|
|
|
+ List<AlarmRecordItem> alarmRecords = getAlarmRecordsByOrderId(orderStateMessage.getOrder_id());
|
|
|
+ if (CollectionUtils.isEmpty(alarmRecords)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新报警记录状态
|
|
|
+ for (AlarmRecordItem alarmRecord : alarmRecords) {
|
|
|
+ // 如果报警记录中工单状态已经为处理完成,不再更新报警
|
|
|
+ if (workOrderDone(Integer.valueOf(alarmRecord.getOrderState()))) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ UpdateAlarmRecordDTO updateAlarmRecordDTO = new UpdateAlarmRecordDTO();
|
|
|
+ // url参数设置为默认值
|
|
|
+ updateAlarmRecordDTO.setDefaultUrlParam();
|
|
|
+ updateAlarmRecordDTO.setTreatState(alarmTreatState);
|
|
|
+ updateAlarmRecordDTO.setOrderState(String.valueOf(orderStateMessage.getOrder_state()));
|
|
|
+ alarmRecordService.update(updateAlarmRecordDTO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断工单状态是否为已完成
|
|
|
+ *
|
|
|
+ * @param workOrderState
|
|
|
+ * @return boolean
|
|
|
+ * @exception
|
|
|
+ * @author lixing
|
|
|
+ * @version V1.0 2021/9/14 6:02 下午
|
|
|
+ */
|
|
|
+ private boolean workOrderDone(Integer workOrderState) {
|
|
|
+ if (workOrderState == null) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ switch (workOrderState){
|
|
|
+ case 7:
|
|
|
+ case 8:
|
|
|
+ case 9:
|
|
|
+ case 10:
|
|
|
+ return true;
|
|
|
+ default:
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据工单id获取对应的报警记录
|
|
|
+ *
|
|
|
+ * @param orderId 工单id
|
|
|
+ * @return 报警记录列表
|
|
|
+ * @author lixing
|
|
|
+ * @version V1.0 2021/11/15 12:01 下午
|
|
|
+ */
|
|
|
+ private List<AlarmRecordItem> getAlarmRecordsByOrderId(String orderId) throws Exception {
|
|
|
+ QueryAlarmRecordDTO queryAlarmRecordDTO = new QueryAlarmRecordDTO();
|
|
|
+ // url参数设置为默认值
|
|
|
+ queryAlarmRecordDTO.setDefaultUrlParam();
|
|
|
+ // 查询条件
|
|
|
+ queryAlarmRecordDTO.setOrderId(Lists.newArrayList(orderId));
|
|
|
+ DmpResult<List<AlarmRecordItem>> queryResult = alarmRecordService.query(queryAlarmRecordDTO);
|
|
|
+
|
|
|
+ String resultSuccess = "success";
|
|
|
+ if (resultSuccess.equals(queryResult.getResult())) {
|
|
|
+ return queryResult.getData();
|
|
|
+ } else {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @description: 根据工单状态获取对应的报警处理状态
|
|
|
+ * @param: orderState 工单状态
|
|
|
+ * @return: java.lang.Integer
|
|
|
+ * @exception:
|
|
|
+ * @author: lixing
|
|
|
+ * @company: Persagy Technology Co.,Ltd
|
|
|
+ * @since: 2020/12/16 9:58 上午
|
|
|
+ * @version: V1.0
|
|
|
+ */
|
|
|
+ public Integer getAlarmTreatState(int orderState) {
|
|
|
+ int handling = 2, done = 3;
|
|
|
+ switch (orderState) {
|
|
|
+ case 4:
|
|
|
+ case 5:
|
|
|
+ case 6:
|
|
|
+ return handling;
|
|
|
+ case 7:
|
|
|
+ case 8:
|
|
|
+ case 9:
|
|
|
+ case 10:
|
|
|
+ return done;
|
|
|
+ default:
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|