wangyingyang

fix

...@@ -67,14 +67,14 @@ public class ClientCustomerController { ...@@ -67,14 +67,14 @@ public class ClientCustomerController {
67 @GetMapping("/clientCustomers/today/statistic") 67 @GetMapping("/clientCustomers/today/statistic")
68 @ResponseStatus(HttpStatus.OK) 68 @ResponseStatus(HttpStatus.OK)
69 public TodayOrderDto getClientCustomerTodayOrderStatistic(@RequestParam String customerToken) { 69 public TodayOrderDto getClientCustomerTodayOrderStatistic(@RequestParam String customerToken) {
70 - return clientCustomerService.getTodayOrderStatistic(customerToken, false); 70 + return clientCustomerService.getTodayOrderStatistic(customerToken);
71 } 71 }
72 72
73 @ApiOperation(value = "获取his今日在住") 73 @ApiOperation(value = "获取his今日在住")
74 @GetMapping("/hisClientCustomers/today/statistic") 74 @GetMapping("/hisClientCustomers/today/statistic")
75 @ResponseStatus(HttpStatus.OK) 75 @ResponseStatus(HttpStatus.OK)
76 public TodayOrderDto getHisClientCustomerTodayOrderStatistic(@RequestParam String customerToken) { 76 public TodayOrderDto getHisClientCustomerTodayOrderStatistic(@RequestParam String customerToken) {
77 - return clientCustomerService.getTodayOrderStatistic(customerToken, true); 77 + return clientCustomerService.getTodayOrderStatisticForHis(customerToken);
78 } 78 }
79 79
80 } 80 }
......
...@@ -15,6 +15,7 @@ import com.infoloop.tianting.model.dto.OrderDbDTO.UpdateOrderResponse; ...@@ -15,6 +15,7 @@ import com.infoloop.tianting.model.dto.OrderDbDTO.UpdateOrderResponse;
15 import com.infoloop.tianting.service.OrderService; 15 import com.infoloop.tianting.service.OrderService;
16 import io.swagger.annotations.Api; 16 import io.swagger.annotations.Api;
17 import io.swagger.annotations.ApiOperation; 17 import io.swagger.annotations.ApiOperation;
18 +import io.swagger.models.auth.In;
18 import java.util.List; 19 import java.util.List;
19 import javax.validation.Valid; 20 import javax.validation.Valid;
20 import lombok.RequiredArgsConstructor; 21 import lombok.RequiredArgsConstructor;
...@@ -98,12 +99,12 @@ public class OrderController { ...@@ -98,12 +99,12 @@ public class OrderController {
98 return orderService.batchUpdateOrderDetails(updateDto); 99 return orderService.batchUpdateOrderDetails(updateDto);
99 } 100 }
100 101
101 - @ApiOperation(value = "检查是否预定过该餐单") 102 + @ApiOperation(value = "获取已预定该餐单的次数")
102 @PostMapping("/order/check") 103 @PostMapping("/order/check")
103 @ResponseStatus(HttpStatus.OK) 104 @ResponseStatus(HttpStatus.OK)
104 - public Boolean checkOrder( 105 + public Integer checkOrder(
105 - @Valid @RequestBody OrderDbDTO.CheckIfOrderedDto checkIfOrderedDto) { 106 + @Valid @RequestBody OrderDbDTO.getMenuOrderCountDto checkIfOrderedDto) {
106 - return orderService.checkIfOrdered(checkIfOrderedDto); 107 + return orderService.getMenuOrderCount(checkIfOrderedDto);
107 } 108 }
108 109
109 } 110 }
......
...@@ -26,6 +26,7 @@ public enum ErrorCodeEnum implements BaseEnum { ...@@ -26,6 +26,7 @@ public enum ErrorCodeEnum implements BaseEnum {
26 26
27 GENERATE_EXCEL_ERROR(406000004, "生成excel失败"), 27 GENERATE_EXCEL_ERROR(406000004, "生成excel失败"),
28 28
29 + ORDER_COUNT_LIMIT(406000005, "已超过该餐单预定次数"),
29 ; 30 ;
30 private final int code; 31 private final int code;
31 32
......
...@@ -575,7 +575,7 @@ public class OrderDbDTO { ...@@ -575,7 +575,7 @@ public class OrderDbDTO {
575 @Builder 575 @Builder
576 @ToString 576 @ToString
577 @ApiModel(description = "检查是否已预定过某一餐单") 577 @ApiModel(description = "检查是否已预定过某一餐单")
578 - public static class CheckIfOrderedDto { 578 + public static class getMenuOrderCountDto {
579 private Integer customerId; 579 private Integer customerId;
580 private Integer menuId; 580 private Integer menuId;
581 private LocalDateTime mealTime; 581 private LocalDateTime mealTime;
......
...@@ -2,6 +2,8 @@ package com.infoloop.tianting.model.dto; ...@@ -2,6 +2,8 @@ package com.infoloop.tianting.model.dto;
2 2
3 import com.infoloop.tianting.enums.SettlementDimensionEnum; 3 import com.infoloop.tianting.enums.SettlementDimensionEnum;
4 import io.swagger.annotations.ApiModel; 4 import io.swagger.annotations.ApiModel;
5 +import java.util.ArrayList;
6 +import java.util.Map;
5 import lombok.Builder; 7 import lombok.Builder;
6 import lombok.Data; 8 import lombok.Data;
7 9
...@@ -17,9 +19,14 @@ public class SettlementDTO { ...@@ -17,9 +19,14 @@ public class SettlementDTO {
17 @ApiModel(description = "SettlementRequestDto") 19 @ApiModel(description = "SettlementRequestDto")
18 public static class SettlementRequestDto { 20 public static class SettlementRequestDto {
19 21
20 - private int enterpriseId; 22 + @Builder.Default
23 + private int enterpriseId = 0;
21 24
22 - private List<Integer> stallIds; 25 + @Builder.Default
26 + private List<Integer> stallIds = new ArrayList<>();
27 +
28 + @Builder.Default
29 + private int clientId = 0;
23 30
24 private SettlementDimensionEnum dimension; 31 private SettlementDimensionEnum dimension;
25 32
...@@ -32,13 +39,23 @@ public class SettlementDTO { ...@@ -32,13 +39,23 @@ public class SettlementDTO {
32 @Builder 39 @Builder
33 @ApiModel(description = "SettlementRequestDto") 40 @ApiModel(description = "SettlementRequestDto")
34 public static class SettlementMenuSkuDto { 41 public static class SettlementMenuSkuDto {
35 -
36 private String skuCode; 42 private String skuCode;
37 private String showName; 43 private String showName;
38 private Integer count; 44 private Integer count;
39 private Integer price; 45 private Integer price;
40 private Integer totalPrice; 46 private Integer totalPrice;
41 } 47 }
48 +
49 + @Data
50 + @Builder
51 + @ApiModel(description = "SettlementRequestDto")
52 + public static class SettlementDataDto {
53 + private String client;
54 + private String startTime;
55 + private String endTime;
56 + private Map<String, Map<String, List<SettlementMenuSkuDto>>> classifyOrders;
57 + }
58 +
42 } 59 }
43 60
44 61
......
...@@ -28,6 +28,8 @@ public interface ClientCustomerService { ...@@ -28,6 +28,8 @@ public interface ClientCustomerService {
28 BatchDeleteCustomerLabelRefResponseDto deleteClientCustomerLabelRefsByIds( 28 BatchDeleteCustomerLabelRefResponseDto deleteClientCustomerLabelRefsByIds(
29 BatchDeleteCustomerLabelRefRequestDto deleteRequestDto); 29 BatchDeleteCustomerLabelRefRequestDto deleteRequestDto);
30 30
31 - TodayOrderDto getTodayOrderStatistic(String token, boolean isHis); 31 + TodayOrderDto getTodayOrderStatistic(String token);
32 +
33 + TodayOrderDto getTodayOrderStatisticForHis(String token);
32 34
33 } 35 }
......
...@@ -3,7 +3,7 @@ package com.infoloop.tianting.service; ...@@ -3,7 +3,7 @@ package com.infoloop.tianting.service;
3 import com.infoloop.tianting.model.common.OrderPageResult; 3 import com.infoloop.tianting.model.common.OrderPageResult;
4 import com.infoloop.tianting.model.common.PageResult; 4 import com.infoloop.tianting.model.common.PageResult;
5 import com.infoloop.tianting.model.dto.OrderDbDTO.BatchUpdateOrderDetailResponse; 5 import com.infoloop.tianting.model.dto.OrderDbDTO.BatchUpdateOrderDetailResponse;
6 -import com.infoloop.tianting.model.dto.OrderDbDTO.CheckIfOrderedDto; 6 +import com.infoloop.tianting.model.dto.OrderDbDTO.getMenuOrderCountDto;
7 import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderDto; 7 import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderDto;
8 import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderResponse; 8 import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderResponse;
9 import com.infoloop.tianting.model.dto.OrderDbDTO.OperatorCreateOrderDto; 9 import com.infoloop.tianting.model.dto.OrderDbDTO.OperatorCreateOrderDto;
...@@ -26,5 +26,5 @@ public interface OrderService { ...@@ -26,5 +26,5 @@ public interface OrderService {
26 CreateOrderResponse orderCreation(OperatorCreateOrderDto createOrderDto); 26 CreateOrderResponse orderCreation(OperatorCreateOrderDto createOrderDto);
27 UpdateOrderResponse updateOrder(UpdateOrderDto updateOrderDto); 27 UpdateOrderResponse updateOrder(UpdateOrderDto updateOrderDto);
28 BatchUpdateOrderDetailResponse batchUpdateOrderDetails(OrderDetailBatchUpdateDto batchUpdateDto); 28 BatchUpdateOrderDetailResponse batchUpdateOrderDetails(OrderDetailBatchUpdateDto batchUpdateDto);
29 - Boolean checkIfOrdered(CheckIfOrderedDto checkIfOrdered); 29 + Integer getMenuOrderCount(getMenuOrderCountDto checkIfOrdered);
30 } 30 }
......
...@@ -77,7 +77,7 @@ public class OrderServiceRpcClient { ...@@ -77,7 +77,7 @@ public class OrderServiceRpcClient {
77 .setMealTimeEnd(queryOrderDto.getMealTimeEnd().toInstant(ZoneOffset.UTC).toEpochMilli()) 77 .setMealTimeEnd(queryOrderDto.getMealTimeEnd().toInstant(ZoneOffset.UTC).toEpochMilli())
78 .setShouldFilterCreatedAtStart(queryOrderDto.getShouldFilterCreatedAtTimeStart()) 78 .setShouldFilterCreatedAtStart(queryOrderDto.getShouldFilterCreatedAtTimeStart())
79 .setCreatedAtStart(queryOrderDto.getCreatedAtTimeStart().toInstant(ZoneOffset.UTC).toEpochMilli()) 79 .setCreatedAtStart(queryOrderDto.getCreatedAtTimeStart().toInstant(ZoneOffset.UTC).toEpochMilli())
80 - .setShouldFilterCreatedAtStart(queryOrderDto.getShouldFilterCreatedAtTimeEnd()) 80 + .setShouldFilterCreatedAtEnd(queryOrderDto.getShouldFilterCreatedAtTimeEnd())
81 .setCreatedAtEnd(queryOrderDto.getCreatedAtTimeEnd().toInstant(ZoneOffset.UTC).toEpochMilli()) 81 .setCreatedAtEnd(queryOrderDto.getCreatedAtTimeEnd().toInstant(ZoneOffset.UTC).toEpochMilli())
82 .setShouldFilterClientIds(queryOrderDto.getShouldFilterClientIds()) 82 .setShouldFilterClientIds(queryOrderDto.getShouldFilterClientIds())
83 .addAllClientIds(queryOrderDto.getClientIds()) 83 .addAllClientIds(queryOrderDto.getClientIds())
......
...@@ -282,31 +282,16 @@ public class ClientCustomerServiceImpl implements ClientCustomerService { ...@@ -282,31 +282,16 @@ public class ClientCustomerServiceImpl implements ClientCustomerService {
282 // } 282 // }
283 283
284 @Override 284 @Override
285 - public TodayOrderDto getTodayOrderStatistic(String token, boolean isHis) { 285 + public TodayOrderDto getTodayOrderStatistic(String token) {
286 List<CurrentClientCustomerDto> currentCustomers = new ArrayList<>(); 286 List<CurrentClientCustomerDto> currentCustomers = new ArrayList<>();
287 List<Integer> customerIds = new ArrayList<>(); 287 List<Integer> customerIds = new ArrayList<>();
288 - 288 + currentCustomers = clientCustomerServiceHttpClient.getCurrentClientCustomer(token, false);
289 - // 没有找到clientCustomer的hisCustomerIds
290 - List<CurrentClientCustomerDto> notOrderedHisCustomers = new ArrayList<>();
291 - if (isHis){
292 - currentCustomers = clientCustomerServiceHttpClient.getCurrentClientCustomer(token, true);
293 - final var hisCustomerIds = currentCustomers.stream().map(CurrentClientCustomerDto::getId).distinct()
294 - .collect(Collectors.toList());
295 - final var currentClientCustomers = clientCustomerServiceRpcClient.getClientCustomersByHISCustomerIds(hisCustomerIds).getResponsesList();
296 - customerIds = currentClientCustomers.stream().map(SingleClientCustomerRpcResponse::getId).distinct().collect(Collectors.toList());
297 - final var mappingHisCustomerIds = currentClientCustomers.stream().map(SingleClientCustomerRpcResponse::getHISCustomerId).collect(Collectors.toList());
298 -// final var notOrderedHisCustomerIds = hisCustomerIds.stream().filter(i -> !mappingHisCustomerIds.contains(i)).collect(Collectors.toList());
299 - notOrderedHisCustomers = currentCustomers.stream().filter(c -> !mappingHisCustomerIds.contains(c.getId())).collect(
300 - Collectors.toList());
301 - } else {
302 - currentCustomers = clientCustomerServiceHttpClient.getCurrentClientCustomer(token, false);
303 customerIds = currentCustomers.stream().map(CurrentClientCustomerDto::getId).map(id -> {try{ 289 customerIds = currentCustomers.stream().map(CurrentClientCustomerDto::getId).map(id -> {try{
304 return Integer.valueOf(id); 290 return Integer.valueOf(id);
305 } catch (NumberFormatException e) { 291 } catch (NumberFormatException e) {
306 return null; 292 return null;
307 } 293 }
308 }).filter(Objects::nonNull).distinct().collect(Collectors.toList()); 294 }).filter(Objects::nonNull).distinct().collect(Collectors.toList());
309 - }
310 295
311 if (customerIds.isEmpty()) { 296 if (customerIds.isEmpty()) {
312 return TodayOrderDto.builder() 297 return TodayOrderDto.builder()
...@@ -400,8 +385,129 @@ public class ClientCustomerServiceImpl implements ClientCustomerService { ...@@ -400,8 +385,129 @@ public class ClientCustomerServiceImpl implements ClientCustomerService {
400 .build(); 385 .build();
401 resNotOrderCustomers.add(resNotOrderCustomer); 386 resNotOrderCustomers.add(resNotOrderCustomer);
402 } 387 }
403 - if (isHis) { 388 +
404 - for (CurrentClientCustomerDto currentClientCustomer: notOrderedHisCustomers) { 389 + return TodayOrderDto.builder()
390 + .totalCurrentCustomerCount(currentCustomers.size())
391 + .notOrderCustomers(resNotOrderCustomers)
392 + .build();
393 + }
394 +
395 + @Override
396 + public TodayOrderDto getTodayOrderStatisticForHis(String token) {
397 + List<CurrentClientCustomerDto> currentCustomers = new ArrayList<>();
398 + List<Integer> customerIds = new ArrayList<>();
399 +
400 + // 没有找到clientCustomer的hisCustomerIds
401 + List<CurrentClientCustomerDto> notOrderedHisCustomers = new ArrayList<>();
402 + currentCustomers = clientCustomerServiceHttpClient.getCurrentClientCustomer(token, true);
403 + final var hisCustomerIds = currentCustomers.stream().map(CurrentClientCustomerDto::getId).distinct()
404 + .collect(Collectors.toList());
405 + final var currentClientCustomers = clientCustomerServiceRpcClient.getClientCustomersByHISCustomerIds(hisCustomerIds).getResponsesList();
406 + customerIds = currentClientCustomers.stream().map(SingleClientCustomerRpcResponse::getId).distinct().collect(Collectors.toList());
407 + final var mappingHisCustomerIds = currentClientCustomers.stream().map(SingleClientCustomerRpcResponse::getHISCustomerId).collect(Collectors.toList());
408 +// final var notOrderedHisCustomerIds = hisCustomerIds.stream().filter(i -> !mappingHisCustomerIds.contains(i)).collect(Collectors.toList());
409 + notOrderedHisCustomers = currentCustomers.stream().filter(c -> !mappingHisCustomerIds.contains(c.getId())).collect(
410 + Collectors.toList());
411 +
412 + if (customerIds.isEmpty()) {
413 + return TodayOrderDto.builder()
414 + .totalCurrentCustomerCount(0)
415 + .notOrderCustomers(new ArrayList<>())
416 + .build();
417 + }
418 +
419 + final var operatorLoginInfo = LoginContextHolder.getLoginInfo();
420 + LocalDate today = LocalDate.now();
421 + LocalDateTime todayZero = today.atStartOfDay();
422 + LocalDate tomorrow = today.plusDays(1);
423 + LocalDateTime tomorrowZero = tomorrow.atStartOfDay();
424 + final var queryOrderDto = QueryOrderByConditionDto.builder()
425 + .enterpriseId(operatorLoginInfo.getEnterpriseId())
426 + .shouldFilterCustomerIds(true)
427 + .customerIds(customerIds)
428 + .shouldFilterMealTimeStart(true)
429 + .mealTimeStart(todayZero)
430 + .shouldFilterMealTimeEnd(true)
431 + .mealTimeEnd(tomorrowZero)
432 + .build();
433 + final var orderedResponseList = orderServiceRpcClient.getOrdersByCondition(queryOrderDto);
434 + List<Integer> uniqueOrderedCustomerIds = orderedResponseList.stream().map(
435 + SingleClientCustomerOrderRpcResponse::getCustomerId).distinct()
436 + .collect(Collectors.toList());
437 + List<Integer> notOrderedCustomerIds = customerIds.stream().filter(id -> !uniqueOrderedCustomerIds.contains(id)).collect(
438 + Collectors.toList());
439 + // 根据customerIds 获取到menuRef列表
440 + final var menuRefs = menuServiceRpcClient.getClientCustomerMenuRefsByCustomerIds(
441 + operatorLoginInfo.getEnterpriseId(), notOrderedCustomerIds).getResponsesList();
442 + final var menuIds = menuRefs.stream().map(SingleClientCustomerMenuRefRpcResponse::getMenuId)
443 + .collect(Collectors.toList());
444 + final var menus = menuServiceRpcClient.getMenusByIds(operatorLoginInfo.getEnterpriseId(),
445 + menuIds).getResponsesList();
446 +
447 + List<NotOrderCustomerDto> resNotOrderCustomers = new ArrayList<>();
448 + // 在customers里找到未下单的用户
449 + final var notOrderCustomers = currentClientCustomers.stream().filter(c ->
450 + notOrderedCustomerIds.contains(c.getId())).collect(Collectors.toList());
451 +
452 + for(SingleClientCustomerRpcResponse notOrderCustomer: notOrderCustomers) {
453 +
454 + // 在ref里找到这个用户的menu ids
455 + final var notOrderCustomerId = Integer.valueOf(notOrderCustomer.getId());
456 + final var curMenuIds = menuRefs.stream().filter(r -> r.getCustomerId() == notOrderCustomerId)
457 + .map(SingleClientCustomerMenuRefRpcResponse::getMenuId).collect(Collectors.toList());
458 + // 根据menu ids找到 menus
459 + final var curMenus = menus.stream().filter(m -> curMenuIds.contains(m.getId()))
460 + .collect(Collectors.toList());
461 +
462 + final var curMenuDtos = curMenus.stream().map(menu ->
463 + MenuDto.builder()
464 + .id(menu.getId())
465 + .code(menu.getCode())
466 + .enterpriseId(menu.getEnterpriseId())
467 + .name(menu.getName())
468 + .status(menu.getStatusValue())
469 + .customerScope(menu.getCustomerScope())
470 + .nutritionPromotion(menu.getNutritionPromotion())
471 + .nutritionalStatistics(menu.getNutritionalStatistics())
472 + .dishRuleJson(DishRuleJson.builder()
473 + .days(menu.getDishRuleJson().getDays())
474 + .dishType(menu.getDishRuleJson().getDishType())
475 + .mealIds(menu.getDishRuleJson().getMealIdsList())
476 + .build())
477 + .orderRuleJson(OrderRuleJson.builder()
478 + .allowMicroPlaceOrder(menu.getOrderRuleJson().getAllowMicroPlaceOrder())
479 + .closeTimeType(menu.getOrderRuleJson().getCloseTimeType())
480 + .dishSelectRule(menu.getOrderRuleJson().getDishSelectRule())
481 + .earlyDays(menu.getOrderRuleJson().getEarlyDays())
482 + .modeOfPayment(menu.getOrderRuleJson().getModeOfPayment())
483 + .placeOrderCount(menu.getOrderRuleJson().getPlaceOrderCount())
484 + .startTime(menu.getOrderRuleJson().getStartTime())
485 + .endTime(menu.getOrderRuleJson().getEndTime())
486 + .deadline(menu.getOrderRuleJson().getDeadline())
487 + .build())
488 + .createdBy(menu.getCreatedBy())
489 + .creationSource(menu.getCreationSource())
490 + .createdAt(DateUtil.formatDate(menu.getCreatedAt()))
491 + .updatedBy(menu.getUpdatedBy())
492 + .updateSource(menu.getUpdateSource())
493 + .updatedAt(DateUtil.formatDate(menu.getUpdatedAt()))
494 + .publishAt(DateUtil.formatDate(menu.getPublishAt()))
495 + .build()).collect(Collectors.toList());
496 + final var hisCustomer = currentCustomers.stream().filter(c -> c.getId().equals(notOrderCustomer.getHISCustomerId())).findFirst();
497 + String roomNo = "";
498 + if (hisCustomer.isPresent()) {
499 + roomNo = hisCustomer.get().getRoomNo();
500 + }
501 + final var resNotOrderCustomer = NotOrderCustomerDto.builder()
502 + .id(notOrderCustomerId.toString())
503 + .name(notOrderCustomer.getName())
504 + .roomNo(roomNo)
505 + .menuList(curMenuDtos)
506 + .build();
507 + resNotOrderCustomers.add(resNotOrderCustomer);
508 + }
509 +
510 + for(CurrentClientCustomerDto currentClientCustomer: notOrderedHisCustomers) {
405 final var resNotOrderCustomer = NotOrderCustomerDto.builder() 511 final var resNotOrderCustomer = NotOrderCustomerDto.builder()
406 .id(currentClientCustomer.getId()) 512 .id(currentClientCustomer.getId())
407 .name(currentClientCustomer.getName()) 513 .name(currentClientCustomer.getName())
...@@ -411,8 +517,6 @@ public class ClientCustomerServiceImpl implements ClientCustomerService { ...@@ -411,8 +517,6 @@ public class ClientCustomerServiceImpl implements ClientCustomerService {
411 resNotOrderCustomers.add(resNotOrderCustomer); 517 resNotOrderCustomers.add(resNotOrderCustomer);
412 } 518 }
413 519
414 - }
415 -
416 return TodayOrderDto.builder() 520 return TodayOrderDto.builder()
417 .totalCurrentCustomerCount(currentCustomers.size()) 521 .totalCurrentCustomerCount(currentCustomers.size())
418 .notOrderCustomers(resNotOrderCustomers) 522 .notOrderCustomers(resNotOrderCustomers)
......
1 package com.infoloop.tianting.service.impl; 1 package com.infoloop.tianting.service.impl;
2 2
3 import com.infoloop.tianting.clientcustomerorderservice.OrderStatusEnum; 3 import com.infoloop.tianting.clientcustomerorderservice.OrderStatusEnum;
4 +import com.infoloop.tianting.clientcustomerorderservice.ServeStatusEnum;
4 import com.infoloop.tianting.clientcustomerorderservice.SingleClientCustomerOrderDetailRpcResponse; 5 import com.infoloop.tianting.clientcustomerorderservice.SingleClientCustomerOrderDetailRpcResponse;
5 import com.infoloop.tianting.clientcustomerorderservice.SingleClientCustomerOrderRpcResponse; 6 import com.infoloop.tianting.clientcustomerorderservice.SingleClientCustomerOrderRpcResponse;
6 import com.infoloop.tianting.context.LoginContextHolder; 7 import com.infoloop.tianting.context.LoginContextHolder;
...@@ -268,9 +269,9 @@ public class KdsServiceImpl implements KdsService { ...@@ -268,9 +269,9 @@ public class KdsServiceImpl implements KdsService {
268 if (meal.isPresent()) { 269 if (meal.isPresent()) {
269 mealName = meal.get().getName(); 270 mealName = meal.get().getName();
270 } 271 }
271 - 272 + final var serveStatusToFilter = List.of(ServeStatusEnum.SERVE_FINISHED, ServeStatusEnum.SERVE_NOT_START);
272 final var totalCount = orderDetailList.stream() 273 final var totalCount = orderDetailList.stream()
273 - .filter(od -> od.getMealId() == mealId) 274 + .filter(od -> od.getMealId() == mealId && serveStatusToFilter.contains(od.getServeStatus()))
274 .mapToInt(SingleClientCustomerOrderDetailRpcResponse::getCount) 275 .mapToInt(SingleClientCustomerOrderDetailRpcResponse::getCount)
275 .sum(); 276 .sum();
276 final var mealDetail = KdsMealDetailDto.builder() 277 final var mealDetail = KdsMealDetailDto.builder()
......
1 package com.infoloop.tianting.service.impl; 1 package com.infoloop.tianting.service.impl;
2 2
3 +import com.infoloop.rpc.meizhongyiheservice.MedicalAdviceTypeEnum;
3 import com.infoloop.tianting.SingleResponse; 4 import com.infoloop.tianting.SingleResponse;
4 import com.infoloop.tianting.SingleSpecialResponse; 5 import com.infoloop.tianting.SingleSpecialResponse;
5 import com.infoloop.tianting.clientcustomerorderservice.CloseTimeType; 6 import com.infoloop.tianting.clientcustomerorderservice.CloseTimeType;
...@@ -12,13 +13,18 @@ import com.infoloop.tianting.clientcustomerservice.SingleClientCustomerRpcRespon ...@@ -12,13 +13,18 @@ import com.infoloop.tianting.clientcustomerservice.SingleClientCustomerRpcRespon
12 import com.infoloop.tianting.context.LoginContextHolder; 13 import com.infoloop.tianting.context.LoginContextHolder;
13 import com.infoloop.tianting.deliveryruleservice.ClientLabelTypeEnum; 14 import com.infoloop.tianting.deliveryruleservice.ClientLabelTypeEnum;
14 import com.infoloop.tianting.deliveryruleservice.SingleClientLabelRpcResponse; 15 import com.infoloop.tianting.deliveryruleservice.SingleClientLabelRpcResponse;
16 +import com.infoloop.tianting.exception.ClientEndExceptions;
17 +import com.infoloop.tianting.exception.ErrorCodeEnum;
15 import com.infoloop.tianting.menuservice.CloseTimeTypeEnum; 18 import com.infoloop.tianting.menuservice.CloseTimeTypeEnum;
16 import com.infoloop.tianting.menuservice.ModeOfPaymentEnum; 19 import com.infoloop.tianting.menuservice.ModeOfPaymentEnum;
17 import com.infoloop.tianting.menuservice.SingleMenuDetailRpcResponse; 20 import com.infoloop.tianting.menuservice.SingleMenuDetailRpcResponse;
18 import com.infoloop.tianting.model.common.OrderPageResult; 21 import com.infoloop.tianting.model.common.OrderPageResult;
19 import com.infoloop.tianting.model.common.PageResult; 22 import com.infoloop.tianting.model.common.PageResult;
23 +import com.infoloop.tianting.model.dto.ClientLabelDTO.HisAllergy;
24 +import com.infoloop.tianting.model.dto.ClientLabelDTO.HisMedicalAdviceDto;
25 +import com.infoloop.tianting.model.dto.ClientLabelDTO.QueryLabelsDto;
20 import com.infoloop.tianting.model.dto.OrderDbDTO.BatchUpdateOrderDetailResponse; 26 import com.infoloop.tianting.model.dto.OrderDbDTO.BatchUpdateOrderDetailResponse;
21 -import com.infoloop.tianting.model.dto.OrderDbDTO.CheckIfOrderedDto; 27 +import com.infoloop.tianting.model.dto.OrderDbDTO.getMenuOrderCountDto;
22 import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderDetailDto; 28 import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderDetailDto;
23 import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderDto; 29 import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderDto;
24 import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderResponse; 30 import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderResponse;
...@@ -37,9 +43,11 @@ import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderByPaginationDto; ...@@ -37,9 +43,11 @@ import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderByPaginationDto;
37 import com.infoloop.tianting.model.dto.OrderDbDTO.UpdateOrderDto; 43 import com.infoloop.tianting.model.dto.OrderDbDTO.UpdateOrderDto;
38 import com.infoloop.tianting.model.dto.OrderDbDTO.UpdateOrderResponse; 44 import com.infoloop.tianting.model.dto.OrderDbDTO.UpdateOrderResponse;
39 import com.infoloop.tianting.service.ClientCustomerService; 45 import com.infoloop.tianting.service.ClientCustomerService;
46 +import com.infoloop.tianting.service.MeiZhongYiHeService;
40 import com.infoloop.tianting.service.OrderService; 47 import com.infoloop.tianting.service.OrderService;
41 import com.infoloop.tianting.service.client.ClientCustomerServiceRpcClient; 48 import com.infoloop.tianting.service.client.ClientCustomerServiceRpcClient;
42 import com.infoloop.tianting.service.client.DeliveryRuleServiceRpcClient; 49 import com.infoloop.tianting.service.client.DeliveryRuleServiceRpcClient;
50 +import com.infoloop.tianting.service.client.MeiZhongYiHeServiceClient;
43 import com.infoloop.tianting.service.client.MenuServiceRpcClient; 51 import com.infoloop.tianting.service.client.MenuServiceRpcClient;
44 import com.infoloop.tianting.service.client.OperatorServiceRpcClient; 52 import com.infoloop.tianting.service.client.OperatorServiceRpcClient;
45 import com.infoloop.tianting.service.client.OrderServiceRpcClient; 53 import com.infoloop.tianting.service.client.OrderServiceRpcClient;
...@@ -52,6 +60,7 @@ import java.util.ArrayList; ...@@ -52,6 +60,7 @@ import java.util.ArrayList;
52 import java.util.List; 60 import java.util.List;
53 import java.util.Optional; 61 import java.util.Optional;
54 import java.util.stream.Collectors; 62 import java.util.stream.Collectors;
63 +import java.util.stream.Stream;
55 import lombok.RequiredArgsConstructor; 64 import lombok.RequiredArgsConstructor;
56 import lombok.extern.slf4j.Slf4j; 65 import lombok.extern.slf4j.Slf4j;
57 import org.springframework.beans.factory.annotation.Autowired; 66 import org.springframework.beans.factory.annotation.Autowired;
...@@ -67,6 +76,7 @@ public class OrderServiceImpl implements OrderService { ...@@ -67,6 +76,7 @@ public class OrderServiceImpl implements OrderService {
67 private final MenuServiceRpcClient menuServiceRpcClient; 76 private final MenuServiceRpcClient menuServiceRpcClient;
68 private final SkuServiceRpcClient skuServiceRpcClient; 77 private final SkuServiceRpcClient skuServiceRpcClient;
69 private final DeliveryRuleServiceRpcClient deliveryRuleServiceRpcClient; 78 private final DeliveryRuleServiceRpcClient deliveryRuleServiceRpcClient;
79 + private final MeiZhongYiHeService meiZhongYiHeService;
70 80
71 @Override 81 @Override
72 public CreateOrderResponse createOrder(CreateOrderDto createOrderDto) { 82 public CreateOrderResponse createOrder(CreateOrderDto createOrderDto) {
...@@ -75,6 +85,12 @@ public class OrderServiceImpl implements OrderService { ...@@ -75,6 +85,12 @@ public class OrderServiceImpl implements OrderService {
75 85
76 @Override 86 @Override
77 public CreateOrderResponse orderCreation(OperatorCreateOrderDto operatorCreateOrderDto) { 87 public CreateOrderResponse orderCreation(OperatorCreateOrderDto operatorCreateOrderDto) {
88 + final var getMenuOrderCountReq = getMenuOrderCountDto.builder()
89 + .customerId(operatorCreateOrderDto.getCustomerId())
90 + .mealTime(operatorCreateOrderDto.getMealTime())
91 + .menuId(operatorCreateOrderDto.getMenuId())
92 + .build();
93 + final var menuOrderCount = this.getMenuOrderCount(getMenuOrderCountReq);
78 final var operatorLoginInfo = LoginContextHolder.getLoginInfo(); 94 final var operatorLoginInfo = LoginContextHolder.getLoginInfo();
79 final var operator = operatorServiceRpcClient.getCOperatorById(operatorLoginInfo.getId()); 95 final var operator = operatorServiceRpcClient.getCOperatorById(operatorLoginInfo.getId());
80 final var customer = clientCustomerServiceRpcClient.getClientCustomerById(operator.getEnterpriseId(), operatorCreateOrderDto.getCustomerId()).getResponse(); 96 final var customer = clientCustomerServiceRpcClient.getClientCustomerById(operator.getEnterpriseId(), operatorCreateOrderDto.getCustomerId()).getResponse();
...@@ -94,6 +110,10 @@ public class OrderServiceImpl implements OrderService { ...@@ -94,6 +110,10 @@ public class OrderServiceImpl implements OrderService {
94 createOrderDto.setPayPrice(0); 110 createOrderDto.setPayPrice(0);
95 final var menu = menuServiceRpcClient.getMenuById(operator.getEnterpriseId(), 111 final var menu = menuServiceRpcClient.getMenuById(operator.getEnterpriseId(),
96 createOrderDto.getMenuId()).getResponse(); 112 createOrderDto.getMenuId()).getResponse();
113 + final var placeOrderCount = menu.getOrderRuleJson().getPlaceOrderCount();
114 + if (placeOrderCount != 0 && menuOrderCount >= placeOrderCount) {
115 + throw ClientEndExceptions.OperationForbidden.build(ErrorCodeEnum.ORDER_COUNT_LIMIT.name());
116 + }
97 createOrderDto.setCloseTimeType( 117 createOrderDto.setCloseTimeType(
98 CloseTimeType.forNumber(menu.getOrderRuleJson().getCloseTimeType().getNumber())); 118 CloseTimeType.forNumber(menu.getOrderRuleJson().getCloseTimeType().getNumber()));
99 createOrderDto.setRoomNo(record.getRoomNo()); 119 createOrderDto.setRoomNo(record.getRoomNo());
...@@ -120,11 +140,22 @@ public class OrderServiceImpl implements OrderService { ...@@ -120,11 +140,22 @@ public class OrderServiceImpl implements OrderService {
120 final var labels = deliveryRuleServiceRpcClient.GetClientLabelsByIds(customer.getEnterpriseId(), labelIds).getResponsesList(); 140 final var labels = deliveryRuleServiceRpcClient.GetClientLabelsByIds(customer.getEnterpriseId(), labelIds).getResponsesList();
121 final var avoids = labels.stream().filter(l -> l.getType() == ClientLabelTypeEnum.CLIENT_LABEL_TYPE_AVOID).map( 141 final var avoids = labels.stream().filter(l -> l.getType() == ClientLabelTypeEnum.CLIENT_LABEL_TYPE_AVOID).map(
122 SingleClientLabelRpcResponse::getName).collect(Collectors.toList()); 142 SingleClientLabelRpcResponse::getName).collect(Collectors.toList());
143 + final var hisAllergies = meiZhongYiHeService.getHisCustomerAllergiesByCustomerId(customer.getHISCustomerId());
144 + final var allergyCodes = hisAllergies.stream().map(HisAllergy::getAllergyCode).collect(Collectors.toList());
145 + final var allLabels = deliveryRuleServiceRpcClient.getLabelsByTypes(QueryLabelsDto.builder()
146 + .enterpriseId(operatorLoginInfo.getEnterpriseId())
147 + .types(List.of(ClientLabelTypeEnum.CLIENT_LABEL_TYPE_AVOID, ClientLabelTypeEnum.CLIENT_LABEL_TYPE_DOCTOR, ClientLabelTypeEnum.CLIENT_LABEL_TYPE_ALLERGENS))
148 + .build());
149 + final var mappingAllergies = allLabels.getResponsesList().stream().filter(l -> allergyCodes.contains(l.getCode())).map(SingleClientLabelRpcResponse::getName).collect(Collectors.toList());
150 +
151 + final var origionalHisDoctors = meiZhongYiHeService.getHisCustomerMedicalAdvicesByContractNo(record.getContractNo());
152 + final var dietDoctors = origionalHisDoctors.stream().filter(d -> d.getMedicalAdviceType().equals(
153 + MedicalAdviceTypeEnum.DIET)).map(HisMedicalAdviceDto::getConnotation).collect(Collectors.toList());
123 final var doctors = labels.stream().filter(l -> l.getType() == ClientLabelTypeEnum.CLIENT_LABEL_TYPE_DOCTOR).map( 154 final var doctors = labels.stream().filter(l -> l.getType() == ClientLabelTypeEnum.CLIENT_LABEL_TYPE_DOCTOR).map(
124 SingleClientLabelRpcResponse::getName).collect(Collectors.toList()); 155 SingleClientLabelRpcResponse::getName).collect(Collectors.toList());
125 final var customerNotice = CustomerNotice.builder() 156 final var customerNotice = CustomerNotice.builder()
126 - .avoids(avoids) 157 + .avoids(Stream.of(avoids, mappingAllergies).flatMap(List::stream).collect(Collectors.toList()))
127 - .doctors(doctors) 158 + .doctors(Stream.of(doctors, dietDoctors).flatMap(List::stream).collect(Collectors.toList()))
128 .build(); 159 .build();
129 createOrderDto.setCustomerNoticeJson(customerNotice); 160 createOrderDto.setCustomerNoticeJson(customerNotice);
130 161
...@@ -207,7 +238,7 @@ public class OrderServiceImpl implements OrderService { ...@@ -207,7 +238,7 @@ public class OrderServiceImpl implements OrderService {
207 } 238 }
208 239
209 @Override 240 @Override
210 - public Boolean checkIfOrdered(CheckIfOrderedDto checkIfOrdered) { 241 + public Integer getMenuOrderCount(getMenuOrderCountDto checkIfOrdered) {
211 final var operatorLoginInfo = LoginContextHolder.getLoginInfo(); 242 final var operatorLoginInfo = LoginContextHolder.getLoginInfo();
212 final var mealTimeStart = checkIfOrdered.getMealTime().toLocalDate().atStartOfDay(); 243 final var mealTimeStart = checkIfOrdered.getMealTime().toLocalDate().atStartOfDay();
213 LocalDate tomorrow = checkIfOrdered.getMealTime().toLocalDate().plusDays(1); 244 LocalDate tomorrow = checkIfOrdered.getMealTime().toLocalDate().plusDays(1);
...@@ -224,11 +255,7 @@ public class OrderServiceImpl implements OrderService { ...@@ -224,11 +255,7 @@ public class OrderServiceImpl implements OrderService {
224 .customerIds(List.of(checkIfOrdered.getCustomerId())) 255 .customerIds(List.of(checkIfOrdered.getCustomerId()))
225 .build(); 256 .build();
226 final var orderList = orderServiceRpcClient.getOrdersByCondition(queryOrderDto); 257 final var orderList = orderServiceRpcClient.getOrdersByCondition(queryOrderDto);
227 - if (orderList.isEmpty()) { 258 + return orderList.size();
228 - return false;
229 - } else {
230 - return true;
231 - }
232 } 259 }
233 260
234 @Override 261 @Override
......
1 package com.infoloop.tianting.service.impl; 1 package com.infoloop.tianting.service.impl;
2 2
3 +import com.infoloop.tianting.clientcustomerorderservice.OrderStatusEnum;
3 import com.infoloop.tianting.clientcustomerorderservice.SingleClientCustomerOrderDetailRpcResponse; 4 import com.infoloop.tianting.clientcustomerorderservice.SingleClientCustomerOrderDetailRpcResponse;
4 import com.infoloop.tianting.clientcustomerorderservice.SingleClientCustomerOrderRpcResponse; 5 import com.infoloop.tianting.clientcustomerorderservice.SingleClientCustomerOrderRpcResponse;
5 import com.infoloop.tianting.context.LoginContextHolder; 6 import com.infoloop.tianting.context.LoginContextHolder;
...@@ -7,13 +8,18 @@ import com.infoloop.tianting.exception.ClientEndExceptions.BusinessException; ...@@ -7,13 +8,18 @@ import com.infoloop.tianting.exception.ClientEndExceptions.BusinessException;
7 import com.infoloop.tianting.exception.ErrorCodeEnum; 8 import com.infoloop.tianting.exception.ErrorCodeEnum;
8 import com.infoloop.tianting.menuservice.SingleMenuDetailRpcResponse; 9 import com.infoloop.tianting.menuservice.SingleMenuDetailRpcResponse;
9 import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderByConditionDto; 10 import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderByConditionDto;
11 +import com.infoloop.tianting.model.dto.SettlementDTO;
12 +import com.infoloop.tianting.model.dto.SettlementDTO.SettlementDataDto;
10 import com.infoloop.tianting.model.dto.SettlementDTO.SettlementMenuSkuDto; 13 import com.infoloop.tianting.model.dto.SettlementDTO.SettlementMenuSkuDto;
11 import com.infoloop.tianting.model.dto.SettlementDTO.SettlementRequestDto; 14 import com.infoloop.tianting.model.dto.SettlementDTO.SettlementRequestDto;
12 import com.infoloop.tianting.service.SettlementService; 15 import com.infoloop.tianting.service.SettlementService;
16 +import com.infoloop.tianting.service.client.InventoryServiceRpcClient;
13 import com.infoloop.tianting.service.client.MenuServiceRpcClient; 17 import com.infoloop.tianting.service.client.MenuServiceRpcClient;
18 +import com.infoloop.tianting.service.client.OperatorServiceRpcClient;
14 import com.infoloop.tianting.service.client.OrderServiceRpcClient; 19 import com.infoloop.tianting.service.client.OrderServiceRpcClient;
15 import com.infoloop.tianting.service.client.SkuServiceRpcClient; 20 import com.infoloop.tianting.service.client.SkuServiceRpcClient;
16 import com.infoloop.tianting.utils.DateUtil; 21 import com.infoloop.tianting.utils.DateUtil;
22 +import java.util.Comparator;
17 import lombok.RequiredArgsConstructor; 23 import lombok.RequiredArgsConstructor;
18 import lombok.extern.slf4j.Slf4j; 24 import lombok.extern.slf4j.Slf4j;
19 import org.apache.poi.ss.usermodel.Cell; 25 import org.apache.poi.ss.usermodel.Cell;
...@@ -40,23 +46,27 @@ public class SettlementServiceImpl implements SettlementService { ...@@ -40,23 +46,27 @@ public class SettlementServiceImpl implements SettlementService {
40 private final OrderServiceRpcClient orderServiceRpcClient; 46 private final OrderServiceRpcClient orderServiceRpcClient;
41 private final MenuServiceRpcClient menuServiceRpcClient; 47 private final MenuServiceRpcClient menuServiceRpcClient;
42 private final SkuServiceRpcClient skuServiceRpcClient; 48 private final SkuServiceRpcClient skuServiceRpcClient;
49 + private final InventoryServiceRpcClient inventoryServiceRpcClient;
43 50
44 @Override 51 @Override
45 public ByteArrayOutputStream generateOrderSettlementExcel(SettlementRequestDto settlementRequest) { 52 public ByteArrayOutputStream generateOrderSettlementExcel(SettlementRequestDto settlementRequest) {
46 53
54 + final var startDate = settlementRequest.getTimeStart().toLocalDate().atStartOfDay();
55 + final var endDate = settlementRequest.getTimeEnd().toLocalDate().plusDays(1).atStartOfDay();
47 final var operatorLoginInfo = LoginContextHolder.getLoginInfo(); 56 final var operatorLoginInfo = LoginContextHolder.getLoginInfo();
48 final var queryOrderDto = QueryOrderByConditionDto.builder() 57 final var queryOrderDto = QueryOrderByConditionDto.builder()
49 .enterpriseId(LoginContextHolder.hasLogin() ? operatorLoginInfo.getEnterpriseId() : settlementRequest.getEnterpriseId()) 58 .enterpriseId(LoginContextHolder.hasLogin() ? operatorLoginInfo.getEnterpriseId() : settlementRequest.getEnterpriseId())
50 .shouldFilterCreatedAtTimeStart(true) 59 .shouldFilterCreatedAtTimeStart(true)
51 - .createdAtTimeStart(settlementRequest.getTimeStart()) 60 + .createdAtTimeStart(startDate)
52 .shouldFilterCreatedAtTimeEnd(true) 61 .shouldFilterCreatedAtTimeEnd(true)
53 - .createdAtTimeEnd(settlementRequest.getTimeEnd()) 62 + .createdAtTimeEnd(endDate)
54 .shouldFilterStallIds(!settlementRequest.getStallIds().isEmpty()) 63 .shouldFilterStallIds(!settlementRequest.getStallIds().isEmpty())
55 .stallIds(settlementRequest.getStallIds()) 64 .stallIds(settlementRequest.getStallIds())
56 .build(); 65 .build();
57 final var orderList = orderServiceRpcClient.getOrdersByCondition(queryOrderDto); 66 final var orderList = orderServiceRpcClient.getOrdersByCondition(queryOrderDto);
58 - List<Integer> orderIds = orderList.stream().map( 67 + List<Integer> orderIds = orderList.stream()
59 - SingleClientCustomerOrderRpcResponse::getId).distinct() 68 + .filter(o -> !o.getStatus().equals(OrderStatusEnum.ORDER_CANCELED))
69 + .map(SingleClientCustomerOrderRpcResponse::getId).distinct()
60 .collect(Collectors.toList()); 70 .collect(Collectors.toList());
61 final var orderDetailList = orderServiceRpcClient.getOrderDetailsByOrderIds(orderIds); 71 final var orderDetailList = orderServiceRpcClient.getOrderDetailsByOrderIds(orderIds);
62 List<Integer> skuIds = orderDetailList.stream() 72 List<Integer> skuIds = orderDetailList.stream()
...@@ -78,7 +88,8 @@ public class SettlementServiceImpl implements SettlementService { ...@@ -78,7 +88,8 @@ public class SettlementServiceImpl implements SettlementService {
78 88
79 //找出所有需要的日期 89 //找出所有需要的日期
80 final var dates = orderList.stream() 90 final var dates = orderList.stream()
81 - .map(o -> DateUtil.formatDate(o.getCreatedAt(), DateUtil.YYYY_MM_DD)) 91 + .sorted(Comparator.comparingLong(SingleClientCustomerOrderRpcResponse::getCreatedAt))
92 + .map(o -> DateUtil.formatDateOfUtc(o.getCreatedAt(), DateUtil.YYYY_MM_DD_UTC))
82 .distinct() 93 .distinct()
83 .collect(Collectors.toList()); 94 .collect(Collectors.toList());
84 for(String date: dates) { 95 for(String date: dates) {
...@@ -90,7 +101,7 @@ public class SettlementServiceImpl implements SettlementService { ...@@ -90,7 +101,7 @@ public class SettlementServiceImpl implements SettlementService {
90 101
91 // 找出当天所有的订单 102 // 找出当天所有的订单
92 final var curOrderList = orderList.stream() 103 final var curOrderList = orderList.stream()
93 - .filter(o -> DateUtil.formatDate(o.getCreatedAt(), DateUtil.YYYY_MM_DD).equals(date)) 104 + .filter(o -> DateUtil.formatDateOfUtc(o.getCreatedAt(), DateUtil.YYYY_MM_DD_UTC).equals(date))
94 .collect(Collectors.toList()); 105 .collect(Collectors.toList());
95 final var curOrderIds = curOrderList.stream() 106 final var curOrderIds = curOrderList.stream()
96 .map(SingleClientCustomerOrderRpcResponse::getId) 107 .map(SingleClientCustomerOrderRpcResponse::getId)
...@@ -142,7 +153,17 @@ public class SettlementServiceImpl implements SettlementService { ...@@ -142,7 +153,17 @@ public class SettlementServiceImpl implements SettlementService {
142 String skuCode = ""; 153 String skuCode = "";
143 if (curSku.isPresent()) { 154 if (curSku.isPresent()) {
144 skuCode = curSku.get().getCode(); 155 skuCode = curSku.get().getCode();
156 + final var existSku = menuSkuList.stream().filter(s -> s.getSkuCode().equals(curSku.get().getCode())).findFirst();
157 + if (existSku.isPresent()) {
158 + final var originalSku = existSku.get();
159 + final var count = existSku.get().getCount();
160 + final var newCount = count + countTotal;
161 + originalSku.setCount(newCount);
162 + originalSku.setTotalPrice(m.getPrice() * newCount);
163 + continue;
164 + }
145 } 165 }
166 +
146 final var settlementMenuSku = SettlementMenuSkuDto.builder() 167 final var settlementMenuSku = SettlementMenuSkuDto.builder()
147 .skuCode(skuCode) 168 .skuCode(skuCode)
148 .count(countTotal) 169 .count(countTotal)
...@@ -157,9 +178,16 @@ public class SettlementServiceImpl implements SettlementService { ...@@ -157,9 +178,16 @@ public class SettlementServiceImpl implements SettlementService {
157 178
158 } 179 }
159 } 180 }
160 - 181 + final var client = inventoryServiceRpcClient.getClientById(operatorLoginInfo.getEnterpriseId(),
182 + settlementRequest.getClientId()).getClient();
183 + final var settlementDataDto = SettlementDataDto.builder()
184 + .classifyOrders(classifyOrders)
185 + .client(client.getName())
186 + .startTime(DateUtil.formatDate(settlementRequest.getTimeStart(), DateUtil.YYYY_MM_DD))
187 + .endTime(DateUtil.formatDate(settlementRequest.getTimeEnd(), DateUtil.YYYY_MM_DD))
188 + .build();
161 try { 189 try {
162 - final var bytes = writeToExcel(classifyOrders); 190 + final var bytes = writeToExcel(settlementDataDto);
163 return bytes; 191 return bytes;
164 } catch (IOException e) { 192 } catch (IOException e) {
165 throw BusinessException.build(ErrorCodeEnum.GENERATE_EXCEL_ERROR); 193 throw BusinessException.build(ErrorCodeEnum.GENERATE_EXCEL_ERROR);
...@@ -167,12 +195,21 @@ public class SettlementServiceImpl implements SettlementService { ...@@ -167,12 +195,21 @@ public class SettlementServiceImpl implements SettlementService {
167 195
168 } 196 }
169 197
170 - public static ByteArrayOutputStream writeToExcel(Map<String, Map<String, List<SettlementMenuSkuDto>>> classifyOrders) 198 + public static ByteArrayOutputStream writeToExcel(SettlementDataDto settlementDataDto)
171 throws IOException { 199 throws IOException {
172 Workbook workbook = new XSSFWorkbook(); 200 Workbook workbook = new XSSFWorkbook();
173 Sheet sheet = workbook.createSheet("订单数据"); 201 Sheet sheet = workbook.createSheet("订单数据");
174 202
203 + final var classifyOrders = settlementDataDto.getClassifyOrders();
204 +
175 int rowNum = 0; 205 int rowNum = 0;
206 + Row sheetTitleRow = sheet.createRow(rowNum++);
207 + Cell sheetTitleCell = sheetTitleRow.createCell(0);
208 + sheetTitleCell.setCellValue(settlementDataDto.getClient());
209 + Row dateRangeRow = sheet.createRow(rowNum++);
210 + Cell dateRangeCell = dateRangeRow.createCell(0);
211 + final var dateRange = settlementDataDto.getStartTime() + "至" + settlementDataDto.getEndTime();
212 + dateRangeCell.setCellValue(dateRange);
176 Row titleRow = sheet.createRow(rowNum++); 213 Row titleRow = sheet.createRow(rowNum++);
177 Cell dateTitleCell = titleRow.createCell(0); 214 Cell dateTitleCell = titleRow.createCell(0);
178 dateTitleCell.setCellValue("点餐日期"); 215 dateTitleCell.setCellValue("点餐日期");
......
...@@ -32,7 +32,7 @@ public class SettlementController { ...@@ -32,7 +32,7 @@ public class SettlementController {
32 private final SettlementService settlementService; 32 private final SettlementService settlementService;
33 33
34 @ApiIgnore 34 @ApiIgnore
35 - @ApiOperation(value = "结算账单生成excel") 35 + @ApiOperation(value = "企业端结算账单生成excel")
36 @PostMapping("/enterprise/settlement/generate-excel") 36 @PostMapping("/enterprise/settlement/generate-excel")
37 @ResponseStatus(HttpStatus.OK) 37 @ResponseStatus(HttpStatus.OK)
38 public ResponseEntity<byte[]> enterpriseSettlementGenerateExcel(@Valid @RequestBody SettlementRequestDto settlementRequestDto) { 38 public ResponseEntity<byte[]> enterpriseSettlementGenerateExcel(@Valid @RequestBody SettlementRequestDto settlementRequestDto) {
......
...@@ -36,6 +36,8 @@ public final class DateUtil extends DateUtils { ...@@ -36,6 +36,8 @@ public final class DateUtil extends DateUtils {
36 public final static DateTimeFormatter YYYY_MM_DD = DateTimeFormatter 36 public final static DateTimeFormatter YYYY_MM_DD = DateTimeFormatter
37 .ofPattern("yyyy-MM-dd") 37 .ofPattern("yyyy-MM-dd")
38 .withZone(CHINA_ZONE); 38 .withZone(CHINA_ZONE);
39 + public final static DateTimeFormatter YYYY_MM_DD_UTC = DateTimeFormatter
40 + .ofPattern("yyyy-MM-dd");
39 public final static DateTimeFormatter YYYY_MM_DD_LEFT_SYMBOL = DateTimeFormatter 41 public final static DateTimeFormatter YYYY_MM_DD_LEFT_SYMBOL = DateTimeFormatter
40 .ofPattern("yyyy/MM/dd") 42 .ofPattern("yyyy/MM/dd")
41 .withZone(CHINA_ZONE); 43 .withZone(CHINA_ZONE);
...@@ -89,6 +91,14 @@ public final class DateUtil extends DateUtils { ...@@ -89,6 +91,14 @@ public final class DateUtil extends DateUtils {
89 .format(formatter); 91 .format(formatter);
90 } 92 }
91 93
94 + public static String formatDateOfUtc(final long epochMillis, DateTimeFormatter formatter) {
95 + if (epochMillis == 0L) {
96 + return null;
97 + }
98 + return Instant.ofEpochMilli(epochMillis).atOffset(ZoneOffset.UTC)
99 + .format(formatter);
100 + }
101 +
92 public static String formatDate(final LocalDate localDate, DateTimeFormatter formatter) { 102 public static String formatDate(final LocalDate localDate, DateTimeFormatter formatter) {
93 if (localDate == null) { 103 if (localDate == null) {
94 return null; 104 return null;
......