1 package net.sumaris.core.service.data;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 import com.google.common.base.Preconditions;
27 import com.google.common.collect.Maps;
28 import net.sumaris.core.dao.data.MeasurementDao;
29 import net.sumaris.core.dao.data.BatchDao;
30 import net.sumaris.core.util.Beans;
31 import net.sumaris.core.model.data.BatchQuantificationMeasurement;
32 import net.sumaris.core.model.data.BatchSortingMeasurement;
33 import net.sumaris.core.model.data.IMeasurementEntity;
34 import net.sumaris.core.service.referential.PmfmService;
35 import net.sumaris.core.vo.data.BatchVO;
36 import net.sumaris.core.vo.data.MeasurementVO;
37 import org.slf4j.Logger;
38 import org.slf4j.LoggerFactory;
39 import org.springframework.beans.factory.annotation.Autowired;
40 import org.springframework.stereotype.Service;
41
42 import java.util.List;
43 import java.util.Map;
44 import java.util.Objects;
45 import java.util.stream.Collectors;
46
47 @Service("batchService")
48 public class BatchServiceImpl implements BatchService {
49
50 private static final Logger log = LoggerFactory.getLogger(BatchServiceImpl.class);
51
52 @Autowired
53 protected BatchDao batchDao;
54
55 @Autowired
56 protected MeasurementDao measurementDao;
57
58 @Autowired
59 protected PmfmService pmfmService;
60
61 @Override
62 public List<BatchVO> getAllByOperationId(int operationId) {
63 return batchDao.getAllByOperationId(operationId);
64 }
65
66 @Override
67 public BatchVO get(int saleId) {
68 return batchDao.get(saleId);
69 }
70
71 @Override
72 public List<BatchVO> saveByOperationId(int operationId, List<BatchVO> sources) {
73
74 List<BatchVO> result = batchDao.saveByOperationId(operationId, sources);
75
76
77 result.stream().forEach(savedBatch -> {
78
79 if (savedBatch.getMeasurementValues() != null) {
80
81 Map<Integer, String> quantificationMeasurements = Maps.newLinkedHashMap();
82 Map<Integer, String> sortingMeasurements = Maps.newLinkedHashMap();
83 savedBatch.getMeasurementValues().forEach((pmfmId, value) -> {
84 if (pmfmService.isWeightPmfm(pmfmId)) {
85 quantificationMeasurements.put(pmfmId, value);
86 }
87 else {
88 sortingMeasurements.put(pmfmId, value);
89 }
90 });
91 measurementDao.saveBatchSortingMeasurementsMap(savedBatch.getId(), sortingMeasurements);
92 measurementDao.saveBatchQuantificationMeasurementsMap(savedBatch.getId(), quantificationMeasurements);
93 }
94 else {
95
96 if (savedBatch.getSortingMeasurements() != null) {
97 measurementDao.saveBatchSortingMeasurementsMap(savedBatch.getId(), savedBatch.getSortingMeasurementValues());
98 } else {
99 List<MeasurementVO> measurements = Beans.getList(savedBatch.getSortingMeasurements());
100 measurements.forEach(m -> fillDefaultProperties(savedBatch, m, BatchSortingMeasurement.class));
101 measurements = measurementDao.saveBatchSortingMeasurements(savedBatch.getId(), measurements);
102 savedBatch.setSortingMeasurements(measurements);
103 }
104
105
106 if (savedBatch.getQuantificationMeasurements() != null) {
107 measurementDao.saveBatchQuantificationMeasurementsMap(savedBatch.getId(), savedBatch.getQuantificationMeasurementValues());
108 } else {
109 List<MeasurementVO> measurements = Beans.getList(savedBatch.getQuantificationMeasurements());
110 measurements.forEach(m -> fillDefaultProperties(savedBatch, m, BatchQuantificationMeasurement.class));
111 measurements = measurementDao.saveBatchQuantificationMeasurements(savedBatch.getId(), measurements);
112 savedBatch.setQuantificationMeasurements(measurements);
113 }
114 }
115 });
116
117 return result;
118 }
119
120 @Override
121 public BatchVOef="../../../../../net/sumaris/core/vo/data/BatchVO.html#BatchVO">BatchVO save(BatchVO batch) {
122 Preconditions.checkNotNull(batch);
123 Preconditions.checkArgument((batch.getOperation() != null && batch.getOperation().getId() != null) || batch.getOperationId() != null, "Missing batch.operation or batch.operationId");
124 Preconditions.checkNotNull(batch.getRecorderDepartment(), "Missing batch.recorderDepartment");
125 Preconditions.checkNotNull(batch.getRecorderDepartment().getId(), "Missing batch.recorderDepartment.id");
126
127 return batchDao.save(batch);
128 }
129
130 @Override
131 public List<BatchVO> save(List<BatchVO> sales) {
132 Preconditions.checkNotNull(sales);
133
134 return sales.stream()
135 .map(this::save)
136 .collect(Collectors.toList());
137 }
138
139 @Override
140 public void delete(int id) {
141 batchDao.delete(id);
142 }
143
144 @Override
145 public void delete(List<Integer> ids) {
146 Preconditions.checkNotNull(ids);
147 ids.stream()
148 .filter(Objects::nonNull)
149 .forEach(this::delete);
150 }
151
152 @Override
153 public List<BatchVO> toFlatList(final BatchVO catchBatch) {
154 return batchDao.toFlatList(catchBatch);
155 }
156
157
158
159 protected void fillDefaultProperties(BatchVO parent, MeasurementVO measurement, Class<? extends IMeasurementEntity> entityClass) {
160 if (measurement == null) return;
161
162
163 if (measurement.getRecorderDepartment() == null || measurement.getRecorderDepartment().getId() == null) {
164 measurement.setRecorderDepartment(parent.getRecorderDepartment());
165 }
166
167 measurement.setEntityName(entityClass.getSimpleName());
168 }
169 }