9 changed files with 178 additions and 15 deletions
-
BINapp.db
-
10src/main/java/com/iflytop/a800/BoditechA800ApplicationRunner.java
-
2src/main/java/com/iflytop/a800/controller/DemoController.java
-
55src/main/java/com/iflytop/a800/device/DeviceComponent.java
-
13src/main/java/com/iflytop/a800/device/Incubator.java
-
44src/main/java/com/iflytop/a800/model/MdbTest.java
-
5src/main/java/com/iflytop/a800/model/MdbTubeRackTestTaskTube.java
-
5src/main/java/com/iflytop/a800/task/TubeRackTask.java
-
59src/main/java/com/iflytop/a800/task/TubeTestTask.java
@ -0,0 +1,55 @@ |
|||||
|
package com.iflytop.a800.device; |
||||
|
import org.slf4j.Logger; |
||||
|
import org.slf4j.LoggerFactory; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.List; |
||||
|
abstract public class DeviceComponent { |
||||
|
// logger |
||||
|
public static final Logger LOG = LoggerFactory.getLogger(DeviceComponent.class); |
||||
|
// lock object class |
||||
|
public static class DeviceComponentLock { |
||||
|
public String name; |
||||
|
} |
||||
|
|
||||
|
// locks |
||||
|
private final List<DeviceComponentLock> locks = new ArrayList<>(); |
||||
|
|
||||
|
// lock |
||||
|
public DeviceComponentLock lock( String name ) { |
||||
|
LOG.info("LOCK : {}", name); |
||||
|
|
||||
|
var lock = new DeviceComponentLock(); |
||||
|
lock.name = name; |
||||
|
synchronized ( this.locks ) { |
||||
|
this.locks.add(lock); |
||||
|
if ( 1 == this.locks.size() ) { |
||||
|
return lock; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
LOG.info("LOCK WAITING : {}", name); |
||||
|
try { |
||||
|
lock.wait(); |
||||
|
} catch (InterruptedException e) { |
||||
|
throw new RuntimeException(e); |
||||
|
} |
||||
|
|
||||
|
LOG.info("LOCK DONE : {}", name); |
||||
|
return lock; |
||||
|
} |
||||
|
|
||||
|
// unlock |
||||
|
public void unlock( DeviceComponentLock lock ) { |
||||
|
synchronized ( this.locks ) { |
||||
|
LOG.info("UNLOCK : {}", lock.name); |
||||
|
this.locks.remove(lock); |
||||
|
if ( this.locks.isEmpty() ) { |
||||
|
return ; |
||||
|
} |
||||
|
|
||||
|
var next = this.locks.get(0); |
||||
|
LOG.info("NOTIFY NEXT : {}", next.name); |
||||
|
next.notifyAll(); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -1,24 +1,68 @@ |
|||||
package com.iflytop.a800.model; |
package com.iflytop.a800.model; |
||||
import com.iflytop.uf.UfActiveRecord; |
import com.iflytop.uf.UfActiveRecord; |
||||
import com.iflytop.uf.UfActiveRecordField; |
import com.iflytop.uf.UfActiveRecordField; |
||||
|
import com.iflytop.uf.model.UfMdbRuntimeVariable; |
||||
|
|
||||
|
import java.time.LocalDateTime; |
||||
|
import java.time.format.DateTimeFormatter; |
||||
|
|
||||
public class MdbTest extends UfActiveRecord { |
public class MdbTest extends UfActiveRecord { |
||||
@UfActiveRecordField |
@UfActiveRecordField |
||||
public String tubeId; |
public String tubeId; |
||||
|
|
||||
@UfActiveRecordField |
@UfActiveRecordField |
||||
|
public String sampleUid; |
||||
|
|
||||
|
@UfActiveRecordField |
||||
|
public String sampleType; |
||||
|
|
||||
|
@UfActiveRecordField |
||||
public String isSamplingFinished; |
public String isSamplingFinished; |
||||
|
|
||||
@UfActiveRecordField |
@UfActiveRecordField |
||||
public String projectCode; |
public String projectCode; |
||||
|
|
||||
@UfActiveRecordField |
@UfActiveRecordField |
||||
|
public String projectName; |
||||
|
|
||||
|
@UfActiveRecordField |
||||
|
public String serialCode; |
||||
|
|
||||
|
@UfActiveRecordField |
||||
|
public String barCode; |
||||
|
|
||||
|
@UfActiveRecordField |
||||
public String materialLotCode; |
public String materialLotCode; |
||||
|
|
||||
@UfActiveRecordField |
@UfActiveRecordField |
||||
|
public Integer incubateSlotIndex; |
||||
|
|
||||
|
@UfActiveRecordField |
||||
|
public Integer incubateStartedAt; |
||||
|
|
||||
|
@UfActiveRecordField |
||||
|
public Integer incubateDuration; |
||||
|
|
||||
|
@UfActiveRecordField |
||||
public String result; |
public String result; |
||||
|
|
||||
// get table name |
// get table name |
||||
public static String getTableName() { |
public static String getTableName() { |
||||
return "app_tests"; |
return "app_tests"; |
||||
} |
} |
||||
|
|
||||
|
// 生成序列号 |
||||
|
public static String generateSerialCode() { |
||||
|
var count = UfMdbRuntimeVariable.getInteger("TestCountOfDay", 0); |
||||
|
var date = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMdd")); |
||||
|
var runtimeDate = UfMdbRuntimeVariable.getString("TestSerialDate", ""); |
||||
|
if (!date.equals(runtimeDate)) { |
||||
|
UfMdbRuntimeVariable.setString("TestSerialDate", date); |
||||
|
count = 0; |
||||
|
} |
||||
|
|
||||
|
count ++; |
||||
|
UfMdbRuntimeVariable.setInteger("TestCountOfDay", count); |
||||
|
return String.format("%s-%03d", date, count); |
||||
|
} |
||||
} |
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue