| package com.ld.igds.verb.manager; | 
|   | 
| import com.bstek.bdf2.core.business.IUser; | 
| import com.ld.igds.common.CoreSerService; | 
| import com.ld.igds.common.DepotStatusService; | 
| import com.ld.igds.constant.BizType; | 
| import com.ld.igds.constant.Constant; | 
| import com.ld.igds.constant.RespCodeEnum; | 
| import com.ld.igds.data.PageResponse; | 
| import com.ld.igds.io.RemoteControlService; | 
| import com.ld.igds.io.RemoteManager; | 
| import com.ld.igds.io.constant.OrderRespEnum; | 
| import com.ld.igds.io.request.DeviceControlRequest; | 
| import com.ld.igds.io.request.ExeDevice; | 
| import com.ld.igds.io.response.DeviceControlResponse; | 
| import com.ld.igds.models.DeviceSer; | 
| import com.ld.igds.order.ExeOrderService; | 
| import com.ld.igds.order.data.ExeRequest; | 
| import com.ld.igds.util.ContextUtil; | 
| import com.ld.igds.verb.AreationConst; | 
| import com.ld.igds.verb.dto.VerbAutoData; | 
| import com.ld.igds.verb.dto.VerbParam; | 
| import com.ld.igds.verb.service.CoreAreationService; | 
| import org.apache.commons.lang3.StringUtils; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.stereotype.Component; | 
|   | 
| import java.util.Date; | 
| import java.util.List; | 
| import java.util.Map; | 
|   | 
|   | 
| /** | 
|  * 通风模块-自动通风相关业务逻辑控制 | 
|  */ | 
| @Component | 
| public class VerbAutoManager { | 
|   | 
|     @Autowired | 
|     private ExeOrderService exeOrderService; | 
|     @Autowired | 
|     private RemoteManager remoteManager; | 
|     @Autowired | 
|     private CoreSerService coreSerService; | 
|     @Autowired | 
|     private CoreAreationService areationService; | 
|     @Autowired | 
|     private DepotStatusService depotCheckService; | 
|   | 
|     public PageResponse<List<VerbAutoData>> listAuto(VerbParam param) { | 
|   | 
|         if (null == param.getCompanyId()) { | 
|             param.setCompanyId(ContextUtil.getCompanyId()); | 
|         } | 
|   | 
|         List<VerbAutoData> list = areationService.listAutoData(param); | 
|   | 
|         if (null == list || list.isEmpty()) { | 
|             return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(), | 
|                     "根据条件没有获取到数据信息,请重试"); | 
|         } | 
|         return new PageResponse<>(RespCodeEnum.CODE_0000, list); | 
|     } | 
|   | 
|     public PageResponse<List<ExeDevice>> listAutoConf(VerbParam param) { | 
|         if (null == param.getCompanyId()) { | 
|             param.setCompanyId(ContextUtil.getCompanyId()); | 
|         } | 
|         if (null == param.getAutoId()) { | 
|             return new PageResponse<>(RespCodeEnum.CODE_1007.getCode(), | 
|                     "没有获取到当前仓的手动模式信息,执行被拒绝!"); | 
|         } | 
|         List<ExeDevice> list = areationService.listAutoConfData(param); | 
|         if (null == list || list.isEmpty()) { | 
|             return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(), | 
|                     "根据条件没有获取到数据信息,请重试"); | 
|         } | 
|         return new PageResponse<>(RespCodeEnum.CODE_0000, list); | 
|     } | 
|   | 
|     public DeviceControlResponse runAuto(VerbParam param) { | 
|         if (null == param.getCompanyId()) { | 
|             param.setCompanyId(ContextUtil.getCompanyId()); | 
|         } | 
|   | 
|         VerbAutoData areationAuto = areationService.queryAutoDataById(param); | 
|   | 
|         if (null == areationAuto) { | 
|             return new DeviceControlResponse( | 
|                     OrderRespEnum.ORDER_ERROR.getCode(), "系统没有获取自动执行模式信息,执行失败"); | 
|         } | 
|   | 
|         if (AreationConst.EXE_MODE_01.equals(areationAuto.getExeMode())) { | 
|             return exeAutoBySys(param, areationAuto); | 
|         } | 
|   | 
|         if (AreationConst.EXE_MODE_02.equals(areationAuto.getExeMode())) { | 
|             return exeAutoBySer(param, areationAuto); | 
|         } | 
|   | 
|         return new DeviceControlResponse( | 
|                 OrderRespEnum.ORDER_ERROR.getCode(), "系统不支持当前执行方式"); | 
|     } | 
|   | 
|     /** | 
|      * 控制柜执行模式 | 
|      * | 
|      * @param param | 
|      * @param autoData | 
|      * @return | 
|      */ | 
|     private DeviceControlResponse exeAutoBySer(VerbParam param, VerbAutoData autoData) { | 
|         return new DeviceControlResponse(OrderRespEnum.ORDER_ERROR.getCode(), | 
|                 "抱歉,控制柜执行模式暂未开启"); | 
|     } | 
|   | 
|     /** | 
|      * 系统执行自动通风-方案 | 
|      * | 
|      * @param param | 
|      * @param areationAuto | 
|      * @return | 
|      */ | 
|     private DeviceControlResponse exeAutoBySys(VerbParam param, VerbAutoData areationAuto) { | 
|   | 
|         if (null == areationAuto.getListConf()) { | 
|             return new DeviceControlResponse( | 
|                     OrderRespEnum.ORDER_ERROR.getCode(), | 
|                     "没有获取到需要被执行的设备信息,请重新选择执行"); | 
|         } | 
|   | 
|         // 设备进行分组,KEY= 分机编码 | 
|         Map<String, List<ExeDevice>> deviceMap = areationService.getExeDeviceByAutoConf(areationAuto.getListConf(), param.getModeClose()); | 
|         if (null == deviceMap) { | 
|             return new DeviceControlResponse( | 
|                     OrderRespEnum.ORDER_ERROR.getCode(), | 
|                     "当前方案未配置执行设备配置,无法执行"); | 
|         } | 
|   | 
|         // 添加仓库逻辑验证 | 
|         String msg = depotCheckService.checkDepotStatus(param.getCompanyId(), param.getDepotId(), areationAuto.getListConf()); | 
|         if (null != msg) { | 
|             return new DeviceControlResponse(OrderRespEnum.ORDER_ERROR.getCode(), msg); | 
|         } | 
|   | 
|         msg = ""; | 
|         DeviceSer ser; | 
|         RemoteControlService remoteControlService; | 
|         DeviceControlResponse deviceControlResponse; | 
|         int tagSuccessNum = deviceMap.size(); | 
|   | 
|         for (String serId : deviceMap.keySet()) { | 
|             ser = coreSerService.getCacheSer(param.getCompanyId(), serId); | 
|             if (null == ser || Constant.YN_N.equals(ser.getStatus())) { | 
|                 msg += ser.getName() + "-不在线,无法执行"; | 
|                 tagSuccessNum--; | 
|                 continue; | 
|             } | 
|             remoteControlService = remoteManager.getRemoteControlService(ser.getProtocol()); | 
|             if (null == remoteControlService) { | 
|                 msg += "控制柜=" + ser.getName() + " 协议未实现,无法执行!"; | 
|                 tagSuccessNum--; | 
|                 continue; | 
|             } | 
|   | 
|             DeviceControlRequest request = new DeviceControlRequest(); | 
|             request.setDepotId(param.getDepotId()); | 
|             request.setCompanyId(param.getCompanyId()); | 
|             request.setBizType(BizType.AREATION.getCode()); | 
|             request.setDepotName(param.getDepotId()); | 
|             request.setSerId(ser.getId()); | 
|             request.setSerName(ser.getName()); | 
|             request.setIp(ser.getIp()); | 
|             request.setPort(ser.getPort()); | 
|             request.setDeviceList(deviceMap.get(serId)); | 
|             request.setProtocol(ser.getProtocol()); | 
|   | 
|             deviceControlResponse = remoteControlService.deviceControl(request); | 
|             if (OrderRespEnum.ORDER_SUCCESS.getCode().equals(deviceControlResponse.getCode())) { | 
|                 msg += ser.getName() + "-命令发送失败:" + deviceControlResponse.getMsg(); | 
|                 tagSuccessNum--; | 
|                 continue; | 
|             } else { | 
|                 exeOrderService.addControlCacheAndLog(new ExeRequest(request, true)); | 
|             } | 
|         } | 
|   | 
|         if (tagSuccessNum <= 0) { | 
|             return new DeviceControlResponse( | 
|                     OrderRespEnum.ORDER_ERROR.getCode(), | 
|                     "执行失败:" + msg); | 
|         } else { | 
|             if ("".equals(msg)) { | 
|                 return new DeviceControlResponse( | 
|                         OrderRespEnum.ORDER_SUCCESS.getCode(), | 
|                         "命令发送成功,等待执行结果"); | 
|             } | 
|             return new DeviceControlResponse( | 
|                     OrderRespEnum.ORDER_SUCCESS.getCode(), | 
|                     "命令发送完成,部分执行失败:" + msg); | 
|         } | 
|     } | 
|   | 
|     public DeviceControlResponse stopAuto(VerbParam param) { | 
|         if (null == param.getCompanyId()) { | 
|             param.setCompanyId(ContextUtil.getCompanyId()); | 
|         } | 
|   | 
|         VerbAutoData areationAuto = areationService.queryAutoDataById(param); | 
|   | 
|         if (null == areationAuto) { | 
|             return new DeviceControlResponse( | 
|                     OrderRespEnum.ORDER_ERROR.getCode(), "系统没有获取自动执行模式信息,执行失败"); | 
|         } | 
|   | 
|         if (AreationConst.EXE_MODE_01.equals(areationAuto.getExeMode())) { | 
|             return exeAutoBySys(param, areationAuto); | 
|         } | 
|   | 
|         if (AreationConst.EXE_MODE_02.equals(areationAuto.getExeMode())) { | 
|             return exeAutoBySer(param, areationAuto); | 
|         } | 
|   | 
|         return new DeviceControlResponse(OrderRespEnum.ORDER_ERROR.getCode(), "系统不支持当前执行方式"); | 
|     } | 
|   | 
|     public PageResponse<String> updateAuto(VerbAutoData data) { | 
|         if (StringUtils.isEmpty(data.getCompanyId())) { | 
|             IUser user = ContextUtil.getLoginUser(); | 
|             data.setCompanyId(user.getCompanyId()); | 
|             data.setDeptId(ContextUtil.subDeptId(user)); | 
|         } | 
|   | 
|         if (StringUtils.isEmpty(data.getExeMode())) { | 
|             data.setExeMode(AreationConst.EXE_MODE_01); | 
|         } | 
|   | 
|         data.setUpdateTime(new Date()); | 
|         data.setUpdateUser(ContextUtil.getLoginUserCName()); | 
|   | 
|         String msg = areationService.updateAuto(data); | 
|         return new PageResponse<>(RespCodeEnum.CODE_0000.getCode(), msg); | 
|     } | 
|   | 
|     /** | 
|      * @param param | 
|      * @return | 
|      */ | 
|     public PageResponse<String> updateAutoConf(VerbParam param) { | 
|         if (StringUtils.isEmpty(param.getAutoId())) { | 
|             return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), | 
|                     "没有获取需要被更新的手动模式参数,执行失败!"); | 
|         } | 
|         if (null == param.getDeviceList() || param.getDeviceList().isEmpty()) { | 
|             return new PageResponse<>(RespCodeEnum.CODE_1111.getCode(), | 
|                     "没有获取到设备配置信息,执行失败!"); | 
|         } | 
|   | 
|         String msg = areationService.updateAutoConf(param.getAutoId(), | 
|                 param.getDeviceList()); | 
|   | 
|         return new PageResponse<>(RespCodeEnum.CODE_0000.getCode(), msg); | 
|     } | 
| } |