|
|
@@ -1,11 +1,9 @@
|
|
|
package com.x1ongzhu.wisFactory.service;
|
|
|
|
|
|
import com.x1ongzhu.wisFactory.domain.EventUploadReq;
|
|
|
-import com.x1ongzhu.wisFactory.domain.ProductivityHistory;
|
|
|
import com.x1ongzhu.wisFactory.domain.StaffAccess;
|
|
|
import com.x1ongzhu.wisFactory.domain.StaffInfo;
|
|
|
import com.x1ongzhu.wisFactory.exception.BusinessException;
|
|
|
-import com.x1ongzhu.wisFactory.repo.ProductivityHistoryRepo;
|
|
|
import com.x1ongzhu.wisFactory.repo.StaffAccessRepo;
|
|
|
import com.x1ongzhu.wisFactory.repo.StaffInfoRepo;
|
|
|
import com.x1ongzhu.wisFactory.service.storage.StorageService;
|
|
|
@@ -14,25 +12,31 @@ import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
import java.util.Optional;
|
|
|
+import java.util.Set;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
|
@AllArgsConstructor
|
|
|
public class StaffAccessService {
|
|
|
|
|
|
- private StaffAccessRepo staffAccessRepo;
|
|
|
- private StorageService storageService;
|
|
|
- private StaffInfoRepo staffInfoRepo;
|
|
|
- private ProductivityHistoryService productivityHistoryService;
|
|
|
+ private StaffAccessRepo staffAccessRepo;
|
|
|
+ private StorageService storageService;
|
|
|
+ private StaffInfoRepo staffInfoRepo;
|
|
|
|
|
|
public void access(Boolean pass, String direction, String ip, String cardNo, String employNo,
|
|
|
String doorNo, String readerNo, String channel, String pic, LocalDateTime time) {
|
|
|
Optional<StaffInfo> staffInfo = Optional.empty();
|
|
|
- if (cardNo != null) {
|
|
|
- staffInfo = staffInfoRepo.findByCardsContains(cardNo);
|
|
|
+ if (StringUtils.isEmpty(employNo)) {
|
|
|
+ if (cardNo != null) {
|
|
|
+ staffInfo = staffInfoRepo.findByCardsContains(cardNo);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ staffInfo = staffInfoRepo.findFirstByEmployNo(employNo.replaceFirst("^0+(?!$)", ""));
|
|
|
}
|
|
|
StaffAccess staffAccess = StaffAccess.builder()
|
|
|
.pass(pass)
|
|
|
@@ -44,19 +48,11 @@ public class StaffAccessService {
|
|
|
.readerNo(readerNo)
|
|
|
.channel(channel)
|
|
|
.accessTime(time)
|
|
|
- .employNo(staffInfo.map(StaffInfo::getEmployNo).orElse(null))
|
|
|
+ .employNo(staffInfo.map(StaffInfo::getEmployNo).orElse(StringUtils.isEmpty(employNo) ? null : employNo))
|
|
|
.build();
|
|
|
if (StringUtils.isNotBlank(pic)) {
|
|
|
staffAccess.setPhoto(storageService.uploadBase64(pic));
|
|
|
}
|
|
|
- if (staffInfo.isPresent()) {
|
|
|
- if ("IN".equalsIgnoreCase(direction)) {
|
|
|
- staffInfoRepo.setInside(staffInfo.get().getId(), true);
|
|
|
- } else if ("OUT".equalsIgnoreCase(direction)) {
|
|
|
- staffInfoRepo.setInside(staffInfo.get().getId(), false);
|
|
|
- }
|
|
|
- productivityHistoryService.updateToday();
|
|
|
- }
|
|
|
staffAccessRepo.save(staffAccess);
|
|
|
}
|
|
|
|
|
|
@@ -65,7 +61,7 @@ public class StaffAccessService {
|
|
|
.findByIpAndAccessTimeBetween(req.getIp(), req.getStartTime(), req.getEndTime());
|
|
|
List<StaffAccess> add = new ArrayList<>();
|
|
|
for (StaffAccess staffAccess : req.getEvents()) {
|
|
|
- StaffAccess s = list.stream().filter(i -> i.getEmployNo() != null
|
|
|
+ StaffAccess s = list.stream().filter(i -> i.getIp().equals(staffAccess.getIp())
|
|
|
&& i.getAccessTime().equals(staffAccess.getAccessTime()))
|
|
|
.findAny().orElse(null);
|
|
|
if (s == null) {
|
|
|
@@ -76,6 +72,8 @@ public class StaffAccessService {
|
|
|
}
|
|
|
}
|
|
|
staffAccessRepo.saveAll(add);
|
|
|
+
|
|
|
+ setInfo();
|
|
|
}
|
|
|
|
|
|
public void retroactive(String employNo, String direction, LocalDateTime accessTime, String remark) {
|
|
|
@@ -95,6 +93,27 @@ public class StaffAccessService {
|
|
|
|
|
|
@Scheduled(cron = "0 30 4 * * ?")
|
|
|
public void setInfo() {
|
|
|
- staffAccessRepo.setInfo();
|
|
|
+// staffAccessRepo.setInfo();
|
|
|
+// staffAccessRepo.setInfo1();
|
|
|
+
|
|
|
+ List<StaffAccess> list = staffAccessRepo
|
|
|
+ .findByAccessTimeAfterAndPassTrueAndEmployNoNotNullAndNameNull(
|
|
|
+ LocalDate.now().minusMonths(3).atStartOfDay());
|
|
|
+ Set<String> employNos = list.stream().map(StaffAccess::getEmployNo).collect(Collectors.toSet());
|
|
|
+ if (!employNos.isEmpty()) {
|
|
|
+ List<StaffInfo> staffInfos = staffInfoRepo.findByEmployNoIn(employNos);
|
|
|
+ List<StaffAccess> update = new ArrayList<>();
|
|
|
+ for (StaffAccess staffAccess : list) {
|
|
|
+ staffInfos.stream().filter(staffInfo -> staffInfo.getEmployNo().equals(staffAccess.getEmployNo()))
|
|
|
+ .findAny().ifPresent(staffInfo -> {
|
|
|
+ staffAccess.setName(staffInfo.getName());
|
|
|
+ update.add(staffAccess);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if (!update.isEmpty()) {
|
|
|
+ staffAccessRepo.saveAll(update);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
}
|