| | |
| | | if (!Set.of("景区服务", "餐饮服务").contains(request.merchantType())) { |
| | | return; |
| | | } |
| | | if (request.businessHours() == null || request.businessHours().isEmpty() |
| | | || request.businessHours().stream().anyMatch(item -> item.startTime() == null || item.endTime() == null |
| | | || item.startTime().isBlank() || item.endTime().isBlank() || item.startTime().equals(item.endTime()))) { |
| | | throw new BusinessException(ErrorCode.BAD_REQUEST, "请选择有效的营业时间"); |
| | | } |
| | | if (request.loginAccount() == null || !request.loginAccount().trim().matches("^[A-Za-z0-9]{1,32}$")) { |
| | | throw new BusinessException(ErrorCode.BAD_REQUEST, "商户登录账号只能包含英文字母和数字"); |
| | | } |
| | |
| | | |
| | | private void syncMerchantBusinessHours(Long merchantId, Long storeId, List<MerchantBusinessHourRequest> businessHours) { |
| | | if (businessHours == null) return; |
| | | jdbcTemplate.update("delete from merchant_business_hours where merchant_id = ? and store_id = ?", merchantId, storeId); |
| | | if (businessHours.isEmpty()) { |
| | | throw new BusinessException(ErrorCode.BAD_REQUEST, "请至少配置一个营业时间段"); |
| | | return; |
| | | } |
| | | if (businessHours.stream().anyMatch(item -> item.startTime().equals(item.endTime()))) { |
| | | throw new BusinessException(ErrorCode.BAD_REQUEST, "营业开始时间和结束时间不能相同"); |
| | | } |
| | | jdbcTemplate.update("delete from merchant_business_hours where merchant_id = ? and store_id = ?", merchantId, storeId); |
| | | for (int index = 0; index < businessHours.size(); index++) { |
| | | MerchantBusinessHourRequest item = businessHours.get(index); |
| | | jdbcTemplate.update(""" |
| | |
| | | where s.status = 1 and s.deleted = 0 and h.merchant_id in (""" + placeholders + ")", merchantIds.toArray())); |
| | | LocalTime now = LocalTime.now(ZoneId.of("Asia/Shanghai")); |
| | | Set<Long> openMerchantIds = new HashSet<>(); |
| | | Set<Long> merchantsWithBusinessHours = new HashSet<>(); |
| | | for (Map<String, Object> period : periods) { |
| | | Long merchantId = Long.valueOf(String.valueOf(period.get("merchantId"))); |
| | | merchantsWithBusinessHours.add(merchantId); |
| | | if (isWithinBusinessPeriod(now, String.valueOf(period.get("startTime")), String.valueOf(period.get("endTime")))) { |
| | | openMerchantIds.add(Long.valueOf(String.valueOf(period.get("merchantId")))); |
| | | openMerchantIds.add(merchantId); |
| | | } |
| | | } |
| | | for (Map<String, Object> merchant : merchants) { |
| | | Long merchantId = Long.valueOf(String.valueOf(merchant.get("id"))); |
| | | boolean enabled = "1".equals(String.valueOf(merchant.get("status"))); |
| | | merchant.put("businessStatus", enabled && openMerchantIds.contains(merchantId) ? "营业中" : "休息中"); |
| | | boolean open = !merchantsWithBusinessHours.contains(merchantId) || openMerchantIds.contains(merchantId); |
| | | merchant.put("businessStatus", enabled && open ? "营业中" : "休息中"); |
| | | } |
| | | } |
| | | |