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; |
|||
import com.iflytop.uf.UfActiveRecord; |
|||
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 { |
|||
@UfActiveRecordField |
|||
public String tubeId; |
|||
|
|||
@UfActiveRecordField |
|||
public String sampleUid; |
|||
|
|||
@UfActiveRecordField |
|||
public String sampleType; |
|||
|
|||
@UfActiveRecordField |
|||
public String isSamplingFinished; |
|||
|
|||
@UfActiveRecordField |
|||
public String projectCode; |
|||
|
|||
@UfActiveRecordField |
|||
public String projectName; |
|||
|
|||
@UfActiveRecordField |
|||
public String serialCode; |
|||
|
|||
@UfActiveRecordField |
|||
public String barCode; |
|||
|
|||
@UfActiveRecordField |
|||
public String materialLotCode; |
|||
|
|||
@UfActiveRecordField |
|||
public Integer incubateSlotIndex; |
|||
|
|||
@UfActiveRecordField |
|||
public Integer incubateStartedAt; |
|||
|
|||
@UfActiveRecordField |
|||
public Integer incubateDuration; |
|||
|
|||
@UfActiveRecordField |
|||
public String result; |
|||
|
|||
// get table name |
|||
public static String getTableName() { |
|||
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