|
@@ -1486,7 +1486,12 @@ public class MarkServiceImpl implements MarkService {
|
|
|
@Transactional
|
|
|
public void updateQuality(Marker marker) {
|
|
|
List<MarkLibrary> list = libraryDao.findByMarkerId(marker.getId());
|
|
|
- int finishCount = 0;
|
|
|
+ updateQualityWithArbitrate(marker, list);
|
|
|
+ updateQualityNoArbitrate(marker, list);
|
|
|
+ markerLastUpdateTime.put(marker.getId(), System.currentTimeMillis());
|
|
|
+ }
|
|
|
+ private void updateQualityWithArbitrate(Marker marker,List<MarkLibrary> list) {
|
|
|
+ int finishCount = 0;
|
|
|
int validCount = 0;
|
|
|
double sumScore = 0;
|
|
|
double sumScore2 = 0;
|
|
@@ -1515,7 +1520,41 @@ public class MarkServiceImpl implements MarkService {
|
|
|
}
|
|
|
}
|
|
|
markerDao.updateQualityById(marker.getId(), finishCount, validCount, avgSpent / 1000, avgScore, stdevScore);
|
|
|
- markerLastUpdateTime.put(marker.getId(), System.currentTimeMillis());
|
|
|
+ }
|
|
|
+
|
|
|
+ private void updateQualityNoArbitrate(Marker marker,List<MarkLibrary> list) {
|
|
|
+ int finishCount = 0;
|
|
|
+ int validCount = 0;
|
|
|
+ double sumScore = 0;
|
|
|
+ double sumScore2 = 0;
|
|
|
+ double avgScore = 0;
|
|
|
+ double stdevScore = 0;
|
|
|
+ double sumSpent = 0;
|
|
|
+ double avgSpent = 0;
|
|
|
+ for (MarkLibrary library : list) {
|
|
|
+ if (library.getStatus() == LibraryStatus.ARBITRATED || library.getStatus() == LibraryStatus.WAIT_ARBITRATE) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ finishCount++;
|
|
|
+ if (library.getStatus() == LibraryStatus.MARKED || library.getStatus() == LibraryStatus.INSPECTED) {
|
|
|
+ validCount++;
|
|
|
+ }
|
|
|
+ double score = library.getMarkerScore() != null && library.getMarkerScore() != UN_SELECTIVE_SCORE
|
|
|
+ ? library.getMarkerScore()
|
|
|
+ : 0;
|
|
|
+ int spent = library.getMarkerSpent() != null ? library.getMarkerSpent() : 0;
|
|
|
+
|
|
|
+ sumScore += score;
|
|
|
+ sumScore2 += Math.pow(score, 2);
|
|
|
+ sumSpent += spent;
|
|
|
+ if (finishCount > 0) {
|
|
|
+ avgScore = sumScore / finishCount;
|
|
|
+ avgSpent = sumSpent / finishCount;
|
|
|
+ // 递归法计算标准差
|
|
|
+ stdevScore = Math.sqrt(sumScore2 / finishCount - Math.pow(sumScore / finishCount, 2));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ markerDao.updateQualityNoArbitrateById(marker.getId(), finishCount, validCount, avgSpent / 1000, avgScore, stdevScore);
|
|
|
}
|
|
|
|
|
|
@Override
|