10
10
import lombok .AccessLevel ;
11
11
import lombok .AllArgsConstructor ;
12
12
import lombok .experimental .FieldDefaults ;
13
+ import org .slf4j .Logger ;
14
+ import org .slf4j .LoggerFactory ;
13
15
import org .springframework .stereotype .Service ;
14
16
17
+ import java .time .Duration ;
15
18
import java .time .Period ;
16
19
import java .util .Date ;
17
20
import java .util .List ;
@@ -28,10 +31,16 @@ public class ArriveService {
28
31
WorkerRepository workerRepository ;
29
32
ArriveMapper mapper ;
30
33
34
+ Logger logger = LoggerFactory .getLogger (ArriveService .class );
35
+
31
36
public ArriveDto get (Long id ) {
32
37
33
- if ( Objects . isNull ( id )) throw new NullPointerException ( "Id is null" );
38
+ logger . info ( "Get Arrive by id" + id );
34
39
40
+ if (Objects .isNull (id )) {
41
+ logger .warn ("Id is null" );
42
+ throw new NullPointerException ("Id is null" );
43
+ }
35
44
return mapper .toDto (repository .findById (id ).orElseThrow ());
36
45
}
37
46
@@ -41,7 +50,6 @@ public void create(ArriveDto dto) {
41
50
42
51
Arrive arrive = mapper .toModel (dto , companyRepository , workerRepository );
43
52
44
-
45
53
if (arrive .getType () == Type .Exit ) {
46
54
47
55
Arrive fake = new Arrive ();
@@ -109,16 +117,36 @@ public int getHours(Long userId, Period period, Type type){
109
117
return 0 ;
110
118
}
111
119
112
- public int getHours (Long workerId , Period period ){
120
+ public long getSeconds (Long workerId , Period period ){
113
121
114
122
//якщо кількість входів != кількості виходів == помилка
115
123
// вихід - вхід = робоічі години
116
124
// загальні += робочі години
117
125
// return загальні - кількість входів * робочий день(години)
118
126
119
127
128
+ // TODO: 07.08.22 первести фільтрацію на базу даних (так знімітся навантаження з апки)
129
+ // TODO: 07.08.22 зробити фільтафію за періодом
120
130
121
- return 0 ;
131
+ long totalTimeInSeconds = 0 ;
132
+
133
+ List <Arrive > exit = repository
134
+ .findAll ()
135
+ .stream ()
136
+ .filter (arrive -> Objects .equals (arrive .getType (), Type .Exit ))
137
+ .filter (arrive -> Objects .nonNull (arrive .getEnter_id ()))
138
+ .collect (Collectors .toList ());
139
+
140
+ for (Arrive arrive : exit ){
141
+ Arrive enter = repository
142
+ .findById (arrive .getEnter_id ())
143
+ .orElseThrow ();
144
+ Duration duration = Duration
145
+ .between (enter .getCreateDateTime (), arrive .getCreateDateTime ());
146
+ totalTimeInSeconds += duration .getSeconds ();
147
+ }
148
+
149
+ return totalTimeInSeconds ;
122
150
}
123
151
124
152
0 commit comments