hyingbo
4 天以前 4788f8d86807296a3dce75b5dd428c0a8d5828db
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/AndonOrderServiceImpl.java
@@ -2,14 +2,21 @@
import cn.hutool.core.date.DatePattern;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
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 com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.constant.WebsocketConst;
import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.board.vo.EquAndon;
import org.jeecg.modules.mdc.dto.MdcEquProDto;
import org.jeecg.modules.mdc.entity.AndonOrder;
import org.jeecg.modules.mdc.mapper.AndonOrderMapper;
@@ -17,18 +24,22 @@
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.mdc.vo.MdcDeviceCalendarVo;
import org.jeecg.modules.message.websocket.WebSocket;
import org.jeecg.modules.system.service.ISysDictService;
import org.jeecg.modules.system.service.ISysUserService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.stream.Collectors;
/**
 * @Description: andon_order
 * @Author: jeecg-boot
 * @Date:   2025-06-11
 * @Date: 2025-06-11
 * @Version: V1.0
 */
@Service
@@ -40,7 +51,13 @@
    private WebSocket webSocket;
    @Resource
    private ISysUserService userService;
    @Resource
    private ISysDictService sysDictService;
    @Resource
    private ISysBaseAPI sysBaseApi;
    @Override
    @Transactional
    public void procedureCall(AndonOrder andonOrder) {
        if (StringUtils.isBlank(andonOrder.getEquipmentId())) {
            throw new JeecgBootException("请选择设备!");
@@ -57,9 +74,10 @@
            andonOrderInfo.setEquipmentId(equipmentId);
            andonOrderInfo.setPlantName(equipmentIdToProductionIdMap != null && equipmentIdToProductionIdMap.containsKey(equipmentId) ? equipmentIdToProductionIdMap.get(equipmentId).getId() : null);
            andonOrderInfo.setAndonType(StringPool.ONE);
            andonOrderInfo.setOperator(andonOrder.getOperator());
            andonOrderInfo.setOrderStatus(StringPool.ONE);
            andonOrderInfo.setOperator(userId);
            andonOrderInfo.setOperateTime(new Date());
            andonOrderInfo.setResponder(userId);
            andonOrderInfo.setResponder(andonOrder.getOperator());
            andonOrderInfo.setCallReason(andonOrder.getCallReason());
            list.add(andonOrderInfo);
        }
@@ -75,6 +93,9 @@
                andonOrderWebSocketVo.setCallReason(order.getCallReason());
                andonOrderWebSocketVo.setAndonType("程序呼叫");
                andonOrderWebSocketVo.setPersonResponsible(user.getRealname());
                andonOrderWebSocketVo.setRepairTime(StringPool.EMPTY);
                andonOrderWebSocketVo.setFaultInfo(StringPool.EMPTY);
                andonOrderWebSocketVo.setType("open");
                andonOrderWebSocketVo.setPlantName(equipmentIdToProductionIdMap != null && equipmentIdToProductionIdMap.containsKey(order.getEquipmentId()) ? equipmentIdToProductionIdMap.get(order.getEquipmentId()).getProductionName() : null);
                andonOrderWebSocketVoList.add(andonOrderWebSocketVo);
            }
