Skip to content

Commit

Permalink
Merge pull request #93 from ttthanhf/hotfix/feature/serivce
Browse files Browse the repository at this point in the history
Hotfix/feature/serivce - ADD Image into package service item child
  • Loading branch information
ttthanhf committed Nov 12, 2023
2 parents e65d3af + 97ef0d8 commit a9b5836
Show file tree
Hide file tree
Showing 6 changed files with 52 additions and 96 deletions.
3 changes: 3 additions & 0 deletions src/main/java/housemate/entities/PackageServiceItem.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,7 @@ public class PackageServiceItem {

@Transient
private List<ServiceType> typeList;

@Transient
private List<Image> images;
}
5 changes: 5 additions & 0 deletions src/main/java/housemate/entities/TaskReport.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,14 @@ public class TaskReport {

@Column(name = "note", length = 3000)
private String note;

@Column(name = "quantity_over", length = 3000)
private int qutyOver;

@Transient
List<Image> taskReportImages;



}

5 changes: 4 additions & 1 deletion src/main/java/housemate/entities/UserUsage.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,10 @@ public class UserUsage implements Cloneable {

@Column(name = "is_expired")
private boolean isExpired;


@Column(name = "quantity_over")
private int qtyOver;

@SneakyThrows
@Override
public UserUsage clone() {
Expand Down
93 changes: 24 additions & 69 deletions src/main/java/housemate/services/TaskBuildupService.java
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,7 @@ public TaskViewDTO convertIntoTaskViewDtoFromTask(Task task) {
List<Image> reportTaskImgs = imgRepo
.findAllByEntityIdAndImageType(x.getTaskReportId(), ImageType.WORKING).orElse(List.of());
x.setTaskReportImages(reportTaskImgs);
x.setQutyOver(userUsageRepo.findById(taskRepo.findById(x.getTaskId()).get().getSchedule().getUserUsageId()).get().getQtyOver());
});
}
Schedule schedule = scheduleRepo.findById(task.getScheduleId()).orElse(null);
Expand Down Expand Up @@ -511,24 +512,17 @@ public TaskRes<TaskReport> reportTask(Task task, TaskReportType taskReport, Task
return TaskRes.build(taskReportResult, TaskMessType.REJECT_REPORT_TASK,
"Trước khi báo cáo hãy điền giá trị khối lượng cho loại dịch vụ thuộc \"Gửi trả\"");
quantity = reportNewDTO.getQtyOfGroupReturn();
if (!(quantity <= userUsage.getRemaining() && quantity > 0))
return TaskRes.build(taskReportResult, TaskMessType.REJECT_REPORT_TASK,
"Oops, Số lượng còn lại trong gói bạn chọn chỉ còn " + userUsage.getRemaining()
+ ". Hãy điền giá trị số lượng trong khoảng số lượng mà bạn sở hữu ");
if (!(serviceInUsed.getMin() == 0 && serviceInUsed.getMax() == 0)) {
if (quantity < serviceInUsed.getMin())
return TaskRes.build(taskReportResult, TaskMessType.REJECT_REPORT_TASK,
"Điền giá trị số lượng cho loại dịch vụ \"Gửi trả\". Hãy điền giá trị số lượng trong khoảng tối thiểu là "
+ serviceInUsed.getMin() + " - " + serviceInUsed.getMax() + "\nLớn hơn khoảng này bạn sẽ phải trả thêm số tiền cho lượng dư thêm !");
}
if(quantity > userUsage.getRemaining())
userUsage.setQtyOver(quantity - userUsage.getRemaining());

task.getSchedule().setQuantityRetrieve(quantity);
}

task.setTaskStatus(TaskStatus.DONE);
task.getSchedule().setStatus(ScheduleStatus.DONE);
taskReportResult.setTaskStatus(task.getTaskStatus());
int newQuantityRemaining = userUsage.getRemaining() - task.getSchedule().getQuantityRetrieve();
userUsage.setRemaining(newQuantityRemaining < 0 ? 0 : newQuantityRemaining);
userUsageRepo.save(userUsage);

