zhuyifan

fix

......@@ -17,6 +17,8 @@ import lombok.NoArgsConstructor;
import lombok.ToString;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
......@@ -117,6 +119,10 @@ public class OrderDbDTO {
private Boolean shouldFilterMenuId = false;
@Builder.Default
private Integer menuId = 0;
@Builder.Default
private Boolean shouldFilterPayStatus = false;
@Builder.Default
private PayStatusEnum payStatus;
}
@Data
......@@ -206,15 +212,19 @@ public class OrderDbDTO {
@RequestKeyParam
@ApiModelProperty(value = "档口 ID")
@NotNull(message = "档口 ID不能为空")
private Integer stallId;
@ApiModelProperty(value = "客户 ID")
@NotNull(message = "客户 ID不能为空")
private Integer customerId;
@ApiModelProperty(value = "餐单 id")
@NotNull(message = "餐单 id不能为空")
private Integer menuId;
@ApiModelProperty(value = "用餐日期")
@NotNull(message = "用餐日期不能为空")
private LocalDateTime mealTime;
@ApiModelProperty(value = "桌号")
......@@ -224,9 +234,11 @@ public class OrderDbDTO {
private String remark;
@ApiModelProperty(value = "支付方式")
@NotNull(message = "支付方式不能为空")
private OnlinePayEnum onlinePay;
@ApiModelProperty(value = "订单菜品详情列表")
@NotEmpty(message = "订单菜品详情列表不能为空")
private List<OperatorCreateOrderDetailDto> orderDetailDtos;
}
......@@ -240,10 +252,12 @@ public class OrderDbDTO {
private Integer enterpriseId;
@ApiModelProperty(value = "院区 ID")
@NotNull(message = "院区 ID不能为空")
private Integer clientId;
@RequestKeyParam
@ApiModelProperty(value = "档口 ID")
@NotNull(message = "档口 ID不能为空")
private Integer stallId;
@ApiModelProperty(value = "需要创建客户 ID")
......@@ -256,6 +270,7 @@ public class OrderDbDTO {
private Integer status;
@ApiModelProperty(value = "餐单 id")
@NotNull(message = "餐单 id不能为空")
private Integer menuId;
@ApiModelProperty(value = "订单商品总数")
......@@ -265,6 +280,7 @@ public class OrderDbDTO {
private Integer payPrice;
@ApiModelProperty(value = "支付方式")
@NotNull(message = "支付方式不能为空")
private OnlinePayEnum onlinePay;
@ApiModelProperty(value = "支付时间")
......@@ -280,6 +296,7 @@ public class OrderDbDTO {
private String transactionId;
@ApiModelProperty(value = "用餐日期")
@NotNull(message = "用餐日期不能为空")
private LocalDateTime mealTime;
@ApiModelProperty(value = "订餐地址")
......@@ -309,7 +326,6 @@ public class OrderDbDTO {
@ApiModelProperty(value = "修改人 ID,修改人可能是院区端登陆的用户,也可能是 KDS 端登陆用户")
private Integer updatedBy;
@ApiModelProperty(value = "更新来源:小程序点餐=1;院区端=2;kds=3;业务中台 = 4")
private Integer updateSource;
......@@ -317,6 +333,7 @@ public class OrderDbDTO {
private CloseTimeType closeTimeType;
@ApiModelProperty(value = "订单菜品详情列表")
@NotEmpty(message = "订单菜品详情列表不能为空")
private List<CreateOrderDetailDto> orderDetailDtos;
}
......
......@@ -24,7 +24,7 @@ import java.util.stream.Collectors;
public class WebSocketServer extends TextWebSocketHandler {
private static final ConcurrentHashMap<UserSessionKey, UserSessionData> userSessions = new ConcurrentHashMap<>();
private static final long INACTIVITY_TIMEOUT = 2 * 60 * 60 * 1000;
private static final long INACTIVITY_TIMEOUT = 60 * 60 * 1000;
private static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
static {
......@@ -34,6 +34,7 @@ public class WebSocketServer extends TextWebSocketHandler {
private static void cleanInactiveSessions() {
final var currentTime = System.currentTimeMillis();
final var iterator = userSessions.entrySet().iterator();
log.info("cleanInactiveSessions; sessions:{}", userSessions.keySet());
while (iterator.hasNext()) {
final var entry = iterator.next();
final var key = entry.getKey();
......@@ -108,8 +109,17 @@ public class WebSocketServer extends TextWebSocketHandler {
public void afterConnectionEstablished(WebSocketSession session) {
final var key = getUserSessionKey(session);
if (key != null) {
final var existingSession = userSessions.remove(key);
if (existingSession != null) {
try {
existingSession.closeSession();
log.info("WebSocket old connect closed,userId : {}, userType : {}", key.getUserId(), key.getUserType());
} catch (IOException e) {
log.error("old WebSocket close failed,userId : {}, userType : {}", key.getUserId(), key.getUserType(), e);
}
}
userSessions.put(key, new UserSessionData(session));
log.info("WebSocket connect success: userId : {}, userType : {}", key.getUserId(), key.getUserType());
log.info("WebSocket connect success, userId : {}, userType : {}", key.getUserId(), key.getUserType());
} else {
log.warn("WebSocket connect failed,unable to get valid user information");
}
......
......@@ -145,6 +145,8 @@ public class OrderServiceRpcClient {
.addAllMenuIds(List.of(queryOrderDto.getMenuId()))
.setShouldFilterOpenIds(queryOrderDto.getShouldFilterOpenId())
.addAllOpenIds(List.of(queryOrderDto.getOpenId()))
.setShouldFilterPayStatus(queryOrderDto.getShouldFilterPayStatus())
.setPayStatus(queryOrderDto.getPayStatus())
.build();
return orderServiceRpcBlockingStub.queryClientCustomerOrdersByCondition(request).getResponsesList();
}
......@@ -539,9 +541,12 @@ public class OrderServiceRpcClient {
.build();
final var menuById = menuServiceRpcClient.getMenuById(createOrderDto.getEnterpriseId(), createOrderDto.getMenuId());
OrderStatusEnum orderStatus = OrderStatusEnum.TO_PREPARE;
if (menuById.getResponse().getOrderRuleJson().getModeOfPayment() == ModeOfPaymentEnum.ONLINE && menuById.getResponse().getOrderRuleJson().getCloseTimeType() == CloseTimeTypeEnum.IMMEDIATELY) {
if (createOrderDto.getOnlinePay() != OnlinePayEnum.ONLINE) {
var orderRuleJson = menuById.getResponse().getOrderRuleJson();
if (orderRuleJson.getModeOfPayment() == ModeOfPaymentEnum.ONLINE && orderRuleJson.getCloseTimeType() == CloseTimeTypeEnum.IMMEDIATELY) {
orderStatus = OrderStatusEnum.PREPARING;
}
}
final var creation = ClientCustomerOrderCreation.newBuilder()
.setShouldCreateCustomerId(createOrderDto.getShouldCreateCustomerId())
.setShouldCreateCustomerId(true).setCustomerId(createOrderDto.getCustomerId())
......@@ -553,7 +558,7 @@ public class OrderServiceRpcClient {
.setShouldCreateRoomNo(!createOrderDto.getRoomNo().isEmpty()).setRoomNo(createOrderDto.getRoomNo())
.setShouldCreateTableCode(createOrderDto.getCloseTimeType().equals(CloseTimeType.IMMEDIATELY) || StringUtils.isNotEmpty(createOrderDto.getTableCode())).setTableCode(createOrderDto.getTableCode() == null ? "" : createOrderDto.getTableCode())
.setShouldCreateOnlinePay(true).setOnlinePay(createOrderDto.getOnlinePay())
.setShouldCreatePayStatus(true).setPayStatus(createOrderDto.getOnlinePay() == OnlinePayEnum.ONLINE || createOrderDto.getOnlinePay() == OnlinePayEnum.LEAVE_HOSPITAL ? PayStatusEnum.TO_PAY : PayStatusEnum.SUCCEED)
.setShouldCreatePayStatus(true).setPayStatus(createOrderDto.getOnlinePay() == OnlinePayEnum.ONLINE ? PayStatusEnum.TO_PAY : PayStatusEnum.SUCCEED)
.setMenuId(createOrderDto.getMenuId())
.setTotalNum(createOrderDto.getTotalNum())
.setShouldCreatePayPrice(createOrderDto.getOnlinePay() == OnlinePayEnum.LEAVE_HOSPITAL).setPayPrice(createOrderDto.getPayPrice())
......@@ -571,13 +576,10 @@ public class OrderServiceRpcClient {
final var skuSellQuantities = this.querySkuSellQuantitiesByStallAndSkuIds(createOrderDto.getEnterpriseId(), createOrderDto.getStallId(), skuIds);
final var skuSellQuantityMap = skuSellQuantities.stream().collect(Collectors.toMap(SingleSkuSellQuantityRpcResponse::getSkuId, Function.identity()));
final var skuMap = skuServiceRpcClient.getSkusByIds(skuIds).stream().collect(Collectors.toMap(SingleSkuResponse::getId, Function.identity()));
final var soldOutSkus = new ArrayList<String>();
final var skuStockMap = new HashMap<String, Integer>();
for (var orderDetail : createOrderDto.getOrderDetailDtos()) {
final var skuSellQuantityRpcResponse = skuSellQuantityMap.get(orderDetail.getSkuId());
if (skuSellQuantityRpcResponse == null) {
log.error("skuSellQuantityRpcResponse is null; stallId:{}, skuId:{}", createOrderDto.getStallId(), orderDetail.getSkuId());
soldOutSkus.add(skuMap.get(orderDetail.getSkuId()).getName());
continue;
}
if ((skuSellQuantityRpcResponse.getTodaySellQuantity() + orderDetail.getCount()) > skuSellQuantityRpcResponse.getMaxSellQuantity()) {
......@@ -585,9 +587,6 @@ public class OrderServiceRpcClient {
skuStockMap.put(skuMap.get(orderDetail.getSkuId()).getName(), skuSellQuantityRpcResponse.getMaxSellQuantity() - skuSellQuantityRpcResponse.getTodaySellQuantity());
}
}
if (!soldOutSkus.isEmpty()) {
throw ClientEndExceptions.BusinessException.build(ErrorCodeEnum.SKUS_SOLD_OUT_TODAY, String.join(",", soldOutSkus));
}
if (!skuStockMap.isEmpty()) {
final var noEnoughSkus = String.join(", ", skuStockMap.keySet());
throw ClientEndExceptions.BusinessException.build(ErrorCodeEnum.SKUS_STOCK_NO_ENOUGH_TODAY, noEnoughSkus);
......@@ -609,7 +608,7 @@ public class OrderServiceRpcClient {
.type(MessageTypeEnum.ORDER)
.noticeType(NoticeTypeEnum.ORDER_CREATED)
.subject(NoticeTypeEnum.ORDER_CREATED.getDescription())
.message("下单成功啦,快去查看吧~")
.message("有新的订单下单成功啦,快去查看吧~")
.data(orderCreateSuccessData)
.build();
try {
......
package com.infoloop.tianting.service.impl;
import com.infoloop.tianting.clientcustomerorderservice.OrderStatusEnum;
import com.infoloop.tianting.clientcustomerorderservice.PayStatusEnum;
import com.infoloop.tianting.clientcustomerorderservice.ServeStatusEnum;
import com.infoloop.tianting.clientcustomerorderservice.SingleClientCustomerOrderDetailRpcResponse;
import com.infoloop.tianting.clientcustomerorderservice.SingleClientCustomerOrderRpcResponse;
......@@ -51,7 +52,6 @@ public class KdsServiceImpl implements KdsService {
@Override
public List<KdsOrderSkuDto> getOrderDetailBySku(KdsOrderSkuQueryDto queryDto) {
// 获取当日所有的订单 和 订单明细
LocalDate today = LocalDate.now();
LocalDateTime todayZero = today.atStartOfDay();
......@@ -64,8 +64,7 @@ public class KdsServiceImpl implements KdsService {
final var operator = wOperatorServiceRpcClient.getWOperatorById(operatorLoginInfo.getId()).getResponse();
if (!operator.getIsSuper()) {
shouldFilterStallIds = true;
final var userResource = enterpriseResourceServiceRpcClient.getUserResources(
operatorLoginInfo.getEnterpriseId(), operatorLoginInfo.getId());
final var userResource = enterpriseResourceServiceRpcClient.getUserResources(operatorLoginInfo.getEnterpriseId(), operatorLoginInfo.getId());
stallIds.addAll(userResource.getStallIdsList());
}
......@@ -77,6 +76,8 @@ public class KdsServiceImpl implements KdsService {
.mealTimeStart(todayZero)
.shouldFilterMealTimeEnd(true)
.mealTimeEnd(tomorrowZero)
.shouldFilterPayStatus(true)
.payStatus(PayStatusEnum.SUCCEED)
.build();
final var orderList = orderServiceRpcClient.getOrdersByCondition(queryOrderDto);
List<Integer> orderIds = orderList.stream()
......@@ -309,6 +310,8 @@ public class KdsServiceImpl implements KdsService {
.mealTimeEnd(tomorrowZero)
.shouldFilterStatus(true)
.status(queryDto.getOrderStatus())
.shouldFilterPayStatus(true)
.payStatus(PayStatusEnum.SUCCEED)
.build();
final var orderList = orderServiceRpcClient.getOrdersByCondition(queryOrderDto);
......