zhuyifan

feat(settlement): 新增按订单维度结算及分餐表导出功能、新增忌口备注字段并支持更新

- 在 ClientCustomerOrderService.proto 中新增忌口备注字段 avoidRemark
- 在 KdsDTO 中增加 mealTime 字段用于指定查询日期- 修改 KdsServiceImpl 中获取订单逻辑,使用 mealTime 替代当前日期
- 在 OrderDbDTO 中添加 avoidRemark 字段以存储忌口信息
- 更新 OrderServiceImpl 映射逻辑,包含 avoidRemark 字段
- 在 OrderServiceRpcClient 中实现 avoidRemark 的更新逻辑
......@@ -48,8 +48,8 @@ public class KdsController {
@ApiOperation(value = "kds获取餐别详情")
@PostMapping("/kds/mealDetails")
@ResponseStatus(HttpStatus.OK)
public List<KdsMealDetailDto> getMealDetail() {
return kdsService.getMealDetail();
public List<KdsMealDetailDto> getMealDetail(@Valid @RequestBody KdsDTO.KdsMealDetailQueryDto queryDto) {
return kdsService.getMealDetail(queryDto);
}
}
......
......@@ -8,6 +8,7 @@ import lombok.Getter;
public enum SettlementDimensionEnum {
BY_SKU(1, "菜品"),
BY_MEAL(2, "餐别"),
BY_ORDER(3, "订单")
;
/**
......
......@@ -30,6 +30,7 @@ public class KdsDTO {
private Integer price;
private String roomNo;
private String remark;
private String avoidRemark;
private CustomerNotice customerNotice;
private String adjustSkuRemark;
private String mealTime;
......@@ -38,6 +39,8 @@ public class KdsDTO {
private ClientDto client;
private ClientDto stall;
private CustomerDetailDto customer;
private Integer menuId;
private String menuName;
}
@Data
......@@ -77,6 +80,7 @@ public class KdsDTO {
private String tableCode;
private Integer totalCount;
private String remark;
private String avoidRemark;
private String mealTime;
private CustomerNotice customerNotice;
private Integer totalPrice;
......@@ -87,6 +91,8 @@ public class KdsDTO {
private ClientDto client;
private CustomerDetailDto customer;
private List<KdsOrderLocationDetailDto> orderDetailList;
private Integer menuId;
private String menuName;
}
@Data
......@@ -97,6 +103,7 @@ public class KdsDTO {
public static class KdsOrderSkuQueryDto {
private ServeStatusEnum serveStatus;
private Integer mealId;
private String mealTime;
}
@Data
......@@ -107,12 +114,22 @@ public class KdsDTO {
public static class KdsOrderLocationQueryDto {
private OrderStatusEnum orderStatus;
private Integer mealId;
private String mealTime;
}
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(description = "KdsMealDetailQueryDto")
public static class KdsMealDetailQueryDto {
private String mealTime;
}
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(description = "KdsMealDetailDto")
public static class KdsMealDetailDto {
private Integer mealId;
......
......@@ -64,6 +64,16 @@ public class OrderDbDTO {
}
@Data
@ApiModel(description = "查询订单Dto")
public static class QueryOrderDto {
private Integer enterpriseId;
private Integer clientId;
private OrderStatusEnum status;
private String keyword;
private List<Integer> stallIds;
}
@Data
@ApiModel(description = "查询已撤销订单Dto")
public static class QueryRefundOrderByPaginationDto {
private Integer enterpriseId;
......@@ -155,6 +165,7 @@ public class OrderDbDTO {
private String tableCode;
private Integer updatedBy;
private OrderSourceEnum updatedSource;
private String avoidRemark;
}
......@@ -440,6 +451,9 @@ public class OrderDbDTO {
@ApiModelProperty(value = "备注")
private String remark;
@ApiModelProperty(value = "忌口备注")
private String avoidRemark;
@ApiModelProperty(value = "下单客户当时的忌口、医嘱")
private CustomerNotice customerNoticeJson;
......
......@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModel;
import lombok.Builder;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
......@@ -75,7 +76,55 @@ public class SettlementDTO {
private Map<String, Map<String, Map<String, List<SettlementMenuMealDto>>>> classifyOrders;
}
}
@Data
@Builder
@ApiModel(description = "SettlementDataByOrderDto")
public static class SettlementDataByOrderDto {
private List<SettlementOrderDetail> classifyOrders;
}
@Data
@Builder
@ApiModel(description = "SettlementOrderDetail")
public static class SettlementOrderDetail {
private String mealTime;
private String code;
private String mealName;
private String roomNo;
private String customerName;
private String HISCustomerNo;
private List<String> avoids;
private List<String> doctors;
private String menuName;
private String skuName;
private Integer count;
private BigDecimal price;
private BigDecimal totalPrice;
private String remark;
private String avoidRemark;
private String onlinePay;
}
@Data
@Builder
@ApiModel(description = "SeparateMealDetail")
public static class SeparateMealDetail {
private Integer orderId;
private String mealName;
private String roomNo;
private String customerName;
private String menuName;
private String skuName;
private Integer count;
private String avoids;
private String remark;
}
\ No newline at end of file
@Data
@Builder
@ApiModel(description = "SeparateMealDataDto")
public static class SeparateMealDataDto {
private List<SeparateMealDetail> mealDetails;
}
}
......
package com.infoloop.tianting.model.enums.desc;
import com.infoloop.tianting.clientcustomerorderservice.OnlinePayEnum;
public enum OnlinePayDescEnum implements BaseProtoDescEnum<OnlinePayEnum> {
UNKNOWN(OnlinePayEnum.UNKNOWN, "未知"),
ONLINE(OnlinePayEnum.ONLINE, "在线"),
OFFLINE(OnlinePayEnum.OFFLINE, "线下"),
LEAVE_HOSPITAL(OnlinePayEnum.LEAVE_HOSPITAL, "出院"),
EMPLOYEE_CARD(OnlinePayEnum.EMPLOYEE_CARD, "员工卡"),
PAPER_VERIFICATION(OnlinePayEnum.PAPER_VERIFICATION, "纸质核销"),
CASH(OnlinePayEnum.CASH, "现金"),
MEAL_CARD(OnlinePayEnum.MEAL_CARD, "餐卡"),
BAND_CARD(OnlinePayEnum.BAND_CARD, "银行卡"),
ALIPAY(OnlinePayEnum.ALIPAY, "支付宝"),
WECHATPAY(OnlinePayEnum.WECHATPAY, "微信支付");
private final OnlinePayEnum protoEnum;
private final String desc;
OnlinePayDescEnum(OnlinePayEnum protoEnum, String desc) {
this.protoEnum = protoEnum;
this.desc = desc;
}
@Override
public OnlinePayEnum getProtoEnum() {
return protoEnum;
}
@Override
public String getDesc() {
return desc;
}
}
package com.infoloop.tianting.service;
import com.infoloop.tianting.model.dto.KdsDTO;
import com.infoloop.tianting.model.dto.KdsDTO.KdsMealDetailDto;
import com.infoloop.tianting.model.dto.KdsDTO.KdsOrderLocationDto;
import com.infoloop.tianting.model.dto.KdsDTO.KdsOrderLocationQueryDto;
......@@ -14,5 +15,5 @@ public interface KdsService {
List<KdsOrderLocationDto> getOrderDetailByLocation(KdsOrderLocationQueryDto queryDto);
List<KdsMealDetailDto> getMealDetail();
List<KdsMealDetailDto> getMealDetail(KdsDTO.KdsMealDetailQueryDto queryDto);
}
......
package com.infoloop.tianting.service;
import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderDto;
import com.infoloop.tianting.model.dto.SettlementDTO.SettlementRequestDto;
import java.io.ByteArrayOutputStream;
public interface SettlementService {
ByteArrayOutputStream generateOrderSettlementExcel(SettlementRequestDto settlementRequest);
ByteArrayOutputStream exportSeparateMealsExcel(QueryOrderDto queryOrderDto);
}
......
......@@ -31,6 +31,7 @@ import com.infoloop.tianting.clientcustomerorderservice.OrderStatusEnum;
import com.infoloop.tianting.clientcustomerorderservice.OrderTypeEnum;
import com.infoloop.tianting.clientcustomerorderservice.PayStatusEnum;
import com.infoloop.tianting.clientcustomerorderservice.QueryClientCustomerOrdersByConditionRpcRequest;
import com.infoloop.tianting.clientcustomerorderservice.QueryClientCustomerOrdersByConditionRpcResponse;
import com.infoloop.tianting.clientcustomerorderservice.QueryClientCustomerOrdersByPaginationRpcRequest;
import com.infoloop.tianting.clientcustomerorderservice.QueryClientCustomerOrdersByPaginationRpcResponse;
import com.infoloop.tianting.clientcustomerorderservice.QuerySkuSellQuantitiesByStallAndSkuIdsRpcRequest;
......@@ -57,6 +58,7 @@ import com.infoloop.tianting.model.bo.AddSkusSellQuantityBO;
import com.infoloop.tianting.model.bo.SkuSellQuantityBO;
import com.infoloop.tianting.model.dto.OperationDTO.BatchOperationDto;
import com.infoloop.tianting.model.dto.OperationDTO.SingleOperationDto;
import com.infoloop.tianting.model.dto.OrderDbDTO;
import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderDetailDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderResponse;
......@@ -180,6 +182,8 @@ public class OrderServiceRpcClient {
.setTableCode(tableCode)
.setShouldUpdateRoomNo(updateOrderDto.isShouldUpdateRoomNo())
.setRoomNo(roomNo)
.setShouldUpdateAvoidRemark(updateOrderDto.getAvoidRemark() != null)
.setAvoidRemark(updateOrderDto.getAvoidRemark() == null ? "" : updateOrderDto.getAvoidRemark())
.build();
final var request = UpdateClientCustomerOrderRpcRequest.newBuilder()
.setEnterpriseId(updateOrderDto.getEnterpriseId())
......@@ -188,7 +192,7 @@ public class OrderServiceRpcClient {
.setModification(modification)
.build();
final UpdateClientCustomerOrderRpcResponse updateClientCustomerOrderRpcResponse = orderServiceRpcBlockingStub.updateClientCustomerOrder(request);
if (updateClientCustomerOrderRpcResponse.getIsUpdated() && updateOrderDto.getStatus() == OrderStatusEnum.ORDER_CANCELED) {
if (updateClientCustomerOrderRpcResponse.getIsUpdated() && updateOrderDto.getStatus() != null && updateOrderDto.getStatus() == OrderStatusEnum.ORDER_CANCELED) {
final var orderById = getOrderById(updateOrderDto.getId());
if (orderById != null && orderById.getCloseTimeType() == CloseTimeType.IMMEDIATELY) {
final var orderDetails = getOrderDetailsByOrderId(orderById.getId());
......@@ -484,6 +488,17 @@ public class OrderServiceRpcClient {
return orderServiceRpcBlockingStub.queryClientCustomerOrdersByPagination(request);
}
public QueryClientCustomerOrdersByConditionRpcResponse queryClientCustomerOrdersByCondition(OrderDbDTO.QueryOrderDto queryOrderDto) {
final var request = QueryClientCustomerOrdersByConditionRpcRequest.newBuilder()
.setShouldFilterStatus(true)
.setStatus(queryOrderDto.getStatus())
.setEnterpriseId(queryOrderDto.getEnterpriseId())
.setShouldFilterClientIds(true).addClientIds(queryOrderDto.getClientId())
.setShouldFilterStallIds(true).addAllStallIds(queryOrderDto.getStallIds())
.build();
return orderServiceRpcBlockingStub.queryClientCustomerOrdersByCondition(request);
}
public QueryClientCustomerOrdersByPaginationRpcResponse queryRefundClientCustomerOrdersByPagination(
QueryRefundOrderByPaginationDto queryOrderDto) {
final var request = QueryClientCustomerOrdersByPaginationRpcRequest.newBuilder()
......
......@@ -6,7 +6,9 @@ import com.infoloop.tianting.clientcustomerorderservice.ServeStatusEnum;
import com.infoloop.tianting.clientcustomerorderservice.SingleClientCustomerOrderDetailRpcResponse;
import com.infoloop.tianting.clientcustomerorderservice.SingleClientCustomerOrderRpcResponse;
import com.infoloop.tianting.context.LoginContextHolder;
import com.infoloop.tianting.menuservice.SingleMenuRpcResponse;
import com.infoloop.tianting.model.dto.ClientInventoryDbDTO.ClientDto;
import com.infoloop.tianting.model.dto.KdsDTO;
import com.infoloop.tianting.model.dto.KdsDTO.KdsMealDetailDto;
import com.infoloop.tianting.model.dto.KdsDTO.KdsOrderLocationDetailDto;
import com.infoloop.tianting.model.dto.KdsDTO.KdsOrderLocationDto;
......@@ -22,6 +24,7 @@ import com.infoloop.tianting.service.client.ClientCustomerServiceRpcClient;
import com.infoloop.tianting.service.client.ClientInventoryServiceRpcClient;
import com.infoloop.tianting.service.client.EnterpriseResourceServiceRpcClient;
import com.infoloop.tianting.service.client.MealServiceRpcClient;
import com.infoloop.tianting.service.client.MenuServiceRpcClient;
import com.infoloop.tianting.service.client.OrderServiceRpcClient;
import com.infoloop.tianting.service.client.SkuServiceRpcClient;
import com.infoloop.tianting.service.client.WOperatorServiceRpcClient;
......@@ -33,8 +36,10 @@ import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
@Slf4j
......@@ -49,14 +54,14 @@ public class KdsServiceImpl implements KdsService {
private final SkuServiceRpcClient skuServiceRpcClient;
private final ClientInventoryServiceRpcClient clientInventoryServiceRpcClient;
private final ClientCustomerServiceRpcClient clientCustomerServiceRpcClient;
private final MenuServiceRpcClient menuServiceRpcClient;
@Override
public List<KdsOrderSkuDto> getOrderDetailBySku(KdsOrderSkuQueryDto queryDto) {
// 获取当日所有的订单 和 订单明细
LocalDate today = LocalDate.now();
LocalDate today = LocalDate.parse(queryDto.getMealTime(), DateUtil.YYYY_MM_DD);
LocalDateTime todayZero = today.atStartOfDay();
LocalDate tomorrow = today.plusDays(1);
LocalDateTime tomorrowZero = tomorrow.atStartOfDay();
LocalDateTime todayEnd = today.atTime(LocalTime.MAX);
final var operatorLoginInfo = LoginContextHolder.getLoginInfo();
boolean shouldFilterStallIds = false;
List<Integer> stallIds = new ArrayList<>();
......@@ -73,7 +78,7 @@ public class KdsServiceImpl implements KdsService {
.shouldFilterMealTimeStart(true)
.mealTimeStart(todayZero)
.shouldFilterMealTimeEnd(true)
.mealTimeEnd(tomorrowZero)
.mealTimeEnd(todayEnd)
.shouldFilterPayStatus(true)
.payStatus(PayStatusEnum.SUCCEED)
.build();
......@@ -118,6 +123,9 @@ public class KdsServiceImpl implements KdsService {
.collect(Collectors.toList());
final var skus = skuServiceRpcClient.getDishSkusByIds(skuIds).getResponseList();
final var menuIds = orderList.stream().map(SingleClientCustomerOrderRpcResponse::getMenuId).distinct().toList();
final var menuMap = menuServiceRpcClient.getMenusByIds(operator.getEnterpriseId(), menuIds).getResponsesList().stream().collect(Collectors.toMap(SingleMenuRpcResponse::getId, Function.identity()));
List<KdsOrderSkuDto> kdsOrderSkuList = new ArrayList<>();
for (Integer menuDetailId : menuDetailIds) {
// 找出该menuDetailId 的所有orderDetail
......@@ -168,8 +176,11 @@ public class KdsServiceImpl implements KdsService {
.count(detail.getCount())
.orderDetailId(detail.getId())
.remark(order.get().getRemark())
.avoidRemark(order.get().getAvoidRemark())
.orderId(order.get().getId())
.roomNo(order.get().getSyncRoomNo().isEmpty() ? order.get().getRoomNo() : order.get().getSyncRoomNo())
.menuId(order.get().getMenuId())
.menuName(menuMap.get(order.get().getMenuId()) == null ? "" : menuMap.get(order.get().getMenuId()).getName())
.tableCode(order.get().getTableCode())
.customerNotice(CustomerNotice.builder()
.doctors(order.get().getCustomerNoticeJson().getDoctorsList())
......@@ -208,9 +219,9 @@ public class KdsServiceImpl implements KdsService {
}
@Override
public List<KdsMealDetailDto> getMealDetail() {
public List<KdsMealDetailDto> getMealDetail(KdsDTO.KdsMealDetailQueryDto queryDto) {
// 获取当日用餐的所有的订单 和 订单明细
LocalDate today = LocalDate.now();
LocalDate today = LocalDate.parse(queryDto.getMealTime(), DateUtil.YYYY_MM_DD);
LocalDateTime todayZero = today.atStartOfDay();
LocalDate tomorrow = today.plusDays(1);
LocalDateTime tomorrowZero = tomorrow.atStartOfDay().minusMinutes(1);
......@@ -235,6 +246,8 @@ public class KdsServiceImpl implements KdsService {
.mealTimeStart(todayZero)
.shouldFilterMealTimeEnd(true)
.mealTimeEnd(tomorrowZero)
.shouldFilterPayStatus(true)
.payStatus(PayStatusEnum.SUCCEED)
.build();
final var orderList = orderServiceRpcClient.getOrdersByCondition(queryOrderDto);
......@@ -281,10 +294,9 @@ public class KdsServiceImpl implements KdsService {
@Override
public List<KdsOrderLocationDto> getOrderDetailByLocation(KdsOrderLocationQueryDto queryDto) {
// 获取当日用餐的所有的订单 和 订单明细
LocalDate today = LocalDate.now();
LocalDate today = LocalDate.parse(queryDto.getMealTime(), DateUtil.YYYY_MM_DD);
LocalDateTime todayZero = today.atStartOfDay();
LocalDate tomorrow = today.plusDays(1);
LocalDateTime tomorrowZero = tomorrow.atStartOfDay().minusMinutes(1);
LocalDateTime todayEnd = today.atTime(LocalTime.MAX);
final var operatorLoginInfo = LoginContextHolder.getLoginInfo();
......@@ -305,7 +317,7 @@ public class KdsServiceImpl implements KdsService {
.shouldFilterMealTimeStart(true)
.mealTimeStart(todayZero)
.shouldFilterMealTimeEnd(true)
.mealTimeEnd(tomorrowZero)
.mealTimeEnd(todayEnd)
.shouldFilterStatus(true)
.status(queryDto.getOrderStatus())
.shouldFilterPayStatus(true)
......@@ -339,6 +351,12 @@ public class KdsServiceImpl implements KdsService {
final var filteredOrderDetailList = orderDetailList.stream()
.filter(od -> od.getMealId() == queryDto.getMealId() && od.getServeStatus() != ServeStatusEnum.SERVE_REJECT)
.collect(Collectors.toList());
final var menuIds = orderList.stream().map(SingleClientCustomerOrderRpcResponse::getMenuId).distinct().toList();
final var menuMap = menuServiceRpcClient.getMenusByIds(operator.getEnterpriseId(), menuIds).getResponsesList().stream().collect(Collectors.toMap(SingleMenuRpcResponse::getId, Function.identity()));
List<KdsOrderLocationDto> kdsOrderLocationList = new ArrayList<>();
for (SingleClientCustomerOrderRpcResponse order : orderList) {
......@@ -395,9 +413,12 @@ public class KdsServiceImpl implements KdsService {
final var kdsOrder = KdsOrderLocationDto.builder()
.totalCount(order.getTotalNum())
.remark(order.getRemark())
.avoidRemark(order.getAvoidRemark())
.orderId(order.getId())
.roomNo(order.getSyncRoomNo().isEmpty() ? order.getRoomNo() : order.getSyncRoomNo())
.tableCode(order.getTableCode())
.menuId(order.getMenuId())
.menuName(menuMap.get(order.getMenuId()) == null ? "" : menuMap.get(order.getMenuId()).getName())
.customerNotice(CustomerNotice.builder()
.doctors(order.getCustomerNoticeJson().getDoctorsList())
.avoids(order.getCustomerNoticeJson().getAvoidsList())
......
......@@ -487,6 +487,7 @@ public class OrderServiceImpl implements OrderService {
.mealTime(DateUtil.formatDate(r.getMealTime()))
.orderType(r.getOrderTypeValue())
.remark(r.getRemark())
.avoidRemark(r.getAvoidRemark())
.isDeleted(r.getIsDeleted())
.isRead(r.getIsRead())
.creationSource(r.getCreationSource().getNumber())
......
......@@ -2,6 +2,8 @@ package com.infoloop.tianting.streamController;
import cn.dev33.satoken.annotation.SaIgnore;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.infoloop.tianting.enums.SettlementDimensionEnum;
import com.infoloop.tianting.model.dto.OrderDbDTO;
import com.infoloop.tianting.model.dto.SettlementDTO.SettlementRequestDto;
import com.infoloop.tianting.service.SettlementService;
import io.swagger.annotations.Api;
......@@ -21,6 +23,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import java.io.ByteArrayOutputStream;
import java.time.format.DateTimeFormatter;
@Api(tags = "结算")
@ApiSupport(order = 0)
......@@ -29,35 +32,59 @@ import java.io.ByteArrayOutputStream;
@RestController
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class SettlementController {
private final SettlementService settlementService;
@SaIgnore
@ApiOperation(value = "企业端结算账单生成excel")
@PostMapping("/enterprise/settlement/generate-excel")
@ResponseStatus(HttpStatus.OK)
public ResponseEntity<byte[]> enterpriseSettlementGenerateExcel(@Valid @RequestBody SettlementRequestDto settlementRequestDto) {
ByteArrayOutputStream outputStream = settlementService.generateOrderSettlementExcel(settlementRequestDto);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", "订单数据.xlsx");
return ResponseEntity.ok()
.headers(headers)
.body(outputStream.toByteArray());
}
private final SettlementService settlementService;
@SaIgnore
@ApiOperation(value = "企业端结算账单生成excel")
@PostMapping("/enterprise/settlement/generate-excel")
@ResponseStatus(HttpStatus.OK)
public ResponseEntity<byte[]> enterpriseSettlementGenerateExcel(@Valid @RequestBody SettlementRequestDto settlementRequestDto) {
ByteArrayOutputStream outputStream = settlementService.generateOrderSettlementExcel(settlementRequestDto);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", "订单数据.xlsx");
return ResponseEntity.ok()
.headers(headers)
.body(outputStream.toByteArray());
}
@ApiOperation(value = "结算账单生成excel")
@PostMapping("/settlement/generate-excel")
@ResponseStatus(HttpStatus.OK)
public ResponseEntity<byte[]> settlementGenerateExcel(
@Valid @RequestBody SettlementRequestDto settlementRequestDto) {
ByteArrayOutputStream outputStream = settlementService.generateOrderSettlementExcel(
settlementRequestDto);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", "订单数据.xlsx");
return ResponseEntity.ok()
.headers(headers)
.body(outputStream.toByteArray());
public ResponseEntity<byte[]> settlementGenerateExcel(@Valid @RequestBody SettlementRequestDto settlementRequestDto) {
ByteArrayOutputStream outputStream = settlementService.generateOrderSettlementExcel(
settlementRequestDto);
String fileName;
if (settlementRequestDto.getDimension() == SettlementDimensionEnum.BY_ORDER) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
String startDate = settlementRequestDto.getTimeStart().format(formatter);
String endDate = settlementRequestDto.getTimeEnd().format(formatter);
fileName = String.format("结算报表_%s_%s.xlsx", startDate, endDate);
} else {
fileName = "订单数据.xlsx";
}
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", fileName);
return ResponseEntity.ok()
.headers(headers)
.body(outputStream.toByteArray());
}
@ApiOperation(value = "院区端订单导出")
@PostMapping("/separateMeals/export")
@ResponseStatus(HttpStatus.OK)
public ResponseEntity<byte[]> exportSeparateMeals(@Valid @RequestBody OrderDbDTO.QueryOrderDto queryOrderDto) {
ByteArrayOutputStream outputStream = settlementService.exportSeparateMealsExcel(queryOrderDto);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", "分餐表.xlsx");
return ResponseEntity.ok()
.headers(headers)
.body(outputStream.toByteArray());
}
}
......
......@@ -89,6 +89,11 @@ enum OnlinePayEnum {
LEAVE_HOSPITAL = 3;//出院
EMPLOYEE_CARD = 4; //员工卡
PAPER_VERIFICATION = 5; //纸质核销
CASH = 6;//现金
MEAL_CARD = 7;//餐卡
BAND_CARD = 8;//银行卡
ALIPAY = 9;//支付宝
WECHATPAY = 10;//微信支付
}
enum ServeStatusEnum {
......@@ -141,6 +146,7 @@ message SingleClientCustomerOrderRpcResponse {
bool isAllocation = 35;
string syncRoomNo = 36;
bool isCanceled = 37;
string avoidRemark = 38;
}
message GetClientCustomerOrderByIdRpcRequest {
......@@ -385,6 +391,8 @@ message ClientCustomerOrderModification {
string syncRoomNo = 55;
bool shouldUpdateIsCanceled = 56;
bool isCanceled = 57;
bool shouldUpdateAvoidRemark = 58;
string avoidRemark = 59;
}
message UpdateClientCustomerOrderRpcRequest {
......