Showing
3 changed files
with
27 additions
and
4 deletions
| ... | @@ -17,6 +17,8 @@ import lombok.NoArgsConstructor; | ... | @@ -17,6 +17,8 @@ import lombok.NoArgsConstructor; |
| 17 | import lombok.ToString; | 17 | import lombok.ToString; |
| 18 | 18 | ||
| 19 | import javax.validation.Valid; | 19 | import javax.validation.Valid; |
| 20 | +import javax.validation.constraints.NotEmpty; | ||
| 21 | +import javax.validation.constraints.NotNull; | ||
| 20 | import java.time.LocalDateTime; | 22 | import java.time.LocalDateTime; |
| 21 | import java.util.ArrayList; | 23 | import java.util.ArrayList; |
| 22 | import java.util.List; | 24 | import java.util.List; |
| ... | @@ -206,15 +208,19 @@ public class OrderDbDTO { | ... | @@ -206,15 +208,19 @@ public class OrderDbDTO { |
| 206 | 208 | ||
| 207 | @RequestKeyParam | 209 | @RequestKeyParam |
| 208 | @ApiModelProperty(value = "档口 ID") | 210 | @ApiModelProperty(value = "档口 ID") |
| 211 | + @NotNull(message = "档口 ID不能为空") | ||
| 209 | private Integer stallId; | 212 | private Integer stallId; |
| 210 | 213 | ||
| 211 | @ApiModelProperty(value = "客户 ID") | 214 | @ApiModelProperty(value = "客户 ID") |
| 215 | + @NotNull(message = "客户 ID不能为空") | ||
| 212 | private Integer customerId; | 216 | private Integer customerId; |
| 213 | 217 | ||
| 214 | @ApiModelProperty(value = "餐单 id") | 218 | @ApiModelProperty(value = "餐单 id") |
| 219 | + @NotNull(message = "餐单 id不能为空") | ||
| 215 | private Integer menuId; | 220 | private Integer menuId; |
| 216 | 221 | ||
| 217 | @ApiModelProperty(value = "用餐日期") | 222 | @ApiModelProperty(value = "用餐日期") |
| 223 | + @NotNull(message = "用餐日期不能为空") | ||
| 218 | private LocalDateTime mealTime; | 224 | private LocalDateTime mealTime; |
| 219 | 225 | ||
| 220 | @ApiModelProperty(value = "桌号") | 226 | @ApiModelProperty(value = "桌号") |
| ... | @@ -224,9 +230,11 @@ public class OrderDbDTO { | ... | @@ -224,9 +230,11 @@ public class OrderDbDTO { |
| 224 | private String remark; | 230 | private String remark; |
| 225 | 231 | ||
| 226 | @ApiModelProperty(value = "支付方式") | 232 | @ApiModelProperty(value = "支付方式") |
| 233 | + @NotNull(message = "支付方式不能为空") | ||
| 227 | private OnlinePayEnum onlinePay; | 234 | private OnlinePayEnum onlinePay; |
| 228 | 235 | ||
| 229 | @ApiModelProperty(value = "订单菜品详情列表") | 236 | @ApiModelProperty(value = "订单菜品详情列表") |
| 237 | + @NotEmpty(message = "订单菜品详情列表不能为空") | ||
| 230 | private List<OperatorCreateOrderDetailDto> orderDetailDtos; | 238 | private List<OperatorCreateOrderDetailDto> orderDetailDtos; |
| 231 | } | 239 | } |
| 232 | 240 | ||
| ... | @@ -240,10 +248,12 @@ public class OrderDbDTO { | ... | @@ -240,10 +248,12 @@ public class OrderDbDTO { |
| 240 | private Integer enterpriseId; | 248 | private Integer enterpriseId; |
| 241 | 249 | ||
| 242 | @ApiModelProperty(value = "院区 ID") | 250 | @ApiModelProperty(value = "院区 ID") |
| 251 | + @NotNull(message = "院区 ID不能为空") | ||
| 243 | private Integer clientId; | 252 | private Integer clientId; |
| 244 | 253 | ||
| 245 | @RequestKeyParam | 254 | @RequestKeyParam |
| 246 | @ApiModelProperty(value = "档口 ID") | 255 | @ApiModelProperty(value = "档口 ID") |
| 256 | + @NotNull(message = "档口 ID不能为空") | ||
| 247 | private Integer stallId; | 257 | private Integer stallId; |
| 248 | 258 | ||
| 249 | @ApiModelProperty(value = "需要创建客户 ID") | 259 | @ApiModelProperty(value = "需要创建客户 ID") |
| ... | @@ -256,6 +266,7 @@ public class OrderDbDTO { | ... | @@ -256,6 +266,7 @@ public class OrderDbDTO { |
| 256 | private Integer status; | 266 | private Integer status; |
| 257 | 267 | ||
| 258 | @ApiModelProperty(value = "餐单 id") | 268 | @ApiModelProperty(value = "餐单 id") |
| 269 | + @NotNull(message = "餐单 id不能为空") | ||
| 259 | private Integer menuId; | 270 | private Integer menuId; |
| 260 | 271 | ||
| 261 | @ApiModelProperty(value = "订单商品总数") | 272 | @ApiModelProperty(value = "订单商品总数") |
| ... | @@ -265,6 +276,7 @@ public class OrderDbDTO { | ... | @@ -265,6 +276,7 @@ public class OrderDbDTO { |
| 265 | private Integer payPrice; | 276 | private Integer payPrice; |
| 266 | 277 | ||
| 267 | @ApiModelProperty(value = "支付方式") | 278 | @ApiModelProperty(value = "支付方式") |
| 279 | + @NotNull(message = "支付方式不能为空") | ||
| 268 | private OnlinePayEnum onlinePay; | 280 | private OnlinePayEnum onlinePay; |
| 269 | 281 | ||
| 270 | @ApiModelProperty(value = "支付时间") | 282 | @ApiModelProperty(value = "支付时间") |
| ... | @@ -280,6 +292,7 @@ public class OrderDbDTO { | ... | @@ -280,6 +292,7 @@ public class OrderDbDTO { |
| 280 | private String transactionId; | 292 | private String transactionId; |
| 281 | 293 | ||
| 282 | @ApiModelProperty(value = "用餐日期") | 294 | @ApiModelProperty(value = "用餐日期") |
| 295 | + @NotNull(message = "用餐日期不能为空") | ||
| 283 | private LocalDateTime mealTime; | 296 | private LocalDateTime mealTime; |
| 284 | 297 | ||
| 285 | @ApiModelProperty(value = "订餐地址") | 298 | @ApiModelProperty(value = "订餐地址") |
| ... | @@ -309,7 +322,6 @@ public class OrderDbDTO { | ... | @@ -309,7 +322,6 @@ public class OrderDbDTO { |
| 309 | @ApiModelProperty(value = "修改人 ID,修改人可能是院区端登陆的用户,也可能是 KDS 端登陆用户") | 322 | @ApiModelProperty(value = "修改人 ID,修改人可能是院区端登陆的用户,也可能是 KDS 端登陆用户") |
| 310 | private Integer updatedBy; | 323 | private Integer updatedBy; |
| 311 | 324 | ||
| 312 | - | ||
| 313 | @ApiModelProperty(value = "更新来源:小程序点餐=1;院区端=2;kds=3;业务中台 = 4") | 325 | @ApiModelProperty(value = "更新来源:小程序点餐=1;院区端=2;kds=3;业务中台 = 4") |
| 314 | private Integer updateSource; | 326 | private Integer updateSource; |
| 315 | 327 | ||
| ... | @@ -317,6 +329,7 @@ public class OrderDbDTO { | ... | @@ -317,6 +329,7 @@ public class OrderDbDTO { |
| 317 | private CloseTimeType closeTimeType; | 329 | private CloseTimeType closeTimeType; |
| 318 | 330 | ||
| 319 | @ApiModelProperty(value = "订单菜品详情列表") | 331 | @ApiModelProperty(value = "订单菜品详情列表") |
| 332 | + @NotEmpty(message = "订单菜品详情列表不能为空") | ||
| 320 | private List<CreateOrderDetailDto> orderDetailDtos; | 333 | private List<CreateOrderDetailDto> orderDetailDtos; |
| 321 | } | 334 | } |
| 322 | 335 | ... | ... |
| ... | @@ -24,7 +24,7 @@ import java.util.stream.Collectors; | ... | @@ -24,7 +24,7 @@ import java.util.stream.Collectors; |
| 24 | public class WebSocketServer extends TextWebSocketHandler { | 24 | public class WebSocketServer extends TextWebSocketHandler { |
| 25 | 25 | ||
| 26 | private static final ConcurrentHashMap<UserSessionKey, UserSessionData> userSessions = new ConcurrentHashMap<>(); | 26 | private static final ConcurrentHashMap<UserSessionKey, UserSessionData> userSessions = new ConcurrentHashMap<>(); |
| 27 | - private static final long INACTIVITY_TIMEOUT = 2 * 60 * 60 * 1000; | 27 | + private static final long INACTIVITY_TIMEOUT = 60 * 60 * 1000; |
| 28 | private static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); | 28 | private static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); |
| 29 | 29 | ||
| 30 | static { | 30 | static { |
| ... | @@ -34,6 +34,7 @@ public class WebSocketServer extends TextWebSocketHandler { | ... | @@ -34,6 +34,7 @@ public class WebSocketServer extends TextWebSocketHandler { |
| 34 | private static void cleanInactiveSessions() { | 34 | private static void cleanInactiveSessions() { |
| 35 | final var currentTime = System.currentTimeMillis(); | 35 | final var currentTime = System.currentTimeMillis(); |
| 36 | final var iterator = userSessions.entrySet().iterator(); | 36 | final var iterator = userSessions.entrySet().iterator(); |
| 37 | + log.info("cleanInactiveSessions; sessions:{}", userSessions.keySet()); | ||
| 37 | while (iterator.hasNext()) { | 38 | while (iterator.hasNext()) { |
| 38 | final var entry = iterator.next(); | 39 | final var entry = iterator.next(); |
| 39 | final var key = entry.getKey(); | 40 | final var key = entry.getKey(); |
| ... | @@ -108,8 +109,17 @@ public class WebSocketServer extends TextWebSocketHandler { | ... | @@ -108,8 +109,17 @@ public class WebSocketServer extends TextWebSocketHandler { |
| 108 | public void afterConnectionEstablished(WebSocketSession session) { | 109 | public void afterConnectionEstablished(WebSocketSession session) { |
| 109 | final var key = getUserSessionKey(session); | 110 | final var key = getUserSessionKey(session); |
| 110 | if (key != null) { | 111 | if (key != null) { |
| 112 | + final var existingSession = userSessions.remove(key); | ||
| 113 | + if (existingSession != null) { | ||
| 114 | + try { | ||
| 115 | + existingSession.closeSession(); | ||
| 116 | + log.info("WebSocket old connect closed,userId : {}, userType : {}", key.getUserId(), key.getUserType()); | ||
| 117 | + } catch (IOException e) { | ||
| 118 | + log.error("old WebSocket close failed,userId : {}, userType : {}", key.getUserId(), key.getUserType(), e); | ||
| 119 | + } | ||
| 120 | + } | ||
| 111 | userSessions.put(key, new UserSessionData(session)); | 121 | userSessions.put(key, new UserSessionData(session)); |
| 112 | - log.info("WebSocket connect success: userId : {}, userType : {}", key.getUserId(), key.getUserType()); | 122 | + log.info("WebSocket connect success, userId : {}, userType : {}", key.getUserId(), key.getUserType()); |
| 113 | } else { | 123 | } else { |
| 114 | log.warn("WebSocket connect failed,unable to get valid user information"); | 124 | log.warn("WebSocket connect failed,unable to get valid user information"); |
| 115 | } | 125 | } | ... | ... |
| ... | @@ -609,7 +609,7 @@ public class OrderServiceRpcClient { | ... | @@ -609,7 +609,7 @@ public class OrderServiceRpcClient { |
| 609 | .type(MessageTypeEnum.ORDER) | 609 | .type(MessageTypeEnum.ORDER) |
| 610 | .noticeType(NoticeTypeEnum.ORDER_CREATED) | 610 | .noticeType(NoticeTypeEnum.ORDER_CREATED) |
| 611 | .subject(NoticeTypeEnum.ORDER_CREATED.getDescription()) | 611 | .subject(NoticeTypeEnum.ORDER_CREATED.getDescription()) |
| 612 | - .message("您下单成功啦,快去查看吧~") | 612 | + .message("有新的订单下单成功啦,快去查看吧~") |
| 613 | .data(orderCreateSuccessData) | 613 | .data(orderCreateSuccessData) |
| 614 | .build(); | 614 | .build(); |
| 615 | try { | 615 | try { | ... | ... |
-
Please register or login to post a comment