package org.jeecg.modules.mdc.service.impl; import cn.hutool.core.date.DatePattern; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.compress.utils.Lists; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.jeecg.common.constant.WebsocketConst; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.mdc.dto.MdcEquProDto; import org.jeecg.modules.mdc.entity.AndonOrder; import org.jeecg.modules.mdc.mapper.AndonOrderMapper; import org.jeecg.modules.mdc.service.IAndonOrderService; import org.jeecg.modules.mdc.service.IMdcEquipmentService; import org.jeecg.modules.mdc.util.DateUtils; import org.jeecg.modules.mdc.vo.AndonOrderWebSocketVo; import org.jeecg.modules.message.websocket.WebSocket; import org.jeecg.modules.system.service.ISysUserService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; /** * @Description: andon_order * @Author: jeecg-boot * @Date: 2025-06-11 * @Version: V1.0 */ @Service public class AndonOrderServiceImpl extends ServiceImpl implements IAndonOrderService { @Resource private IMdcEquipmentService mdcEquipmentService; @Resource private WebSocket webSocket; @Resource private ISysUserService userService; @Override public void procedureCall(AndonOrder andonOrder) { if (StringUtils.isBlank(andonOrder.getEquipmentId())) { throw new JeecgBootException("请选择设备!"); } LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String userId = user.getId(); List equipmentIds = Arrays.asList(andonOrder.getEquipmentId().split(StringPool.COMMA)); List equipmentList = mdcEquipmentService.findEquProList(equipmentIds); Map equipmentIdToProductionIdMap = equipmentList.stream().collect(Collectors.toMap(MdcEquProDto::getEquipmentId, comRateDto -> comRateDto)); List list = Lists.newArrayList(); for (String equipmentId : equipmentIds) { AndonOrder andonOrderInfo = new AndonOrder(); andonOrderInfo.setEquipmentId(equipmentId); andonOrderInfo.setPlantName(equipmentIdToProductionIdMap != null && equipmentIdToProductionIdMap.containsKey(equipmentId) ? equipmentIdToProductionIdMap.get(equipmentId).getId() : null); andonOrderInfo.setAndonType(StringPool.ONE); andonOrderInfo.setOrderStatus(StringPool.ONE); andonOrderInfo.setOperator(andonOrder.getOperator()); andonOrderInfo.setOperateTime(new Date()); andonOrderInfo.setResponder(userId); andonOrderInfo.setCallReason(andonOrder.getCallReason()); list.add(andonOrderInfo); } if (this.saveBatch(list)) { List andonOrderWebSocketVoList = Lists.newArrayList(); //设置websocket请求消息数据 for (AndonOrder order : list) { AndonOrderWebSocketVo andonOrderWebSocketVo = new AndonOrderWebSocketVo(); andonOrderWebSocketVo.setEquipmentId(order.getEquipmentId()); andonOrderWebSocketVo.setCallPersonnel(userService.getById(order.getOperator()).getRealname()); andonOrderWebSocketVo.setCallTime(DateUtils.format(order.getOperateTime(), DatePattern.NORM_DATE_PATTERN)); andonOrderWebSocketVo.setCallReason(order.getCallReason()); andonOrderWebSocketVo.setAndonType("程序呼叫"); andonOrderWebSocketVo.setPersonResponsible(user.getRealname()); andonOrderWebSocketVo.setRepairTime(StringPool.EMPTY); andonOrderWebSocketVo.setFaultInfo(StringPool.EMPTY); andonOrderWebSocketVo.setPlantName(equipmentIdToProductionIdMap != null && equipmentIdToProductionIdMap.containsKey(order.getEquipmentId()) ? equipmentIdToProductionIdMap.get(order.getEquipmentId()).getProductionName() : null); andonOrderWebSocketVoList.add(andonOrderWebSocketVo); } //发送websocket请求 JSONObject jsonObject = new JSONObject(); jsonObject.put(WebsocketConst.MSG_CMD, "andon"); jsonObject.put("data", andonOrderWebSocketVoList); webSocket.sendMessage(jsonObject.toJSONString()); } } }