wangyingyang

fix

package com.infoloop.tianting.model.dto;
import com.infoloop.tianting.clientcustomerorderservice.OrderOperationType;
import com.infoloop.tianting.clientcustomerorderservice.OrderSourceEnum;
import com.infoloop.tianting.model.dto.MenuDbDTO.DishRuleJson;
import com.infoloop.tianting.model.dto.MenuDbDTO.OrderRuleJson;
import io.swagger.annotations.ApiModel;
import java.util.List;
import lombok.Builder;
import lombok.Data;
import lombok.ToString;
@Data
@ApiModel(description = "操作记录DTO")
public class OperationDTO {
@Data
@Builder
@ToString
@ApiModel(description = "单个操作记录Dto")
public static class SingleOperationDto {
private Integer orderId;
OrderOperationType type;
private boolean shouldCreateOriginalOrderJson;
private String originalOrderJson;
private boolean shouldCreateAdjustOrderJson;
private String adjustOrderJson;
private boolean shouldCreateOriginalOrderDetailJson;
private String originalOrderDetailJson;
private boolean shouldCreateAdjustOrderDetailJson;
private String adjustOrderDetailJson;
}
@Data
@Builder
@ToString
@ApiModel(description = "批量操作记录Dto")
public static class BatchOperationDto {
private List<SingleOperationDto> creations;
private Integer enterpriseId;
private Integer createdBy;
private String operator;
private OrderSourceEnum creationSource;
}
}
......@@ -576,7 +576,10 @@ public class OrderDbDTO {
@ToString
@ApiModel(description = "检查是否已预定过某一餐单")
public static class getMenuOrderCountDto {
private Integer customerId;
@Builder.Default
private String openId = "";
@Builder.Default
private Integer customerId = 0;
private Integer menuId;
private LocalDateTime mealTime;
}
......
package com.infoloop.tianting.service.client;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.infoloop.tianting.SingleResponse;
import com.infoloop.tianting.SingleSpecialResponse;
import com.infoloop.tianting.clientcustomerorderservice.BatchCreateOrderOperationRecordsRequest;
import com.infoloop.tianting.clientcustomerorderservice.BatchCreateOrderOperationRecordsResponse;
import com.infoloop.tianting.clientcustomerorderservice.BatchUpdateClientCustomerOrderDetailsRpcRequest;
import com.infoloop.tianting.clientcustomerorderservice.BatchUpdateClientCustomerOrderDetailsRpcResponse;
import com.infoloop.tianting.clientcustomerorderservice.ClientCustomerOrderCreation;
......@@ -13,10 +17,14 @@ import com.infoloop.tianting.clientcustomerorderservice.CloseTimeType;
import com.infoloop.tianting.clientcustomerorderservice.CreateClientCustomerOrderRpcRequest;
import com.infoloop.tianting.clientcustomerorderservice.CreateClientCustomerOrderRpcResponse;
import com.infoloop.tianting.clientcustomerorderservice.CustomerNotice;
import com.infoloop.tianting.clientcustomerorderservice.GetClientCustomerOrderDetailByIdRpcRequest;
import com.infoloop.tianting.clientcustomerorderservice.GetClientCustomerOrderDetailsByIdsRpcRequest;
import com.infoloop.tianting.clientcustomerorderservice.GetClientCustomerOrderDetailsByOrderIdsRpcRequest;
import com.infoloop.tianting.clientcustomerorderservice.GetClientCustomerOrdersByCustomerIdRpcRequest;
import com.infoloop.tianting.clientcustomerorderservice.GetClientCustomerOrdersByCustomerIdRpcResponse;
import com.infoloop.tianting.clientcustomerorderservice.MealDetail;
import com.infoloop.tianting.clientcustomerorderservice.OrderOperationRecordCreation;
import com.infoloop.tianting.clientcustomerorderservice.OrderOperationType;
import com.infoloop.tianting.clientcustomerorderservice.OrderSourceEnum;
import com.infoloop.tianting.clientcustomerorderservice.OrderStatusEnum;
import com.infoloop.tianting.clientcustomerorderservice.PayStatusEnum;
......@@ -31,14 +39,18 @@ import com.infoloop.tianting.clientcustomerorderservice.UpdateClientCustomerOrde
import com.infoloop.tianting.context.LoginContextHolder;
import com.infoloop.tianting.enums.OrderTypeEnum;
import com.infoloop.tianting.model.common.PageResult;
import com.infoloop.tianting.model.dto.OperationDTO.BatchOperationDto;
import com.infoloop.tianting.model.dto.OperationDTO.SingleOperationDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderDetailDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderResponse;
import com.infoloop.tianting.model.dto.OrderDbDTO.MealDetailDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.OrderDetailBatchUpdateDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.OrderDetailDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderByConditionDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderByPaginationDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.UpdateOrderDto;
import com.infoloop.tianting.utils.DateUtil;
import io.swagger.models.auth.In;
import java.time.LocalDate;
import java.time.ZoneOffset;
......@@ -87,6 +99,8 @@ public class OrderServiceRpcClient {
.setStatus(queryOrderDto.getStatus())
.setShouldFilterMenuIds(queryOrderDto.getShouldFilterMenuId())
.addAllMenuIds(List.of(queryOrderDto.getMenuId()))
.setShouldFilterOpenIds(queryOrderDto.getShouldFilterOpenId())
.addAllOpenIds(List.of(queryOrderDto.getOpenId()))
.build();
return orderServiceRpcBlockingStub.queryClientCustomerOrdersByCondition(request).getResponsesList();
}
......@@ -127,6 +141,11 @@ public class OrderServiceRpcClient {
public BatchUpdateClientCustomerOrderDetailsRpcResponse batchUpdateClientCustomerOrderDetails(
OrderDetailBatchUpdateDto orderDetailBatchUpdateDto) {
final var operatorLoginInfo = LoginContextHolder.getLoginInfo();
final var operator = operatorServiceRpcClient.getCOperatorById(operatorLoginInfo.getId());
List<Integer> idsOfNeedUpdateMenuDetails = new ArrayList<>();
List<Integer> idsOfAddCount = new ArrayList<>();
List<OrderDetailDto> orgionalOrderDetails = new ArrayList<>();
List<OrderDetailDto> newOrderDetails = new ArrayList<>();
final var modifications = orderDetailBatchUpdateDto.getDetails().stream().map( d-> {
MealDetail mealDetail = MealDetail.newBuilder().build();;
Integer menuDetailId = 0;
......@@ -135,6 +154,7 @@ public class OrderServiceRpcClient {
Integer skuId = 0;
String showName = "";
if (d.getShouldUpdateMenuDetailId()) {
idsOfNeedUpdateMenuDetails.add(d.getId());
menuDetailId = d.getMenuDetailId();
final var menuDetail = menuServiceRpcClient.getMenuDetailById(
operatorLoginInfo.getEnterpriseId(), menuDetailId).getResponse();
......@@ -165,7 +185,6 @@ public class OrderServiceRpcClient {
.addAllSkus(skus)
.build();
}
}
ServeStatusEnum serveStatus = ServeStatusEnum.UNKNOWN_SERVE_STATUS;
......@@ -174,6 +193,7 @@ public class OrderServiceRpcClient {
}
Integer count = 0;
if (d.getShouldUpdateCount()) {
idsOfAddCount.add(d.getId());
count = d.getCount();
}
final var detail = ClientCustomerOrderDetailModification.newBuilder()
......@@ -204,7 +224,159 @@ public class OrderServiceRpcClient {
.setUpdateSourceValue(orderDetailBatchUpdateDto.getUpdatedSource().getNumber())
.addAllModifications(modifications)
.build();
return orderServiceRpcBlockingStub.batchUpdateClientCustomerOrderDetails(request);
final var totalIds = new ArrayList<>(idsOfNeedUpdateMenuDetails);
totalIds.addAll(idsOfAddCount);
if (!idsOfNeedUpdateMenuDetails.isEmpty() || !idsOfAddCount.isEmpty()) {
final var orgionalResponseList = getClientCustomerOrderDetailsByIds(totalIds);
orgionalOrderDetails = orgionalResponseList.stream().map(d ->
OrderDetailDto.builder()
.id(d.getId())
.count(d.getCount())
.categoryId(d.getCategoryId())
.mealId(d.getMealId())
.menuDetailId(d.getMenuDetailId())
.orderId(d.getOrderId())
.price(d.getPrice())
.showName(d.getShowName())
.mealDetailJson(MealDetailDto.builder()
.allergies(d.getMealDetailJson().getAllergiesList())
.basicMaterials(d.getMealDetailJson().getBasicMaterials())
.dockers(d.getMealDetailJson().getDockersList())
.efficacies(d.getMealDetailJson().getEfficaciesList())
.fat(d.getMealDetailJson().getFat())
.tastes(d.getMealDetailJson().getTastesList())
.protein(d.getMealDetailJson().getProtein())
.carbohydrate(d.getMealDetailJson().getCarbohydrate())
.energy(d.getMealDetailJson().getEnergy())
.avoids(d.getMealDetailJson().getAvoidsList())
.skus(d.getMealDetailJson().getSkusList())
.build())
.adjustSkuRemark(d.getAdjustSkuRemark())
.enterpriseId(d.getEnterpriseId())
.skuId(d.getSkuId())
.serveStatus(d.getServeStatus())
.creationSource(d.getCreationSource().getNumber())
.createdBy(d.getCreatedBy())
.createdAt(DateUtil.formatDate(d.getCreatedAt()))
.updateSource(d.getUpdateSource().getNumber())
.updatedAt(DateUtil.formatDate(d.getUpdatedAt()))
.updatedBy(d.getUpdatedBy())
.build()).collect(Collectors.toList());
}
final var res = orderServiceRpcBlockingStub.batchUpdateClientCustomerOrderDetails(request);
if(res.getIsUpdated()) {
if (!idsOfNeedUpdateMenuDetails.isEmpty() || !idsOfAddCount.isEmpty()) {
final var newResponseList = getClientCustomerOrderDetailsByIds(totalIds);
newOrderDetails = newResponseList.stream().map(d ->
OrderDetailDto.builder()
.id(d.getId())
.count(d.getCount())
.categoryId(d.getCategoryId())
.mealId(d.getMealId())
.menuDetailId(d.getMenuDetailId())
.orderId(d.getOrderId())
.price(d.getPrice())
.showName(d.getShowName())
.mealDetailJson(MealDetailDto.builder()
.allergies(d.getMealDetailJson().getAllergiesList())
.basicMaterials(d.getMealDetailJson().getBasicMaterials())
.dockers(d.getMealDetailJson().getDockersList())
.efficacies(d.getMealDetailJson().getEfficaciesList())
.fat(d.getMealDetailJson().getFat())
.tastes(d.getMealDetailJson().getTastesList())
.protein(d.getMealDetailJson().getProtein())
.carbohydrate(d.getMealDetailJson().getCarbohydrate())
.energy(d.getMealDetailJson().getEnergy())
.avoids(d.getMealDetailJson().getAvoidsList())
.skus(d.getMealDetailJson().getSkusList())
.build())
.adjustSkuRemark(d.getAdjustSkuRemark())
.enterpriseId(d.getEnterpriseId())
.skuId(d.getSkuId())
.serveStatus(d.getServeStatus())
.creationSource(d.getCreationSource().getNumber())
.createdBy(d.getCreatedBy())
.createdAt(DateUtil.formatDate(d.getCreatedAt()))
.updateSource(d.getUpdateSource().getNumber())
.updatedAt(DateUtil.formatDate(d.getUpdatedAt()))
.updatedBy(d.getUpdatedBy())
.build()).collect(Collectors.toList());
// 替换菜品的操作记录
List<SingleOperationDto> operations = new ArrayList<>();
for (OrderDetailDto orgionalDetail: orgionalOrderDetails) {
OrderOperationType orderOperationType = OrderOperationType.UNKNOWN_OPERATION_TYPE;
if (idsOfNeedUpdateMenuDetails.contains(orgionalDetail.getId())) {
orderOperationType = OrderOperationType.REPLACE_DISHES;
}
else if(idsOfAddCount.contains(orgionalDetail.getId())) {
orderOperationType = OrderOperationType.ADD_DISHES;
}
ObjectMapper objectMapper = new ObjectMapper();
String orgionalDetailStr = "";
String newDetailStr = "";
final var newDetail = newOrderDetails.stream().filter(n -> n.getId().equals(orgionalDetail.getId())).findFirst();
if (newDetail.isPresent()) {
try {
newDetailStr = objectMapper.writeValueAsString(newDetail.get());
} catch (JsonProcessingException e) {
System.out.println("orderDetail json 转换失败");
}
}
try {
orgionalDetailStr = objectMapper.writeValueAsString(orgionalDetail);
} catch (JsonProcessingException e) {
System.out.println("orderDetail json 转换失败");
}
final var operation = SingleOperationDto.builder()
.orderId(orgionalDetail.getOrderId())
.shouldCreateAdjustOrderDetailJson(true)
.shouldCreateOriginalOrderDetailJson(true)
.shouldCreateAdjustOrderJson(false)
.shouldCreateOriginalOrderJson(false)
.adjustOrderDetailJson(newDetailStr)
.originalOrderDetailJson(orgionalDetailStr)
.type(orderOperationType)
.build();
operations.add(operation);
}
final var batchOperations = BatchOperationDto.builder()
.createdBy(operatorLoginInfo.getId())
.creationSource(OrderSourceEnum.STALL)
.enterpriseId(operatorLoginInfo.getEnterpriseId())
.operator(operator.getName())
.creations(operations)
.build();
batchCreateOrderOperationRecords(batchOperations);
}
}
return res;
}
public BatchCreateOrderOperationRecordsResponse batchCreateOrderOperationRecords(
BatchOperationDto batchOperationDto) {
final var request = BatchCreateOrderOperationRecordsRequest.newBuilder()
.addAllCreations(batchOperationDto.getCreations().stream().map(c ->
OrderOperationRecordCreation.newBuilder()
.setOrderId(c.getOrderId())
.setShouldCreateAdjustOrderJson(c.isShouldCreateAdjustOrderJson())
// .setAdjustOrderJson(c.getAdjustOrderJson())
.setShouldCreateOriginalOrderJson(c.isShouldCreateOriginalOrderJson())
// .setOriginalOrderJson(c.getOriginalOrderJson())
.setShouldCreateAdjustOrderDetailJson(c.isShouldCreateAdjustOrderDetailJson())
.setAdjustOrderDetailJson(c.getAdjustOrderDetailJson())
.setShouldCreateOriginalOrderDetailJson(c.isShouldCreateOriginalOrderDetailJson())
.setOriginalOrderDetailJson(c.getOriginalOrderDetailJson())
.build()).collect(Collectors.toList()))
.setCreatedBy(batchOperationDto.getCreatedBy())
.setEnterpriseId(batchOperationDto.getEnterpriseId())
.setOperator(batchOperationDto.getOperator())
.setCreationSource(batchOperationDto.getCreationSource())
.build();
return orderServiceRpcBlockingStub.batchCreateOrderOperationRecords(request);
}
public QueryClientCustomerOrdersByPaginationRpcResponse queryClientCustomerOrdersByPagination(
......@@ -229,6 +401,14 @@ public class OrderServiceRpcClient {
.build()).getResponsesList();
}
public List<SingleClientCustomerOrderDetailRpcResponse> getClientCustomerOrderDetailsByIds(List<Integer> ids) {
return orderServiceRpcBlockingStub.getClientCustomerOrderDetailsByIds(
GetClientCustomerOrderDetailsByIdsRpcRequest.newBuilder()
.setIncludeDeleted(false)
.addAllIds(ids)
.build()).getResponsesList();
}
public List<SingleClientCustomerOrderDetailRpcResponse> getOrderDetailsByOrderIds(List<Integer> orderIds) {
return orderServiceRpcBlockingStub.getClientCustomerOrderDetailsByOrderIds(
GetClientCustomerOrderDetailsByOrderIdsRpcRequest.newBuilder()
......@@ -305,7 +485,7 @@ public class OrderServiceRpcClient {
.setMenuId(createOrderDto.getMenuId())
.setTotalNum(createOrderDto.getTotalNum())
.setPayPrice(createOrderDto.getPayPrice())
.setMealTime(createOrderDto.getMealTime().toInstant(ZoneOffset.UTC).toEpochMilli())
.setMealTime(mealDate.atStartOfDay().toInstant(ZoneOffset.UTC).toEpochMilli())
.setShouldCreateTableCode(createOrderDto.getCloseTimeType().equals(CloseTimeType.IMMEDIATELY))
.setTableCode(createOrderDto.getTableCode())
.setShouldCreatePickupCode(createOrderDto.getCloseTimeType().equals(CloseTimeType.IMMEDIATELY))
......
......@@ -102,7 +102,8 @@ public class OrderServiceImpl implements OrderService {
createOrderDto.setCustomerId(operatorCreateOrderDto.getCustomerId());
createOrderDto.setStallId(operatorCreateOrderDto.getStallId());
createOrderDto.setMenuId(operatorCreateOrderDto.getMenuId());
createOrderDto.setMealTime(operatorCreateOrderDto.getMealTime());
final var mealTime = operatorCreateOrderDto.getMealTime().toLocalDate().atStartOfDay();
createOrderDto.setMealTime(mealTime);
createOrderDto.setRemark(operatorCreateOrderDto.getRemark());
createOrderDto.setCreatedBy(operatorLoginInfo.getId());
createOrderDto.setClientId(operator.getClientId());
......@@ -251,8 +252,10 @@ public class OrderServiceImpl implements OrderService {
.mealTimeEnd(mealTimeEnd)
.shouldFilterMenuId(true)
.menuId(checkIfOrdered.getMenuId())
.shouldFilterCustomerIds(true)
.shouldFilterCustomerIds(checkIfOrdered.getCustomerId().equals(0)? false: true)
.customerIds(List.of(checkIfOrdered.getCustomerId()))
.shouldFilterOpenId(checkIfOrdered.getOpenId().isEmpty()? false: true)
.openId(checkIfOrdered.getOpenId())
.build();
final var orderList = orderServiceRpcClient.getOrdersByCondition(queryOrderDto);
return orderList.size();
......
package com.infoloop.tianting.service.impl;
import com.infoloop.tianting.clientcustomerorderservice.OrderStatusEnum;
import com.infoloop.tianting.clientcustomerorderservice.ServeStatusEnum;
import com.infoloop.tianting.clientcustomerorderservice.SingleClientCustomerOrderDetailRpcResponse;
import com.infoloop.tianting.clientcustomerorderservice.SingleClientCustomerOrderRpcResponse;
import com.infoloop.tianting.clientinventoryservice.SingleClientRpcResponse;
import com.infoloop.tianting.context.LoginContextHolder;
import com.infoloop.tianting.enums.SettlementDimensionEnum;
import com.infoloop.tianting.exception.ClientEndExceptions.BusinessException;
......@@ -70,8 +72,8 @@ public class SettlementServiceImpl implements SettlementService {
public ByteArrayOutputStream generateOrderSettlementExcelBySku(SettlementRequestDto settlementRequest) {
final var startDate = settlementRequest.getTimeStart().toLocalDate().atStartOfDay();
final var endDate = settlementRequest.getTimeEnd().toLocalDate().plusDays(1).atStartOfDay();
final var startDate = settlementRequest.getTimeStart().plusHours(8).toLocalDate().atStartOfDay();
final var endDate = settlementRequest.getTimeEnd().plusHours(8).toLocalDate().plusDays(1).atStartOfDay();
final var operatorLoginInfo = LoginContextHolder.getLoginInfo();
final int enterpriseId = LoginContextHolder.hasLogin() ? operatorLoginInfo.getEnterpriseId() : settlementRequest.getEnterpriseId();
final var queryOrderDto = QueryOrderByConditionDto.builder()
......@@ -90,6 +92,7 @@ public class SettlementServiceImpl implements SettlementService {
.collect(Collectors.toList());
final var orderDetailList = orderServiceRpcClient.getOrderDetailsByOrderIds(orderIds);
List<Integer> skuIds = orderDetailList.stream()
.filter(d -> !d.getServeStatus().equals(ServeStatusEnum.SERVE_REJECT))
.map(SingleClientCustomerOrderDetailRpcResponse::getSkuId)
.distinct()
.collect(Collectors.toList());
......@@ -153,7 +156,7 @@ public class SettlementServiceImpl implements SettlementService {
//找出当天所有已点的菜品明细
final var curOrderDetails = orderDetailList.stream()
.filter(d -> curOrderIds.contains(d.getOrderId()))
.filter(d -> curOrderIds.contains(d.getOrderId()) && !d.getServeStatus().equals(ServeStatusEnum.SERVE_REJECT))
.collect(Collectors.toList());
for (SingleMenuDetailRpcResponse m: curMenuDetails) {
......@@ -198,14 +201,20 @@ public class SettlementServiceImpl implements SettlementService {
}
}
final var client = inventoryServiceRpcClient.getClientById(enterpriseId,
settlementRequest.getClientId()).getClient();
// final var client = inventoryServiceRpcClient.getClientById(enterpriseId,
// settlementRequest.getClientId()).getClient();
final var stalls = inventoryServiceRpcClient.getStallsByIds(operatorLoginInfo.getEnterpriseId(), settlementRequest.getStallIds()).getClientsList();
final var stallNames = stalls.stream()
.filter(s -> settlementRequest.getStallIds().contains(s.getId()))
.map(SingleClientRpcResponse::getName).collect(Collectors.toList());
String joinedString = String.join(" ", stallNames);
final var settlementDataDto = SettlementDataDto.builder()
.classifyOrders(classifyOrders)
.client(client.getName())
.startTime(DateUtil.formatDate(settlementRequest.getTimeStart(), DateUtil.YYYY_MM_DD))
.endTime(DateUtil.formatDate(settlementRequest.getTimeEnd(), DateUtil.YYYY_MM_DD))
.client(joinedString)
.startTime(DateUtil.formatDate(settlementRequest.getTimeStart().plusHours(8), DateUtil.YYYY_MM_DD))
.endTime(DateUtil.formatDate(settlementRequest.getTimeEnd().plusHours(8), DateUtil.YYYY_MM_DD))
.build();
try {
final var bytes = writeToExcelBySku(settlementDataDto);
return bytes;
......@@ -319,8 +328,8 @@ public class SettlementServiceImpl implements SettlementService {
public ByteArrayOutputStream generateOrderSettlementExcelByMeal(SettlementRequestDto settlementRequest) {
final var startDate = settlementRequest.getTimeStart().toLocalDate().atStartOfDay();
final var endDate = settlementRequest.getTimeEnd().toLocalDate().plusDays(1).atStartOfDay();
final var startDate = settlementRequest.getTimeStart().plusHours(8).toLocalDate().atStartOfDay();
final var endDate = settlementRequest.getTimeEnd().plusHours(8).toLocalDate().plusDays(1).atStartOfDay();
final var operatorLoginInfo = LoginContextHolder.getLoginInfo();
final var queryOrderDto = QueryOrderByConditionDto.builder()
.enterpriseId(LoginContextHolder.hasLogin() ? operatorLoginInfo.getEnterpriseId() : settlementRequest.getEnterpriseId())
......@@ -424,8 +433,8 @@ public class SettlementServiceImpl implements SettlementService {
final var settlementDataByMealDto = SettlementDataByMealDto.builder()
.classifyOrders(classifyOrders)
.client(client.getName())
.startTime(settlementRequest.getTimeStart())
.endTime(settlementRequest.getTimeEnd())
.startTime(settlementRequest.getTimeStart().plusHours(8))
.endTime(settlementRequest.getTimeEnd().plusHours(8))
.build();
try {
final var bytes = writeToExcelByMeal(settlementDataByMealDto);
......