@@ -86,4 +107,130 @@
            webSocket.sendMessage(jsonObject.toJSONString());
        }
    }
    /**
     * 安灯问题列表
     */
    @Override
    public List<EquAndon> equAndonList(List<String> equipmentIdList) {
        List<EquAndon> result = new ArrayList<>();
        List<AndonOrder> andonOrderList = this.baseMapper.equAndonList(equipmentIdList);
        if (andonOrderList != null && !andonOrderList.isEmpty()) {
            andonOrderList.forEach(andonOrder -> {
                EquAndon equAndon = new EquAndon();
                equAndon.setEquipmentId(andonOrder.getEquipmentId());
                StringBuilder infoBuilder = new StringBuilder();
                infoBuilder.append("安灯类型: ").append(sysDictService.queryDictTextByKey("andon_type",andonOrder.getAndonType())).append("\n");
                infoBuilder.append("安灯人: ").append(sysDictService.queryTableDictTextByKey("sys_user", "realname", "id", andonOrder.getOperator())).append("\n");
                infoBuilder.append("安灯时间: ").append(DateUtils.format(andonOrder.getOperateTime(), DateUtils.STR_DATE_TIME_SMALL)).append("\n");
                infoBuilder.append("安灯状态: ").append(sysDictService.queryDictTextByKey("order_status",andonOrder.getOrderStatus())).append("\n");
                equAndon.setAndonInfo(infoBuilder.toString());
                result.add(equAndon);
            });
        }
        return result;
    }
    @Override
    public List<AndonOrderWebSocketVo> untreatedAndonList() {
        List<AndonOrderWebSocketVo> result = new ArrayList<>();
        List<AndonOrder> andonOrderList = this.baseMapper.untreatedAndonList();
        if (andonOrderList != null && !andonOrderList.isEmpty()) {
            List<String> equipmentIds = andonOrderList.stream().map(AndonOrder::getEquipmentId).collect(Collectors.toList());
            List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(equipmentIds);
            Map<String, MdcEquProDto> equipmentIdToProductionIdMap = CollectionUtils.isNotEmpty(equipmentList) ? equipmentList.stream().collect(Collectors.toMap(MdcEquProDto::getEquipmentId, comRateDto -> comRateDto)) : new HashMap<>();
            andonOrderList.forEach(andonOrder -> {
                AndonOrderWebSocketVo andonOrderWebSocketVo = new AndonOrderWebSocketVo();
                andonOrderWebSocketVo.setEquipmentId(andonOrder.getEquipmentId());
                andonOrderWebSocketVo.setCallPersonnel(userService.getById(andonOrder.getOperator()).getRealname());
                andonOrderWebSocketVo.setCallTime(DateUtils.format(andonOrder.getOperateTime(), DatePattern.NORM_DATE_PATTERN));
                andonOrderWebSocketVo.setCallReason(andonOrder.getCallReason());
                andonOrderWebSocketVo.setAndonType("程序呼叫");
                andonOrderWebSocketVo.setPersonResponsible(userService.getById(andonOrder.getResponder()).getRealname());
                andonOrderWebSocketVo.setRepairTime(StringPool.EMPTY);
                andonOrderWebSocketVo.setFaultInfo(StringPool.EMPTY);
                andonOrderWebSocketVo.setType("open");
                andonOrderWebSocketVo.setPlantName(equipmentIdToProductionIdMap != null && equipmentIdToProductionIdMap.containsKey(andonOrder.getEquipmentId()) ? equipmentIdToProductionIdMap.get(andonOrder.getEquipmentId()).getProductionName() : null);
                result.add(andonOrderWebSocketVo);
            });
        }
        return result;
    }
    @Override
    @Transactional
    public void responseData(List<String> ids) {
        if (CollectionUtils.isEmpty(ids)) {
            throw new JeecgBootException("请选择要响应的数据");
        }
        List<AndonOrder> andonOrderList = this.listByIds(ids);
        List<AndonOrder> existAlreadyResponsedList = andonOrderList.stream().filter(andonOrder -> !"1".equals(andonOrder.getOrderStatus())).collect(Collectors.toList());
        if (CollectionUtils.isNotEmpty(existAlreadyResponsedList)) {
            throw new JeecgBootException("存在已响应的安灯信息,无需重复响应");
        }
        for (AndonOrder andonOrder : andonOrderList) {
            andonOrder.setOrderStatus("2");
            andonOrder.setResponseTime(new Date());
        }
        //查询厂房信息
        List<String> equipmentIds = andonOrderList.stream().map(AndonOrder::getEquipmentId).collect(Collectors.toList());
        List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(equipmentIds);
        Map<String, MdcEquProDto> equipmentIdToProductionIdMap = equipmentList.stream().collect(Collectors.toMap(MdcEquProDto::getEquipmentId, comRateDto -> comRateDto));
        //保存成功后设备发送websocket消息
        if (this.updateBatchById(andonOrderList)) {
            List<AndonOrderWebSocketVo> andonOrderWebSocketVoList = Lists.newArrayList();
            //设置websocket请求消息数据
            for (AndonOrder order : andonOrderList) {
                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(sysBaseApi.getUserById(order.getOperator()).getRealname());
                andonOrderWebSocketVo.setRepairTime(StringPool.EMPTY);
                andonOrderWebSocketVo.setFaultInfo(StringPool.EMPTY);
                andonOrderWebSocketVo.setType("close");
                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());
        }
    }
    @Override
    @Transactional
    public void dealWith(AndonOrder andonOrder) {
        if (Objects.isNull(andonOrder)) {
            throw new JeecgBootException("请选择需要处理的安灯信息");
        }
        if (StringUtils.isBlank(andonOrder.getResolutionDescreption())) {
            throw new JeecgBootException("处理结果描述不能为空");
        }
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        andonOrder.setProcessor(user.getId());
        andonOrder.setProcessTime(new Date());
        andonOrder.setOrderStatus("3");
        this.updateById(andonOrder);
    }
    @Override
    public IPage<AndonOrder> pageList(String userId, AndonOrder andonOrder, Integer pageNo, Integer pageSize, HttpServletRequest req) {
        IPage<AndonOrder> pageData = new Page<>(pageNo, pageSize);
        return this.baseMapper.pageList(pageData, andonOrder, userId);
    }
}