From 71a0235a576f96adc37d62c1056fd74a593dc4fa Mon Sep 17 00:00:00 2001
From: shinnosuke <tantao@1hoper.com>
Date: 星期一, 24 八月 2026 14:12:27 +0800
Subject: [PATCH] feat: adapt fuel stores and medical product audit details
---
talent-card-server/src/main/java/com/talentcard/server/business/admin/AdminBusinessService.java | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 52 insertions(+), 1 deletions(-)
diff --git a/talent-card-server/src/main/java/com/talentcard/server/business/admin/AdminBusinessService.java b/talent-card-server/src/main/java/com/talentcard/server/business/admin/AdminBusinessService.java
index 4a5304f..d199cb3 100644
--- a/talent-card-server/src/main/java/com/talentcard/server/business/admin/AdminBusinessService.java
+++ b/talent-card-server/src/main/java/com/talentcard/server/business/admin/AdminBusinessService.java
@@ -322,7 +322,7 @@
merchant.logo_url, merchant.cover_url, merchant.address, merchant.business_status, merchant.longitude,
merchant.latitude, merchant.can_login_merchant_app, merchant.group_buying_enabled, merchant.usage_instructions,
merchant.rights_text, merchant.merchant_rights_config, merchant.service_label, merchant.is_recommend,
- merchant.sort_no, merchant.status, merchant.created_at, merchant.updated_at,
+ merchant.sort_no, merchant.status, merchant.created_at, merchant.updated_at, merchant.merchant_type_code,
s.external_link_type as car_wash_external_link_type,
s.external_mini_program_app_id as car_wash_external_mini_program_app_id,
s.external_mini_program_path as car_wash_external_mini_program_path,
@@ -340,6 +340,14 @@
where merchant_id = ?
order by sort_no, id
""", id)));
+ if ("fuel".equals(String.valueOf(result.get("merchantTypeCode")))) {
+ result.put("applicableStores", DatabaseRows.normalize(jdbcTemplate.queryForList("""
+ select id, store_name, address, longitude, latitude
+ from transport_fuel_store
+ where merchant_id = ? and deleted = 0 and enabled = 1
+ order by sort_no asc, id asc
+ """, id)));
+ }
return result;
}
@@ -388,6 +396,7 @@
Long id = jdbcTemplate.queryForObject("select last_insert_id()", Long.class);
ensureParkingBenefit(id, merchantType.code());
ensureFuelBenefit(id, merchantType.code(), request.serviceLabel());
+ syncFuelStores(id, merchantType.code(), request.applicableStores());
syncPremiumTopicMerchant(id, merchantType, request.sortNo());
Long storeId = createDefaultStore(id, request.merchantName(), request.address());
syncMerchantBusinessHours(id, storeId, request.businessHours());
@@ -532,6 +541,7 @@
ensureUpdated(updated);
ensureParkingBenefit(id, merchantType.code());
ensureFuelBenefit(id, merchantType.code(), request.serviceLabel());
+ syncFuelStores(id, merchantType.code(), request.applicableStores());
syncPremiumTopicMerchant(id, merchantType, request.sortNo());
Long storeId = findOrCreateDefaultStore(id, request.merchantName(), request.address());
syncMerchantBusinessHours(id, storeId, request.businessHours());
@@ -595,6 +605,47 @@
""", merchantId, discountText, merchantId);
}
+ private void syncFuelStores(Long merchantId, String merchantType, List<Map<String, Object>> stores) {
+ if (!"fuel".equals(merchantType) || stores == null) return;
+ List<Map<String, Object>> normalized = new ArrayList<>();
+ Set<String> names = new HashSet<>();
+ for (Map<String, Object> store : stores) {
+ if (store == null) continue;
+ Object nameValue = store.containsKey("storeName") ? store.get("storeName") : store.get("name");
+ String name = nameValue == null ? "" : String.valueOf(nameValue).trim();
+ Object addressValue = store.get("address");
+ String address = addressValue == null ? "" : String.valueOf(addressValue).trim();
+ if (name.isBlank() || address.isBlank()) throw new BusinessException(ErrorCode.BAD_REQUEST, "请完善适用门店名称和地址");
+ if (!names.add(name)) throw new BusinessException(ErrorCode.BAD_REQUEST, "适用门店名称不能重复");
+ Double longitude = numberValue(store.get("longitude"));
+ Double latitude = numberValue(store.get("latitude"));
+ if (longitude == null || longitude < -180 || longitude > 180 || latitude == null || latitude < -90 || latitude > 90
+ || (longitude == 0 && latitude == 0)) {
+ throw new BusinessException(ErrorCode.BAD_REQUEST, "请完成所有适用门店的标点");
+ }
+ Map<String, Object> item = new LinkedHashMap<>();
+ item.put("name", name);
+ item.put("address", address);
+ item.put("longitude", longitude);
+ item.put("latitude", latitude);
+ normalized.add(item);
+ }
+ jdbcTemplate.update("delete from transport_fuel_store where merchant_id = ?", merchantId);
+ for (int index = 0; index < normalized.size(); index++) {
+ Map<String, Object> store = normalized.get(index);
+ jdbcTemplate.update("""
+ insert into transport_fuel_store(merchant_id, store_name, address, longitude, latitude, sort_no, enabled, deleted)
+ values (?, ?, ?, ?, ?, ?, 1, 0)
+ """, merchantId, store.get("name"), store.get("address"), store.get("longitude"), store.get("latitude"), (index + 1) * 10);
+ }
+ }
+
+ private Double numberValue(Object value) {
+ if (value instanceof Number number) return number.doubleValue();
+ try { return value == null ? null : Double.valueOf(String.valueOf(value)); }
+ catch (NumberFormatException ignored) { return null; }
+ }
+
private void syncPremiumTopicMerchant(Long merchantId, MerchantType merchantType, Integer sortNo) {
if (merchantType.premiumCategoryKey() == null || merchantType.premiumBusinessType() == null) {
jdbcTemplate.update("update premium_topic_merchant set deleted = 1 where merchant_id = ? and deleted = 0", merchantId);
--
Gitblit v1.7.1