干燥机配套车间生产管理系统/云平台服务端
zhuguifei
2 天以前 4dbab0c9584c923f12c7478131f0996dbb3bb7fe
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;
@@ -230,6 +232,15 @@
            orderVo.setTrendVo(trendVo);
            orderVo.getBellowsTemp().put(realTimeDataVo.getTime3(), realTimeDataVo.getTemp2());
            if (realTimeDataParentVo.getFault() != null) {
                if (realTimeDataParentVo.getFault().getError() != null) {
                    orderVo.setFault(realTimeDataParentVo.getFault().getError());
                }
                if (realTimeDataParentVo.getFault().getWarning() != null) {
                    orderVo.setWarning(realTimeDataParentVo.getFault().getWarning());
                }
            }
            // 2.3 更新到redis缓存
            redisUtil.hset(CacheConstants.RedisKeyEnum.WORK_ORDER.getCode(),
                    realTimeDataVo.getTenantid() + "_" + realTimeDataVo.getMachineid(), orderVo, 60 * 60);
@@ -418,6 +429,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());
@@ -482,7 +516,10 @@
        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());