| | |
| | | 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.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); |
| | |
| | | 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()); |