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> listAuto(VerbParam param) { if (null == param.getCompanyId()) { param.setCompanyId(ContextUtil.getCompanyId()); } List 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> listAutoConf(VerbParam param) { if (null == param.getCompanyId()) { param.setCompanyId(ContextUtil.getCompanyId()); } if (null == param.getAutoId()) { return new PageResponse<>(RespCodeEnum.CODE_1007.getCode(), "没有获取到当前仓的手动模式信息,执行被拒绝!"); } List 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> 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 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 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); } }