// TODO: NOTI STAFF DONE TO CUSTOMER
TaskBuildupService.createAndSendNotification(
Expand Down Expand Up @@ -677,15 +671,12 @@ private void createEventForReportTask(Task theTask, LocalDateTime timeStartWorki
*/
ZonedDateTime timeStartWorkingZone = timeStartWorking.atZone(dateTimeZone);
ZonedDateTime timeEndWorkingZone = timeEndWorking.atZone(dateTimeZone);
ZonedDateTime todayAtMidnight = LocalDate.now().atTime(LocalTime.MIDNIGHT).atZone(dateTimeZone);
//Trigger 1
Instant timeMinusScoreForNotReportArrived = timeStartWorkingZone.plusMinutes(DURATION_MINUTES_TIMES_STAFF_START_REPORT.getNum()).toInstant();
//Trigger 2
Instant timeCancelTaskForNotReportDoing = timeEndWorkingZone.toInstant();
//Trigger 3
Instant timeAutoDoneTask = timeEndWorkingZone.plusMinutes(DURATION_HOURS_SYST_AUTO_DONE_TASK.getNum()).toInstant();
//Trigger 4
Instant timeCancelTaskForNotReportDone = todayAtMidnight.toInstant();
Instant timeCancelTaskForNotReportDone = timeEndWorkingZone.plusMinutes(DURATION_HOURS_SYST_AUTO_DONE_TASK.getNum()).toInstant();

//Trigger 1
{
Expand Down Expand Up @@ -750,15 +741,15 @@ public void run() {
// TODO: NOTI CANCEL TASK FOR NOT REPORT DOING TO STAFF
TaskBuildupService.createAndSendNotification(
task,
"Hủy lịch",
"Hủy lịch do không báo cáo tiến trình \"Đang làm việc\" ",
"Hủy công việc",
"Hủy do không báo cáo tiến trình \"Đang làm việc\" ",
String.valueOf(task.getSchedule().getStaffId()));

// TODO: NOTI CANCEL SCHEDULE WHEN STAFF NOT REPORT DOING TO CUSTOMER
TaskBuildupService.createAndSendNotification(
task,
"Hủy công việc",
"Hủy lịch do nhân viên không báo cáo tiến trình làm việc.",
"Hủy lịch",
"Hủy do nhân viên không báo cáo tiến trình làm việc.",
String.valueOf(task.getSchedule().getCustomerId()));

log.info("Task {} has cancelled task for not report DOING - staff not null - at {}",
Expand All @@ -777,52 +768,6 @@ public void run() {
theTask.getTaskId(), timeCancelTaskForNotReportDoing);
}
// trigger 3
{
Runnable eventAutoDoneTask = new Runnable() {
@Override
public void run() {
Task task = taskRepo.findById(theTask.getTaskId()).get();
TaskReport doneReport = taskReportRepo.findByTaskIdAndTaskStatus(task.getTaskId(), TaskStatus.DONE);
TaskReport doingReport = taskReportRepo.findByTaskIdAndTaskStatus(task.getTaskId(), TaskStatus.DOING);
if (task.getStaffId() != null && !task.getTaskStatus().equals("CANCELLED") && doneReport == null && doingReport != null) {
Schedule schedule = scheduleRepo.findById(task.getScheduleId()).get();
schedule.setStatus(ScheduleStatus.DONE);
UserUsage userUsage = userUsageRepo.findById(task.getSchedule().getUserUsageId()).get();
int newQuantityRemaining = userUsage.getRemaining() - task.getSchedule().getQuantityRetrieve();
userUsage.setRemaining(newQuantityRemaining < 0 ? 0 : newQuantityRemaining);
scheduleRepo.save(schedule);
userUsageRepo.save(userUsage);

// TODO: NOTI TO STAFF TO REPORT STATUS DONE
TaskBuildupService.createAndSendNotification(
task,
notiTitleForTaskStatus,
"Vui lòng báo cáo tiến trình hoàn thành. Nếu không bạn sẽ bị hủy công việc do không báo cáo tiến trình đầy đủ",
String.valueOf(task.getSchedule().getStaffId()));
// TODO: NOTI REPORT STATUS DONE TO CUSTOMER
TaskBuildupService.createAndSendNotification(
task,
notiTitleForTaskStatus,
"Lịch làm việc đã hoàn thành, vui lòng kiểm tra lại trước 24 giờ đêm nay nếu có khiếu nại !\nSau thời gian này chúng tôi không nhận khiếu nại về báo cáo tiến trình làm việc gì thêm !",
String.valueOf(task.getSchedule().getStaffId()));

log.info("Task {} auto done report - staff not null - sent at {}", task.getTaskId(),
dateFormat.format(new Date()));
}
}
};
ScheduledFuture<?> taskEvent = taskScheduler.schedule(eventAutoDoneTask, timeAutoDoneTask);
if (eventNotiList.get(theTask.getTaskId()) == null) {
List<ScheduledFuture<?>> scheduleFuterOfTaskId = new ArrayList<>();
eventNotiList.put(theTask.getTaskId(), scheduleFuterOfTaskId);
}
eventNotiList.get(theTask.getTaskId()).add(taskEvent);

log.info("Task {} create event auto done - will send at {}",
theTask.getTaskId(), timeAutoDoneTask);

}
// trigger 4
{
Runnable eventCancelTaskForNotReportDone = new Runnable() {
@Override
Expand All @@ -835,16 +780,27 @@ public void run() {
staff.setProfiencyScore(staff.getProfiencyScore() - MINUS_POINTS_FOR_NOT_COMPLETE_REPORT_TASK.getNum());
staff.setProfiencyScore(staff.getProfiencyScore() < 0 ? 0 : staff.getProfiencyScore());
bannedStaff(staff);
Schedule schedule = scheduleRepo.findById(task.getScheduleId()).get();
schedule.setStatus(ScheduleStatus.CANCEL);
schedule.setNote(schedule.getNote()
+ " - Lịch bị hủy do nhân viên không hoàn thành tiến trình DONE !");
task.setTaskStatus(TaskStatus.CANCELLED_BY_STAFF);
task.setTaskNote("Buộc phải hủy công việc vì bạn không báo cáo cho trạng thái \"ĐÃ HOÀN THÀNH\" đúng khung giờ quy định !");
staffRepo.save(staff);
scheduleRepo.save(schedule);
taskRepo.save(task);


// TODO: NOTI CANCEL SCHEDULE WHEN STAFF NOT REPORT DONE TO CUSTOMER
TaskBuildupService.createAndSendNotification(
task,
"Hủy lịch",
"Hủy do nhân viên không báo cáo tiến trình làm việc.",
String.valueOf(task.getSchedule().getCustomerId()));
// TODO: NOTI TO STAFF FOR NOT REPORT STATUS DONE
TaskBuildupService.createAndSendNotification(
task,
"Hủy công việc",
"Hủy công việc do không hoàn thành báo cáo ",
"Hủy do không hoàn thành báo cáo tiến trình \"Hoàn thành\"",
String.valueOf(task.getSchedule().getStaffId()));

log.info("Task {} cancel task for not report done - staff not null - sent at {}",
Expand All @@ -865,8 +821,7 @@ public void run() {

log.info("Task {} Trigger 1 timeMinusScoreForNotReportArrived call at {}", theTask.getTaskId(), LocalDateTime.ofInstant(timeCancelTaskForNotReportDone, dateTimeZone));
log.info("Task {} Trigger 2 timeCancelTaskForNotReportDoing call at {}", theTask.getTaskId(), LocalDateTime.ofInstant(timeMinusScoreForNotReportArrived, dateTimeZone));
log.info("Task {} Trigger 3 timeAutoDoneTask call at {}", theTask.getTaskId(), LocalDateTime.ofInstant(timeAutoDoneTask, dateTimeZone) );
log.info("Task {} Trigger 4 timeCancelTaskForNotReportDone call at {}", theTask.getTaskId(), LocalDateTime.ofInstant(timeCancelTaskForNotReportDone, dateTimeZone));
log.info("Task {} Trigger 3 timeCancelTaskForNotReportDone call at {}", theTask.getTaskId(), LocalDateTime.ofInstant(timeCancelTaskForNotReportDone, dateTimeZone));

}

Expand Down
14 changes: 4 additions & 10 deletions src/main/java/housemate/services/TaskService.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
Expand Down Expand Up @@ -308,15 +306,11 @@ public ResponseEntity<?> cancelTask(HttpServletRequest request, int scheduleId)
// UPDATE TASK TO CHANGE THE TIME
public ResponseEntity<?> updateTaskTimeWorking(HttpServletRequest request,
Schedule scheduleNewTimeWorking) {
Schedule newSchedule = scheduleRepo.findById(scheduleNewTimeWorking.getScheduleId()).get();
int customerIdRequestUpdate = authorizationUtil.getUserIdFromAuthorizationHeader(request);
if (scheduleNewTimeWorking == null)
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Lịch cũ không tồn tại");

if (!(customerIdRequestUpdate == scheduleNewTimeWorking.getCustomerId()))
return ResponseEntity.badRequest().body("You are not allow to update this schedule");

if (scheduleNewTimeWorking.getScheduleId() != scheduleNewTimeWorking.getScheduleId())
return ResponseEntity.badRequest().body("New schedule should have the same ID of OldSchedule");
if (newSchedule == null)
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Lịch không tồn tại");


TaskRes taskRes = taskBuildupServ.updateTaskOnScheduleChangeTime(scheduleNewTimeWorking);
if (taskRes.getMessType().equals(TaskMessType.REJECT_UPDATE_TASK)) {
Expand Down
28 changes: 12 additions & 16 deletions src/main/java/housemate/services/TheService.java
Original file line number Diff line number Diff line change
Expand Up @@ -148,11 +148,9 @@ public ResponseEntity<?> searchFilterAllKind(
Page<Service> serviceList = serviceRepo.searchFilterAllKind(statusValue, keywordValue, ratingValue, categoryValue, sortedPage);
int maxPages = (int) Math.ceil((double) serviceList.getTotalPages());

if (serviceList.isEmpty() || serviceList == null)
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Not found !");

serviceList.forEach(
s -> s.setImages(imgRepo.findAllByEntityIdAndImageType(s.getServiceId(), ImageType.SERVICE).orElse(Collections.EMPTY_LIST)));
if (!serviceList.isEmpty())
serviceList.forEach(s -> s.setImages(imgRepo
.findAllByEntityIdAndImageType(s.getServiceId(), ImageType.SERVICE).orElse(List.of())));

List<ServiceViewDTO> serviceViewList = new ArrayList<>();
for (Service service : serviceList.getContent()) {
Expand All @@ -168,10 +166,7 @@ public ResponseEntity<?> searchFilterAllKind(
}
Pageable pageable = PageRequest.of(pageNo, pageSize, sort);
Page<ServiceViewDTO> serviceViewPage = new PageImpl<ServiceViewDTO>(serviceViewList, serviceList.getPageable(), serviceList.getTotalElements());

if (serviceViewPage.isEmpty() || serviceViewPage == null)
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Not found !");


return ResponseEntity.ok(serviceViewPage);
}

Expand Down Expand Up @@ -210,11 +205,9 @@ public ResponseEntity<?> searchFilterAllKindAvailable(
Page<Service> serviceList = serviceRepo.searchFilterAllAvailable(statusValue, keywordValue, ratingValue, categoryValue, sortedPage);
int maxPages = (int) Math.ceil((double) serviceList.getTotalPages());

if (serviceList.isEmpty() || serviceList == null)
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Not found !");

serviceList.forEach(
s -> s.setImages(imgRepo.findAllByEntityIdAndImageType(s.getServiceId(), ImageType.SERVICE).orElse(Collections.EMPTY_LIST)));
if (!serviceList.isEmpty())
serviceList.forEach(s -> s.setImages(imgRepo
.findAllByEntityIdAndImageType(s.getServiceId(), ImageType.SERVICE).orElse(List.of())));

return ResponseEntity.ok(serviceList);
}
Expand All @@ -224,7 +217,7 @@ public ResponseEntity<?> getOne(int serviceId) {
ServiceViewDTO serviceDtoForDetail = new ServiceViewDTO();

Service service = serviceRepo.findById(serviceId).orElse(null);
List<Image> imgList = imgRepo.findAllByEntityIdAndImageType(serviceId, ImageType.SERVICE).orElse(Collections.EMPTY_LIST);
List<Image> imgList = imgRepo.findAllByEntityIdAndImageType(serviceId, ImageType.SERVICE).orElse(List.of());
service.setImages(imgList);

if (service == null)
Expand All @@ -243,8 +236,9 @@ public ResponseEntity<?> getOne(int serviceId) {
.findAllByPackageServiceId(service.getServiceId()).orElse(null);
if (packageServiceChildList != null) {
for (PackageServiceItem packageServiceItem : packageServiceChildList) {
Service serviceChild = serviceRepo.findByServiceId(packageServiceItem.getSingleServiceId()).orElse(null);
packageServiceItem.setTypeList(serviceTypeRepo.findAllByServiceId(packageServiceItem.getSingleServiceId()).orElse(null));
packageServiceItem.setImages(imgRepo.findAllByEntityIdAndImageType(packageServiceItem.getSingleServiceId(), ImageType.SERVICE).orElse(List.of()));

}
serviceDtoForDetail.setPackageServiceItemList(packageServiceChildList);
}
Expand Down Expand Up @@ -558,6 +552,8 @@ else if (!oldService.isPackage() && serviceDTO.getIsPackage().equals(true))
oldService.setOriginalPrice(serviceDTO.getOriginalPrice());
oldService.setFinalPrice(serviceDTO.getFinalPrice());
oldService.setGroupType(serviceDTO.getGroupType());
oldService.setMin(serviceDTO.getMin());
oldService.setMax(serviceDTO.getMax());
updatedService = serviceRepo.save(oldService);

//Update the price cycle list of this service
Expand Down

0 comments on commit a9b5836

Please sign in to comment.