|
@@ -63,20 +63,20 @@ public class CommSendService {
|
|
|
|
|
|
public void readAll() {
|
|
|
l.info("readAll");
|
|
|
- List<RealExam> listRE = realExamService.listAllByStatus(RealExam.State.ANSWERING);
|
|
|
- listRE.forEach(e -> {
|
|
|
+ List<RealExam> listRe = realExamService.listAllByStatus(RealExam.State.ANSWERING);
|
|
|
+ listRe.forEach(e -> {
|
|
|
if (e == null) {
|
|
|
return;
|
|
|
}
|
|
|
- List<RealExamFault> listREF = realExamFaultService.listAllType2LoopReadStateByExamId(e.getExamId());
|
|
|
- listREF.forEach(ref -> {
|
|
|
+ List<RealExamFault> listRef = realExamFaultService.listAllType2State2and3ByExamId(e.getExamId());
|
|
|
+ listRef.forEach(ref -> {
|
|
|
Sim s = simService.selectSimBySimId(e.getSimId());
|
|
|
Fault f = faultService.selectFaultByFaultId(ref.getFaultId());
|
|
|
if (f != null &&
|
|
|
Fault.Type.REAL_GZBW.equals(f.getFaultType()) &&
|
|
|
Fault.State.ENABLE.equals(f.getFaultState())
|
|
|
) {
|
|
|
- readOneFaultResistance(s, ref, f, RealExamFault.State.LOOP_READ);
|
|
|
+ readOneSimOneFaultResistance(s, ref, f, null);
|
|
|
}
|
|
|
});
|
|
|
});
|
|
@@ -92,16 +92,17 @@ public class CommSendService {
|
|
|
|
|
|
public void readOneExamAtLast(RealExam re) {
|
|
|
l.info("readOneExamAtLast");
|
|
|
- List<RealExamFault> listREF = realExamFaultService.listAllType2LoopReadStateByExamId(re.getExamId());
|
|
|
- listREF.forEach(ref -> {
|
|
|
+ List<RealExamFault> list = realExamFaultService.listAllType2State2and3ByExamId(re.getExamId());
|
|
|
+ for (RealExamFault ref : list) {
|
|
|
Sim s = simService.selectSimBySimId(re.getSimId());
|
|
|
Fault f = faultService.selectFaultByFaultId(ref.getFaultId());
|
|
|
- readOneFaultResistance(s, ref, f, RealExamFault.State.FINISH);
|
|
|
- });
|
|
|
+ readOneSimOneFaultResistance(s, ref, f, RealExamFault.State.FINISH);
|
|
|
+ }
|
|
|
// 计算扣分。
|
|
|
// 最后都读取到,才算扣分。
|
|
|
{
|
|
|
- calculateScore(re.getExamId());
|
|
|
+ // todo:暂时不算。
|
|
|
+ // calculateScore(re.getExamId());
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -138,6 +139,7 @@ public class CommSendService {
|
|
|
l.info("没有open的考试集合");
|
|
|
return;
|
|
|
}
|
|
|
+ readAll();
|
|
|
//
|
|
|
|
|
|
// AA010102010000000055
|
|
@@ -255,7 +257,7 @@ public class CommSendService {
|
|
|
*
|
|
|
* @param re
|
|
|
*/
|
|
|
- public void clearAllFaultByExam(RealExam re) {
|
|
|
+ public void clearOneSimAllFaultByExam(RealExam re) {
|
|
|
// check
|
|
|
|
|
|
// 更新Exam状态。
|
|
@@ -274,7 +276,7 @@ public class CommSendService {
|
|
|
// check
|
|
|
|
|
|
//
|
|
|
- clearOneFault(s, ref, f);
|
|
|
+ clearOneSimOneFault(s, ref, f);
|
|
|
});
|
|
|
}
|
|
|
|
|
@@ -285,7 +287,7 @@ public class CommSendService {
|
|
|
*/
|
|
|
@Async("tp-comm")
|
|
|
public void clearListFaultByRealExamAsync(RealExam re) {
|
|
|
- clearAllFaultByExam(re);
|
|
|
+ clearOneSimAllFaultByExam(re);
|
|
|
}
|
|
|
|
|
|
public void clearAll() {
|
|
@@ -294,7 +296,7 @@ public class CommSendService {
|
|
|
String simType = s.getSimType();
|
|
|
List<Fault> listF = faultService.listType3EnableBySimType(simType);
|
|
|
listF.forEach(f -> {
|
|
|
- clearOneFault(s, null, f);
|
|
|
+ clearOneSimOneFault(s, null, f);
|
|
|
});
|
|
|
});
|
|
|
}
|
|
@@ -342,7 +344,7 @@ public class CommSendService {
|
|
|
* @param reF 可以为空,表示不关联考试的,单独执行的。
|
|
|
* @param f
|
|
|
*/
|
|
|
- public void clearOneFault(Sim s, RealExamFault reF, Fault f) {
|
|
|
+ public void clearOneSimOneFault(Sim s, RealExamFault reF, Fault f) {
|
|
|
l.info("清除One故障:getSimNum = {},fault.getName = {}", s.getSimNum(), f.getName());
|
|
|
// check todo:
|
|
|
|
|
@@ -351,16 +353,18 @@ public class CommSendService {
|
|
|
SimMsg smR = send(smS, s, RETRY_COUNT_CLEAR_ONE_FAULT, SLEEP_LONG);
|
|
|
simReceiveService.clearOneFault(smR, s, reF, f);
|
|
|
// step2
|
|
|
- if (reF != null &&
|
|
|
- realExamFaultService.isState(reF.getRefId(), RealExamFault.State.CLEARED)) {
|
|
|
- if (reF.getFlag().equals(RealExamFault.Flag.YES)) {
|
|
|
- writeOneFault(s, reF, f);
|
|
|
- } else if (reF.getFlag().equals(RealExamFault.Flag.NO)) {
|
|
|
- RealExamFault f1 = realExamFaultService.selectRealExamFaultByRefId(reF.getRefId());
|
|
|
- f1.setRefState(RealExamFault.State.LOOP_READ);
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
+ // 下发故障独立运行。下面屏蔽。
|
|
|
+
|
|
|
+// if (reF != null &&
|
|
|
+// realExamFaultService.isState(reF.getRefId(), RealExamFault.State.CLEARED)) {
|
|
|
+// if (reF.getFlag().equals(RealExamFault.Flag.YES)) {
|
|
|
+// writeOneFault(s, reF, f);
|
|
|
+// } else if (reF.getFlag().equals(RealExamFault.Flag.NO)) {
|
|
|
+// RealExamFault f1 = realExamFaultService.selectRealExamFaultByRefId(reF.getRefId());
|
|
|
+// f1.setRefState(RealExamFault.State.LOOP_READ);
|
|
|
+// }
|
|
|
+// }
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -412,40 +416,49 @@ public class CommSendService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public void writeOneFault(Sim s, RealExamFault ref, Fault f) {
|
|
|
- l.info("下发故障:getSimId = {},fault.getName = {}", s.getSimId(), f.getName());
|
|
|
+ /**
|
|
|
+ * 下发所有选中的真实的故障部位。
|
|
|
+ *
|
|
|
+ * @param re
|
|
|
+ */
|
|
|
+ public void writeOneSimAllSelectFault(RealExam re) {
|
|
|
+ // 更新Exam状态。
|
|
|
+ realExamService.updateOneState(re.getExamId(), RealExam.State.SIM_WRITING);
|
|
|
+ List<RealExamFault> list = realExamFaultService.listAllType2FlagYesClearedStateByExamId(re.getExamId());
|
|
|
+ for (RealExamFault ref : list) {
|
|
|
+ Sim s = simService.selectSimBySimId(re.getSimId());
|
|
|
+ Fault f = faultService.selectFaultByFaultId(ref.getFaultId());
|
|
|
+ // 选中的才下发。
|
|
|
+ writeOneSimOneFault(s, ref, f);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ public void writeOneSimOneFault(Sim s, RealExamFault ref, Fault f) {
|
|
|
+ l.info("下发故障:getSimId = {},fault.getName = {}", s.getSimId(), f.getName());
|
|
|
// todo:ref is null.
|
|
|
-
|
|
|
// 下发故障
|
|
|
SimMsg smA1 = commBuildService.buildSendMsgWriteFault(s.getSimNum(), f.getBindHardwareMsg());
|
|
|
SimMsg smA2 = send(smA1, s, RETRY_COUNT_WRITE_ONE_FAULT, SLEEP_LONG);
|
|
|
- // todo:
|
|
|
+ if (smA2.isOk()) {
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void readOneSimAllFaultFirstTime(RealExam re) {
|
|
|
+ List<RealExamFault> list = realExamFaultService.listAllType2(re.getExamId());
|
|
|
+ for (RealExamFault ref : list) {
|
|
|
+ Sim s = simService.selectSimBySimId(re.getSimId());
|
|
|
+ Fault f = faultService.selectFaultByFaultId(ref.getFaultId());
|
|
|
+ readOneSimOneFaultFirstTime(s, ref, f);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ public void readOneSimOneFaultFirstTime(Sim s, RealExamFault ref, Fault f) {
|
|
|
// 读取一次当前电阻代表值作为出题值。
|
|
|
SimMsg smB1 = commBuildService.buildSendMsgReadFaultResistance(s.getSimNum(), f.getBindHardwareMsg());
|
|
|
SimMsg smB2 = send(smB1, s, RETRY_COUNT_WRITE_ONE_FAULT, SLEEP_LONG);
|
|
|
- simReceiveService.setFaultQuestionValue(smB2, s, ref, f);
|
|
|
if (ref != null) {
|
|
|
- // 修改关联状态。
|
|
|
- RealExamFault f1 = realExamFaultService.selectRealExamFaultByRefId(ref.getRefId());
|
|
|
- f1.setRefState(RealExamFault.State.LOOP_READ);
|
|
|
- realExamFaultService.updateRealExamFault(f1);
|
|
|
-
|
|
|
- //
|
|
|
- {
|
|
|
- boolean allWritten = realExamFaultService.isAllType2StateXiaFa(f1.getExamId());
|
|
|
- if (allWritten) {
|
|
|
- // 如果全部下发完毕 修改RealExam状态
|
|
|
- l.info("allWritten id = {}", f1.getExamId());
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // todo:
|
|
|
-
|
|
|
- // todo:单独一个故障,特殊处理
|
|
|
- realExamService.updateOneState(f1.getExamId(), RealExam.State.SIM_PREPARE_OK);
|
|
|
+ simReceiveService.setFaultQuestionValue(smB2, s, ref, f);
|
|
|
} else {
|
|
|
l.info("ref is null");
|
|
|
}
|
|
@@ -480,20 +493,24 @@ public class CommSendService {
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
- public void readOneFaultResistance(Sim s, RealExamFault reF, Fault f, String refState) {
|
|
|
+ /**
|
|
|
+ * @param s
|
|
|
+ * @param reF
|
|
|
+ * @param f
|
|
|
+ * @param refState 中间轮询是null,交卷最后一次读取为finish状态。用来修改状态的。
|
|
|
+ */
|
|
|
+ public void readOneSimOneFaultResistance(Sim s, RealExamFault reF, Fault f, String refState) {
|
|
|
l.info("readOneFaultResistance");
|
|
|
SimMsg sm1 = commBuildService.buildSendMsgReadFaultResistance(s.getSimNum(), f.getBindHardwareMsg());
|
|
|
- // todo:有所区分。
|
|
|
- SimMsg sm2 = send(sm1, s, RETRY_COUNT_READ_ONE_RESISTANCE, SLEEP_LONG);
|
|
|
+ SimMsg sm2 = null;
|
|
|
+ if (RealExamFault.State.FINISH.equals(refState)) { // 是否最后一次读取。
|
|
|
+ sm2 = send(sm1, s, RETRY_COUNT_READ_ONE_RESISTANCE, SLEEP_SHORT);
|
|
|
+ } else {
|
|
|
+ sm2 = send(sm1, s, RETRY_COUNT_0, SLEEP_SHORT);
|
|
|
+ }
|
|
|
simReceiveService.setFaultAnswerValue(sm2, s, reF, f, refState);
|
|
|
}
|
|
|
|
|
|
- @Async("tp-comm")
|
|
|
- public void readOneFaultResistanceAsync(Sim s, RealExamFault reF, Fault f, String refState) {
|
|
|
- l.info("readOneFaultResistanceAsync");
|
|
|
- readOneFaultResistance(s, reF, f, refState);
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* send hex message
|
|
|
*
|
|
@@ -631,6 +648,7 @@ public class CommSendService {
|
|
|
}
|
|
|
try {
|
|
|
if (cachedSocket != null) {
|
|
|
+ // todo:判断shutdown
|
|
|
cachedSocket.getInputStream().close();
|
|
|
cachedSocket.getOutputStream().close();
|
|
|
cachedSocket.close();
|