|
|
@@ -1,7 +1,9 @@
|
|
|
package com.yunfeiyun.agmp.iots.core.cmd.core.task;
|
|
|
|
|
|
import com.alibaba.fastjson2.JSONObject;
|
|
|
+import com.yunfeiyun.agmp.common.constant.ErrorCode;
|
|
|
import com.yunfeiyun.agmp.common.enums.RedisCacheKey;
|
|
|
+import com.yunfeiyun.agmp.common.exception.BizException;
|
|
|
import com.yunfeiyun.agmp.common.framework.manager.RedisCacheManager;
|
|
|
import com.yunfeiyun.agmp.common.utils.DateUtils;
|
|
|
import com.yunfeiyun.agmp.common.utils.JSONUtils;
|
|
|
@@ -10,6 +12,7 @@ import com.yunfeiyun.agmp.iot.common.constant.IotErrorCode;
|
|
|
import com.yunfeiyun.agmp.iot.common.constant.cmd.CmdDef;
|
|
|
import com.yunfeiyun.agmp.iot.common.constant.cmd.CmdStatus;
|
|
|
import com.yunfeiyun.agmp.iot.common.constant.cmd.CmdgroupStatus;
|
|
|
+import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
|
|
|
import com.yunfeiyun.agmp.iot.common.domain.IotCmdexec;
|
|
|
import com.yunfeiyun.agmp.iot.common.domain.IotCmdtask;
|
|
|
import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
|
|
|
@@ -17,12 +20,14 @@ import com.yunfeiyun.agmp.iot.common.domain.resvo.IotFirmdevResVo;
|
|
|
import com.yunfeiyun.agmp.iot.common.exception.IotBizException;
|
|
|
import com.yunfeiyun.agmp.iot.common.model.cmd.CmdGroupModel;
|
|
|
import com.yunfeiyun.agmp.iot.common.model.task.TaskResult;
|
|
|
+import com.yunfeiyun.agmp.iots.config.TestConst;
|
|
|
import com.yunfeiyun.agmp.iots.core.cmd.core.serial.SerialTaskModel;
|
|
|
import com.yunfeiyun.agmp.iots.core.cmd.model.CmdExecModel;
|
|
|
import com.yunfeiyun.agmp.iots.device.common.Device;
|
|
|
import com.yunfeiyun.agmp.iot.common.model.cmd.CmdModel;
|
|
|
import com.yunfeiyun.agmp.iots.core.manager.MqttManager;
|
|
|
|
|
|
+import com.yunfeiyun.agmp.iots.exception.IotException;
|
|
|
import com.yunfeiyun.agmp.iots.service.*;
|
|
|
import com.yunfeiyun.agmp.iots.service.checker.CmdResultCheckService;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
@@ -86,36 +91,21 @@ public class CmdTaskService {
|
|
|
// 获取完整设备信息
|
|
|
Map<String, IotDevice> iotDeviceMap = iIotDeviceService.selectIotDeviceByDevBidMap(devBidList);
|
|
|
// 获取设备厂家信息
|
|
|
- List<IotFirmdevResVo> iotFirmdevResVoList = iIotFirmdevService.selectIotFirmdevListByDevBidList(devBidList);
|
|
|
- Map<String, JSONObject> firmdevConfigMap = new HashMap<>();
|
|
|
- // 生成设备厂家信息map
|
|
|
- for (IotFirmdevResVo iotFirmdevResVo : iotFirmdevResVoList) {
|
|
|
- log.info("任务标识:【{}】,装载设备厂商配置信息:【{}】", taskId, iotFirmdevResVo);
|
|
|
- String k = iotFirmdevResVo.getFirmBid() + iotFirmdevResVo.getDevtypeBid();
|
|
|
- JSONObject jsonConfig;
|
|
|
- try {
|
|
|
- jsonConfig = JSONObject.parseObject(iotFirmdevResVo.getFirmdevCfg());
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("请求标识:【{}】,设备厂商配置信息不是标准的JSON格式:{}", e);
|
|
|
- continue;
|
|
|
- }
|
|
|
- firmdevConfigMap.put(k, jsonConfig);
|
|
|
- }
|
|
|
|
|
|
for (CmdExecModel cmdExecModel : cmdExecModels) {
|
|
|
CmdModel cmdModel = cmdExecModel.getCmdModel();
|
|
|
log.info("任务标识:【{}】,开始执行最小任务单元:{}", taskId, cmdModel);
|
|
|
IotDevice iotDevice = iotDeviceMap.get(cmdModel.getDeviceId());
|
|
|
- String k = iotDevice.getFirmBid() + iotDevice.getDevtypeBid();
|
|
|
- JSONObject serviceMap = firmdevConfigMap.get(k);
|
|
|
- if (serviceMap == null || StringUtils.isEmpty(serviceMap.getString("service"))) {
|
|
|
+ //【需要补充】需要换出来ServiceName
|
|
|
+ TestConst.printError("!!!!!!!!!!【看这里:临时测试】这里的serviceName写死了SERVICE_YF_CBD,对接业务时候换掉,取出来");
|
|
|
+ String serviceName = TestConst.serviceName;
|
|
|
+ if (StringUtils.isEmpty(serviceName)) {
|
|
|
cmdExecModel.setCmdStatus(CmdStatus.CMD_STATUS_FAIL.getCode());
|
|
|
cmdExecModel.setErrmsg("指令下发失败:设备:" + iotDevice.getDevCode() + "的对应厂家配置异常,请检查");
|
|
|
cmdExecModel.setCmdFinishTime(DateUtils.dateTimeNow());
|
|
|
cmdResultCheckService.onChecked(cmdExecModel);
|
|
|
throw new IotBizException(IotErrorCode.UNKNOWN_DEVICE_FIRM.getCode(), "设备:" + iotDevice.getDevCode() + "的对应厂家配置异常,请检查");
|
|
|
}
|
|
|
- String serviceName = serviceMap.getString("service");
|
|
|
Device device = mqttManager.getDeviceHandler(serviceName);
|
|
|
if (null == device) {
|
|
|
cmdExecModel.setCmdStatus(CmdStatus.CMD_STATUS_FAIL.getCode());
|
|
|
@@ -249,7 +239,7 @@ public class CmdTaskService {
|
|
|
// 获取当前正在执行的指令集
|
|
|
List<SerialTaskModel> serialTaskModels = getSerialTaskModels(cmdExecModel, iotCmdtask);
|
|
|
if (serialTaskModels.isEmpty()) {
|
|
|
- log.error("执行完了???");
|
|
|
+ log.error("执行完了");
|
|
|
// 该流程的触发原因:
|
|
|
// 1.任务已完成,设备多次上报指令执行结果
|
|
|
return;
|
|
|
@@ -429,7 +419,6 @@ public class CmdTaskService {
|
|
|
|
|
|
// 更新任务状态
|
|
|
log.info("resultCallback 更新任务状态为【{}】,任务id{}", cmdgroupStatus, taskId);
|
|
|
- //iotCmdtaskService.handleIotCmdTaskResult(taskId, cmdgroupStatus.getCode());
|
|
|
IotCmdtask iotCmdtask = new IotCmdtask();
|
|
|
iotCmdtask.setCtBid(taskId);
|
|
|
iotCmdtask.setCtStatus(cmdgroupStatus.getCode());
|
|
|
@@ -448,7 +437,9 @@ public class CmdTaskService {
|
|
|
taskResult.setErrMsg(errMsg);
|
|
|
taskResult.setCompleteDate(DateUtils.dateTimeNow());
|
|
|
//TODO
|
|
|
- // iotsMqService.sendTaskResultMsg(taskResult);
|
|
|
+ // iotsMqService.sendTaskResultMsg(taskResult);
|
|
|
+ TestConst.printError("!!!!!!!!!!【看这里:临时测试】需要完善mq发送回执消息");
|
|
|
+
|
|
|
}
|
|
|
|
|
|
private void resetResultCallback(CmdExecModel cmdExecModel, CmdgroupStatus cmdgroupStatus) {
|
|
|
@@ -459,7 +450,6 @@ public class CmdTaskService {
|
|
|
|
|
|
// 更新任务状态
|
|
|
log.info("resetResultCallback 更新任务状态为【{}】,任务id{}", cmdgroupStatus, cmdExecModel.getTaskUuid());
|
|
|
- //iotCmdtaskService.handleIotCmdTaskResult(cmdExecModel.getTaskUuid(), cmdgroupStatus.getCode());
|
|
|
|
|
|
IotCmdtask findItem = iotCmdtaskService.selectIotCmdtaskByCtBid(cmdExecModel.getTaskUuid());
|
|
|
if (findItem == null) {
|
|
|
@@ -486,12 +476,13 @@ public class CmdTaskService {
|
|
|
taskResult.setCompleteDate(DateUtils.dateTimeNow());
|
|
|
|
|
|
JSONObject ext = new JSONObject();
|
|
|
- ext.put("ctDescribe",findItem.getCtDescribe());
|
|
|
- ext.put("ctDevtype",findItem.getCtDevtype());
|
|
|
- ext.put("ctDevcode",findItem.getCtDevcode());
|
|
|
+ ext.put("ctDescribe", findItem.getCtDescribe());
|
|
|
+ ext.put("ctDevtype", findItem.getCtDevtype());
|
|
|
+ ext.put("ctDevcode", findItem.getCtDevcode());
|
|
|
taskResult.setExtraBody(ext);
|
|
|
// TODO
|
|
|
// iotsMqService.sendTaskResultMsg(taskResult);
|
|
|
+ TestConst.printError("!!!!!!!!!!【看这里:临时测试】需要完善mq发送回执消息");
|
|
|
}
|
|
|
|
|
|
public static long getTimeDifference(String datetime1, String datetime2) {
|