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 net.sumaris.core.dao.data.MeasurementDao;
28 import net.sumaris.core.dao.data.SaleDao;
29 import net.sumaris.core.model.data.IMeasurementEntity;
30 import net.sumaris.core.model.data.SaleMeasurement;
31 import net.sumaris.core.util.Beans;
32 import net.sumaris.core.vo.data.MeasurementVO;
33 import net.sumaris.core.vo.data.SaleVO;
34 import org.slf4j.Logger;
35 import org.slf4j.LoggerFactory;
36 import org.springframework.beans.factory.annotation.Autowired;
37 import org.springframework.stereotype.Service;
38
39 import java.util.List;
40 import java.util.Objects;
41 import java.util.stream.Collectors;
42
43 @Service("saleService")
44 public class SaleServiceImpl implements SaleService {
45
46 private static final Logger log = LoggerFactory.getLogger(SaleServiceImpl.class);
47
48 @Autowired
49 protected SaleDao saleDao;
50
51 @Autowired
52 protected MeasurementDao measurementDao;
53
54 @Override
55 public List<SaleVO> getAllByTripId(int tripId) {
56 return saleDao.getAllByTripId(tripId);
57 }
58
59 @Override
60 public SaleVO get(int saleId) {
61 return saleDao.get(saleId);
62 }
63
64 @Override
65 public List<SaleVO> saveAllByTripId(int tripId, List<SaleVO> sources) {
66 return saleDao.saveAllByTripId(tripId, sources);
67 }
68
69 @Override
70 public SaleVOref="../../../../../net/sumaris/core/vo/data/SaleVO.html#SaleVO">SaleVO save(SaleVO sale) {
71 Preconditions.checkNotNull(sale);
72 Preconditions.checkNotNull(sale.getStartDateTime(), "Missing startDateTime");
73 Preconditions.checkNotNull(sale.getSaleLocation(), "Missing saleLocation");
74 Preconditions.checkNotNull(sale.getSaleLocation().getId(), "Missing saleLocation.id");
75 Preconditions.checkNotNull(sale.getSaleType(), "Missing saleType");
76 Preconditions.checkNotNull(sale.getSaleType().getId(), "Missing saleType.id");
77 Preconditions.checkNotNull(sale.getRecorderDepartment(), "Missing sale.recorderDepartment");
78 Preconditions.checkNotNull(sale.getRecorderDepartment().getId(), "Missing sale.recorderDepartment.id");
79
80 SaleVO savedSale = saleDao.save(sale);
81
82
83 if (savedSale.getMeasurementValues() != null) {
84 measurementDao.saveSaleMeasurementsMap(savedSale.getId(), savedSale.getMeasurementValues());
85 }
86 else {
87 List<MeasurementVO> measurements = Beans.getList(savedSale.getMeasurements());
88 measurements.forEach(m -> fillDefaultProperties(savedSale, m, SaleMeasurement.class));
89 measurements = measurementDao.saveSaleMeasurements(savedSale.getId(), measurements);
90 savedSale.setMeasurements(measurements);
91 }
92
93 return savedSale;
94 }
95
96 @Override
97 public List<SaleVO> save(List<SaleVO> sales) {
98 Preconditions.checkNotNull(sales);
99
100 return sales.stream()
101 .map(this::save)
102 .collect(Collectors.toList());
103 }
104
105 @Override
106 public void delete(int id) {
107 saleDao.delete(id);
108 }
109
110 @Override
111 public void delete(List<Integer> ids) {
112 Preconditions.checkNotNull(ids);
113 ids.stream()
114 .filter(Objects::nonNull)
115 .forEach(this::delete);
116 }
117
118
119
120 protected void fillDefaultProperties(SaleVO parent, MeasurementVO measurement, Class<? extends IMeasurementEntity> entityClass) {
121 if (measurement == null) return;
122
123
124 if (measurement.getRecorderDepartment() == null || measurement.getRecorderDepartment().getId() == null) {
125 measurement.setRecorderDepartment(parent.getRecorderDepartment());
126 }
127
128 measurement.setEntityName(entityClass.getSimpleName());
129 }
130 }