From bfdd1dd0793122c0821e38f03b5d8f4b9a933180 Mon Sep 17 00:00:00 2001 From: wangff Date: Wed, 29 Oct 2025 19:29:42 +0800 Subject: [PATCH 01/27] =?UTF-8?q?fix:=E6=96=B0=E5=A2=9E=E4=B8=89=E6=98=8E?= =?UTF-8?q?=E6=B2=BB=E6=B5=81=E7=A8=8B=E7=9B=B8=E5=85=B3=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/cool/store/utils/CommonUtil.java | 25 +++++++++++++++++++ .../com/cool/store/entity/FranchiseFeeDO.java | 4 +++ .../com/cool/store/entity/OrderSysInfoDO.java | 4 +++ .../store/request/FranchiseFeeRequest.java | 3 +++ .../store/request/OrderSysInfoRequest.java | 3 +++ .../request/xgj/PushFranchiseFeeRequest.java | 16 +++++++----- .../response/BuildInformationResponse.java | 3 +++ .../store/response/FranchiseFeeResponse.java | 4 ++- .../impl/BuildInformationServiceImpl.java | 1 + .../service/impl/OrderSysInfoServiceImpl.java | 1 + .../impl/SignFranchiseServiceImpl.java | 17 +++++++------ 11 files changed, 66 insertions(+), 15 deletions(-) create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/utils/CommonUtil.java diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/CommonUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/CommonUtil.java new file mode 100644 index 000000000..8e27687ff --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/CommonUtil.java @@ -0,0 +1,25 @@ +package com.cool.store.utils; + +import org.apache.commons.lang3.StringUtils; + +import java.math.BigDecimal; + +/** + *

+ * 公告工具 + *

+ * + * @author wangff + * @since 2025/10/29 + */ +public class CommonUtil { + public static BigDecimal convertToBig(String value) { + if (StringUtils.isBlank(value)) { + return BigDecimal.ZERO; + } + try { + return new BigDecimal(value); + } catch (Exception ignored) {} + return BigDecimal.ZERO; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/FranchiseFeeDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/FranchiseFeeDO.java index e1bb2f98c..648836e45 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/FranchiseFeeDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/FranchiseFeeDO.java @@ -72,4 +72,8 @@ public class FranchiseFeeDO { @ApiModelProperty("新管家已缴金额") private BigDecimal xgjFeesPaid; + @Column(name = "cashier_fee") + @ApiModelProperty("收银费(系统费)") + private String cashierFee; + } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/OrderSysInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/OrderSysInfoDO.java index fcf946e2d..1c24e6dbe 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/OrderSysInfoDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/OrderSysInfoDO.java @@ -117,4 +117,8 @@ public class OrderSysInfoDO { /** 总部订货收款修改人 */ @Column(name = "receiving_update_user") private String receivingUpdateUser; + + /** 订货方式,0先款后货、1先货后款 */ + @Column(name = "order_type") + private Integer orderType; } \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/FranchiseFeeRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/FranchiseFeeRequest.java index d5c9f3395..c0ec45835 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/FranchiseFeeRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/FranchiseFeeRequest.java @@ -44,6 +44,8 @@ public class FranchiseFeeRequest { @ApiModelProperty("加盟费优惠原因") private String discountReason; + @ApiModelProperty("收银费(系统费)(三明治使用)") + private String cashierFee; public FranchiseFeeDO toFranchiseFeeDO() { FranchiseFeeDO franchiseFeeDO = new FranchiseFeeDO(); @@ -63,6 +65,7 @@ public class FranchiseFeeRequest { franchiseFeeDO.setThirdYearFee(this.thirdYearFee); franchiseFeeDO.setPerformanceBond(this.performanceBond); franchiseFeeDO.setDiscountReason(this.discountReason); + franchiseFeeDO.setCashierFee(this.cashierFee); return franchiseFeeDO; } } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/OrderSysInfoRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/OrderSysInfoRequest.java index 1bbcbcb80..3ab9463f7 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/OrderSysInfoRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/OrderSysInfoRequest.java @@ -94,6 +94,9 @@ public class OrderSysInfoRequest { @ApiModelProperty(value = "总部订货收款修改人" ) private String receivingUpdateUser; + + @ApiModelProperty("订货方式,0先款后货、1先货后款") + private Integer orderType; public OrderSysInfoDO toOrderSysInfoDO() { OrderSysInfoDO orderSysInfoDO = new OrderSysInfoDO(); diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java index fb150b4e1..ec16f374c 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java @@ -7,6 +7,8 @@ import lombok.Data; import java.math.BigDecimal; import java.util.Date; +import static com.cool.store.utils.CommonUtil.convertToBig; + /** * @Author suzhuhong * @Date 2025/6/3 16:52 @@ -50,16 +52,18 @@ public class PushFranchiseFeeRequest { this.setShopId(shopId); this.setPartnerName(partnerName); this.setBillId(franchiseFeeDO.getId().intValue()); - this.setFranchiseFee(new BigDecimal(franchiseFeeDO.getYearFranchiseFee())); - this.setBond(new BigDecimal(franchiseFeeDO.getLoanMargin())); - this.setFirstYearManageFee(new BigDecimal(franchiseFeeDO.getFirstYearManageFee())); - this.setFirstYearFee(new BigDecimal(franchiseFeeDO.getFirstYearFee())); - this.setDesignFee(new BigDecimal(franchiseFeeDO.getPerformanceBond())); + this.setFranchiseFee(convertToBig(franchiseFeeDO.getYearFranchiseFee())); + this.setBond(convertToBig(franchiseFeeDO.getLoanMargin())); + this.setFirstYearManageFee(convertToBig(franchiseFeeDO.getFirstYearManageFee())); + this.setFirstYearFee(convertToBig(franchiseFeeDO.getFirstYearFee())); + this.setDesignFee(convertToBig(franchiseFeeDO.getPerformanceBond())); + this.setFranchiseFee(convertToBig(franchiseFeeDO.getCashierFee())); this.setTotalFee(this.getBond() .add(this.getFranchiseFee()) .add(this.getFirstYearManageFee()) .add(this.getFirstYearFee()) - .add(this.getDesignFee())); + .add(this.getDesignFee()) + .add(this.getFranchiseFee())); this.setCreateTime(franchiseFeeDO.getCreateTime()); } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/BuildInformationResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/BuildInformationResponse.java index f0795f6e0..9e3a1fd1f 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/response/BuildInformationResponse.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/BuildInformationResponse.java @@ -206,4 +206,7 @@ public class BuildInformationResponse { @ApiModelProperty(value = "建店资料当前阶段状态") private Integer shopSubStageStatus; + + @ApiModelProperty("订货方式,0先款后货、1先货后款") + private Integer orderType; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/FranchiseFeeResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/FranchiseFeeResponse.java index 0decbfc60..aedd7e18c 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/response/FranchiseFeeResponse.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/FranchiseFeeResponse.java @@ -63,7 +63,8 @@ public class FranchiseFeeResponse { @ApiModelProperty("新管家已缴金额") private BigDecimal xgjFeesPaid; - + @ApiModelProperty("收银费(系统费)") + private String cashierFee; @Data public static class LinePay{ @@ -200,6 +201,7 @@ public class FranchiseFeeResponse { franchiseFeeResponse.setXgjCollectionStatus(franchiseFeeDO.getXgjCollectionStatus()); franchiseFeeResponse.setXgjRemainderPayableAmount(franchiseFeeDO.getXgjRemainderPayableAmount()); franchiseFeeResponse.setXgjFeesPaid(franchiseFeeDO.getXgjFeesPaid()); + franchiseFeeResponse.setCashierFee(franchiseFeeDO.getCashierFee()); return franchiseFeeResponse; } } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/BuildInformationServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/BuildInformationServiceImpl.java index acd630ce4..ea175790d 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/BuildInformationServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/BuildInformationServiceImpl.java @@ -213,6 +213,7 @@ public class BuildInformationServiceImpl implements BuildInformationService { response.setReceivingMsBankAccount(orderSysInfoDO.getReceivingMsBankAccount()); response.setReceivingMsBankBranch(orderSysInfoDO.getReceivingMsBankBranch()); response.setBankUnionPayAccount(orderSysInfoDO.getBankUnionPayAccount()); + response.setOrderType(orderSysInfoDO.getOrderType()); WarehouseInfoDO warehouseInfoDO = warehouseInfoMapper.getByCode(orderSysInfoDO.getDeclareGoodsLogisticsWarehouse()); if (Objects.nonNull(warehouseInfoDO)) { response.setDeclareGoodsLogisticsWarehouseName(warehouseInfoDO.getWarehouseName()); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OrderSysInfoServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OrderSysInfoServiceImpl.java index 20778e775..e95ba45a2 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OrderSysInfoServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/OrderSysInfoServiceImpl.java @@ -143,6 +143,7 @@ public class OrderSysInfoServiceImpl implements OrderSysInfoService { orderSysInfoDO.setReceivingMsBankAccount(request.getReceivingMsBankAccount()); orderSysInfoDO.setReceivingMsBankBranch(request.getReceivingMsBankBranch()); orderSysInfoDO.setBankUnionPayAccount(request.getBankUnionPayAccount()); + orderSysInfoDO.setOrderType(request.getOrderType()); if (shopSubStageInfo.getShopSubStageStatus().equals(SHOP_SUB_STAGE_STATUS_152.getShopSubStageStatus())) { if (orderSysInfoDO.getReceivingCreateTime() == null) { orderSysInfoDO.setReceivingCreateTime(new Date()); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java index 96305a297..6ee49e3d4 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java @@ -36,6 +36,7 @@ import java.util.stream.Collectors; import static com.cool.store.enums.UserRoleEnum.*; import static com.cool.store.enums.point.ShopSubStageStatusEnum.*; +import static com.cool.store.utils.CommonUtil.convertToBig; @Service @Slf4j @@ -554,11 +555,11 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu } else { if (Objects.nonNull(franchiseFeeDO)) { - BigDecimal total = new BigDecimal(franchiseFeeDO.getYearFranchiseFee()) - .add(new BigDecimal(franchiseFeeDO.getLoanMargin())) - .add(new BigDecimal(franchiseFeeDO.getFirstYearFee())) - .add(new BigDecimal(franchiseFeeDO.getFirstYearManageFee())) - .add(new BigDecimal(franchiseFeeDO.getPerformanceBond())); + BigDecimal total = convertToBig(franchiseFeeDO.getYearFranchiseFee()) + .add(convertToBig(franchiseFeeDO.getLoanMargin())) + .add(convertToBig(franchiseFeeDO.getFirstYearFee())) + .add(convertToBig(franchiseFeeDO.getFirstYearManageFee())) + .add(convertToBig(franchiseFeeDO.getPerformanceBond())); addSignFranchiseResponse.setContractAmount(total.toString()); } addSignFranchiseResponse.setMobile(lineInfoDO.getMobile()); @@ -611,9 +612,9 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu if (Objects.nonNull(franchiseFeeDO)) { addSignFranchiseResponse.setYearFranchiseFee(franchiseFeeDO.getYearFranchiseFee()); - addSignFranchiseResponse.setBigYearFranchiseFee(Convert.digitToChinese(new BigDecimal(franchiseFeeDO.getYearFranchiseFee()))); + addSignFranchiseResponse.setBigYearFranchiseFee(Convert.digitToChinese(convertToBig(franchiseFeeDO.getYearFranchiseFee()))); addSignFranchiseResponse.setLoanMargin(franchiseFeeDO.getLoanMargin()); - addSignFranchiseResponse.setBigLoanMargin(Convert.digitToChinese(new BigDecimal(franchiseFeeDO.getLoanMargin()))); + addSignFranchiseResponse.setBigLoanMargin(Convert.digitToChinese(convertToBig(franchiseFeeDO.getLoanMargin()))); addSignFranchiseResponse.setFirstYearStartTime(franchiseFeeDO.getFirstYearStartTime()); addSignFranchiseResponse.setFirstYearEndTime(franchiseFeeDO.getFirstYearEndTime()); addSignFranchiseResponse.setFirstYearFee(franchiseFeeDO.getFirstYearFee()); @@ -625,7 +626,7 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu addSignFranchiseResponse.setThirdYearEndTime(franchiseFeeDO.getThirdYearEndTime()); addSignFranchiseResponse.setThirdYearFee(franchiseFeeDO.getThirdYearFee()); addSignFranchiseResponse.setPerformanceBond(franchiseFeeDO.getPerformanceBond()); - addSignFranchiseResponse.setBigPerformanceBond(Convert.digitToChinese(new BigDecimal(franchiseFeeDO.getPerformanceBond()))); + addSignFranchiseResponse.setBigPerformanceBond(Convert.digitToChinese(convertToBig(franchiseFeeDO.getPerformanceBond()))); } return addSignFranchiseResponse; } From f29166f43bcb51aff4bd551d996df34c659cd1a9 Mon Sep 17 00:00:00 2001 From: wangff Date: Thu, 30 Oct 2025 14:13:17 +0800 Subject: [PATCH 02/27] =?UTF-8?q?fix:=E5=8E=BB=E9=99=A4=E4=B8=89=E6=98=8E?= =?UTF-8?q?=E6=B2=BB=E9=97=A8=E5=BA=97=E6=8F=90=E4=BA=A4=E6=80=BB=E9=83=A8?= =?UTF-8?q?=E8=AE=A2=E8=B4=A7=E6=94=B6=E6=AC=BE=E8=B4=A6=E6=88=B7=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=8F=82=E6=95=B0=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/cool/store/request/OrderSysInfoRequest.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/OrderSysInfoRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/OrderSysInfoRequest.java index 3ab9463f7..d553473bc 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/OrderSysInfoRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/OrderSysInfoRequest.java @@ -1,5 +1,6 @@ package com.cool.store.request; +import com.cool.store.constants.CommonConstants; import com.cool.store.entity.OrderSysInfoDO; import com.cool.store.enums.JoinModeEnum; import com.cool.store.enums.OrderSysTypeEnum; @@ -134,7 +135,10 @@ public class OrderSysInfoRequest { if (Objects.equals(joinMode, JoinModeEnum.FLAGSHIP_STORE.getCode())&&this.shopCode!=null){ return true; } - if (StringUtils.isAnyBlank(this.receivingFirmName,this.receivingMsBankAccount,this.receivingMsBankBranch,this.bankUnionPayAccount,this.shopCode)){ + if (StringUtils.isBlank(this.shopCode)) { + return false; + } + if (!CommonConstants.INDEX_ONE.equals(this.orderType) && StringUtils.isAnyBlank(this.receivingFirmName,this.receivingMsBankAccount,this.receivingMsBankBranch,this.bankUnionPayAccount)){ return false; } } From e10525ceddf217c8fe251353945b3beed292b5db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Wed, 5 Nov 2025 10:04:18 +0800 Subject: [PATCH 03/27] feat:getStoreXinFaDeviceDetail --- .../cool/store/constants/RedisConstant.java | 6 + .../cool/store/utils/BrowserVersionUtils.java | 62 +++ .../cool/store/dto/huoma/HuoMaAccountDTO.java | 39 ++ .../store/dto/huoma/StoreEquipmentDTO.java | 59 +++ .../cool/store/dto/huoma/StoreRequestDTO.java | 40 ++ .../dto/huoma/StoreXinFaDetailRequestDTO.java | 24 ++ .../dto/huoma/StoreXinFaDeviceDetail.java | 74 ++++ .../java/com/cool/store/dto/huoma/TagDTO.java | 29 ++ .../cool/store/dto/huoma/TagDetailDTO.java | 17 + .../service/xinfa/XinFaDeviceService.java | 383 ++++++++++++++++++ .../store/utils/poi/constant/Constants.java | 2 + .../controller/webb/PCTestController.java | 10 + .../main/resources/application-ab.properties | 13 +- .../resources/application-test.properties | 13 + 14 files changed, 770 insertions(+), 1 deletion(-) create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/utils/BrowserVersionUtils.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/HuoMaAccountDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/StoreEquipmentDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/StoreRequestDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/StoreXinFaDetailRequestDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/StoreXinFaDeviceDetail.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/TagDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/TagDetailDTO.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java diff --git a/coolstore-partner-common/src/main/java/com/cool/store/constants/RedisConstant.java b/coolstore-partner-common/src/main/java/com/cool/store/constants/RedisConstant.java index 29f07024f..7dbe943e4 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/constants/RedisConstant.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/constants/RedisConstant.java @@ -283,4 +283,10 @@ public class RedisConstant { public static final String SUBMIT_BUILD_KEY = "submit_build_key_"; public static final String GET_AI_MODULE = "get_ai_module_"; + + public static final String HUOMA_STORE_DEVICE_RESOURCE_KEY = "huoma_store_device_resource"; + + public static final String HUO_MA_STORE_ID = "huo_ma_store_id"; + + public static final String HUO_MA_TOKEN= "huo_ma_token:{0}"; } diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/BrowserVersionUtils.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/BrowserVersionUtils.java new file mode 100644 index 000000000..663a1cd9a --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/BrowserVersionUtils.java @@ -0,0 +1,62 @@ +package com.cool.store.utils; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * @Author suzhuhong + * @Date 2025/11/4 17:34 + * @Version 1.0 + */ +public class BrowserVersionUtils { + + + /** + * 检测是否为旧版Chrome浏览器(版本小于60) + * @param userAgent 浏览器User-Agent字符串 + * @return true-是旧版Chrome,false-不是旧版Chrome + */ + public static boolean isOldChromeBrowser(String userAgent) { + if (userAgent == null || userAgent.isEmpty()) { + return false; + } + + // 检查是否是Chrome浏览器 + if (!userAgent.contains("Chrome")) { + return false; // 不是Chrome浏览器 + } + + // 提取Chrome版本号 + Integer chromeVersion = extractChromeVersion(userAgent); + + if (chromeVersion == null) { + return false; // 无法提取版本号 + } + + // 判断版本是否小于60 + return chromeVersion < 60; + } + + /** + * 从User-Agent中提取Chrome主版本号 + * @param userAgent 浏览器User-Agent字符串 + * @return Chrome主版本号,如果无法提取返回null + */ + public static Integer extractChromeVersion(String userAgent) { + // 正则表达式匹配 Chrome/版本号 模式 + Pattern pattern = Pattern.compile("Chrome/(\\d+)"); + Matcher matcher = pattern.matcher(userAgent); + + if (matcher.find()) { + try { + return Integer.parseInt(matcher.group(1)); + } catch (NumberFormatException e) { + System.err.println("版本号格式错误: " + matcher.group(1)); + return null; + } + } + + return null; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/HuoMaAccountDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/HuoMaAccountDTO.java new file mode 100644 index 000000000..4ccaccdf9 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/HuoMaAccountDTO.java @@ -0,0 +1,39 @@ +package com.cool.store.dto.huoma; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + *

+ * 火码账号DTO + *

+ * + * @author wangff + * @since 2025/9/23 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class HuoMaAccountDTO { + /** + * 账号 + */ + private String account; + + /** + * 密码 + */ + private String password; + + /** + * 是否已查询 + */ + private Boolean isQuery; + + public HuoMaAccountDTO(String account, String password) { + this.account = account; + this.password = password; + this.isQuery = false; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/StoreEquipmentDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/StoreEquipmentDTO.java new file mode 100644 index 000000000..cfae3c530 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/StoreEquipmentDTO.java @@ -0,0 +1,59 @@ +package com.cool.store.dto.huoma; + +import com.cool.store.utils.BrowserVersionUtils; +import lombok.Data; + +import java.util.Objects; + +/** + * @Author: WangShuo + * @Date: 2025/08/13/16:24 + * @Version 1.0 + * @注释: + */ +@Data +public class StoreEquipmentDTO { + /** + * 已授权登录数 + */ + private Integer activeCount; + + /** + * 总设备 + */ + private Integer terminalCount; + + /** + * 网点ID + */ + private Integer pointId; + + /** + * 网点号 + */ + private String pointCode; + + /** + * 签到数 + */ + private Integer signCount; + + /** + * 在线 + */ + + private Integer connectCount; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + StoreEquipmentDTO that = (StoreEquipmentDTO) o; + return Objects.equals(pointCode, that.pointCode); + } + + @Override + public int hashCode() { + return Objects.hashCode(pointCode); + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/StoreRequestDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/StoreRequestDTO.java new file mode 100644 index 000000000..5a22c8095 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/StoreRequestDTO.java @@ -0,0 +1,40 @@ +package com.cool.store.dto.huoma; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/8/18 16:00 + * @Version 1.0 + */ +@Data +public class StoreRequestDTO { + + private String reportCode; + + private Integer index; + + private Integer size; + + private Params params; + + public StoreRequestDTO(String reportCode, Integer index, Integer size, String shopCode) { + this.reportCode = reportCode; + this.index = index; + this.size = size; + this.params = new Params(shopCode); + } + + @Data + static class Params{ + private String inputText_2; + + public Params(String inputText_2) { + this.inputText_2 = inputText_2; + } + } + + + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/StoreXinFaDetailRequestDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/StoreXinFaDetailRequestDTO.java new file mode 100644 index 000000000..4e30a38ef --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/StoreXinFaDetailRequestDTO.java @@ -0,0 +1,24 @@ +package com.cool.store.dto.huoma; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/8/18 16:38 + * @Version 1.0 + */ +@Data +public class StoreXinFaDetailRequestDTO { + + private Integer index; + + private Integer size; + + private Integer pointId; + + public StoreXinFaDetailRequestDTO(Integer index, Integer size, Integer pointId) { + this.index = index; + this.size = size; + this.pointId = pointId; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/StoreXinFaDeviceDetail.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/StoreXinFaDeviceDetail.java new file mode 100644 index 000000000..776d2de3c --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/StoreXinFaDeviceDetail.java @@ -0,0 +1,74 @@ +package com.cool.store.dto.huoma; + +import com.cool.store.utils.BrowserVersionUtils; +import com.cool.store.utils.StringUtil; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/8/18 16:27 + * @Version 1.0 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class StoreXinFaDeviceDetail { + + /** + * 设备ID + */ + @ApiModelProperty(value = "设备ID") + private String deviceId; + + /** + * 设备名称 + */ + @ApiModelProperty(value = "设备名称") + private String name; + + /** + * 设备连接状态 0:未连接 1:已连接 + */ + @ApiModelProperty(value = "设备连接状态 false:未连接 true:已连接") + private Boolean isConnect; + + /** + * 设备总内存 + */ + @ApiModelProperty(value = "设备总内存") + private String totalRam; + + /** + * 设备可用内存 + */ + @ApiModelProperty(value = "设备可用内存") + private String availRam; + + /** + * 设备浏览器信息 + */ + @ApiModelProperty(value = "设备浏览器信息") + private String userAgent; + + /** + * 内用内存小于300M 或者 浏览器版本小于60 + */ + @ApiModelProperty(value = "内用内存小于300M 或者 浏览器版本小于60") + private Boolean flag; + + public boolean getFlag() { + if (StringUtil.isEmpty(availRam)||StringUtil.isEmpty(userAgent)){ + return false; + } + try { + Boolean isOldChromeBrowser = BrowserVersionUtils.isOldChromeBrowser(userAgent); + long availableMemoryMB = Long.parseLong(availRam) / (1024 * 1024); + return availableMemoryMB < 300 || isOldChromeBrowser; + } catch (NumberFormatException e) { + return false; + } + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/TagDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/TagDTO.java new file mode 100644 index 000000000..6752e601a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/TagDTO.java @@ -0,0 +1,29 @@ +package com.cool.store.dto.huoma; + +import io.swagger.models.auth.In; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/5 9:33 + * @Version 1.0 + */ +@Data +public class TagDTO { + + private String channelType; + + private Integer index; + + private Integer size; + + private String type; + + public TagDTO(String channelType, Integer index, Integer size, String type) { + this.channelType = channelType; + this.index = index; + this.size = size; + this.type = type; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/TagDetailDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/TagDetailDTO.java new file mode 100644 index 000000000..896b07378 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/TagDetailDTO.java @@ -0,0 +1,17 @@ +package com.cool.store.dto.huoma; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/5 9:41 + * @Version 1.0 + */ +@Data +public class TagDetailDTO { + + private Integer id; + + private String name; + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java new file mode 100644 index 000000000..b73142e09 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java @@ -0,0 +1,383 @@ +package com.cool.store.service.xinfa; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.constants.RedisConstant; +import com.cool.store.dto.huoma.*; +import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.exception.ServiceException; +import com.cool.store.utils.RedisUtilPool; +import com.cool.store.utils.poi.constant.Constants; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import okhttp3.*; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.NotNull; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.io.IOException; +import java.text.MessageFormat; +import java.util.*; + +/** + * @Author suzhuhong + * @Date 2025/11/4 15:47 + * @Version 1.0 + */ +@Service +@Slf4j +public class XinFaDeviceService { + + @Value("${huoMa.direct.stores.account}") + private String huoMaDirectStoresAccount; + @Value("${huoMa.direct.stores.password}") + private String huoMaDirectStoresPassword; + @Value("${huoMa.franchise.stores.account}") + private String huoMaFranchiseStoresAccount; + @Value("${huoMa.franchise.stores.password}") + private String huoMaFranchiseStoresPassword; + @Value("${huoMa.restaurant.stores.account}") + private String huoMaRestaurantStoresAccount; + @Value("${huoMa.restaurant.stores.password}") + private String huoMaRestaurantStoresPassword; + @Resource + RedisUtilPool redisUtilPool; + @Value("${huoMa.token.url}") + private String huoMaTokenUrl; + @Value("${huoMa.get.point.terminal.url}") + private String huoMaGetPointTerminalUrl; + @Value("${huoMa.id.url}") + private String huoMaGetStoreIdUrl; + @Value("${huoMa.store.device.detail.url}") + private String huoMaGetStoreXinFaDeviceDetailUrl ; + @Value("${huoMa.get.tag.url }") + private String huoMaGetTagUrl; + + + private final Map accountMap = new HashMap<>(); + + @PostConstruct + public void initAccountMap() { + accountMap.put("restaurant", new HuoMaAccountDTO(huoMaRestaurantStoresAccount, huoMaRestaurantStoresPassword)); + accountMap.put("direct", new HuoMaAccountDTO(huoMaDirectStoresAccount, huoMaDirectStoresPassword)); + accountMap.put("franchise", new HuoMaAccountDTO(huoMaFranchiseStoresAccount, huoMaFranchiseStoresPassword)); + } + + public String getStoreToken(String account, String password) { + String key = MessageFormat.format(RedisConstant.HUO_MA_TOKEN, account); + String accessToken = redisUtilPool.getString(key); + if (accessToken != null) { + return accessToken; + } + Map requestBody = new HashMap<>(); + requestBody.put("account", account); + requestBody.put("password", password); + String responseBody = sendPostRequest(JSONObject.toJSONString(requestBody), huoMaTokenUrl); + try{ + ObjectMapper mapper = new ObjectMapper(); + JsonNode rootNode = mapper.readTree(responseBody); + String token = rootNode.path("data").path("token").asText(); + //缓存60秒 + redisUtilPool.setString(key, token,60*60); + return token; + }catch (Exception e){ + log.error("解析获取token失败,url:{},responseBody:{}",huoMaTokenUrl, responseBody); + } + return null; + } + + + public List getStoreEquipmentDataByStoreNumList(List storeNumList, String token) { + Map> requestBody = new HashMap<>(); + requestBody.put("codeList", storeNumList); + String responseBody = sendPostRequestByToken(JSONObject.toJSONString(requestBody), huoMaGetPointTerminalUrl,token); + try{ + ObjectMapper mapper = new ObjectMapper(); + JsonNode rootNode = mapper.readTree(responseBody); + return mapper.convertValue(rootNode.get("data"), + mapper.getTypeFactory().constructCollectionType(List.class, StoreEquipmentDTO.class)); + }catch (Exception e){ + log.error("解析获取data失败,url:{},responseBody:{}",huoMaTokenUrl, responseBody); + } + return Collections.emptyList(); + } + + + + public Integer getStoreIdByStoreNum(String storeNum, String token) { + String houMaStoreId = redisUtilPool.hashGet(RedisConstant.HUO_MA_STORE_ID, storeNum); + if (houMaStoreId != null) { + try { + return Integer.valueOf(houMaStoreId); + } catch (NumberFormatException e) { + // 如果缓存中的数据格式不正确,继续执行正常逻辑 + log.warn("Redis缓存中的门店ID格式不正确,storeNum: {}", storeNum); + } + } + StoreRequestDTO requestBody = new StoreRequestDTO("point_report", 0, 10, storeNum); + String responseBody = sendPostRequestByToken(JSONObject.toJSONString(requestBody), huoMaGetStoreIdUrl,token); + try{ + Integer storeId = extractIdsFromResponse(responseBody); + redisUtilPool.hashSet(RedisConstant.HUO_MA_STORE_ID, storeNum, storeId.toString()); + return storeId; + }catch (Exception e){ + log.error("解析获取data失败,url:{},responseBody:{}",huoMaTokenUrl, responseBody); + } + return null; + } + + + public List getStoreXinFaDeviceDetail(String storeNum) { + String source = redisUtilPool.hashGet(RedisConstant.HUOMA_STORE_DEVICE_RESOURCE_KEY, storeNum); + if (StringUtils.isNotBlank(source)) { + HuoMaAccountDTO huoMaAccountDTO = accountMap.get(source); + if (Objects.nonNull(huoMaAccountDTO)) { + String token = getStoreToken(huoMaAccountDTO.getAccount(), huoMaAccountDTO.getPassword()); + List deviceDetailDetail = getStoreXinFaDeviceDetailDetail(storeNum, token); + if (CollectionUtils.isNotEmpty(deviceDetailDetail)) { + return deviceDetailDetail; + } + } + } + for (Map.Entry entry : accountMap.entrySet()) { + HuoMaAccountDTO huoMaAccountDTO = entry.getValue(); + if (!huoMaAccountDTO.getIsQuery()) { + String token = getStoreToken(huoMaAccountDTO.getAccount(), huoMaAccountDTO.getPassword()); + List deviceDetailDetail = getStoreXinFaDeviceDetailDetail(storeNum, token); + if (CollectionUtils.isNotEmpty(deviceDetailDetail)) { + redisUtilPool.hashSet(RedisConstant.HUOMA_STORE_DEVICE_RESOURCE_KEY, storeNum, entry.getKey(), Constants.REFRESH_TOKEN_EXPIRE); + return deviceDetailDetail; + } + } + } + return Collections.emptyList(); + } + + + public List getStoreXinFaDeviceDetailDetail(String storeNum, String token) { + Integer storeIdByStoreNum = getStoreIdByStoreNum(storeNum, token); + return getStoreXinFaDeviceDetailByPointId(storeIdByStoreNum, token); + } + + + public List getAccountAllTags(String storeNum){ + String source = redisUtilPool.hashGet(RedisConstant.HUOMA_STORE_DEVICE_RESOURCE_KEY, storeNum); + //获取标签 必须要知道门店属于哪个账号下 获取对应账号下的标签 如果获取不到 直接返回空 + if (StringUtils.isEmpty(source)){ + return new ArrayList<>(); + } + HuoMaAccountDTO huoMaAccountDTO = accountMap.get(source); + if (Objects.nonNull(huoMaAccountDTO)){ + huoMaAccountDTO.setIsQuery(true); + String token = getStoreToken(huoMaAccountDTO.getAccount(), huoMaAccountDTO.getPassword()); + return getAccountAllTags(token); + } + + + } + + + public List getStoreXinFaDeviceDetailByPointId(Integer pointId, String token) { + if (pointId != null){ + StoreXinFaDetailRequestDTO storeXinFaDetailRequestDTO = new StoreXinFaDetailRequestDTO(0, 10, pointId); + String responseBody = null; + try{ + responseBody = sendPostRequestByToken(JSONObject.toJSONString(storeXinFaDetailRequestDTO), huoMaGetStoreXinFaDeviceDetailUrl,token); + ObjectMapper mapper = new ObjectMapper(); + JsonNode rootNode = mapper.readTree(responseBody); + + // 直接转换整个数组 + return mapper.convertValue( + rootNode.path("data").path("content"), + mapper.getTypeFactory().constructCollectionType(List.class, StoreXinFaDeviceDetail.class) + ); + }catch (Exception e){ + log.error("getStoreXinFaDeviceDetailByPointId解析获取data失败,url:{},responseBody:{}",huoMaTokenUrl, responseBody); + } + return null; + } + return null; + } + + private Integer extractIdsFromResponse(String jsonResponse) throws IOException { + ObjectMapper mapper = new ObjectMapper(); + JsonNode rootNode = mapper.readTree(jsonResponse); + // 遍历dataList数组提取ID + JsonNode dataList = rootNode.path("data").path("dataList"); + for (JsonNode item : dataList) { + if (item.has("ID")) { + //取出第一个id + return item.get("ID").asInt(); + } + } + return null; + } + + private String sendPostRequest(String requestBody, String requestUrl) { + log.info("开始发送请求,url:{},requestBody:{}", requestUrl, requestBody); + + int maxRetries = 3; + for (int i = 0; i < maxRetries; i++) { + try { + Request request = new Request.Builder() + .url(requestUrl) + .post(RequestBody.create(MediaType.parse("application/json"), requestBody)) + .build(); + + return sendPost(requestUrl, request); + } catch (Exception e) { + log.warn("请求失败,第{}次重试,错误: {}", i + 1, e.getMessage()); + if (i == maxRetries - 1) { + throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, "请求重试失败: " + e.getMessage()); + } + // 重试前等待 + try { + Thread.sleep(1000 * (i + 1)); + } catch (InterruptedException ie) { + Thread.currentThread().interrupt(); + throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, "重试被中断"); + } + } + } + throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, "请求重试失败"); + } + + private String sendPostRequestByToken(String requestBody, String requestUrl, String token) { + log.info("开始发送请求,url:{},requestBody:{}", requestUrl, requestBody); + + int maxRetries = 3; + for (int i = 0; i < maxRetries; i++) { + try { + Request request = new Request.Builder() + .url(requestUrl) + .post(RequestBody.create(MediaType.parse("application/json"), requestBody)) + .addHeader("token", token) + .build(); + + String result = sendPost(requestUrl, request); + + // 检查是否token失效 + if (isTokenExpired(result)) { + log.warn("Token已失效,正在清除缓存并重试,第{}次", i + 1); + // 直接清除对应账号的token缓存 + token = clearAccountTokenCacheForToken(token); + + // 抛出异常触发重试 + throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, "Token失效,需要重试"); + } + + return result; + } catch (ServiceException e) { + log.warn("请求失败,第{}次重试,错误: {}", i + 1, e.getMessage()); + if (i == maxRetries - 1) { + throw e; + } + try { + Thread.sleep(1000 * (i + 1)); + } catch (InterruptedException ie) { + Thread.currentThread().interrupt(); + throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, "重试被中断"); + } + } catch (Exception e) { + log.warn("请求异常,第{}次重试,错误: {}", i + 1, e.getMessage()); + if (i == maxRetries - 1) { + throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, "请求重试失败: " + e.getMessage()); + } + try { + Thread.sleep(1000 * (20*i + 1)); + } catch (InterruptedException ie) { + Thread.currentThread().interrupt(); + throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, "重试被中断"); + } + } + } + throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, "请求重试失败"); + } + + private boolean isTokenExpired(String responseBody) { + try { + ObjectMapper mapper = new ObjectMapper(); + JsonNode rootNode = mapper.readTree(responseBody); + int code = rootNode.path("code").asInt(-1); + String msg = rootNode.path("msg").asText(""); + + return code == 501; + } catch (Exception e) { + log.error("检查token失效状态时发生错误: {}", e.getMessage()); + return false; + } + } + + private String clearAccountTokenCacheForToken(String token) { + try { + // 遍历可能的账号,找到对应的缓存并删除 + String[] accounts = { + huoMaDirectStoresAccount, + huoMaFranchiseStoresAccount, + huoMaRestaurantStoresAccount + }; + + for (String account : accounts) { + if (account != null) { + String key = MessageFormat.format(RedisConstant.HUO_MA_TOKEN, account); + String cachedToken = redisUtilPool.getString(key); + if (token.equals(cachedToken)) { + redisUtilPool.delKey(key); + log.info("已清除账号 {} 的token缓存", account); + + // 根据账号类型获取对应的密码并重新获取token + String password = getPasswordForAccount(account); + if (password != null) { + String newToken = getStoreToken(account, password); + if (newToken != null) { + log.info("已为账号 {} 重新获取新的token", account); + return newToken; + } + } + break; + } + } + } + } catch (Exception e) { + log.error("清除token缓存或重新获取token失败: {}", e.getMessage()); + } + return null; + } + + + private String getPasswordForAccount(String account) { + if (account.equals(huoMaDirectStoresAccount)) { + return huoMaDirectStoresPassword; + } else if (account.equals(huoMaFranchiseStoresAccount)) { + return huoMaFranchiseStoresPassword; + } else if (account.equals(huoMaRestaurantStoresAccount)) { + return huoMaRestaurantStoresPassword; + } + return null; + } + + @NotNull + private static String sendPost(String requestUrl, Request request) { + try (Response response = new OkHttpClient().newCall(request).execute()) { + log.info("发起请求 time:{}", System.currentTimeMillis()); + if (!response.isSuccessful()) { + log.info("HTTP请求失败,msg: " + response.message()); + throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, + "HTTP请求失败,状态码: " + response.code()); + } + String responseBody = response.body().string(); + log.info("请求成功responseBody:{}", JSONObject.toJSONString(responseBody)); + return responseBody; + } catch (ServiceException e) { + throw e; + } catch (Exception e) { + log.error("API调用异常 - URL: {}, 错误: {}", requestUrl, e.getMessage(), e); + throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, "接口调用异常: " + e.getMessage()); + } + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/constant/Constants.java b/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/constant/Constants.java index b08d231e6..7c5cdc771 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/constant/Constants.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/constant/Constants.java @@ -220,4 +220,6 @@ public class Constants public static final String WANG_LEI_JOB_NUMBER = "19060164"; + public static final int REFRESH_TOKEN_EXPIRE = 60*60*24*30; + } diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java index a21f93dc2..d65e62b9e 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java @@ -8,6 +8,7 @@ import com.cool.store.dto.FoodTokenDTO; import com.cool.store.dto.GetAccessTokenDTO; import com.cool.store.dto.HqtTokenDTO; import com.cool.store.dto.ModifyPasswordDTO; +import com.cool.store.dto.huoma.StoreXinFaDeviceDetail; import com.cool.store.dto.wechat.CallbackMessageDTO; import com.cool.store.dto.wechat.WechatTemplateMessageDTO; import com.cool.store.entity.*; @@ -41,6 +42,7 @@ import com.cool.store.service.impl.CommonService; import com.cool.store.service.impl.OrderSysInfoServiceImpl; import com.cool.store.service.impl.UserAuthMappingServiceImpl; import com.cool.store.service.wechat.WechatTemplateService; +import com.cool.store.service.xinfa.XinFaDeviceService; import com.cool.store.utils.CoolDateUtils; import com.cool.store.utils.RedisConstantUtil; import com.cool.store.utils.RedisUtilPool; @@ -605,5 +607,13 @@ public class PCTestController { return ApiResponse.success(true); } + @Resource + XinFaDeviceService xinFaDeviceService; + @ApiOperation("测试门店设备信息") + @GetMapping("/getStoreXinFaDeviceDetail") + public ResponseResult> getStoreXinFaDeviceDetail(@RequestParam("shopId")String storeNum) { + return ResponseResult.success(xinFaDeviceService.getStoreXinFaDeviceDetail(storeNum)); + } + } diff --git a/coolstore-partner-web/src/main/resources/application-ab.properties b/coolstore-partner-web/src/main/resources/application-ab.properties index 3733c2acc..c230187e3 100644 --- a/coolstore-partner-web/src/main/resources/application-ab.properties +++ b/coolstore-partner-web/src/main/resources/application-ab.properties @@ -141,4 +141,15 @@ hqt.token.client.secret=rYe9Cwug5LwQNIBJAiW0a7weF9CAhYCD wechat.mp.appId=wx4a18ef8bb41aa55c wechat.mp.appSecret=793904b58f4ecdead3bbe4312c5f5c45 #xiaochengxu appid -wechat.miniapp.appId=wxd77a2761c1911ee1 \ No newline at end of file +wechat.miniapp.appId=wxd77a2761c1911ee1 + +huoMa.token.url = https://www.huoMayunping.com/api/SAASLogin/merchant +huoMa.id.url = https://www.huomayunping.com/api/reportCenter/executeSql +huoMa.store.device.detail.url = https://www.huomayunping.com/api/terminal/search +huoMa.get.point.terminal.url = https://www.huoMayunping.com/api/terminal/getPointTerminalInfos +huoMa.direct.stores.account = 15370309163 +huoMa.direct.stores.password = Zx@123456. +huoMa.franchise.stores.account = 13563273279 +huoMa.franchise.stores.password = Zx@123456. +huoMa.restaurant.stores.account = 18656552865 +huoMa.restaurant.stores.password = ZX123456 diff --git a/coolstore-partner-web/src/main/resources/application-test.properties b/coolstore-partner-web/src/main/resources/application-test.properties index 079a324c6..7d2261003 100644 --- a/coolstore-partner-web/src/main/resources/application-test.properties +++ b/coolstore-partner-web/src/main/resources/application-test.properties @@ -154,3 +154,16 @@ wechat.miniapp.appId=wxd77a2761c1911ee1 zx.iot.appId=p-ts3PhNyf zx.iot.appSecret=X4cVmfxM+ + + +huoMa.token.url = https://www.huoMayunping.com/api/SAASLogin/merchant +huoMa.id.url = https://www.huomayunping.com/api/reportCenter/executeSql +huoMa.store.device.detail.url = https://www.huomayunping.com/api/terminal/search +huoMa.get.point.terminal.url = https://www.huoMayunping.com/api/terminal/getPointTerminalInfos +huoMa.get.tag.url = https://www.huomayunping.com/api/tag/search +huoMa.direct.stores.account = 15370309163 +huoMa.direct.stores.password = Zx@123456. +huoMa.franchise.stores.account = 13563273279 +huoMa.franchise.stores.password = Zx@123456. +huoMa.restaurant.stores.account = 18656552865 +huoMa.restaurant.stores.password = ZX123456 From f3dc39b911a0bf2b25f8a2f838a5cbdd85c47316 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Wed, 5 Nov 2025 17:47:47 +0800 Subject: [PATCH 04/27] =?UTF-8?q?feat:=E4=BF=A1=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cool/store/enums/SpecialTagEnum.java | 58 +++++++++ .../cool/store/dto/huoma/ProgramReqDTO.java | 40 +++++++ .../store/dto/huoma/ProgramResponseDTO.java | 25 ++++ .../com/cool/store/dto/huoma/PublishDTO.java | 24 ++++ .../cool/store/dto/huoma/TagDetailDTO.java | 5 + .../impl/xinfa/XinFaBusinessServiceImpl.java | 67 +++++++++++ .../service/xinfa/XinFaBusinessService.java | 48 ++++++++ .../service/xinfa/XinFaDeviceService.java | 113 +++++++++++++++++- .../controller/webb/PCTestController.java | 30 ++++- .../main/resources/application-ab.properties | 2 + .../resources/application-test.properties | 2 + 11 files changed, 406 insertions(+), 8 deletions(-) create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/enums/SpecialTagEnum.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/ProgramReqDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/ProgramResponseDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/PublishDTO.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/impl/xinfa/XinFaBusinessServiceImpl.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaBusinessService.java diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/SpecialTagEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/SpecialTagEnum.java new file mode 100644 index 000000000..d022a0728 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/SpecialTagEnum.java @@ -0,0 +1,58 @@ +package com.cool.store.enums; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author suzhuhong + * @Date 2025/11/5 16:03 + * @Version 1.0 + */ +public enum SpecialTagEnum { + + ELECTRONIC_PRICE_LIST("电子价目牌"), + ACTIVITY_CAROUSEL("活动轮播"), + ACTIVITY_PACKAGE("活动套餐"), + PROMOTIONAL_VIDEO("宣传视频"); + + private final String tagName; + + SpecialTagEnum(String tagName) { + this.tagName = tagName; + } + + public String getTagName() { + return tagName; + } + + /** + * 根据标签名称获取枚举值 + */ + public static SpecialTagEnum fromTagName(String tagName) { + for (SpecialTagEnum tag : values()) { + if (tag.getTagName().equals(tagName)) { + return tag; + } + } + return null; + } + + /** + * 获取所有标签名称列表 + */ + public static List getAllTagNames() { + return Arrays.stream(values()) + .map(SpecialTagEnum::getTagName) + .collect(Collectors.toList()); + } + + /** + * 获取电子价目牌标签名称 + * @return + */ + public static List getElectronicPriceTagName() { + return Arrays.asList(ELECTRONIC_PRICE_LIST.getTagName()); + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/ProgramReqDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/ProgramReqDTO.java new file mode 100644 index 000000000..3983d99cb --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/ProgramReqDTO.java @@ -0,0 +1,40 @@ +package com.cool.store.dto.huoma; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/11/5 14:43 + * @Version 1.0 + */ +@Data +public class ProgramReqDTO { + + @ApiModelProperty(name = "门店编码",required = true) + private String storeCode; + + @ApiModelProperty(name = "设备名称",required = true) + @NotEmpty(message = "设备名称不能为空") + private String deviceName; + + @ApiModelProperty(name = "第几页,",required = true) + private Integer index; + + @ApiModelProperty(name ="每页数量",required = true) + private Integer size; + + @ApiModelProperty(name = "时间",hidden = true) + private String date; + + @ApiModelProperty(name = "排序",hidden = true) + private String sort; + + @ApiModelProperty("标签id列表") + private List tagIds; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/ProgramResponseDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/ProgramResponseDTO.java new file mode 100644 index 000000000..3922c7ba9 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/ProgramResponseDTO.java @@ -0,0 +1,25 @@ +package com.cool.store.dto.huoma; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/5 14:44 + * @Version 1.0 + */ +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class ProgramResponseDTO { + + @ApiModelProperty("节目ID") + private Long id; + + @ApiModelProperty("节目名称") + private String name; + + @ApiModelProperty("节目缩略图") + private String thumbnail; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/PublishDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/PublishDTO.java new file mode 100644 index 000000000..4ce4b970d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/PublishDTO.java @@ -0,0 +1,24 @@ +package com.cool.store.dto.huoma; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/11/5 17:06 + * @Version 1.0 + */ +@Data +public class PublishDTO { + + @ApiModelProperty(name = "门店编号",required = true) + @NotEmpty(message = "门店编码不能为空") + private String storeCode; + @ApiModelProperty(name = "设备ID列表",required = true) + @NotEmpty(message = "设备ID列表不能为空") + private List deviceIdList; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/TagDetailDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/TagDetailDTO.java index 896b07378..5274fb05d 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/TagDetailDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/TagDetailDTO.java @@ -1,5 +1,7 @@ package com.cool.store.dto.huoma; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** @@ -8,10 +10,13 @@ import lombok.Data; * @Version 1.0 */ @Data +@JsonIgnoreProperties(ignoreUnknown = true) public class TagDetailDTO { + @ApiModelProperty("标签Id") private Integer id; + @ApiModelProperty("标签名称") private String name; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/xinfa/XinFaBusinessServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/xinfa/XinFaBusinessServiceImpl.java new file mode 100644 index 000000000..b00e6b0dc --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/xinfa/XinFaBusinessServiceImpl.java @@ -0,0 +1,67 @@ +package com.cool.store.service.impl.xinfa; + +import com.cool.store.dto.huoma.*; +import com.cool.store.enums.SpecialTagEnum; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.xinfa.XinFaBusinessService; +import com.cool.store.service.xinfa.XinFaDeviceService; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author suzhuhong + * @Date 2025/11/5 16:17 + * @Version 1.0 + */ +@Service +public class XinFaBusinessServiceImpl implements XinFaBusinessService { + @Resource + XinFaDeviceService xinFaDeviceService; + + @Override + public List getStoreXinFaDeviceDetail(String storeNum) { + return xinFaDeviceService.getStoreXinFaDeviceDetail(storeNum); + } + + @Override + public List getAccountAllTags(String storeNum,String deviceName) { + //如果是广告机,不需要展示标签 + if (deviceName.contains("广告机")){ + return new ArrayList<>(); + } + List accountAllTags = xinFaDeviceService.getAccountAllTags(storeNum); + if (accountAllTags != null){ + return accountAllTags.stream() + .filter(tag -> tag.getName() != null && + SpecialTagEnum.getAllTagNames().contains(tag.getName())) + .sorted(Comparator.comparing(tag -> SpecialTagEnum.getAllTagNames().indexOf(tag.getName()))) + .collect(Collectors.toList()); + } + return null; + } + + @Override + public List getProgramList(ProgramReqDTO programReqDTO) { + //如果没传tag 查所有 根据更新时间倒序排 + programReqDTO.setSort("desc"); + programReqDTO.setDate("updateTime"); + if (CollectionUtils.isEmpty(programReqDTO.getTagIds())){ + //设备名称包含 广告机 只查询电子价目表 + programReqDTO.setTagIds(xinFaDeviceService.getAccountSpecialTagIds(programReqDTO.getStoreCode(), SpecialTagEnum.getElectronicPriceTagName())); + } + List programList = xinFaDeviceService.getProgramList(programReqDTO); + return programList; + } + + @Override + public Boolean publishProgram(PublishDTO publishDTO) { + return xinFaDeviceService.publish(publishDTO); + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaBusinessService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaBusinessService.java new file mode 100644 index 000000000..8ff1c2fd6 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaBusinessService.java @@ -0,0 +1,48 @@ +package com.cool.store.service.xinfa; + +import com.cool.store.dto.huoma.*; +import com.cool.store.response.ResponseResult; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/11/5 16:15 + * @Version 1.0 + */ +public interface XinFaBusinessService { + + + /** + * 获取门店信发设备列表 + * @param storeNum + * @return + */ + List getStoreXinFaDeviceDetail(String storeNum); + + /** + * 获取账号下有哪些标签 + * @param storeNum + * @return + */ + List getAccountAllTags(String storeNum,String deviceName); + + /** + * 获取账号下有哪些节目、 + * 通过门店在哪个账号下 确定账号 + * @param programReqDTO + * @return + */ + List getProgramList(ProgramReqDTO programReqDTO); + + /** + * 发布信发设备 + * @param publishDTO + * @return + */ + Boolean publishProgram(PublishDTO publishDTO); + + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java index b73142e09..820a78b67 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java @@ -4,7 +4,9 @@ import com.alibaba.fastjson.JSONObject; import com.cool.store.constants.RedisConstant; import com.cool.store.dto.huoma.*; import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.SpecialTagEnum; import com.cool.store.exception.ServiceException; +import com.cool.store.response.ResponseResult; import com.cool.store.utils.RedisUtilPool; import com.cool.store.utils.poi.constant.Constants; import com.fasterxml.jackson.databind.JsonNode; @@ -16,12 +18,14 @@ import org.apache.commons.lang3.StringUtils; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.RequestParam; import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.io.IOException; import java.text.MessageFormat; import java.util.*; +import java.util.stream.Collectors; /** * @Author suzhuhong @@ -54,8 +58,12 @@ public class XinFaDeviceService { private String huoMaGetStoreIdUrl; @Value("${huoMa.store.device.detail.url}") private String huoMaGetStoreXinFaDeviceDetailUrl ; - @Value("${huoMa.get.tag.url }") + @Value("${huoMa.get.tag.url}") private String huoMaGetTagUrl; + @Value("${huoMa.get.program.url}") + private String huoMaGetProgramUrl; + @Value("${huoMa.get.publish.url}") + private String huoMaGetPublishUrl; private final Map accountMap = new HashMap<>(); @@ -168,18 +176,115 @@ public class XinFaDeviceService { String source = redisUtilPool.hashGet(RedisConstant.HUOMA_STORE_DEVICE_RESOURCE_KEY, storeNum); //获取标签 必须要知道门店属于哪个账号下 获取对应账号下的标签 如果获取不到 直接返回空 if (StringUtils.isEmpty(source)){ + log.info("门店没有找到对应的账号,storeNum: {}", storeNum); return new ArrayList<>(); } HuoMaAccountDTO huoMaAccountDTO = accountMap.get(source); if (Objects.nonNull(huoMaAccountDTO)){ huoMaAccountDTO.setIsQuery(true); String token = getStoreToken(huoMaAccountDTO.getAccount(), huoMaAccountDTO.getPassword()); - return getAccountAllTags(token); + TagDTO tagDTO = new TagDTO("DEFAULT", 0, 30,"program"); + String responseBody = null; + try{ + responseBody = sendPostRequestByToken(JSONObject.toJSONString(tagDTO), huoMaGetTagUrl,token); + ObjectMapper mapper = new ObjectMapper(); + JsonNode rootNode = mapper.readTree(responseBody); + + // 直接转换整个数组 + return mapper.convertValue( + rootNode.path("data").path("content"), + mapper.getTypeFactory().constructCollectionType(List.class, TagDetailDTO.class) + ); + }catch (Exception e){ + log.error("getAccountAllTags解析获取data失败,url:{},responseBody:{}",huoMaTokenUrl, responseBody); + } } - - + return new ArrayList<>(); } + + /** + * 获取账号下指定标签的id 只需要一下四个 + * @param storeNum + * @return + */ + public List getAccountSpecialTagIds( String storeNum,List tagList) { + List accountAllTags = getAccountAllTags(storeNum); + if (accountAllTags != null) { + return accountAllTags.stream() + .filter(tag -> tag.getName() != null && + tagList.contains(tag.getName())) + .map(TagDetailDTO::getId) + .collect(Collectors.toList()); + } + return new ArrayList<>(); + } + + + public List getProgramList(ProgramReqDTO programReqDTO) { + if (StringUtils.isEmpty(programReqDTO.getStoreCode())){ + log.info("门店没有找到对应的账号,storeNum: {}", programReqDTO.getStoreCode()); + return new ArrayList<>(); + } + //先查询门店是属于哪个账号下 + String source = redisUtilPool.hashGet(RedisConstant.HUOMA_STORE_DEVICE_RESOURCE_KEY, programReqDTO.getStoreCode()); + //获取标签 必须要知道门店属于哪个账号下 获取对应账号下的标签 如果获取不到 直接返回空 + if (StringUtils.isEmpty(source)){ + log.info("门店没有找到对应的账号,storeNum: {}", programReqDTO.getStoreCode()); + return new ArrayList<>(); + } + HuoMaAccountDTO huoMaAccountDTO = accountMap.get(source); + if (huoMaAccountDTO!=null){ + String token = getStoreToken(huoMaAccountDTO.getAccount(), huoMaAccountDTO.getPassword()); + String responseBody = null; + try{ + responseBody = sendPostRequestByToken(JSONObject.toJSONString(programReqDTO), huoMaGetProgramUrl,token); + ObjectMapper mapper = new ObjectMapper(); + JsonNode rootNode = mapper.readTree(responseBody); + + // 直接转换整个数组 + return mapper.convertValue( + rootNode.path("data").path("content"), + mapper.getTypeFactory().constructCollectionType(List.class, ProgramResponseDTO.class) + ); + }catch (Exception e){ + log.error("getProgramList 解析获取data失败,url:{},responseBody:{}",huoMaTokenUrl, responseBody); + } + } + return new ArrayList<>(); + } + + public Boolean publish(PublishDTO publishDTO){ + if (StringUtils.isEmpty(publishDTO.getStoreCode())){ + log.info("门店没有找到对应的账号,发布失败,storeNum: {}", publishDTO.getStoreCode()); + return Boolean.FALSE; + } + String source = redisUtilPool.hashGet(RedisConstant.HUOMA_STORE_DEVICE_RESOURCE_KEY, publishDTO.getStoreCode()); + //获取标签 必须要知道门店属于哪个账号下 获取对应账号下的标签 如果获取不到 直接返回空 + if (StringUtils.isEmpty(source)){ + log.info("门店没有找到对应的账号,storeNum: {}", publishDTO.getStoreCode()); + return Boolean.FALSE; + } + HuoMaAccountDTO huoMaAccountDTO = accountMap.get(source); + if (huoMaAccountDTO!=null){ + String token = getStoreToken(huoMaAccountDTO.getAccount(), huoMaAccountDTO.getPassword()); + String responseBody = null; + try{ + responseBody = sendPostRequestByToken(JSONObject.toJSONString(publishDTO), huoMaGetPublishUrl,token); + ObjectMapper mapper = new ObjectMapper(); + JsonNode rootNode = mapper.readTree(responseBody); + + // 直接转换整个数组 + log.info("发布成功 deviceId:{},storeCod:{}e",JSONObject.toJSONString(publishDTO.getDeviceIdList()), publishDTO.getStoreCode() ); + return Boolean.TRUE; + }catch (Exception e){ + log.error("getProgramList 解析获取data失败,url:{},responseBody:{}",huoMaTokenUrl, responseBody); + } + } + return Boolean.FALSE; + } + + public List getStoreXinFaDeviceDetailByPointId(Integer pointId, String token) { if (pointId != null){ diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java index d65e62b9e..ce2e5c02e 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java @@ -8,7 +8,7 @@ import com.cool.store.dto.FoodTokenDTO; import com.cool.store.dto.GetAccessTokenDTO; import com.cool.store.dto.HqtTokenDTO; import com.cool.store.dto.ModifyPasswordDTO; -import com.cool.store.dto.huoma.StoreXinFaDeviceDetail; +import com.cool.store.dto.huoma.*; import com.cool.store.dto.wechat.CallbackMessageDTO; import com.cool.store.dto.wechat.WechatTemplateMessageDTO; import com.cool.store.entity.*; @@ -42,6 +42,7 @@ import com.cool.store.service.impl.CommonService; import com.cool.store.service.impl.OrderSysInfoServiceImpl; import com.cool.store.service.impl.UserAuthMappingServiceImpl; import com.cool.store.service.wechat.WechatTemplateService; +import com.cool.store.service.xinfa.XinFaBusinessService; import com.cool.store.service.xinfa.XinFaDeviceService; import com.cool.store.utils.CoolDateUtils; import com.cool.store.utils.RedisConstantUtil; @@ -608,12 +609,33 @@ public class PCTestController { } @Resource - XinFaDeviceService xinFaDeviceService; + XinFaBusinessService xinFaBusinessService; @ApiOperation("测试门店设备信息") @GetMapping("/getStoreXinFaDeviceDetail") - public ResponseResult> getStoreXinFaDeviceDetail(@RequestParam("shopId")String storeNum) { - return ResponseResult.success(xinFaDeviceService.getStoreXinFaDeviceDetail(storeNum)); + public ResponseResult> getStoreXinFaDeviceDetail(@RequestParam("storeNum")String storeNum) { + return ResponseResult.success(xinFaBusinessService.getStoreXinFaDeviceDetail(storeNum)); } + @ApiOperation("测试标签信息") + @GetMapping("/getAccountAllTags") + public ResponseResult> getAccountAllTags(@RequestParam("storeNum")String storeNum, + @RequestParam("deviceName")String deviceName) { + List accountAllTags = xinFaBusinessService.getAccountAllTags(storeNum,deviceName); + return ResponseResult.success(accountAllTags); + } + + @ApiOperation("获取节目列表") + @PostMapping("/getProgramList") + public ResponseResult> getProgramList(@RequestBody ProgramReqDTO programReqDTO) { + List accountAllTags = xinFaBusinessService.getProgramList(programReqDTO); + return ResponseResult.success(accountAllTags); + } + + @ApiOperation("发布/上架") + @PostMapping("/publishProgram") + public ResponseResult publishProgram(@RequestBody PublishDTO publishDTO) { + Boolean publishStatus = xinFaBusinessService.publishProgram(publishDTO); + return ResponseResult.success(publishStatus); + } } diff --git a/coolstore-partner-web/src/main/resources/application-ab.properties b/coolstore-partner-web/src/main/resources/application-ab.properties index c230187e3..dfafc25b4 100644 --- a/coolstore-partner-web/src/main/resources/application-ab.properties +++ b/coolstore-partner-web/src/main/resources/application-ab.properties @@ -147,6 +147,8 @@ huoMa.token.url = https://www.huoMayunping.com/api/SAASLogin/merchant huoMa.id.url = https://www.huomayunping.com/api/reportCenter/executeSql huoMa.store.device.detail.url = https://www.huomayunping.com/api/terminal/search huoMa.get.point.terminal.url = https://www.huoMayunping.com/api/terminal/getPointTerminalInfos +huoMa.get.program.url = https://www.huomayunping.com/api/program/search +huoMa.get.publish.url = https://www.huomayunping.com/api/channelPublish/target/v2/quick-publish huoMa.direct.stores.account = 15370309163 huoMa.direct.stores.password = Zx@123456. huoMa.franchise.stores.account = 13563273279 diff --git a/coolstore-partner-web/src/main/resources/application-test.properties b/coolstore-partner-web/src/main/resources/application-test.properties index 7d2261003..b9182bd10 100644 --- a/coolstore-partner-web/src/main/resources/application-test.properties +++ b/coolstore-partner-web/src/main/resources/application-test.properties @@ -161,6 +161,8 @@ huoMa.id.url = https://www.huomayunping.com/api/reportCenter/executeSql huoMa.store.device.detail.url = https://www.huomayunping.com/api/terminal/search huoMa.get.point.terminal.url = https://www.huoMayunping.com/api/terminal/getPointTerminalInfos huoMa.get.tag.url = https://www.huomayunping.com/api/tag/search +huoMa.get.program.url = https://www.huomayunping.com/api/program/search +huoMa.get.publish.url = https://www.huomayunping.com/api/channelPublish/target/v2/quick-publish huoMa.direct.stores.account = 15370309163 huoMa.direct.stores.password = Zx@123456. huoMa.franchise.stores.account = 13563273279 From 2750fffdcde1d4910c4a216b3aa70068a9b722a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Wed, 5 Nov 2025 17:51:13 +0800 Subject: [PATCH 05/27] =?UTF-8?q?feat:=E4=BF=A1=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/webc/MiniXinFaController.java | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniXinFaController.java diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniXinFaController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniXinFaController.java new file mode 100644 index 000000000..e627aaaa2 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniXinFaController.java @@ -0,0 +1,55 @@ +package com.cool.store.controller.webc; + +import com.cool.store.dto.huoma.*; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.xinfa.XinFaBusinessService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2025/11/5 17:49 + * @Version 1.0 + */ +@RestController +@RequestMapping("/mini/xinfa") +@Api(tags = "小程序-信发") +@Slf4j +public class MiniXinFaController { + + @Resource + XinFaBusinessService xinFaBusinessService; + @ApiOperation("测试门店设备信息") + @GetMapping("/getStoreXinFaDeviceDetail") + public ResponseResult> getStoreXinFaDeviceDetail(@RequestParam("storeNum")String storeNum) { + return ResponseResult.success(xinFaBusinessService.getStoreXinFaDeviceDetail(storeNum)); + } + + @ApiOperation("测试标签信息") + @GetMapping("/getAccountAllTags") + public ResponseResult> getAccountAllTags(@RequestParam("storeNum")String storeNum, + @RequestParam("deviceName")String deviceName) { + List accountAllTags = xinFaBusinessService.getAccountAllTags(storeNum,deviceName); + return ResponseResult.success(accountAllTags); + } + + @ApiOperation("获取节目列表") + @PostMapping("/getProgramList") + public ResponseResult> getProgramList(@RequestBody ProgramReqDTO programReqDTO) { + List accountAllTags = xinFaBusinessService.getProgramList(programReqDTO); + return ResponseResult.success(accountAllTags); + } + + @ApiOperation("发布/上架") + @PostMapping("/publishProgram") + public ResponseResult publishProgram(@RequestBody PublishDTO publishDTO) { + Boolean publishStatus = xinFaBusinessService.publishProgram(publishDTO); + return ResponseResult.success(publishStatus); + } + +} From 05210119f1167fe3d56507d7f630aded387a4d8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Wed, 5 Nov 2025 17:56:16 +0800 Subject: [PATCH 06/27] =?UTF-8?q?feat:=E4=BF=A1=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application-ab.properties | 1 + 1 file changed, 1 insertion(+) diff --git a/coolstore-partner-web/src/main/resources/application-ab.properties b/coolstore-partner-web/src/main/resources/application-ab.properties index dfafc25b4..02d7bbe98 100644 --- a/coolstore-partner-web/src/main/resources/application-ab.properties +++ b/coolstore-partner-web/src/main/resources/application-ab.properties @@ -147,6 +147,7 @@ huoMa.token.url = https://www.huoMayunping.com/api/SAASLogin/merchant huoMa.id.url = https://www.huomayunping.com/api/reportCenter/executeSql huoMa.store.device.detail.url = https://www.huomayunping.com/api/terminal/search huoMa.get.point.terminal.url = https://www.huoMayunping.com/api/terminal/getPointTerminalInfos +huoMa.get.tag.url = https://www.huomayunping.com/api/tag/search huoMa.get.program.url = https://www.huomayunping.com/api/program/search huoMa.get.publish.url = https://www.huomayunping.com/api/channelPublish/target/v2/quick-publish huoMa.direct.stores.account = 15370309163 From ebe5f9ac6ff8b6d90c622de089948401dcc361f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Thu, 6 Nov 2025 11:11:33 +0800 Subject: [PATCH 07/27] =?UTF-8?q?feat:=E4=BF=A1=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cool/store/dto/huoma/AccountTagDTO.java | 20 +++++++++++++++++++ .../controller/webc/MiniXinFaController.java | 7 +++---- 2 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/AccountTagDTO.java diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/AccountTagDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/AccountTagDTO.java new file mode 100644 index 000000000..8e4c0a21a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/AccountTagDTO.java @@ -0,0 +1,20 @@ +package com.cool.store.dto.huoma; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2025/11/6 11:09 + * @Version 1.0 + */ +@Data +public class AccountTagDTO { + + @ApiModelProperty("门店编码") + private String storeNum; + + @ApiModelProperty("设备名称") + private String deviceName; + +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniXinFaController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniXinFaController.java index e627aaaa2..a9cc9a5b7 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniXinFaController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniXinFaController.java @@ -31,10 +31,9 @@ public class MiniXinFaController { } @ApiOperation("测试标签信息") - @GetMapping("/getAccountAllTags") - public ResponseResult> getAccountAllTags(@RequestParam("storeNum")String storeNum, - @RequestParam("deviceName")String deviceName) { - List accountAllTags = xinFaBusinessService.getAccountAllTags(storeNum,deviceName); + @PostMapping("/getAccountAllTags") + public ResponseResult> getAccountAllTags(@RequestBody AccountTagDTO tagDTO) { + List accountAllTags = xinFaBusinessService.getAccountAllTags(tagDTO.getStoreNum(), tagDTO.getDeviceName()); return ResponseResult.success(accountAllTags); } From 67d0b7c72631064eb950eea8bee98068e7d8d02f Mon Sep 17 00:00:00 2001 From: wangff Date: Fri, 7 Nov 2025 10:15:16 +0800 Subject: [PATCH 08/27] =?UTF-8?q?fix:=E4=BF=A1=E5=8F=91=E5=8F=91=E5=B8=83?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=8A=82=E7=9B=AEid=EF=BC=8C=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E8=B0=83=E7=94=A8=E5=A4=B1=E8=B4=A5=E6=83=85=E5=86=B5?= =?UTF-8?q?=E4=B8=8B=E6=8A=9B=E5=87=BA=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/cool/store/dto/huoma/PublishDTO.java | 3 ++- .../com/cool/store/service/xinfa/XinFaDeviceService.java | 9 ++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/PublishDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/PublishDTO.java index 4ce4b970d..0e41bc75f 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/PublishDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/PublishDTO.java @@ -20,5 +20,6 @@ public class PublishDTO { @ApiModelProperty(name = "设备ID列表",required = true) @NotEmpty(message = "设备ID列表不能为空") private List deviceIdList; - + @ApiModelProperty("节目id") + private Long programId; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java index 820a78b67..fd1eb065e 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java @@ -273,12 +273,15 @@ public class XinFaDeviceService { responseBody = sendPostRequestByToken(JSONObject.toJSONString(publishDTO), huoMaGetPublishUrl,token); ObjectMapper mapper = new ObjectMapper(); JsonNode rootNode = mapper.readTree(responseBody); - + int code = rootNode.get("code").asInt(); + if (code != 0) { + throw new RuntimeException("发布失败"); + } // 直接转换整个数组 - log.info("发布成功 deviceId:{},storeCod:{}e",JSONObject.toJSONString(publishDTO.getDeviceIdList()), publishDTO.getStoreCode() ); + log.info("发布成功 deviceId:{},storeCode:{}",JSONObject.toJSONString(publishDTO.getDeviceIdList()), publishDTO.getStoreCode() ); return Boolean.TRUE; }catch (Exception e){ - log.error("getProgramList 解析获取data失败,url:{},responseBody:{}",huoMaTokenUrl, responseBody); + log.error("发布失败, url:{}, responseBody:{}", huoMaTokenUrl, responseBody); } } return Boolean.FALSE; From 10f21f15dc41f33da2f6c4dbf8d7a794c6c3c80a Mon Sep 17 00:00:00 2001 From: wangff Date: Fri, 7 Nov 2025 14:05:52 +0800 Subject: [PATCH 09/27] =?UTF-8?q?fix:=E4=BF=A1=E5=8F=91=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E6=8E=A5=E5=8F=A3=E5=8F=8A=E5=8F=91=E5=B8=83?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=BA=8F=E5=88=97=E5=8C=96=E5=92=8C=E5=8F=8D?= =?UTF-8?q?=E5=BA=8F=E5=88=97=E5=8C=96=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/cool/store/dto/huoma/PublishDTO.java | 2 ++ .../com/cool/store/dto/huoma/StoreXinFaDeviceDetail.java | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/PublishDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/PublishDTO.java index 0e41bc75f..6453c8c8c 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/PublishDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/PublishDTO.java @@ -1,5 +1,6 @@ package com.cool.store.dto.huoma; +import com.alibaba.fastjson.annotation.JSONField; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -19,6 +20,7 @@ public class PublishDTO { private String storeCode; @ApiModelProperty(name = "设备ID列表",required = true) @NotEmpty(message = "设备ID列表不能为空") + @JSONField(name = "terminals") private List deviceIdList; @ApiModelProperty("节目id") private Long programId; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/StoreXinFaDeviceDetail.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/StoreXinFaDeviceDetail.java index 776d2de3c..8353f65ab 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/StoreXinFaDeviceDetail.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/StoreXinFaDeviceDetail.java @@ -1,12 +1,16 @@ package com.cool.store.dto.huoma; +import com.alibaba.fastjson.parser.DefaultJSONParser; +import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer; import com.cool.store.utils.BrowserVersionUtils; import com.cool.store.utils.StringUtil; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import io.swagger.annotations.Api; +import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.lang.reflect.Type; + /** * @Author suzhuhong * @Date 2025/8/18 16:27 @@ -20,6 +24,7 @@ public class StoreXinFaDeviceDetail { * 设备ID */ @ApiModelProperty(value = "设备ID") + @JsonProperty("id") private String deviceId; /** From 8972bd8be0370820b168c3dae0d88770fee6d13b Mon Sep 17 00:00:00 2001 From: wangff Date: Fri, 7 Nov 2025 14:16:38 +0800 Subject: [PATCH 10/27] fix --- .../java/com/cool/store/dto/huoma/StoreXinFaDeviceDetail.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/StoreXinFaDeviceDetail.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/StoreXinFaDeviceDetail.java index 8353f65ab..7ebf36201 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/StoreXinFaDeviceDetail.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/huoma/StoreXinFaDeviceDetail.java @@ -24,7 +24,9 @@ public class StoreXinFaDeviceDetail { * 设备ID */ @ApiModelProperty(value = "设备ID") - @JsonProperty("id") + private String id; + + @ApiModelProperty("设备id") private String deviceId; /** From 549a4fbd045d8db52b2b07f4d27d314852e16783 Mon Sep 17 00:00:00 2001 From: wangff Date: Fri, 7 Nov 2025 14:42:39 +0800 Subject: [PATCH 11/27] =?UTF-8?q?fix:=E8=A1=A5=E5=85=85=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/application-online.properties | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/coolstore-partner-web/src/main/resources/application-online.properties b/coolstore-partner-web/src/main/resources/application-online.properties index 17639edf7..bb4f1e31f 100644 --- a/coolstore-partner-web/src/main/resources/application-online.properties +++ b/coolstore-partner-web/src/main/resources/application-online.properties @@ -144,4 +144,18 @@ hqt.token.client.secret=rYe9Cwug5LwQNIBJAiW0a7weF9CAhYCD wechat.mp.appId=wx4a18ef8bb41aa55c wechat.mp.appSecret=793904b58f4ecdead3bbe4312c5f5c45 #xiaochengxu appid -wechat.miniapp.appId=wxd77a2761c1911ee1 \ No newline at end of file +wechat.miniapp.appId=wxd77a2761c1911ee1 + +huoMa.token.url = https://www.huoMayunping.com/api/SAASLogin/merchant +huoMa.id.url = https://www.huomayunping.com/api/reportCenter/executeSql +huoMa.store.device.detail.url = https://www.huomayunping.com/api/terminal/search +huoMa.get.point.terminal.url = https://www.huoMayunping.com/api/terminal/getPointTerminalInfos +huoMa.get.tag.url = https://www.huomayunping.com/api/tag/search +huoMa.get.program.url = https://www.huomayunping.com/api/program/search +huoMa.get.publish.url = https://www.huomayunping.com/api/channelPublish/target/v2/quick-publish +huoMa.direct.stores.account = 15370309163 +huoMa.direct.stores.password = Zx@123456. +huoMa.franchise.stores.account = 13563273279 +huoMa.franchise.stores.password = Zx@123456. +huoMa.restaurant.stores.account = 18656552865 +huoMa.restaurant.stores.password = ZX123456 \ No newline at end of file From ba2fca738bbb88b5aaef3aeab6a3c56bf770dc31 Mon Sep 17 00:00:00 2001 From: wangff Date: Mon, 10 Nov 2025 09:57:53 +0800 Subject: [PATCH 12/27] =?UTF-8?q?fix:=E7=BB=8F=E8=90=A5=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=81=94=E8=90=A5=EF=BC=9B=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=80=BC=E6=8E=A5=E5=8F=A3=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E6=94=B6=E9=93=B6=E8=B4=B9=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/cool/store/constants/CommonConstants.java | 3 +++ .../src/main/java/com/cool/store/enums/BusinessModelEnum.java | 3 ++- .../src/main/java/com/cool/store/utils/CommonUtil.java | 2 +- .../java/com/cool/store/response/AddSignFranchiseResponse.java | 3 ++- .../com/cool/store/service/impl/SignFranchiseServiceImpl.java | 1 + 5 files changed, 9 insertions(+), 3 deletions(-) diff --git a/coolstore-partner-common/src/main/java/com/cool/store/constants/CommonConstants.java b/coolstore-partner-common/src/main/java/com/cool/store/constants/CommonConstants.java index 03237cc04..bb98209a9 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/constants/CommonConstants.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/constants/CommonConstants.java @@ -232,4 +232,7 @@ public class CommonConstants { public static final int REFRESH_TOKEN_EXPIRE = 30 * 24 * 60 * 60; public static final int BATCH_SIZE = 200; + + public static final Integer INDEX_ZERO = 0; + public static final Integer INDEX_ONE = 1; } diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/BusinessModelEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/BusinessModelEnum.java index 7fdeec748..992738fbe 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/BusinessModelEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/BusinessModelEnum.java @@ -9,7 +9,8 @@ package com.cool.store.enums; public enum BusinessModelEnum { NULL(0, "无"), DIRECT_SALES(1, "直营"), - JOIN_SALES(2, "加盟"); + JOIN_SALES(2, "加盟"), + JOINT_STORE(3, "联营"); private Integer code; private String desc; diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/CommonUtil.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/CommonUtil.java index 8e27687ff..07bf9d41a 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/utils/CommonUtil.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/CommonUtil.java @@ -6,7 +6,7 @@ import java.math.BigDecimal; /** *

- * 公告工具 + * 公共工具 *

* * @author wangff diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/AddSignFranchiseResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/AddSignFranchiseResponse.java index f6537dfe0..3dcb6c31d 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/response/AddSignFranchiseResponse.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/AddSignFranchiseResponse.java @@ -241,5 +241,6 @@ public class AddSignFranchiseResponse { @ApiModelProperty("是否统管 : 1-统管,0-不统管") private Integer unifiedManagement; - + @ApiModelProperty("收银费(系统费)") + private String cashierFee; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java index 6ee49e3d4..2bc9404ea 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java @@ -627,6 +627,7 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu addSignFranchiseResponse.setThirdYearFee(franchiseFeeDO.getThirdYearFee()); addSignFranchiseResponse.setPerformanceBond(franchiseFeeDO.getPerformanceBond()); addSignFranchiseResponse.setBigPerformanceBond(Convert.digitToChinese(convertToBig(franchiseFeeDO.getPerformanceBond()))); + addSignFranchiseResponse.setCashierFee(franchiseFeeDO.getCashierFee()); } return addSignFranchiseResponse; } From 268665d12e6b019e08b4cdd5a2fb731f08ee1c27 Mon Sep 17 00:00:00 2001 From: wangff Date: Mon, 10 Nov 2025 10:31:02 +0800 Subject: [PATCH 13/27] =?UTF-8?q?fix:=E6=94=B6=E9=93=B6=E8=B4=B9=E5=A4=A7?= =?UTF-8?q?=E5=86=99=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/cool/store/response/AddSignFranchiseResponse.java | 3 +++ .../com/cool/store/service/impl/SignFranchiseServiceImpl.java | 1 + 2 files changed, 4 insertions(+) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/response/AddSignFranchiseResponse.java b/coolstore-partner-model/src/main/java/com/cool/store/response/AddSignFranchiseResponse.java index 3dcb6c31d..70ae9306d 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/response/AddSignFranchiseResponse.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/response/AddSignFranchiseResponse.java @@ -243,4 +243,7 @@ public class AddSignFranchiseResponse { @ApiModelProperty("收银费(系统费)") private String cashierFee; + + @ApiModelProperty("收银费(系统费)大写") + private String bigCashierFee; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java index 2bc9404ea..1f7ba2d46 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java @@ -628,6 +628,7 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu addSignFranchiseResponse.setPerformanceBond(franchiseFeeDO.getPerformanceBond()); addSignFranchiseResponse.setBigPerformanceBond(Convert.digitToChinese(convertToBig(franchiseFeeDO.getPerformanceBond()))); addSignFranchiseResponse.setCashierFee(franchiseFeeDO.getCashierFee()); + addSignFranchiseResponse.setBigCashierFee(Convert.digitToChinese(convertToBig(franchiseFeeDO.getCashierFee()))); } return addSignFranchiseResponse; } From 3ebea6476ef100c507f90bfb83284f06eecb155f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Mon, 10 Nov 2025 13:25:13 +0800 Subject: [PATCH 14/27] =?UTF-8?q?feat:=E4=BF=A1=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/xinfa/XinFaDeviceService.java | 83 +++++++++++++------ 1 file changed, 58 insertions(+), 25 deletions(-) diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java index fd1eb065e..144b447d1 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java @@ -327,33 +327,66 @@ public class XinFaDeviceService { private String sendPostRequest(String requestBody, String requestUrl) { log.info("开始发送请求,url:{},requestBody:{}", requestUrl, requestBody); - - int maxRetries = 3; - for (int i = 0; i < maxRetries; i++) { - try { - Request request = new Request.Builder() - .url(requestUrl) - .post(RequestBody.create(MediaType.parse("application/json"), requestBody)) - .build(); - - return sendPost(requestUrl, request); - } catch (Exception e) { - log.warn("请求失败,第{}次重试,错误: {}", i + 1, e.getMessage()); - if (i == maxRetries - 1) { - throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, "请求重试失败: " + e.getMessage()); - } - // 重试前等待 - try { - Thread.sleep(1000 * (i + 1)); - } catch (InterruptedException ie) { - Thread.currentThread().interrupt(); - throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, "重试被中断"); - } - } - } - throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, "请求重试失败"); + Request request = new Request.Builder() + .url(requestUrl) + .post(RequestBody.create(MediaType.parse("application/json"), requestBody)) + .build(); + return sendPost(requestUrl, request); } + + /** + * 不重试 请求接口 + * @param requestBody + * @param requestUrl + * @param token + * @return + */ + private String sendPostRequestNoRetryByToken(String requestBody, String requestUrl, String token) { + log.info("开始发送请求,url:{},requestBody:{}", requestUrl, requestBody); + + try { + Request request = new Request.Builder() + .url(requestUrl) + .post(RequestBody.create(MediaType.parse("application/json"), requestBody)) + .addHeader("token", token) + .build(); + + String result = sendPost(requestUrl, request); + + // 检查是否token失效 + if (isTokenExpired(result)) { + log.warn("Token已失效,清除缓存并重新获取token"); + // 清除对应账号的token缓存并获取新token + String newToken = clearAccountTokenCacheForToken(token); + + if (newToken != null) { + // 使用新token重新发起一次请求 + Request newRequest = new Request.Builder() + .url(requestUrl) + .post(RequestBody.create(MediaType.parse("application/json"), requestBody)) + .addHeader("token", newToken) + .build(); + + result = sendPost(requestUrl, newRequest); + } else { + throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, "Token失效且无法获取新token"); + } + } + return result; + } catch (Exception e) { + log.error("请求异常,错误: {}", e.getMessage()); + throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, "请求失败: " + e.getMessage()); + } + } + + /** + * 包含重试 适用于批量拉取数据 ,正常页面接口无需重试 + * @param requestBody + * @param requestUrl + * @param token + * @return + */ private String sendPostRequestByToken(String requestBody, String requestUrl, String token) { log.info("开始发送请求,url:{},requestBody:{}", requestUrl, requestBody); From b51762dc50d47d591ae7970480d4c5368b1b4dfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Mon, 10 Nov 2025 15:58:15 +0800 Subject: [PATCH 15/27] =?UTF-8?q?feat:=E6=9C=8D=E5=8A=A1=E5=8C=85=E4=B8=93?= =?UTF-8?q?=E7=94=A8=E8=A7=92=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/SysRoleMapper.xml | 2 +- .../src/main/resources/mapper/UserAuthMappingMapper.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/coolstore-partner-dao/src/main/resources/mapper/SysRoleMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/SysRoleMapper.xml index 37c8e46e0..c27321ab5 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/SysRoleMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/SysRoleMapper.xml @@ -397,7 +397,7 @@ and eu.active = true -- and sr.source = 'create' - and (sr.position_type = #{positionType} or sr.id in (180000000,120000000,40000000)) + and (sr.position_type = #{positionType} or sr.id in (180000000,120000000,40000000,1762761165005)) and eu.user_status = '1' diff --git a/coolstore-partner-dao/src/main/resources/mapper/UserAuthMappingMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/UserAuthMappingMapper.xml index fb58d5e5a..c9feb2c04 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/UserAuthMappingMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/UserAuthMappingMapper.xml @@ -55,7 +55,7 @@ - and (b.position_type =#{positionType} or b.id in (180000000,120000000,40000000) ) + and (b.position_type =#{positionType} or b.id in (180000000,120000000,40000000,1762761165005)) and b.role_auth !=#{notRoleAuth} From 5af9cb35765bfa0b307fb6669a9d7d1eee7f1bb4 Mon Sep 17 00:00:00 2001 From: wangff Date: Tue, 11 Nov 2025 14:48:25 +0800 Subject: [PATCH 16/27] fix --- .../com/cool/store/request/xgj/PushFranchiseFeeRequest.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java index ec16f374c..8b0cd7738 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java @@ -3,6 +3,7 @@ package com.cool.store.request.xgj; import com.cool.store.entity.FranchiseFeeDO; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import org.apache.commons.lang3.StringUtils; import java.math.BigDecimal; import java.util.Date; @@ -57,7 +58,10 @@ public class PushFranchiseFeeRequest { this.setFirstYearManageFee(convertToBig(franchiseFeeDO.getFirstYearManageFee())); this.setFirstYearFee(convertToBig(franchiseFeeDO.getFirstYearFee())); this.setDesignFee(convertToBig(franchiseFeeDO.getPerformanceBond())); - this.setFranchiseFee(convertToBig(franchiseFeeDO.getCashierFee())); + // 三明治收银费 + if (StringUtils.isNotBlank(franchiseFeeDO.getCashierFee())) { + this.setFranchiseFee(convertToBig(franchiseFeeDO.getCashierFee())); + } this.setTotalFee(this.getBond() .add(this.getFranchiseFee()) .add(this.getFirstYearManageFee()) From 1eb09a9380748903741c91d9d7f5897ad2bf4a2c Mon Sep 17 00:00:00 2001 From: wangff Date: Tue, 11 Nov 2025 14:59:41 +0800 Subject: [PATCH 17/27] =?UTF-8?q?fix:=E6=8E=A8=E9=80=81=E5=88=B0=E6=96=B0?= =?UTF-8?q?=E7=AE=A1=E5=AE=B6=E5=8F=82=E6=95=B0=E6=96=B0=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E7=9B=9F=E5=93=81=E7=89=8C=EF=BC=9B=E5=90=88=E8=AE=A1=E9=87=91?= =?UTF-8?q?=E9=A2=9D=E8=AE=A1=E7=AE=97=E9=94=99=E8=AF=AF=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cool/store/request/xgj/PushFranchiseFeeRequest.java | 6 ++++-- .../cool/store/service/impl/FranchiseFeeServiceImpl.java | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java index 8b0cd7738..373356ea5 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java @@ -47,6 +47,9 @@ public class PushFranchiseFeeRequest { @ApiModelProperty( "创建时间") private Date createTime; + + @ApiModelProperty("品牌") + private Integer joinBrand; public PushFranchiseFeeRequest(){} public PushFranchiseFeeRequest(Long shopId, String partnerName, FranchiseFeeDO franchiseFeeDO){ @@ -66,8 +69,7 @@ public class PushFranchiseFeeRequest { .add(this.getFranchiseFee()) .add(this.getFirstYearManageFee()) .add(this.getFirstYearFee()) - .add(this.getDesignFee()) - .add(this.getFranchiseFee())); + .add(this.getDesignFee())); this.setCreateTime(franchiseFeeDO.getCreateTime()); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java index 8bfb2cc07..e8d29d236 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java @@ -94,6 +94,7 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { commonService.sendSms(lineInfoDO.getMobile(), SMSMsgEnum.PAY_FRANCHISE_FEES); //推送加盟费信息到新管家 PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO); + feeRequest.setJoinBrand(Integer.valueOf(shopInfoDO.getFranchiseBrand())); pushService.pushFranchiseFeeToXGJ(feeRequest); return true; } @@ -116,6 +117,7 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { //推送加盟费信息到新管家 franchiseFeeDO.setCreateTime(franchiseFeeDO1.getCreateTime()); PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO); + feeRequest.setJoinBrand(Integer.valueOf(shopInfoDO.getFranchiseBrand())); pushService.pushFranchiseFeeToXGJ(feeRequest); return true; } From 18d118d326c1a8e9cbeb48a237df5d572e22281f Mon Sep 17 00:00:00 2001 From: wangff Date: Tue, 11 Nov 2025 15:20:07 +0800 Subject: [PATCH 18/27] =?UTF-8?q?fix:=E4=B8=89=E6=98=8E=E6=B2=BB=E9=93=BA?= =?UTF-8?q?=E4=BD=8D=E5=AE=A1=E6=89=B9=E9=80=9A=E8=BF=87=E5=90=8E=E5=B0=86?= =?UTF-8?q?=E8=AF=A6=E7=BB=86=E5=9C=B0=E5=9D=80=E5=86=99=E5=85=A5=E9=97=A8?= =?UTF-8?q?=E5=BA=97=E4=BF=A1=E6=81=AF=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cool/store/service/impl/PointServiceImpl.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PointServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PointServiceImpl.java index 8b15ce1e4..06b5bc244 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PointServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PointServiceImpl.java @@ -519,6 +519,14 @@ public class PointServiceImpl implements PointService { if (AuditStatusEnum.REJECT.equals(auditStatus)) { return auditRejectDeal(pointInfo, request.getReason()); } + // 如果是三明治,将地址写入门店信息表 + ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(pointInfo.getShopId()); + if (Objects.nonNull(shopInfo) && Integer.valueOf(shopInfo.getFranchiseBrand()).equals(FranchiseBrandEnum.ZXSMZ.getCode())) { + ShopInfoDO updateShopInfo = new ShopInfoDO(); + updateShopInfo.setId(pointInfo.getShopId()); + updateShopInfo.setDetailAddress(pointInfo.getAddress()); + shopInfoDAO.updateShopInfo(updateShopInfo); + } //处理下一节点任务及更新point状态 return dealNextAuditRecord(pointInfo, pointAuditRecordMap, pointTodo.getNodeNo()); } From 2dfff50138159dd363a1c84c2e0677438f4e408d Mon Sep 17 00:00:00 2001 From: wangff Date: Tue, 11 Nov 2025 15:54:20 +0800 Subject: [PATCH 19/27] =?UTF-8?q?fix:=E6=8E=A8=E9=80=81=E7=BC=B4=E8=B4=B9?= =?UTF-8?q?=E5=8D=95=E6=95=B0=E6=8D=AE=E5=88=B0=E6=96=B0=E7=AE=A1=E5=AE=B6?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8A=A0=E7=9B=9F=E5=93=81=E7=89=8C=E5=AD=97?= =?UTF-8?q?=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/cool/store/request/xgj/ReceiptRequest.java | 3 +++ .../java/com/cool/store/service/impl/LinePayServiceImpl.java | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/ReceiptRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/ReceiptRequest.java index 69a1110b7..d9c5877dc 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/ReceiptRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/ReceiptRequest.java @@ -56,6 +56,9 @@ public class ReceiptRequest { @ApiModelProperty( "删除标识") private Integer deleted = 0; + @ApiModelProperty("品牌") + private Integer joinBrand; + public ReceiptRequest() { } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LinePayServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LinePayServiceImpl.java index d1be25aea..bdc18fa13 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LinePayServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LinePayServiceImpl.java @@ -308,6 +308,10 @@ public class LinePayServiceImpl implements LinePayService { public Boolean pushPayInfo(Long shopId, LinePayDO linePayDO) { FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(shopId); ReceiptRequest receiptRequest = new ReceiptRequest(shopId, franchiseFeeDO.getId().intValue(), linePayDO); + ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(shopId); + if (Objects.nonNull(shopInfoDO)) { + receiptRequest.setJoinBrand(Integer.valueOf(shopInfoDO.getFranchiseBrand())); + } //推送缴费单数据到新管家 pushService.pushReceiptToXGJ(receiptRequest); return Boolean.TRUE; From 7f342a168d52d31f1d70c238e42f942d20c57364 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Tue, 11 Nov 2025 18:16:21 +0800 Subject: [PATCH 20/27] feat:OkHttpClient --- .../service/xinfa/XinFaDeviceService.java | 27 +++++++++++++------ .../main/resources/application-ab.properties | 12 ++++----- .../resources/application-test.properties | 12 ++++----- 3 files changed, 31 insertions(+), 20 deletions(-) diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java index 144b447d1..b0a20bec1 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java @@ -23,8 +23,10 @@ import org.springframework.web.bind.annotation.RequestParam; import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.io.IOException; +import java.net.SocketTimeoutException; import java.text.MessageFormat; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -68,6 +70,12 @@ public class XinFaDeviceService { private final Map accountMap = new HashMap<>(); + private final OkHttpClient httpClient = new OkHttpClient.Builder() + .connectTimeout(120, TimeUnit.SECONDS) + .readTimeout(30, TimeUnit.SECONDS) + .writeTimeout(30, TimeUnit.SECONDS) + .build(); + @PostConstruct public void initAccountMap() { accountMap.put("restaurant", new HuoMaAccountDTO(huoMaRestaurantStoresAccount, huoMaRestaurantStoresPassword)); @@ -102,7 +110,7 @@ public class XinFaDeviceService { public List getStoreEquipmentDataByStoreNumList(List storeNumList, String token) { Map> requestBody = new HashMap<>(); requestBody.put("codeList", storeNumList); - String responseBody = sendPostRequestByToken(JSONObject.toJSONString(requestBody), huoMaGetPointTerminalUrl,token); + String responseBody = sendPostRequestNoRetryByToken(JSONObject.toJSONString(requestBody), huoMaGetPointTerminalUrl,token); try{ ObjectMapper mapper = new ObjectMapper(); JsonNode rootNode = mapper.readTree(responseBody); @@ -127,7 +135,7 @@ public class XinFaDeviceService { } } StoreRequestDTO requestBody = new StoreRequestDTO("point_report", 0, 10, storeNum); - String responseBody = sendPostRequestByToken(JSONObject.toJSONString(requestBody), huoMaGetStoreIdUrl,token); + String responseBody = sendPostRequestNoRetryByToken(JSONObject.toJSONString(requestBody), huoMaGetStoreIdUrl,token); try{ Integer storeId = extractIdsFromResponse(responseBody); redisUtilPool.hashSet(RedisConstant.HUO_MA_STORE_ID, storeNum, storeId.toString()); @@ -186,7 +194,7 @@ public class XinFaDeviceService { TagDTO tagDTO = new TagDTO("DEFAULT", 0, 30,"program"); String responseBody = null; try{ - responseBody = sendPostRequestByToken(JSONObject.toJSONString(tagDTO), huoMaGetTagUrl,token); + responseBody = sendPostRequestNoRetryByToken(JSONObject.toJSONString(tagDTO), huoMaGetTagUrl,token); ObjectMapper mapper = new ObjectMapper(); JsonNode rootNode = mapper.readTree(responseBody); @@ -238,7 +246,7 @@ public class XinFaDeviceService { String token = getStoreToken(huoMaAccountDTO.getAccount(), huoMaAccountDTO.getPassword()); String responseBody = null; try{ - responseBody = sendPostRequestByToken(JSONObject.toJSONString(programReqDTO), huoMaGetProgramUrl,token); + responseBody = sendPostRequestNoRetryByToken(JSONObject.toJSONString(programReqDTO), huoMaGetProgramUrl,token); ObjectMapper mapper = new ObjectMapper(); JsonNode rootNode = mapper.readTree(responseBody); @@ -270,7 +278,7 @@ public class XinFaDeviceService { String token = getStoreToken(huoMaAccountDTO.getAccount(), huoMaAccountDTO.getPassword()); String responseBody = null; try{ - responseBody = sendPostRequestByToken(JSONObject.toJSONString(publishDTO), huoMaGetPublishUrl,token); + responseBody = sendPostRequestNoRetryByToken(JSONObject.toJSONString(publishDTO), huoMaGetPublishUrl,token); ObjectMapper mapper = new ObjectMapper(); JsonNode rootNode = mapper.readTree(responseBody); int code = rootNode.get("code").asInt(); @@ -294,7 +302,7 @@ public class XinFaDeviceService { StoreXinFaDetailRequestDTO storeXinFaDetailRequestDTO = new StoreXinFaDetailRequestDTO(0, 10, pointId); String responseBody = null; try{ - responseBody = sendPostRequestByToken(JSONObject.toJSONString(storeXinFaDetailRequestDTO), huoMaGetStoreXinFaDeviceDetailUrl,token); + responseBody = sendPostRequestNoRetryByToken(JSONObject.toJSONString(storeXinFaDetailRequestDTO), huoMaGetStoreXinFaDeviceDetailUrl,token); ObjectMapper mapper = new ObjectMapper(); JsonNode rootNode = mapper.readTree(responseBody); @@ -502,8 +510,8 @@ public class XinFaDeviceService { } @NotNull - private static String sendPost(String requestUrl, Request request) { - try (Response response = new OkHttpClient().newCall(request).execute()) { + private String sendPost(String requestUrl, Request request) { + try (Response response = httpClient.newCall(request).execute()) { log.info("发起请求 time:{}", System.currentTimeMillis()); if (!response.isSuccessful()) { log.info("HTTP请求失败,msg: " + response.message()); @@ -513,6 +521,9 @@ public class XinFaDeviceService { String responseBody = response.body().string(); log.info("请求成功responseBody:{}", JSONObject.toJSONString(responseBody)); return responseBody; + } catch (SocketTimeoutException e) { + log.error("API调用超时 - URL: {}, 错误: {}", requestUrl, e.getMessage(), e); + throw new ServiceException(ErrorCodeEnum.THIRD_API_ERROR, "接口调用超时: " + e.getMessage()); } catch (ServiceException e) { throw e; } catch (Exception e) { diff --git a/coolstore-partner-web/src/main/resources/application-ab.properties b/coolstore-partner-web/src/main/resources/application-ab.properties index 02d7bbe98..cb61206c8 100644 --- a/coolstore-partner-web/src/main/resources/application-ab.properties +++ b/coolstore-partner-web/src/main/resources/application-ab.properties @@ -150,9 +150,9 @@ huoMa.get.point.terminal.url = https://www.huoMayunping.com/api/terminal/getPoin huoMa.get.tag.url = https://www.huomayunping.com/api/tag/search huoMa.get.program.url = https://www.huomayunping.com/api/program/search huoMa.get.publish.url = https://www.huomayunping.com/api/channelPublish/target/v2/quick-publish -huoMa.direct.stores.account = 15370309163 -huoMa.direct.stores.password = Zx@123456. -huoMa.franchise.stores.account = 13563273279 -huoMa.franchise.stores.password = Zx@123456. -huoMa.restaurant.stores.account = 18656552865 -huoMa.restaurant.stores.password = ZX123456 +huoMa.direct.stores.account = 18375320931 +huoMa.direct.stores.password = Huoma@123456. +huoMa.franchise.stores.account = 18375320931 +huoMa.franchise.stores.password = Huoma@123456. +huoMa.restaurant.stores.account = 15167817007 +huoMa.restaurant.stores.password = Huoma@123456. diff --git a/coolstore-partner-web/src/main/resources/application-test.properties b/coolstore-partner-web/src/main/resources/application-test.properties index b9182bd10..c217e17df 100644 --- a/coolstore-partner-web/src/main/resources/application-test.properties +++ b/coolstore-partner-web/src/main/resources/application-test.properties @@ -163,9 +163,9 @@ huoMa.get.point.terminal.url = https://www.huoMayunping.com/api/terminal/getPoin huoMa.get.tag.url = https://www.huomayunping.com/api/tag/search huoMa.get.program.url = https://www.huomayunping.com/api/program/search huoMa.get.publish.url = https://www.huomayunping.com/api/channelPublish/target/v2/quick-publish -huoMa.direct.stores.account = 15370309163 -huoMa.direct.stores.password = Zx@123456. -huoMa.franchise.stores.account = 13563273279 -huoMa.franchise.stores.password = Zx@123456. -huoMa.restaurant.stores.account = 18656552865 -huoMa.restaurant.stores.password = ZX123456 +huoMa.direct.stores.account = 18375320931 +huoMa.direct.stores.password = Huoma@123456. +huoMa.franchise.stores.account = 13345565081 +huoMa.franchise.stores.password = Huoma@123456. +huoMa.restaurant.stores.account = 15167817007 +huoMa.restaurant.stores.password = Huoma@123456. From 456e778f1dd7737c776c110fe5f837705036e88e Mon Sep 17 00:00:00 2001 From: wangff Date: Tue, 11 Nov 2025 18:39:37 +0800 Subject: [PATCH 21/27] =?UTF-8?q?fix:=E4=B8=89=E6=98=8E=E6=B2=BB=E6=96=B0?= =?UTF-8?q?=E7=AE=A1=E5=AE=B6=E6=8E=A8=E9=80=81=E5=80=BC=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../request/xgj/PushFranchiseFeeRequest.java | 22 +++++++++++-------- .../service/impl/FranchiseFeeServiceImpl.java | 4 ++-- .../controller/webb/PCTestController.java | 6 ++--- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java index 373356ea5..7e6873ba3 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java @@ -1,9 +1,9 @@ package com.cool.store.request.xgj; import com.cool.store.entity.FranchiseFeeDO; +import com.cool.store.enums.FranchiseBrandEnum; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import org.apache.commons.lang3.StringUtils; import java.math.BigDecimal; import java.util.Date; @@ -52,18 +52,22 @@ public class PushFranchiseFeeRequest { private Integer joinBrand; public PushFranchiseFeeRequest(){} - public PushFranchiseFeeRequest(Long shopId, String partnerName, FranchiseFeeDO franchiseFeeDO){ + public PushFranchiseFeeRequest(Long shopId, String partnerName, FranchiseFeeDO franchiseFeeDO, String brand){ this.setShopId(shopId); this.setPartnerName(partnerName); this.setBillId(franchiseFeeDO.getId().intValue()); - this.setFranchiseFee(convertToBig(franchiseFeeDO.getYearFranchiseFee())); - this.setBond(convertToBig(franchiseFeeDO.getLoanMargin())); - this.setFirstYearManageFee(convertToBig(franchiseFeeDO.getFirstYearManageFee())); - this.setFirstYearFee(convertToBig(franchiseFeeDO.getFirstYearFee())); - this.setDesignFee(convertToBig(franchiseFeeDO.getPerformanceBond())); - // 三明治收银费 - if (StringUtils.isNotBlank(franchiseFeeDO.getCashierFee())) { + if (Integer.valueOf(brand).equals(FranchiseBrandEnum.ZXSMZ.getCode())) { this.setFranchiseFee(convertToBig(franchiseFeeDO.getCashierFee())); + this.setBond(convertToBig(franchiseFeeDO.getLoanMargin())); + this.setFirstYearManageFee(BigDecimal.ZERO); + this.setFirstYearFee(BigDecimal.ZERO); + this.setDesignFee(convertToBig(franchiseFeeDO.getPerformanceBond())); + } else { + this.setFranchiseFee(convertToBig(franchiseFeeDO.getYearFranchiseFee())); + this.setBond(convertToBig(franchiseFeeDO.getLoanMargin())); + this.setFirstYearManageFee(convertToBig(franchiseFeeDO.getFirstYearManageFee())); + this.setFirstYearFee(convertToBig(franchiseFeeDO.getFirstYearFee())); + this.setDesignFee(convertToBig(franchiseFeeDO.getPerformanceBond())); } this.setTotalFee(this.getBond() .add(this.getFranchiseFee()) diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java index e8d29d236..7501175f8 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java @@ -93,7 +93,7 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(shopInfoDO.getLineId()); commonService.sendSms(lineInfoDO.getMobile(), SMSMsgEnum.PAY_FRANCHISE_FEES); //推送加盟费信息到新管家 - PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO); + PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO, shopInfoDO.getFranchiseBrand()); feeRequest.setJoinBrand(Integer.valueOf(shopInfoDO.getFranchiseBrand())); pushService.pushFranchiseFeeToXGJ(feeRequest); return true; @@ -116,7 +116,7 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(shopInfoDO.getLineId()); //推送加盟费信息到新管家 franchiseFeeDO.setCreateTime(franchiseFeeDO1.getCreateTime()); - PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO); + PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO, shopInfoDO.getFranchiseBrand()); feeRequest.setJoinBrand(Integer.valueOf(shopInfoDO.getFranchiseBrand())); pushService.pushFranchiseFeeToXGJ(feeRequest); return true; diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java index ce2e5c02e..a71d3fc56 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java @@ -390,7 +390,7 @@ public class PCTestController { FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(shopId); ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(shopId); LineInfoDO lineInfoDO = lineInfoDAO.getLineInfo(shopInfoDO.getLineId()); - PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO); + PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO, shopInfoDO.getFranchiseBrand()); pushService.pushFranchiseFeeToXGJ(feeRequest); return ResponseResult.success(Boolean.TRUE); } @@ -418,7 +418,7 @@ public class PCTestController { FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(x.getShopId()); ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(x.getShopId()); LineInfoDO lineInfoDO = lineInfoDAO.getLineInfo(shopInfoDO.getLineId()); - PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO); + PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO, shopInfoDO.getFranchiseBrand()); pushService.pushFranchiseFeeToXGJ(feeRequest); } catch (Exception e) { log.error("推送数据失败 shopId {},异常信息:{}",x,e.getMessage()); @@ -434,7 +434,7 @@ public class PCTestController { FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(x.getShopId()); ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(x.getShopId()); LineInfoDO lineInfoDO = lineInfoDAO.getLineInfo(shopInfoDO.getLineId()); - PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO); + PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO, shopInfoDO.getFranchiseBrand()); pushService.pushFranchiseFeeToXGJ(feeRequest); List franchiseFeePayInfoByShopId = linePayDAO.getFranchiseFeePayInfoByShopId(x.getShopId()); franchiseFeePayInfoByShopId.forEach(y->{ From 1af57c58715a7586aa1ab92f92ddda731826f5a1 Mon Sep 17 00:00:00 2001 From: wangff Date: Tue, 11 Nov 2025 19:42:44 +0800 Subject: [PATCH 22/27] =?UTF-8?q?fix:=E4=B8=89=E6=98=8E=E6=B2=BB=E4=B8=8D?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E8=90=A5=E5=B8=90=E9=80=9A=E5=BC=80?= =?UTF-8?q?=E9=80=9A=E9=98=B6=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/cool/store/dao/ShopStageInfoDAO.java | 15 +++++++++++---- .../cool/store/service/impl/ShopServiceImpl.java | 8 ++++---- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopStageInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopStageInfoDAO.java index 09f3c4a5f..0a4e321cb 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopStageInfoDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopStageInfoDAO.java @@ -4,7 +4,9 @@ import com.cool.store.constants.CommonConstants; import com.cool.store.dto.BuildStageDTO; import com.cool.store.dto.PlatformBuildStageDTO; import com.cool.store.dto.Preparation.ScheduleDTO; +import com.cool.store.entity.ShopInfoDO; import com.cool.store.entity.ShopStageInfoDO; +import com.cool.store.enums.FranchiseBrandEnum; import com.cool.store.enums.point.ShopStageEnum; import com.cool.store.enums.point.ShopSubStageEnum; import com.cool.store.enums.point.ShopSubStageStatusEnum; @@ -40,17 +42,22 @@ public class ShopStageInfoDAO { /** * 初始化店铺阶段信息 * @param lineId - * @param shopIds + * @param shopInfoList * @return flag =true:表示意向加盟节点完成正常初始化。false:表示意向加盟节点未完成新建分店阶段都为未开始-100。 */ - public Integer initShopStageInfo(Long lineId, List shopIds, Boolean flag) { - if (CollectionUtils.isEmpty(shopIds)) { + public Integer initShopStageInfo(Long lineId, List shopInfoList, Boolean flag) { + if (CollectionUtils.isEmpty(shopInfoList)) { return CommonConstants.ZERO; } List addShopStageList = new ArrayList<>(); LocalDate selectStartDate = LocalDate.now(); - for (Long shopId : shopIds) { + for (ShopInfoDO shopInfoDO : shopInfoList) { + Long shopId = shopInfoDO.getId(); for (ShopSubStageEnum shopSubStageEnum : ShopSubStageEnum.values()) { + if (ShopSubStageEnum.SHOP_STAGE_24.equals(shopSubStageEnum) && String.valueOf(FranchiseBrandEnum.ZXSMZ).equals(shopInfoDO.getFranchiseBrand())) { + // 三明治跳过营帐通开通 + continue; + } ShopStageInfoDO shopStageInfo = new ShopStageInfoDO(); shopStageInfo.setLineId(lineId); shopStageInfo.setShopId(shopId); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ShopServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ShopServiceImpl.java index 9f4a09703..f3f05c479 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ShopServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ShopServiceImpl.java @@ -146,7 +146,7 @@ public class ShopServiceImpl implements ShopService { } shopInfoDAO.batchAddShop(addShopList); List shopIds = addShopList.stream().map(ShopInfoDO::getId).collect(Collectors.toList()); - Integer result = shopStageInfoDAO.initShopStageInfo(lineInfo.getId(), shopIds, true); + Integer result = shopStageInfoDAO.initShopStageInfo(lineInfo.getId(), addShopList, true); //初始化平台账号 HyPartnerUserInfoDO hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByPartnerId(lineInfo.getPartnerId()); shopAccountDAO.initShopAccount(hyPartnerUserInfoDO, shopIds); @@ -298,7 +298,7 @@ public class ShopServiceImpl implements ShopService { } shopInfoDAO.batchAddShop(addShopList); List shopIds = addShopList.stream().map(ShopInfoDO::getId).collect(Collectors.toList()); - shopStageInfoDAO.initShopStageInfo(lineInfo.getId(), shopIds, true); + shopStageInfoDAO.initShopStageInfo(lineInfo.getId(), addShopList, true); return 1L; } @@ -356,7 +356,7 @@ public class ShopServiceImpl implements ShopService { shopInfoDO.setCreateUserId(userId); Long shopId = shopInfoDAO.addShopInfo(shopInfoDO); if (lineInfo.getWorkflowSubStageStatus().equals(WorkflowSubStageStatusEnum.SIGN_INTENT_AGREEMENT_125.getCode())) { - shopStageInfoDAO.initShopStageInfo(request.getLineId(), Collections.singletonList(shopId), true); + shopStageInfoDAO.initShopStageInfo(request.getLineId(), Collections.singletonList(shopInfoDO), true); HashMap map = new HashMap<>(); map.put("partnerUsername", lineInfo.getUsername()); map.put("partnerMobile", lineInfo.getMobile()); @@ -381,7 +381,7 @@ public class ShopServiceImpl implements ShopService { MessageEnum.MESSAGE_21, map); } else { - shopStageInfoDAO.initShopStageInfo(request.getLineId(), Collections.singletonList(shopId), false); + shopStageInfoDAO.initShopStageInfo(request.getLineId(), Collections.singletonList(shopInfoDO), false); } //初始化平台账号 HyPartnerUserInfoDO hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByPartnerId(lineInfo.getPartnerId()); From 4a08933e36f7a640412e0f0397fda9c6f5f815ce Mon Sep 17 00:00:00 2001 From: wangff Date: Tue, 11 Nov 2025 20:01:55 +0800 Subject: [PATCH 23/27] =?UTF-8?q?fix:=E4=B8=89=E6=98=8E=E6=B2=BB=E4=B8=8D?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E8=90=A5=E5=B8=90=E9=80=9A=E5=BC=80?= =?UTF-8?q?=E9=80=9A=E9=98=B6=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/cool/store/dao/ShopStageInfoDAO.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopStageInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopStageInfoDAO.java index 0a4e321cb..33b1aeb93 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopStageInfoDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopStageInfoDAO.java @@ -54,7 +54,7 @@ public class ShopStageInfoDAO { for (ShopInfoDO shopInfoDO : shopInfoList) { Long shopId = shopInfoDO.getId(); for (ShopSubStageEnum shopSubStageEnum : ShopSubStageEnum.values()) { - if (ShopSubStageEnum.SHOP_STAGE_24.equals(shopSubStageEnum) && String.valueOf(FranchiseBrandEnum.ZXSMZ).equals(shopInfoDO.getFranchiseBrand())) { + if (ShopSubStageEnum.SHOP_STAGE_24.equals(shopSubStageEnum) && String.valueOf(FranchiseBrandEnum.ZXSMZ.getCode()).equals(shopInfoDO.getFranchiseBrand())) { // 三明治跳过营帐通开通 continue; } From 6cb408678309208fd9fcfa13ad934e4b8d37e1ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Wed, 12 Nov 2025 13:19:30 +0800 Subject: [PATCH 24/27] =?UTF-8?q?feat:=E8=AF=81=E7=85=A7=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/ShopInfoMapper.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml index 20bb1dbd7..f8673e868 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml @@ -278,7 +278,9 @@ from xfsg_shop_info a left join store_${enterpriseId} b on a.shop_code = b.store_num - where b.store_id is not null and a.id in + where a.shop_code is not null + and a.shop_code !='' + and b.store_id is not null and a.id in #{shopId} From 368f97774a599543406ba4ee9a2d10066b0d0dde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Wed, 12 Nov 2025 13:51:46 +0800 Subject: [PATCH 25/27] =?UTF-8?q?feat:=E4=BF=A1=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application-ab.properties | 3 ++- .../src/main/resources/application-online.properties | 12 ++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/coolstore-partner-web/src/main/resources/application-ab.properties b/coolstore-partner-web/src/main/resources/application-ab.properties index cb61206c8..b9fa41e38 100644 --- a/coolstore-partner-web/src/main/resources/application-ab.properties +++ b/coolstore-partner-web/src/main/resources/application-ab.properties @@ -152,7 +152,8 @@ huoMa.get.program.url = https://www.huomayunping.com/api/program/search huoMa.get.publish.url = https://www.huomayunping.com/api/channelPublish/target/v2/quick-publish huoMa.direct.stores.account = 18375320931 huoMa.direct.stores.password = Huoma@123456. -huoMa.franchise.stores.account = 18375320931 +huoMa.franchise.stores.account = 13345565081 huoMa.franchise.stores.password = Huoma@123456. huoMa.restaurant.stores.account = 15167817007 huoMa.restaurant.stores.password = Huoma@123456. + diff --git a/coolstore-partner-web/src/main/resources/application-online.properties b/coolstore-partner-web/src/main/resources/application-online.properties index bb4f1e31f..8e0948fe6 100644 --- a/coolstore-partner-web/src/main/resources/application-online.properties +++ b/coolstore-partner-web/src/main/resources/application-online.properties @@ -153,9 +153,9 @@ huoMa.get.point.terminal.url = https://www.huoMayunping.com/api/terminal/getPoin huoMa.get.tag.url = https://www.huomayunping.com/api/tag/search huoMa.get.program.url = https://www.huomayunping.com/api/program/search huoMa.get.publish.url = https://www.huomayunping.com/api/channelPublish/target/v2/quick-publish -huoMa.direct.stores.account = 15370309163 -huoMa.direct.stores.password = Zx@123456. -huoMa.franchise.stores.account = 13563273279 -huoMa.franchise.stores.password = Zx@123456. -huoMa.restaurant.stores.account = 18656552865 -huoMa.restaurant.stores.password = ZX123456 \ No newline at end of file +huoMa.direct.stores.account = 18375320931 +huoMa.direct.stores.password = Huoma@123456. +huoMa.franchise.stores.account = 13345565081 +huoMa.franchise.stores.password = Huoma@123456. +huoMa.restaurant.stores.account = 15167817007 +huoMa.restaurant.stores.password = Huoma@123456. \ No newline at end of file From 2e719bd15e00126ac0587fa94527432e73544f8e Mon Sep 17 00:00:00 2001 From: wangff Date: Wed, 12 Nov 2025 14:17:41 +0800 Subject: [PATCH 26/27] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E4=B8=89=E6=98=8E?= =?UTF-8?q?=E6=B2=BB=E5=8A=A0=E7=9B=9F=E9=9D=9E=E5=8A=A0=E7=9B=9F=E5=90=88?= =?UTF-8?q?=E5=90=8C=E7=AD=BE=E7=BA=A6=E9=87=91=E9=A2=9D=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../request/xgj/PushFranchiseFeeRequest.java | 22 +++++++---------- .../service/impl/FranchiseFeeServiceImpl.java | 12 +++++++--- .../impl/SignFranchiseServiceImpl.java | 3 ++- .../controller/webb/PCTestController.java | 6 ++--- .../store/controller/webc/TestController.java | 24 +++++++++++++++++++ 5 files changed, 47 insertions(+), 20 deletions(-) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java index 7e6873ba3..373356ea5 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/xgj/PushFranchiseFeeRequest.java @@ -1,9 +1,9 @@ package com.cool.store.request.xgj; import com.cool.store.entity.FranchiseFeeDO; -import com.cool.store.enums.FranchiseBrandEnum; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import org.apache.commons.lang3.StringUtils; import java.math.BigDecimal; import java.util.Date; @@ -52,22 +52,18 @@ public class PushFranchiseFeeRequest { private Integer joinBrand; public PushFranchiseFeeRequest(){} - public PushFranchiseFeeRequest(Long shopId, String partnerName, FranchiseFeeDO franchiseFeeDO, String brand){ + public PushFranchiseFeeRequest(Long shopId, String partnerName, FranchiseFeeDO franchiseFeeDO){ this.setShopId(shopId); this.setPartnerName(partnerName); this.setBillId(franchiseFeeDO.getId().intValue()); - if (Integer.valueOf(brand).equals(FranchiseBrandEnum.ZXSMZ.getCode())) { + this.setFranchiseFee(convertToBig(franchiseFeeDO.getYearFranchiseFee())); + this.setBond(convertToBig(franchiseFeeDO.getLoanMargin())); + this.setFirstYearManageFee(convertToBig(franchiseFeeDO.getFirstYearManageFee())); + this.setFirstYearFee(convertToBig(franchiseFeeDO.getFirstYearFee())); + this.setDesignFee(convertToBig(franchiseFeeDO.getPerformanceBond())); + // 三明治收银费 + if (StringUtils.isNotBlank(franchiseFeeDO.getCashierFee())) { this.setFranchiseFee(convertToBig(franchiseFeeDO.getCashierFee())); - this.setBond(convertToBig(franchiseFeeDO.getLoanMargin())); - this.setFirstYearManageFee(BigDecimal.ZERO); - this.setFirstYearFee(BigDecimal.ZERO); - this.setDesignFee(convertToBig(franchiseFeeDO.getPerformanceBond())); - } else { - this.setFranchiseFee(convertToBig(franchiseFeeDO.getYearFranchiseFee())); - this.setBond(convertToBig(franchiseFeeDO.getLoanMargin())); - this.setFirstYearManageFee(convertToBig(franchiseFeeDO.getFirstYearManageFee())); - this.setFirstYearFee(convertToBig(franchiseFeeDO.getFirstYearFee())); - this.setDesignFee(convertToBig(franchiseFeeDO.getPerformanceBond())); } this.setTotalFee(this.getBond() .add(this.getFranchiseFee()) diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java index 7501175f8..99627e4f6 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FranchiseFeeServiceImpl.java @@ -75,6 +75,13 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { if (!shopStageInfo.getShopSubStageStatus().equals(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_70.getShopSubStageStatus())){ throw new ServiceException(ErrorCodeEnum.NOT_ALLOW_OPERATE); } + ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(request.getShopId()); + // 三明治前端没有改这块代码,还是会传这三个字段,因此后端这三个字段置空 + if (Integer.valueOf(shopInfoDO.getFranchiseBrand()).equals(FranchiseBrandEnum.ZXSMZ.getCode())) { + request.setFirstYearManageFee("0"); + request.setFirstYearFee("0"); + request.setYearFranchiseFee("0"); + } FranchiseFeeDO franchiseFeeDO = request.toFranchiseFeeDO(); shopStageInfoDAO.updateShopStageInfo(request.getShopId(), ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_71); if (request.getId() != null) { @@ -89,11 +96,10 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { franchiseFeeDO.setCreateTime(new Date()); franchiseFeeMapper.insertSelective(franchiseFeeDO); } - ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(request.getShopId()); LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(shopInfoDO.getLineId()); commonService.sendSms(lineInfoDO.getMobile(), SMSMsgEnum.PAY_FRANCHISE_FEES); //推送加盟费信息到新管家 - PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO, shopInfoDO.getFranchiseBrand()); + PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO); feeRequest.setJoinBrand(Integer.valueOf(shopInfoDO.getFranchiseBrand())); pushService.pushFranchiseFeeToXGJ(feeRequest); return true; @@ -116,7 +122,7 @@ public class FranchiseFeeServiceImpl implements FranchiseFeeService { LineInfoDO lineInfoDO = lineInfoMapper.getByLineId(shopInfoDO.getLineId()); //推送加盟费信息到新管家 franchiseFeeDO.setCreateTime(franchiseFeeDO1.getCreateTime()); - PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO, shopInfoDO.getFranchiseBrand()); + PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO); feeRequest.setJoinBrand(Integer.valueOf(shopInfoDO.getFranchiseBrand())); pushService.pushFranchiseFeeToXGJ(feeRequest); return true; diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java index 1f7ba2d46..3f7e7ecc6 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/SignFranchiseServiceImpl.java @@ -559,7 +559,8 @@ public class SignFranchiseServiceImpl implements SignFranchiseService, AuditResu .add(convertToBig(franchiseFeeDO.getLoanMargin())) .add(convertToBig(franchiseFeeDO.getFirstYearFee())) .add(convertToBig(franchiseFeeDO.getFirstYearManageFee())) - .add(convertToBig(franchiseFeeDO.getPerformanceBond())); + .add(convertToBig(franchiseFeeDO.getPerformanceBond())) + .add(convertToBig(franchiseFeeDO.getCashierFee())); addSignFranchiseResponse.setContractAmount(total.toString()); } addSignFranchiseResponse.setMobile(lineInfoDO.getMobile()); diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java index a71d3fc56..ce2e5c02e 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java @@ -390,7 +390,7 @@ public class PCTestController { FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(shopId); ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(shopId); LineInfoDO lineInfoDO = lineInfoDAO.getLineInfo(shopInfoDO.getLineId()); - PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO, shopInfoDO.getFranchiseBrand()); + PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO); pushService.pushFranchiseFeeToXGJ(feeRequest); return ResponseResult.success(Boolean.TRUE); } @@ -418,7 +418,7 @@ public class PCTestController { FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(x.getShopId()); ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(x.getShopId()); LineInfoDO lineInfoDO = lineInfoDAO.getLineInfo(shopInfoDO.getLineId()); - PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO, shopInfoDO.getFranchiseBrand()); + PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO); pushService.pushFranchiseFeeToXGJ(feeRequest); } catch (Exception e) { log.error("推送数据失败 shopId {},异常信息:{}",x,e.getMessage()); @@ -434,7 +434,7 @@ public class PCTestController { FranchiseFeeDO franchiseFeeDO = franchiseFeeMapper.selectByShopId(x.getShopId()); ShopInfoDO shopInfoDO = shopInfoMapper.selectByPrimaryKey(x.getShopId()); LineInfoDO lineInfoDO = lineInfoDAO.getLineInfo(shopInfoDO.getLineId()); - PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO, shopInfoDO.getFranchiseBrand()); + PushFranchiseFeeRequest feeRequest = new PushFranchiseFeeRequest(shopInfoDO.getId(), lineInfoDO.getUsername(), franchiseFeeDO); pushService.pushFranchiseFeeToXGJ(feeRequest); List franchiseFeePayInfoByShopId = linePayDAO.getFranchiseFeePayInfoByShopId(x.getShopId()); franchiseFeePayInfoByShopId.forEach(y->{ diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/TestController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/TestController.java index 3234f4f7e..5d56f85f0 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/TestController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/TestController.java @@ -20,6 +20,8 @@ import com.cool.store.job.XxlJobHandler; import com.cool.store.mapper.HyOpenAreaInfoMapper; import com.cool.store.request.ShopListSuccessOpenRequest; import com.cool.store.request.xfsgFirstOrderListRequest; +import com.cool.store.request.xgj.FranchiseFeeCallBackRequest; +import com.cool.store.request.xgj.ReceiptCallBackRequest; import com.cool.store.response.MiniShopsResponse; import com.cool.store.response.ResponseResult; import com.cool.store.response.caipin.StoreUserResponse; @@ -39,6 +41,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.ByteArrayOutputStream; +import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalTime; import java.time.temporal.ChronoUnit; @@ -85,6 +88,27 @@ public class TestController { ThirdFoodService thirdFoodService; @Autowired StoreService storeService; + @Resource + LinePayDAO linePayDAO; + @Resource + OpenApiService openApiService; + + @PostMapping("/testXgjCallback") + public ResponseResult testXgjCallback(Long linePayId) { + LinePayDO linePayDO = linePayDAO.getById(linePayId); + ReceiptCallBackRequest receiptRequest = new ReceiptCallBackRequest(); + receiptRequest.setReceiptId(linePayDO.getPaymentReceiptCode()); + receiptRequest.setClaimStatus(1); + openApiService.changeReceiptStatus(receiptRequest); + FranchiseFeeCallBackRequest franchiseRequest = new FranchiseFeeCallBackRequest(); + franchiseRequest.setShopId(linePayDO.getShopId()); + franchiseRequest.setPayableFee(linePayDO.getAmount()); + franchiseRequest.setPaidFees(linePayDO.getAmount()); + franchiseRequest.setRemainingFee(BigDecimal.ZERO); + franchiseRequest.setPaymentStatus(2); + openApiService.changePaymentStatus(franchiseRequest); + return ResponseResult.success(true); + } @PostMapping("/getFirstOrders") public ResponseResult getFirstOrders(@RequestBody xfsgFirstOrderListRequest storeCodeList) { From 23efaf845070a94842f5734b7cf93b1ac5cce8d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Wed, 12 Nov 2025 16:29:57 +0800 Subject: [PATCH 27/27] =?UTF-8?q?feat:10=E7=A7=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/cool/store/service/xinfa/XinFaDeviceService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java index b0a20bec1..0c3d4667b 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/xinfa/XinFaDeviceService.java @@ -71,7 +71,7 @@ public class XinFaDeviceService { private final Map accountMap = new HashMap<>(); private final OkHttpClient httpClient = new OkHttpClient.Builder() - .connectTimeout(120, TimeUnit.SECONDS) + .connectTimeout(10, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS) .writeTimeout(30, TimeUnit.SECONDS) .build();