| | |
| | | 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; |
| | |
| | | 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 保存工单含水率变化 或 重量变化 |
| | |
| | | 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()); |
| | |
| | | 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()); |
| | |
| | | // 获取工单 |
| | | 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(); |