干燥机配套车间生产管理系统/云平台服务端
zhuguifei
2 天以前 9868becf1456f52e342d90f957755f93cdf2bbf8
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;
@@ -216,8 +218,12 @@
            orderVo.setOrderStatus(realTimeDataVo.getWorkorder_status());
            orderVo.setEqp_status(realTimeDataVo.getEqp_status());
//        orderVo.setEqp_state(realTimeDataVo.getEqp_state());
            orderVo.setWarning(realTimeDataVo.getEqp_warning());
            orderVo.setFault(realTimeDataVo.getEqp_fault());
            if(realTimeDataParentVo.getFault()!=null && StringUtils.isNotEmpty(realTimeDataParentVo.getFault().getWarning())){
                orderVo.setWarning(realTimeDataParentVo.getFault().getWarning());
            }
            if(realTimeDataParentVo.getFault()!=null && StringUtils.isNotEmpty(realTimeDataParentVo.getFault().getError())){
                orderVo.setFault(realTimeDataParentVo.getFault().getError());
            }
            orderVo.setLevel(realTimeDataVo.getLevel());
            DryOrderTrendVo trendVo = new DryOrderTrendVo(realTimeDataVo);
            // 2.2 保存工单含水率变化 或 重量变化
@@ -414,6 +420,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());
@@ -478,7 +507,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());
@@ -548,7 +580,7 @@
                    // 获取工单
                    DryOrderVo order = (DryOrderVo) redisUtil.hget(CacheConstants.RedisKeyEnum.WORK_ORDER.getCode(), realTimeDataVo.getTenantid() + "_" + item.getCode());
                    list.add(item.getName().substring(0, item.getName().indexOf('#') + 1));
                    if (order != null) {
                    if (order != null &&  order.getDetailList()!=null && !order.getDetailList().isEmpty()) {
                        // 计算干燥效率,用于对比
                        DryOrderTrendVo dryOrderTrendVo = order.getDetailList().get(order.getDetailList().size() - 1);
                        double v = order.getOriginWeight() - dryOrderTrendVo.getWeight();