干燥机配套车间生产管理系统/云平台服务端
zhuguifei
2025-11-14 87b161325d9186d8211a7d472ed04fa279f33954
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRealTimeDataServiceImpl.java
@@ -35,6 +35,8 @@
import org.springframework.transaction.annotation.Transactional;
import java.text.DecimalFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.ReentrantLock;
@@ -106,7 +108,7 @@
    @Transactional
    public Result<?> realTimeDataHandle(RealTimeDataVo realTimeDataVo) {
        TenantContext.setTenant(realTimeDataVo.getTenantid() + "");
        log.info("实时数据:" + realTimeDataVo.toString());
//        log.info("实时数据:" + realTimeDataVo.toString());
        // 1 查询或创建工单
@@ -171,7 +173,7 @@
    @Transactional
    public Result<?> realTimeDataHandle(RealTimeDataParentVo realTimeDataParentVo) {
        TenantContext.setTenant(realTimeDataParentVo.getTenantid() + "");
        log.info("实时数据:" + realTimeDataParentVo.toString());
//        log.info("实时数据:" + realTimeDataParentVo.toString());
        if (realTimeDataParentVo.getRealTime() != null) {
            RealTimeDataVo realTimeDataVo = realTimeDataParentVo.getRealTime();
@@ -405,6 +407,8 @@
                    log.error("新增设备失败:数据库保存异常!equipment={}", addEqu);
                    return null;
                }
                redisUtil.del(CommonCacheConstant.DRY_CACHE_TENANT_EQUS_LIST);
                redisUtil.del(CommonCacheConstant.DRY_CACHE_TENANT_EQUS);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
@@ -427,6 +431,29 @@
        ReentrantLock orderLock = getLock(realTimeDataVo.getTenantid() + "", "order");
        orderLock.lock();
        try {
            //根据租户id 和 药材id 检查最近是否存在工单 TODO 验证
            LambdaQueryWrapper<DryOrder> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(DryOrder::getHerbId, herbFormula.getId());
            queryWrapper.eq(DryOrder::getTenantId, realTimeDataVo.getTenantid());
            queryWrapper.orderByDesc(DryOrder::getOrderTime);
            queryWrapper.last("LIMIT 1");
            // 1 查询数据库
            DryOrder one = dryOrderService.getOne(queryWrapper);
            if(one!=null){
                Date orderDate = one.getOrderTime();
                //30S内不允许新建工单,避免重复
                LocalDateTime orderTime = orderDate.toInstant()
                        .atZone(ZoneId.systemDefault())
                        .toLocalDateTime();
                LocalDateTime now = LocalDateTime.now();
                long secondsBetween = java.time.Duration.between(orderTime, now).getSeconds();
                boolean b = secondsBetween <= 30;
                if(b){
                    return BeanUtil.toBean(one, DryOrderVo.class);
                }
            }
            // 创建新工单
            orderVo = new DryOrderVo(realTimeDataVo);
            orderVo.setHerbId(herbFormula.getId());
@@ -491,16 +518,19 @@
        LambdaQueryWrapper<DryHerbFormula> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(DryHerbFormula::getTenantId, realTimeDataVo.getTenantid());
        queryWrapper.eq(DryHerbFormula::getName, realTimeDataVo.getName());
        queryWrapper.orderByDesc(DryHerbFormula::getCreateTime);
        queryWrapper.last("LIMIT 1");
        DryHerbFormula one = dryHerbFormulaService.getOne(queryWrapper);
        if (one == null) {
            one = new DryHerbFormula(realTimeDataVo);
            DryEquipment dryEquipment = equipmentService.selectByTenantIdEquipmentId(realTimeDataVo.getTenantid() + "", realTimeDataVo.getMachineid());
            if (dryEquipment != null && dryEquipment.getType() != null) {
                one.setEqpType(dryEquipment.getType());
            }
            dryHerbFormulaService.save(one);
        }
//        if (one == null) {
//            one = new DryHerbFormula(realTimeDataVo);
//            DryEquipment dryEquipment = equipmentService.selectByTenantIdEquipmentId(realTimeDataVo.getTenantid() + "", realTimeDataVo.getMachineid());
//            if (dryEquipment != null && dryEquipment.getType() != null) {
//                one.setEqpType(dryEquipment.getType());
//            }
//
//            dryHerbFormulaService.save(one);
//        }
        return one;
    }
@@ -640,9 +670,9 @@
                if (order != null) {
                    orderVo.setEnvHum(order.getEnvHum());
                    orderVo.setEnvTemp(order.getEnvTemp());
                    double watt = order.getWatt() - order.getDetailList().get(0).getWatt();
                    double watt = order.getWatt() - (order.getDetailList().size() > 0 ?order.getDetailList().get(0).getWatt():0);
                    orderVo.setWatt(orderVo.getWatt() == null ? watt : orderVo.getWatt() + watt);
                    double steam = order.getSteam() - order.getDetailList().get(0).getSteam();
                    double steam = order.getSteam() - ( order.getDetailList().size() > 0 ?order.getDetailList().get(0).getSteam():0);
                    orderVo.setSteam(orderVo.getSteam() == null ? steam : orderVo.getSteam() + steam);
                    orderVo.setOriginWeight(orderVo.getOriginWeight() == null ? order.getOriginWeight() : orderVo.getOriginWeight() + order.getOriginWeight());
@@ -746,7 +776,7 @@
        List<DryFaultRecordVo> faultList = new ArrayList<DryFaultRecordVo>((dryFaultMap.values()));
        MqMessage<List<DryFaultRecordVo>> mqMessage = new MqMessage<>(faultList, tenantId, recTopic);
        //发送广播
        log.error("广播给:{}", recTopic);
//        log.error("广播给:{}", recTopic);
        mqttUtil.sendMqttMessage(MqttConstant.SERVICE_BROADCAST_TENANT_REAL_FAULT, mqMessage, 1);
@@ -768,7 +798,7 @@
        List<DryFaultRecord> result = new ArrayList<>();
        if (StringUtils.isEmpty(fault)) return result;
        //数据样本:"eqp_fault": "滚筒降超时-报警,风机过流报警,滚筒升超时-报警,风箱升报警",
        System.err.println((faultType == 1 ? "类型:故障" : "类型:报警") + DateUtils.formatDateTime() + "--" + fault);
//        System.err.println((faultType == 1 ? "类型:故障" : "类型:报警") + DateUtils.formatDateTime() + "--" + fault);
        //redis中的故障
        Map<Object, Object> rFauMap = redisUtil.hmget(String.format(MqttConstant.MQTT_REAL_FAULT, tenantId));
        Map<String, Object> redFauMap = rFauMap.entrySet().stream()
@@ -857,7 +887,7 @@
                faultRecordService.save(vo);
                redisUtil.hdel(String.format(MqttConstant.MQTT_REAL_FAULT, tenantId), key);
                result.add(vo);
                System.err.println((faultType == 1 ? "类型:故障" : "类型:报警") + DateUtils.formatDateTime() + "存入数据库");
//                System.err.println((faultType == 1 ? "类型:故障" : "类型:报警") + DateUtils.formatDateTime() + "存入数据库");
            }
        });